Sokan Academy

خیلی وقت ها شده تو دورهمی های خودمونی و گردهمایی های کاری - در جمعی غیر از جمع خودمونیِ برنامه نویس ها - خیلی از دوستان از برنامه نویسی یک ذهنیت یکسان نشون دادن: پشت میز نشستن، زیر باد کولر بودن (!)، دست به کیبورد بردن و پول در آوردن.... بعد یه لبخند ژکوند میزننو بهِم میگن چه شغلی بهتر از این؟ کم زحمت ترین کار دنیا با کمترین سرمایه ی موجود و بیشترین سود دهی مورد انتظار (نمی خوام بگم سه سال پیش مانکن زنده ساعتی صد تا دویست هزار تومن ناقابل درآمد داشت).

اما لطفا یک لحظه صبر کنید. ذهنیت شما قشنگه –مکث- اما –مکث- صرفا قشنگه. اجازه بدید مخالفت خودم رو با تفکری که نسبت به ما برنامه نویس ها ساختید نشون بدم و حباب این رویای زیبا رو با چند کلمه حرف حساب بترکونم.

مواد اولیه لازم برای برنامه نویسِ (عجالتاً وب) شدن
بذارید برگردیم به چند سال پیش. خیلی دور نه، همین سال هایی که سرویس های وبلاگدهی ایرانی سر از وب در آوردن و وبلاگ نویسی رو باب کردن... یعنی اوایل دهه ی هشتاد زمانی که نوشتن یک صفحه وب خیلی ساده تر بود. برای اینکه تو این زمان یک صفحه ی وب بسازید فقط کافی بود کمی HTML و CSS بدونید. فقط همین! اصلا دوست ندارم تو این فلش بک، سورس یکی از همین صفحات رو با هم ببینیم. البته اگه اصرار نکنید.

کمی بعد تر JS (جاوا اسکریپت) هم به جعبه ابزار دو تایی HTML و CSS اضافه شد. چرا؟ ساده است. چون تغییرات جالبی تو صفحات میشد ایجاد کرد که نوستالژیک ترینشون منوی کلیک راست سفارشی شده و پنجره ی خوش آمد گویی بود - چیز هایی که اون موقع جدید و چشم نواز و پرطرفدار بودن و الان اینطور نیست. هر چند درست کردن اینها در صفحه تماماً کپی / پیست وار انجام میشد اما یک فرد کنجکاو و علاقه مند ساده از کنارشون عبور نمی کرد.

و حالا طراح نیاز به ساخت فرم هایی داشت که اطلاعاتی رو از کاربر ها دریافت و اون ها رو ذخیره کنه و یا حداقل یه فرم تماس ایجاد کنه و به جای اینکه فقط آدرس ایمیلشو یه گوشه ای از صفحه بنویسه، بتونه نظرات و فیدبک های کاربر رو مستقیما از صفحه ی وب خودش بگیره. برای اینکار نیاز به چند تا چیز پیدا می کرد. مثل دونستن یه زبان تحت سرور (PHP, Perl, Ruby…) و دونستن زبان SQL برای ذخیره ی داده ها در دیتابیس.

تا اینجا جعبه ابزار ما مجهز به 5 ابزار شد. اما این جعبه ابزار گنجایش خیلی بیشتر از این ها رو داره پس بذارید برگردیم به همین امروز.

امروز JS خیلی بیشتر از یک کپی / پیست ساده مورد نیاز ما است پس خیلی بیشتر به دانسته های جاوا اسکریپتیمون باید عمق بدیم. امروز هنوز HTML و CSS رو میشه یاد گرفت اما ما نسخه ی های جدیدی از این دو رو در سال های اخیر داشتیم که توسط تمامی مرورگرهای مدرن اداپت شدن. پس نیاز داریم HTML5 و CSS3 رو در حد کفایت یاد بگیریم. اما دونستن این دو به تنهایی، زیاد کمکمون نمی کنه. چیکار می تونیم بکنیم که سریع تر پوسته ی صفحه مون رو بسازیم و مطمئن باشیم صفحه ی وبمون در دیوایس های مختلف به شکل خوبی نشون داده میشه؟ پس باید یکی از فریم ورک های Bootstrap یا Foundation رو انتخاب کنیم. بعد میبینیم چقدر کارمون راحت تر میشد اگه می تونستیم تو استایل هامون مثل یک زبان برنامه نویسی از متغیر ها  و توابع استفاده کنیم و به CSS نویسیمون سرعت ببخشیم؟ پس باید Sass یا Less رو یاد بگیریم.

صفحات خشکی که عادت به نوشتنشون کرده بودیم جاشون رو به صفحات اینتر اکتیو دادن و من می خوام اطلاعاتی رو بین وب سرور و کاربر رد و بدل کنم بدون اینکه صفحه ی جاری ریفرش بشه پس باید تکنولوژی به نام Ajax (ای جکس) رو یاد بگیرم. و اما صحبت از وب سرور شد. یه برنامه نویس وب ملزم به داشتن اطلاعاتی از وب سرور ها و پروتکل های مختلفه. اون نیاز پیدا میکنه تا یه جاهایی وب سرور رو نصب کنه، اجرا کنه و کانفیگ کنه. پس باید حداقل راجع به Apache (آپاچی) و Nginx و تفاوت هاشون مطلع باشه.

من SQL رو یاد گرفتم و با سیستم مدیریت دیتابیس MySQL کار کردم اما برای پروژه ی فعلی نمی تونم از DBMS قبلی استفاده کنم برای همین مجبورم سینتکس کوئری های DBMS جدید رو بخونم و کوئری هامو تغییر بدم. راستی ازم گهگاهی می پرسن تفاوت MariaDB و MongoDB تو چیه؟ و من حس می کنم چیزی بلد نیستم پس راجع به دیتابیس های Relational وNon-relational بیشتر مطالعه می کنم.

برنامه نویسی با وانیلا PHP کار هر روز من بود اما الان شرکت ها و کارفرما ها برنامه نویس هایی میخوان که رو فریم ورک های مختلف بتونن کار کنن و البته این نیاز بی دلیل نیست. پس من باید با کدایگنایتر، لاراول یا سیمفونی کار کنم و حداقل یک فریم ورک پی اچ پی رو تو جعبه ابزارم داشته باشم. اما صبر کنید... من قبل از اون باید با مفاهیم برنامه نویسی شی گرا (OOP) مثل وراثت (Inheritance)، چندریختی (Polymorphism)، انتزاع  (Abstraction)  و کپسوله سازی  (Encapsulation) آشنا باشم. راجع به اینترفیس ها و تریت ها و کلاس های Abstract بخونم. پس یک فصل جدیدی تو کد نویسی رو باید شروع کنم.

و اما یکی از جنبه های مهم کدنویسی: امنیت! من باید یاد بگیرم چه ریسک های امنیتی کد های من رو تهدید می کنن تا به راحتی اجازه ی ورود دیتا های مخرب و افراد خراب کار رو به وب اپم ندم. باید بدونم اعتبارسنجی چیه و به چی میگن Sanitization (پاک سازی) و بهترین رفتارهای مورد اعتماد کامیونیتی یا Best Practices رو در مورد هر کدوم بدونم و دنبال عبارت نام آشنای OWASP TOP 10 بگردم و بفهمم یعنی چی؟ من باید همیشه منتظر یه باگ جدید باشم چون طبق قانون لوبراسکی: "همیشه یه باگ دیگه وجود داره".

گفتم اعتبارسنجی... حالا باید بدونم عبارات منظم Regular Expressions (به اختصار ریجکس) – این قورباغه ای که اصلا هضم شدنی نیست - چه چیزهایی هستن و چطوری می تونم از این عبارات استفاده کنم و ذهنم رو به سمت الگویابی سوق بدم. و باید بدونم که یک اشتباه در ساخت ریجکس می تونه مساوی باشه با نابودی! مبحثی که خودش سیصد صفحه کتابه و کم از یادگیری یک زبان جدا نداره.

استفاده از کامند لاین، سیستم کنترل ورژن Git، گیت هاب، کامپوزر برای نصب و نگهداری پکیج ها، ساخت و نگهداری سرور های مجازی با Vagrant، معماری MVC (آیا می دونیم ام وی سی یعنی چی؟)، فضای نام یا Namespacing، انواع متدلوژی های تست کردن کد و ابزارهای تست مثل PHPUnit، انواع استاندارد های PSR، انواع الگوهای طراحی و آنتی پترن ها، توجه به پرفرمنس وحافظه برنامه و نتیجتاً مطالعه در مورد الگوریتم ها و پیچیدگی ها و ساختمان های داده و... همه ی این ها چیزهایی هستن که به جعبه ابزار باید اضافه شن. اینها تنها خیلی کمتر از نیمی از چیز هایی بود که باید گفته میشد. 

حتی اگه توسعه دهنده ی فول استک نباشی همونطوری که اگه طراح UI هستی یک جاهایی به بک اند هم دست میزنی، باید در مورد زبان های کلاینت سرور مثل جاوا اسکریپت یا HTML بدونی. برای همین یه برنامه نویس PHP فقط خودش رو در سطح یه برنامه نویس PHP نگه نمیداره و اصلا – مکث - نمی تونه نگهداره.

تمامی این ابزار ها و زبان ها در حال گسترش و به روز رسانی هستن و علاوه بر یادگیری باید مداوماً این تغییرات بررسی و ابزار ها و کد های قدیمی (Legacy) آپدیت و ریفکتور بشن. از اونجایی که منابع فارسی و بالاخص منابع فارسی صحیحِ خیلی کمی (خیلی خیلی کم) در این حوزه ها وجود داره برنامه نویس باید بتونه منابع و مستندات انگلیسی رو مطالعه کنه و این هم خودش یکی دیگه از ابزارهای تول باکس ماست.

بله، برنامه نویسی دومین کار سخت دنیا بعد از کار معدنه. خیلی ممنون که مطالعه کردید. لطفاً اگه جز ژکوند زن ها بودید، دیگه نباشید.

پانوشت: تمامی کلمات در جایی که هستند، قرار بوده که باشند.

این محتوا آموزنده بود؟

sokan-academy-footer-logo
کلیه حقوق مادی و معنوی این وب‌سایت متعلق به سکان آکادمی می باشد.