چند توصیۀ برنامه‌نویسی به تازه‌واردان

نویسنده : سید ایوب کوکبی ۲۴ خرداد ۱۳۹۸
چند توصیۀ برنامه‌نویسی به تازه‌واردان

برنامه‌نویسی از آن دست مشاغلی است که هم هیجان زیادی دارد و هم سختی‌های فراوان. در صورتی که هم‌اکنون در یک شرکت نرم‌افزاری مشغول به کار هستید یا به تازگی از دانشگاه فارغ‌التحصیل شده‌اید یا به صورت دورکاری پروژه انجام می‌دهید ممکن است در شروع کار اندکی با مشکل مواجه شوید. این مطلب را با هدف خارج کردن شما از سردرگمی و پاسخ به سوالات مهم نوشته‌ایم.

طبیعی است که خیلی چیزها بلد نیستید

دانشگاه، دوره‌ها، کتاب‌های برنامه‌نویسی، ویدیوهای آموزشی، همگی سهم زیادی در آموختن مباحث برنامه‌نویسی دارند ولی با این حال در صنعت نرم‌افزار هرچقدر تلاش کنید بازهم از غافلۀ تکنولوژی عقب می‌مانید؛ دقیقاً مثل کوه‌نوردی که با دیدن هر قله‌ای می‌گوید آخرین قله است ولی به محض فتح قله می‌بیند چقدر قله‌های بلندتری پیشِ رو دارد!

یک برنامه‌نویس باید چیزهای زیادی بلد باشد:

  • تکنولوژی‌هایی که برای مسائل مختلف مناسب هستند؛
  • درک کدهای سایر افراد؛
  • آشنایی با الگوهای طراحی و best practiceها؛
  • چگونگی تست کردن کدها؛
  • آشنایی با سورس کنترل‌ها، CI/CD و استراتژی‌های شاخه‌سازی؛
  • اطلاع از متدولوژی‌ها و چرخۀ حیات نرم‌افزار؛
  • کار تیمی نه فقط با تیم خودتان بلکه با سایر تیم‌ها، مدیرها و مشتری‌ها.

به عنوان کسی که به تازگی برنامه‌نویسی را شروع کرده ممکن است تعدادی از موارد ذکر شده را بدانید و تعدادی اصلاً به گوشتان نخورده باشد. می‌خواهیم بگوییم که این طبیعی است. شما یک توسعه‌دهندۀ مبتدی یا جونیور (junior) هستید و مدیر پروژه و اعضای تیم هم این موضوع را می‌دانند. بنابراین طبیعی است که نسبت به اعضای باتجربه‌تر دانش کمتری داشته باشید و کمتر از آن‌ها مسائل را درک کنید. تغییر تکنولوژی‌ها گرچه ممکن است موضوعی نگران کننده به نظر برسد ولی همین تغییر نقطۀ قوت صنعت نرم‌افزار است. در واقع همۀ توسعه‌دهندگان صرفنظر از جایگاه، مدام در حال یادگیری و بروزرسانی اطلاعات خود هستند.

پرسیدن عیب نیست

اولین وظیفه به شما محول می‌شود. با اشتیاق کار را شروع می‌کنید ولی ناگهان در بخشی از کار گیر می‌کنید. کدِ شما طبق انتظار کار نمی‌کند و با خطاهایی عجیب و غیرقابل درک مواجه می‌شوید. در این لحظه می‌خواهید یک نفر به شما کمک کند، به این فکر می‌افتید که از اعضای تیم سوال کنید ولی ممکن است تصور کنید که با سوال کردن، آن‌ها فکر کنند شما آدم گیجی هستید یا توانایی زیادی در کدنویسی ندارید یا حتی ممکن است به سوال شما بخندند. ولی در واقعیت چنین اتفاقی نمی‌افتد. چیزی که واقعاً اتفاق می‌افتد این است: «بسیار خب، بزار یه نگاهی بندازم، ببینم می‌تونم کمکت کنم یا نه. آهان من با این مشکل قبلاً برخورد کردم، باید از فلان متد یا فلان کتابخونه استفاده کنی تا مشکلت حل بشه.»

اعضای تیم کنار هم هستند تا به هم کمک کنند. بنابراین از پرسیدن سوال واهمه نداشته باشید. هرجایی سوالی در ذهن داشتید بپرسید حتی اگر سوال، سوال احمقانه‌ای باشد. ذهن خود را از وجود سوالات پاک کنید. این جمله را به خاطر داشته باشید که همه چیز را همگان دانند. پس برای پیشرفت سریع‌تر بیشتر سوال کنید. پرسیدن حتی از پاسخ دادن هم مهم‌تر است.

بخوانید  Junior | Mid-Level | Senior

بازبینی کدها

در تیم‌ها معمولاً سنیو دولوپرها کدهای برنامه‌نویسان جونیور را بازبینی می‌کنند و مشکلات کد را به صورت کامنت یا به صورت شفاهی اعلام می‌کنند. این بازبینی‌ها برای افراد مبتدی درس‌های زیادی به همراه دارد و وقتی خودِ شما به جایگاهی رسیدید که کدهای بقیۀ افراد را بازبینی کنید احتمالاً با شیوه‌های مختلف حل مسئله آشنا خواهید شد. خلاصه در هر دو حالت، بازبینی کد چیزهای زیادی به شما  خواهد آموخت. هیچ‌گاه نباید بازبینی کدها را عیب‌جویی بدانید.

استراتژی تقسیم و حل

ممکن است در انجام تسکی که به شما محول شده حیران بمانید که چگونه شروع کنید. این سردرگمی‌ها همیشه هست. مهم چگونگی برخورد با آن‌هاست. سعی کنید در حل مسائل این نقل قول را به خاطر آورید:

چگونه یک فیل را می‌خورید؟ هر بار یک تکۀ کوچک.

هر تسکی را که ابعادش شما را دچار سردرگمی کرده به چندین تسک کوچکتر بشکنید. انجام تسک‌های کوچکتر نهایتاً به انجام تسک اصلی منجر خواهد شد.

چگونه این کار را انجام دهیم؟

قبل از شروع کدنویسی، ابتدا به زبان خودتان روی کاغذ مراحل حل مسئله را بنویسید:

مثلاً مراحل پر کردن یک لیوان آب:

  1. کابینت را باز کنید؛
  2. یک لیوان بردارید؛
  3. لیوان را بگیرید؛
  4. آن را زیر شیر آب بگیرید؛
  5. شیر آب را باز کنید؛
  6. وقتی لیوان پر شد، شیر آب را ببندید؛
  7. لیوان پر شده را از زیر شیرِ آب خارج کنید.

با نوشتن مراحل انجام یک کار، درک بهتری از آن خواهید داشت.

حفظ سادگی کد

اشتباه بسیاری از جونیورها این است که کار را بی‌دلیل برای خود دشوار می‌کنند، مبتدی‌ها علاقۀ عجیبی دارند که چرخ را دوباره اختراع کنند. گاهی افراد مبتدی دوست دارند مسائل را به بهترین شکل و بر خلاف روش‌های مرسوم حل کنند. این کار گرچه خوب به نظر می‌رسد ولی مشکلاتی به همراه دارد از جمله:

  • کدی که با سایر کدهای تفاوت زیاد داشته باشد معمولاً نگهداری دشواری دارد؛
  • کد شما ممکن است خسته‌کننده به نظر برسد و ریسک بروز باگ‌ها را افزایش دهد؛
  • تکمیل تسک شما به خاطر اینکه کدهای جدیدی استفاده کرده‌اید طولانی‌تر خواهد شد.

پس ساده نگه‌داشتن کد یعنی چه؟

  1. اجرای صحیح. خیلی در این مرحله فکر نکنید. همینکه روی اجرای درست کد تمرکز کنید کافی است؛
  2. ریفکتور. حالا که کد به درستی کار می‌کند نوبت ریفکتور کردن آن است. نامگذاری‌ها را بهبود دهید طوری که بتوان راحت کد را درک کرد. از فرمت مناسبی برای کدها استفاده کنید. در این رابطه کتاب Clean Code را بخوانید؛
  3. بهبود سرعت.  بعد از اتمام ریفکتورینگ، دنبال گلوگاه‌هایی باشید که پرفرمنس برنامه را کاهش می‌دهند. حالا نوبت بهینه‌سازی کدهاست. البته در این کار زیاده‌روی نکنید. هر چیزی زیاد‌روی‌اش تاثیر عکس دارد.

برای به حداکثر رساندن حفظ سادگی کد پیشنهاد می‌کنیم از روش TDD استفاده کنید. در این روش ابتدا تست نوشته می‌شود، سپس به اندازۀ پاس کردن آن تست کد نوشته می‌شود و نهایتاً کد بهینه‌سازی و ریفکتور می‌شود. این روش گرچه ممکن است زمان زیادی لازم داشته باشد ولی در درازمدت منافع زیادی خواهد داشت.

بخوانید  Clean Code - کتابی که هر توسعه‌دهنده‌ای باید بخواند

یاد بگیرید چگونه کد تمیز بنویسید

تسلط بر کدنویسی تمیز از شما یک مهندس نرم‌افزار تمیز می‌سازد.

کد تمیز کدی است که:

  • از اصول SOLID پیروی کند؛
  • قابل تست و نگهداری باشد؛
  • خوانا باشد.

به عبارت دیگر:

هر احمقی می‌تواند کدی بنویسید که کامپیوتر درک کند. برنامه‌نویس خوب کدی می‌نویسید که انسان‌ها بفهمند. مارتین فولر

کتاب Clean Code در این باره توضیحات مفصلی داده است. بنابراین زیاد وارد این بحث نمی‌شویم. در صورتی که علاقه‌مند به یادگیری این بحث هستید حتماً کتاب Clean Code از رابرت سی مارتین را بخوانید. برنامه‌نویسی که کدهایش را تمیز می‌نویسد قابل اعتماد است و کدهای او را بهتر می‌توان نگه‌داری کرد. کد تمیز بازبینی آن را هم راحت‌تر می‌کند و یکی از ملزومات کار تیمی است. شاید یکی از مهم‌ترین ویژگی‌های سنیور دولوپرها کدنویسی تمیزتر آن‌ها باشد. در واقع این انتظار از سنیورها می‌رود که بعد از چند سال تجربه کدهای خوانا و باکیفیتی بنویسند.

از کتابخانه‌ها استفاده کنید

احتمالاً این موضوع برای شما پیش آمده که در جستجوی حل یک مشکل با نرم‌افزار مناسبی مواجه شوید. در برنامه‌نویسی هم این اتفاق بارها می‌افتد. احتمالاً قبل از شما، بارها توسط دیگران، راهکاری برای مسئله‌ای که روی آن فکر می‌کنید ارائه شده است. بنابراین قبل از اینکه وقت خود را صرف تفکر دربارۀ راه‌حل مسئله کنید بگردید که آیا افراد دیگری پیش از شما برای آن راهکاری ارائه کرده‌اند یا نه تا در وقتتان صرفه‌جویی کنید. برای این کار چند روش وجود دارد:

  • پکیج، کتابخانه یا فایل مورد نظر را در سایت‌هایی مثل گیت‌هاب جستجو کنید؛
  • یا در سایت‌های پرسش و پاسخ مثل StackOverflow بگردید.

لحظه‌ای صبر کنید! منظور از پیشنهادی که دادیم این نبود که به کپی پیست کدها رو بیاورید. چون اگر در این ورطه بیفتید به سمبل‌کاری می‌افتید و در آینده نوعی تنبلی گریبان شما را خواهد گرفت. از کدهای بقیه استفاده کنید ولی حتماً بفهمید که عملکرد آن به چه نحوی است و چرا فلان جا از فلان راه‌حل استفاده کرده است. این کار ذهن شما را در حل مسئله تقویت می‌کند و اجازه نمی‌دهد تنبل شوید.

  • چرا از الگوی طراحی Observer استفاده کرده است؟
  • چرا برای این قسمت از زبان اسمبلی استفاده شده و از سی استفاده نکرده؟ بهتر نبود از پایتون استفاده می‌کرد؟
  • معایب این روش چیست؟ سرعتش کم است؟ حجم برنامه را بالا می‌برد؟
  • و … .

در تیم‌ها از همکاران خود می‌توانید دربارۀ سوالات بالا بپرسید. در حالت انفرادی در سایت‌های پرسش و پاسخ سوال کنید یا در گوگل به دنبال راهکار مسئله باشید. بنابراین از سوال کردن واهمه نداشته باشید یا فکر نکنید که سوال کردن، شما را در نظر دیگران کوچک می‌کند. پس با خیال راحت از همکار خود بپرسید که «چرا به جای کتابخانۀ X از کتابخانۀ Y استفاده نکرده. من نمونه‌های زیادی دیدم که بدون هیچ مشکلی از کتابخانۀ Y استفاده کردن و اتفاقاً عملکرد بهتری هم داشته، پس چرا اینجا …».

بخوانید  افکار و نگرش‌هایِ یک برنامه‌نویسِ خوب

این سوالات نه‌تنها شما را ضعیف نشان نمی‌دهد بلکه بسیار فعال و علاقه‌مند به یادگیری جلوه می‌دهد و احتمالاً از دل این سوالات بحث‌های خوب و سازنده‌ای بیرون می‌آید که فایده‌اش به همۀ افراد می‌رسد. بحث‌هایی که شاید تا پیش از پرسیدن آن سوال مطرح نمی‌شد. سوال پرسیدن همیشه باعث افزایش توامندی‌های شما می‌شود.

چگونگی خواندن کدها را یاد بگیرید

احتمالاً همۀ ما فیلم‌های سایبری که یک هکر پشت سیستم نشسته و بی‌وقفه در حال کدنویسی است را دیده‌ایم. در دنیای واقعی چنین خبرهایی نیست. برنامه‌نویسان و هکرها بیشتر از آنکه بنویسند روی خواندن و درک کدها وقت صرف می‌کنند. وقتی ویژگی جدیدی به کدهای برنامه اضافه می‌کنید باید کارکرد درست کدهای قبلی را تست کنید. این کار نیازمند بررسی و خواندن زیاد کدهاست.

خواندن کدها فواید زیادی دارد. با این کار می‌توانید متوجه شوید دیگران چگونه یک فیچر خاص را پیاده‌سازی کرده‌اند. کدخوانی کلاسی عملی برای یادگیری مباحث برنامه‌نویسی است. از حدی بالاتر دیگر نمی‌توان صرفاً با خواندن کتاب رشد کرد. یک برنامه‌نویس خوب با خواندن و بررسی کدها زمینه را برای پیشرفت خود آماده می‌کند. این کار زمان‌بر است ولی به شدت موثر!

در هنگام خواندن کد چیزهایی مثل این‌ها را می‌توانید یاد بگیرید:

  • کاربرد الگوهای طراحی؛
  • شیوه و استاندارد نام‌گذاری متدها، کلاس‌ها و متغیرها؛
  • نحوۀ کامنت‌گذاری؛
  • ساختار فایل‌های پروژه؛
  • کاربرد تست‌ها.

گیت‌هاب، پرسش‌وپاسخ‌های استک‌اورفلو، پروژه‌های موجود در سورس‌کنترل‌ها، سایت‌های برگزاری چالش مثل Codewars.com که راهکار بقیۀ افراد را نشان می‌دهند همگی جاهای خوبی برای خواندن و بررسی کدها هستند. سعی کنید در هفته حداقل چند ساعتی را صرف این کار کنید چون واقعاً منافع تضمین شده‌ای دارد.

از کدنویسی لذت ببرید

رک و روراست اگر از کدنویسی لذت نمی‌برید همین الان رهایش کنید و به کار دیگری بپردازید. بدون علاقه شاید در بعضی از مشاغل موفق شوید ولی در برنامه‌نویسی ابداً. علاقه با همه اهمیتش فقط یک شرطِ لازم است و برای موفقیت در این شغل باید افزون بر علاقه ویژگی‌های دیگری مثل پشتکار، استعداد و همت فراوان هم داشت.

چند پیشنهاد تکمیلی

  • IDE را خوب یاد بگیرید. یادگیری کلیدهای میانبر، شخصی‌سازی و آشنایی با امکانات مختلف IDE که از آن استفاده می‌کنید بهره‌وری شما را افزایش می‌دهد؛
  • برطرف کردن باگ‌ها راهی عالی برای درک Codebase است. بنابراین از انجام این کار لذت ببرید؛
  • یک دفترچه همیشه کنارتان باشد تا ایده‌ها، نکات و هر چیزی که لازم بود را در آن یادداشت کنید. می‌دانیم که گوگل کیپ هست، گوگل داک هست و کلی برنامه‌های دیگر ولی دفترچه چیز دیگری است؛
  • در فرصت‌های آزاد خود، پروژه‌های کوچک و سرگم‌کننده بنویسید. این کار شیوۀ خوبی برای آپدیت کردن دانسته‌ها و تمرین تکنولوژی‌های جدید است؛
  • با شرکت در رویدادها و کنفرانس‌های برنامه‌نویسی دوستان جدید پیدا کنید. این افراد نه‌فقط دوست بلکه سرمایه هستند!

سید ایوب کوکبی

نویسنده و مترجم...

0 دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *