با نام و یاد خدا
با توجه به علاقه در زمینه برنامه نویسی امروز می خوام در خصوص تجربه های خودم صحبت کنم تجربه هایی که به صورت آزمون و خطا انجام دادم و احساس می کنم به درد خیلی از دوستان هم بخورد (البته می تونه فقط به صورت یه متن هم دیده بشده ! به قول یه دوست و برادر عزیزم به نام مجید ایمانی عزیز هر کتاب و مقاله ای ارزش یک بار خوندن رو داره پس امیدوار هستم این مقاله ارزش چند بار خوندن رو داشته باشه ).
راستی یادم رفت خودم رو معرفی کنم من محمد نقلانی هستم از سال ۱۳۸۲ تو زمینه های مختلف کامپیوتر که فارسیش میشه رایانه فعالیت کردم و زمینه برنامه نویسی رو از سال ۱۳۸۸ به صورت حرفه ای دنبال کردم ۹۰ درصد مفاهیمی که یاد گرفتم به صورت خود آموز بوده علاقه شخصیم هم PHP هست( البته PHP رو از سال 1390 شروع به کار کردم که خیلی هم حرفه ای شروعش نکردم و تقریبا 3 سال هستش که تمام علاقم شده ) . ولی جاوا و C# روهم کار کردم و از اندروید متنفرم ولی گوشیم اندرویدی هستش . راستی این رو هم بگم که من خدای غلط املایی هستم پس اگر غلط املایی دیدین من شمارو به خاطر اینکه روش های دیگر نگارش کلمات رو بلد نیستین می بخشم ( به دور از شوخی ببخشین اگر خیلی غلط و غلوط می نویسم )
حالا از این حرف ها یکم فاصله بگیرم و بیایم تو مسیر اصلی، برای شروع برنامه نویسی باید از کجا شروع کنیم !
این سوال مدت ها ذهن من رو به خودش مشغول کرده بود واقعا هم جوابش سخت هستش برای همین احساس کردم که این مقاله میتونه به خیلی از دوستان کمک کنه .
برنامه نویسی یک غول بی شاخ و دم این دیدگاه خیلی از دوستانی هستش که می خوان تازه شروع کنن .
یه زمانی بود که وقتی میگفتی من برنامه نویس هستم طرف مقابل فکر میکرد با یه شخصی طرف هست که از مریخ ویا زهل وشایدم از اورانوس آمده ستا چشم داره ۱۲ عدد دست و کل بندنش به جای ماهیچه مغز داره و به صورت نامفهوم حرف میزنه و جواب هر سوالی رو هم داره ( البته تو ایران شما با Css هم می تونی هک کنی و با صابون زندان می تونی مودم وای فای بسازی و باهاش فرار کنی فیلمش که اینجوری بود تازه تو پاره ای موارد دیده شده طرف با تغییر تم ویندوز 98 لوکیشن دزد هارو پیدا کرده ) ولی الان این طور نیست هر کسی می تونه ادعای برنامه نویسی کنه ، ولی مرد میدان کسی است که اصول رو بدونه و به صورت اصولی کار کنه برای دونستن این اصول واقعا باید چکار کرد از کجا باید شروع کنیم ؟
یادمه زمانی که می خواستم برنامه نویسی رو شروع کنم هیچ تصوری ازش نداشتم فقط می خواستم شروع کنم یه کارت اینترنت خریدم البته با شماره ۹۰۹۲۳۲۳۹۰۹ هم کانکت میشدیم بعد از شنیدن صدای نستالژی قیژقیژ مودم Dial Up و ورود به دنیای مجازی که البته برای ورود بهش باید ۲ ساعت التماس میکردیم که اجازه صادر بشه و تلفن اشغال بشه ( تازه همیشه مقصر هزینه های بالای تلفن هم من بودم. وی از همان کودکی مظلوم واقع شد در خصوص من صدق میکنه ) شروع به سرچ در گوگل کردم یا این کلمات :
برای برنامه نویس شدن باید چکار کرد و چیا یاد گرفت
این سرچ ها هیچ وقت از ذهنم پاک نمیشه چون واقعا با این ها شروع کردم.
بعد از این جست و جو ها تازه فهمیدم که برنامه نویس شدن اصلا الکی نیست خیلی راه سختی در پیش هست و با توجه به زبان های موجود خیلی بیشتر گیج شدم . یکم صبر ، یکم فکر ، یکم ترس و در آخر یکم سمج بازی بالاخره شروع کردم اول یه سی دی آموزشی از شرکت مانا سافت خریدم و شروع به یاد گرفتم ماکرومدیاDW که الان شده Adobe Dw کردم اولین جدولی که تو صفحات HTML ایجاد کردم شدم برنامه نویس جو جوری گرفت بود منو که بندگی یادم رفته بود رفتم پیش یه دوست ( ساسان خدابخش ) جوری باهاش حرف زدم که احساس می کردم دیگه باید یه سیستم عامل مبتنی جداول بنویسم ! چشمتون روز بد نبینه ضایعم کرد تا مدت ها WinRAR رو به عنوان سیستم عامل قبول داشتم .
خلاصه سرتون رو درد نیارم ساسان یه وب سایت بهم معرفی کرد به نام php.net گفت برای شروع این برات خوبه ماهم آمدیم توی این وبسایت و شروع کردیم به خودن و یاد نگرفتن با هزار بدبختی و سرچ یه وبسایت دیگه پیدا کردمی به نام IRANPhp.org و شروع کردیم به خوردم مغز کاربران وبسایت تا به جایی رسید که یک سری از دوستان اعتراض کردن که بابا می خوای یاد بگیری بگیر چرا انقدر تو بوق و کرنا میکنی ! بعد از این همه داستان تازه فهمیده بودم که چقدر راه رو اشتباه رفتم و اصلا اصولی کار نکردم حال دوباره آمدم نقطه صفر . کم کم راه خودم رو پیدا کردم و به زبان PHP علاقه پیدا کردم یادمه یه دوستی اولین راهنمایی که بهم کرد این بود Wamp رو نصب ، یه صفحه با پسوند PHP ایجاد کن کن بعد توش بنویس Echo “ Hello World”; بعد اجراش کن و جوابشو بده .کم کم انقدر تو این زبان پیشرفت کردم که لزت یاد گیریش چندین برابر شد هنوز هم دنبال یاد گرفتنش هستم و برام جذاب هستش .
تا این جا هرچی گفتم خوب بود پس بدیا کجاش !؟
مشکلات از اونجایی شروع شد که فقط بلد بودم PHP بنویسیم و اصلا بهایی یه HTML و یا Css و ... نداده بودم و تازه فهمیدم که چقدر اشتباه کردم و اصلا کار رو اصولی انجام ندادم . ( البته این رو هم بگم که back-end بودن مزایای خودش رو داره ولی باید حداقل های front-end رو دونست)
تا اینجا به نظر شما باید از کجا شروع کرد !؟
با توجه به تحقیق هایی که خودم کردم برنامه نویس شدن راه ساده ای نیست شما باید اولی تصمیم بگیرین که تو کدوم زمینه از این دنیا می خواهید فعالیت کنید ؟
این موضوع رو هم در نظر بگیرید که امکانش هست یکی که خیلی بیکاره پیدا شه که یه پایان نامه ، تز خفن برای دکتری و یا یه ایده خلاق تو زمینه های IT داشته باشه و یا یه زبان جدید ایجاد کنه و یا کلا زبانهای موجود رو متحول کنه پس این امکان وجود داره که یه تحول بزرگ در زمینه انتخابی ما بوجود بیاد پس باید همیشه به روز هم باشیم و در حین یادگیری از تغییرات و به روز شدن اطلاعاتمون غافل نشیم .
فعالیت تو تمام زمینه ها میشه اقیانوسی با عمق یک سانتی متر ، خوبه که توانایی همه رو داشته باشیم ولی عالی تر هست که رو یک موضوع تمرکز داشته باشیم و همیشه اون موضوع رو بروز نگاه داریم «البته این نظر شخصی من هست خیلی هارو. میشناسم که پس از حرفه ای شدن در یک حوضه به حوضه جدید روی اوردن و تو اون زمینه هم حرفه ای شدن ».
وقتی تصمیم گرفته شد و زمینه انتخاب شد باید شروع کنیم تا جایی که یادم هست خیلی جاها خسته شدم ( خسته نباشی دلاور ) ولی چون علاقه داشتم دست از یاد گرفتن برنداشتم پس از شما هم همین انتظار هست نباید روی علاقه و توانایی خودتون پا بزارید شما که این راه رو انتخاب کردین پس حتما توانایی این راه پر فراز و نشیب رو دارید .
همیشه به بچه خوهرم میگم اگر می خوا بازی هم کنی حرفه ای بازی کن براش تلاش کن کاری که براش زحمت کشیده نشده باشه هیچ وقت برات ارزشمند نمیشه .
برای این که راه رو کامل کنیم باید چنتا نکته مهم رو یاد آور بشم :
با توجه به این موضوعاتی که تا اینجا مطرح کردم بد نیست یه نکته ای رو یادآوری کنم :
در دنیای نرم افزار باید یاد بگیریم که حق مالکیت رو رعایت کنیم اگر من به این موضوع اعتقاد ندارم پس اگر فردا نرم افزاری که نوشتم و یا آموزشی که تهیه کردم به صورت کپی تو بازار یا اینترنت و ... دیده شد نباید ناراحت بشم به قول بزرگ دین هرچیزی که برای خود می پسندی برای دیگران هم بپسند .
دلیل این نکته هم این بود که بدونیم خیلی ها تو دنیا نرم افزار دارن فعالیت میکنن و زندگیشون با این راه می چرخه و شاید فردا ماهم جزئی از این دسته بشیم پس از الان شروع کنیم به نشر و توسعه این فرهنگ « خدایی خودم هم فکر نمی کردم توانایی این گونه سخن گفتن رو داشته باشم ، بروبچ حرفه ای برای تشکر ایمل ندن وقت چک کردن ندارم ! ».
اشتباه های مرگ بار در یادگیری
( کاش میشد تو نوشته ها موسیقی متن گذاشت )
از نظرمن اموزش رو نباید به صورت پروژه مهور یا محور شروع کرد می دونی چَرا ؟
چون که در اموزش های پروژه محور شما یاد میگیری یه وبسایت مثلا فروشگاهی رو طراحی کنی ولی با خیلی از توابع و یا کاربرد های دیگر توابع آشنا نمیشی در آموزش های پروژه محرو شما تمام تکنیک های مثلا فروشگاه اینترنتی رو یاد میگیری و شاید تا اخر آموزش شما با خیلی از توابع ویا حتی یه حلقه هم رو به رو نشی و یا درک درستی پیدا نکنی از کاربرد حلقه ها و تفاوت هایی که باهم دارن و...، دارین طوطی وار کار رو ادامه میدین .
ولی در آموزش های پایه ای شما به ترتیب سرفصل های استاندارد رو می خونید و با هاشون آشنا میشید و ذهنتون رو قلقلک میدیدن و خیلی ایده های بهتر می خوره تو ملاجتون حالا پس از این روند یه آموزش پروژه محور ذهن شمارو مدیریت میکنه و کاربرد های عملیاتی آموزش قبلی رو متوجه میشید .
حالا درنظر بگیرید که شما قرار در مسابقه فرمول یک جهانی رانندگی یاد بگیرین این دقیقا از نظر من شروع آموزش با آموزش های پروژه محور هستش ( البته می تونید نظری غیر من داشته باشید در این مقاله من تجربه شخصی خودم رو دارم بیان میکنم )
یکی دیگه از دلایلم برای آموزش صحیح و شروع نکردن با آموزش های پروژه محور این هست که شما با پایه و اساس زبان مورد نظر و یا زبان های استفاده شده در اون آموزش به هیچ وجه آشنا نمیشید این یعنی چی در ادامه بهتو عرض میکنم . ببنید ( متن رو میگن نه من رو چون تصویریش هنوز نیامَده) شما به عنوان کسی که ادعا می کنه یک برنامه نویس هستش باید زیر و بم پیدایش زبانی که یاد گرفته رو بدونه چرا این زبان خلق شد ، خالقش کی هست ، سیر تکاملیش چی هست و ... حالا شما در نظر بگیر داری با یه آموزش پروژه محرو مثلا یه وبسایت فروشگاهی کارت رو شروع میکنی و هیچ اطلاعاتی نداری ، مدرس میگه نسخه جی کوری من x هستش و شما رفتی نسخه y استفاده کردی خودت رو حلق اویز میکنی کدت کار نمیکنه بعد میری نسخه x رو پیدا میکنی کار میکنه میگی اااااااا این نسخه من خراب بود مشکل رو پیدا کردم ولی اگر یه اطلاعات صحیح از زبانت داشته باشی دلیل اینکه این دوتا نسخه چرا فرق میکنن چرا این نسخه این عمل رو انجام داد و اونیکی نداد رو متوجه میشی و این به نظرمن فقط فقط در یاد گرفتن صحیح اون زبان هستش ولا غیر پس اگر با من هم نظر شدین حتما آموزشتون رو جوری شروع کنید که با علت ها و معلول ها جلو بررین نه با شاید ها .
مثل بارز این موضوع در PHP استفاده از تابع منسوخ شده mysql در اتصال به دیتابیس و کار روی دیتابس هست خیلی آموزش دیدم که هنوز دارن با این تابع کار میکنن بعد دوست عزیزمون که داره آموزش می بینه یه هاست تهیه کرده و تو هاست با نسخه ۷ php ( شاید باورتون نشه ولی دیدم که طرف نهایت درکش از نسخه های بالاتر و به روز تر خوشکلی محیط بوده دلامصب مگه فتوشاپه... میگه هاست خریم با نسخه ۷ PHP محیط Cpanel خیلی فرق داره با محیط ۵.۲PHP ) از این تابع استفاده کرده وبعد رفته خودش رو کشته تو وسیتنامش میگه من تمام کدهام دقیقا مثل آموزش بوده ( لامصب حداقل اسم متغیرات رو عوض کن بدونی می تونی اسم دلخواهم هم بزنی ) ولی سایتم بالا نمیاد و ارور میده در صورتی که با اندکی سواد پایه و شناخت نسخه ها متوجه میشدش که مشکل کجاس و الکی هم جان به جان افرین تسلیم نمی کرد.
نظرشما دوستان رو به اشتباه مرگ بار بعدی جلب میکنم
تمرین نکردن و عجول بودن
تا جایی که من متوجه شدم واقعا بعد یک بار کار کردن با حلقه for درک میکنی کار این حلقه چیه و چکار هایی میشه باهاش کرد این حلقه ستا پارامتر داره یکی شمارنده ، دومی شرط و سومی افزاینده و یا کاهنده ولی بابا این چرا وقتی پیچیده میشه نمیشه درکش کرد نمیشه فهمید کارشو . دقیقا نکته همنجاس شما با یه موضوع ساده این حلقه رو یاد گرفتی و به تمرین ساده هم کردی شدی خدای حلقه فور بعد بهت مگن برنامه ای بنویسید که با حلقه for یک مثلث متوازی الاضلاع که تو خالی هم باشه و اضلاع از ستاره تشکیل شده باشه رسم کنید (کاربر در دسترس نمیباشد ...) با تعجب فراوان خاموش می شی و میگی قفل این مرحله هنوز برام باز نشده و مگه میشه انم با for . بله میشه اونم با for ولی نیاز به تمرین های زیادی داشته تا کاربرد این حلقه زیبا رو درکر کرده باشیم .
پس هرچیزی که یاد گرفتیم رو باید در تمام حالت هایی که می تونیم ازش استفاده کنیم تمرین کنیم ( ۹۰ درصد حالت ها موقع تمرین قابل پیشبینی هست و چون تمام ذهن شما روش تمرکز کرده پس ایده هایی به سرتون خطور یا ختور می کنه که لبخند بر لبانتون جاری میشه و واقعا لزت میبرین ).
در اوایل یادگیریم یا یه تابع تو PHP آشنا شده بودم به نام in_array() کابرد این تابع این بود که داخل ارایه رو بررسی میکنه ببینه مقداری که شما بهش دادین داخل آرایه هست مدتها کنج کاو این بودم که این تابع چجوری کار میکنه تو فرم های مختلف سوال می پرسیم که یکی بهم توضیحش بده یه دوستی راهنمایی عجیبی کرد گفت برو خوت یه تابع بنویس که همین کار رو کنه متوجه میشم ( از همین تیریبون به اون دوست عزیز اعلام میکنم اگر اون لحظه پیشم بودی الان به جرم قتل اعدام شده بودم ) واقعا برام این راهنمایی عجیب بود پیش خودم گفتم بابا این تابع رو خالقای این زبان نوشتن من که در حد انگشت کوچیکه اوناهم نیستم چجوری بنویسم جاتون خالی یه دو یا سه ساعتی با افکارم ور روفتم بعد گفتم خوب من که نوشتن تابع رو بلدم با حلقه for و یا foreach هم که میشه داخل آرایه ها رو پیمایش کرد، ااااا یه دستور دیگه هم داریم به نام if که شرط رو بررسی میکنه همه اینارو که کنار هم گذاشتم دیدم به به من خودم این تابع رو نوشتم و نیاز به خالق بودن این زبان هم ندارم و فقط موضوع با تمرین و تکرار و البته عجول نبود حاصل میشه .
دیگه بیشتر از این نه سرتون رو درد بیارم و نه با نحوهی نگارش دوم کلمات آشانتون کنم در آخر باید بگم در راه یاد گرفتن همیشه باید تشنه باشید و به این در و آن در بزنید و از همه مهم تر حق نشر و حق امتیاز رو هم در نظر بگیرید واقعا کسانی هستن که با نوشتن و ساخت آموزش و یا تولید یه نرم افزار زندگی می کنن هیچ وقت دلایل فوکاهی و یا این که بابا طرف یه برنامه نویشه میلیونر شده حق سازنده و تولید کننده رو ضایع نکنید .
امیدوارم تجربیاتم هرچند اندک به درتون خورده باشه و وقتتون رو ضایع نکرده باشه .( اگر ضایع کرده بوده حلال کنید )
یا حق
محمد نقلانی بالسینی .