۱۲ - کد های دیگران را بشکنید ( خرد کنید)
یکی (دقت کنید یکیییی از) از مهمترین کارهایی که باید برای تبدیل شدن از یه تازهکار به یه برنامهنویس حرفهای انجام بدیم، اینه که یاد بگیریم چجوری کمک بگیریم. همه به کمک نیاز دارن(اصلا هم خجالت نداره)، حتی اونایی که بهشون میگن "خدای برنامهنویسی"!
اما کمک گرفتن فقط یه سمت قضیه ست و اینکه چطور از این کمک استفاده کنیم، سرعت پیشرفتت ما رو تعیین میکنه. توی سایتهایی مثل Stack Overflow، ممکنه خیلی وسوسه بشیم که کدی رو که یکی برامون گذاشته، کپی کنیم و مستقیم استفاده کنیم(حتما بعدشم بگیم خب کار میکنه و دیگه بهش دست نزنیم). برنامه ما هم دقیقاً همونجوری که میخواستیم اجرا میشه و خوشحال به کار خودمون ادامه میدیم(گفتم دیگه!).
اما این کار فقط وفقط باعث میشه به کدهای دیگران وابسته بشیم، بدون اینکه چیزی یاد بگیریم! دفعهی بعد که یه مشکل مشابه ولی در شرایطی متفاوت پیش بیاد، همون کدی که قبلاً کار میکرد، ممکنه دیگه جواب نده(و طبق تجربه قطعا جواب نمیده!). اون موقع چی؟ گیر میکنیم!
واسه همین یه قانون مهم توی برنامهنویسی وجود داره که میگه:
"هیچوقت کدی رو که نمیفهمی، کپی نکن!"
پس وقتی با یه تکه کد روبهرو میشیم که مشکلمون رو حل میکنه ولی نمیدونیم چطور کار میکنه، بهترین کار اینه که خُردش کنیم و قسمتبهقسمت تحلیلش کنیم تا بفهمیمش.
کد رو توی برنامه مون کپی کنیم. (بله، بله، میدونم که گفتم این کار رو نکنیم، ولی صبر داشته باش!)
مطمئن بشیم که برنامه یا اپلیکیشن ما همونجوری که انتظار داشتیم کار میکنه. یعنی بررسی کنیم که واقعاً اون تکه کد مشکلمون رو حل کرده یا نه.
حالا خط به خط اون کد رو حذف کنیم(تنبل نباشیم!).
بعد از پاک کردن هر خط، ببینیم چی خراب شده. برنامه هنوز اجرا میشه؟ چه ارورهایی میگیریم؟ حذف اون خط چه تأثیری روی عملکرد برنامه داشته؟(اگه حوصله این کارها رو ندارین انتخاب یه شغل یا مهارت دیگه میتونه مفید تر باشه!)
حتی اگه فکر میکنیم میدونیم یه خط از کد چه کاری انجام میده، بازم حذفش کنیم! مهمترین مهارت یه برنامهنویس اینه که همیشه فرضیاتش رو تست کنه. چون بهترین حس دنیا وقتیه که واقعیت تأییدت کنه!
میدونی وقتی /پارتنر /همسر/هر کسی که برات مهمه، اون سه کلمهی جادویی رو میگه چه حسی داره؟ "حق با تو بود!"
برنامهنویسی هم همینه، حتی شاید بهتر!
چند خط از کد رو جابهجا کنیم. آیا میتونیم همون عملکرد رو با ترتیب متفاوتی از خطوط به دست بیاریم؟ چرا این خطوط به این ترتیب نوشته شدن؟
با شکستن کد راهحل، خط به خط، میفهمیم که هر خط دقیقاً چه کاری انجام میده و چرا به این شکل نوشته شده. این روش خیلی بهتر از اینه که کد رو فقط کپی کنیم و امیدوار باشیم که درست کار کنه.
وقتی بفهمیم چرا هر کدوم از این خطوط ضروری بودن، دفعه بعد که با مشکل مشابهی روبهرو بشیم، میتونیم خودمون مشکل رو پیدا کنیم و حلش کنیم. بعد از اینکه توی شکستن کدهای Stack Overflow استاد شدیم، مرحله بعدی اینه که بریم سراغ GitHub
گیت هاب ابزاریه که برنامهنویسا برای همکاری استفاده میکنن، ولی در عین حال یکی از بزرگترین مخازن کدهای متنباز هست.
پس چطور میتونیم از GitHub برای بهتر شدن استفاده کنیم؟
فرض کنیم میخوایم یه کلون اینستاگرام بسازیم، ولی متاسفانه نمیدونیم چطور این کار رو انجام بدیم. پس میریم سراغ github.com و سرچ میکنیم "Instagram" یا "photo app".
قطعا، یه چیزی به زبانهای Swift/Objective-C/Java پیدا میکنیم که میتونیم دانلود کنیم و نگاهی بهش بندازیم.
به ساختار برنامهشون فکر کنیم(برنامه نویسی همینه: فکر و فکر و بازم فکر). همهی کلاسها، ثابتها، تعاملات بین بخشها رو بررسی کنیم. بهتره کمی تغییرات توی کد ایجاد کنیم. آیا هنوز کار میکنه یا خرابش کردیم؟ چرا خرابش کردیم؟(از خراب کردن نترسیم!) آیا لینکی هست که نتونستیم شناسایی کنیم؟ از خودمون سوال های زیادی بپرسم، با روش سقراطی( اینو دیگه برید سرچ کنید) یاد بگیریم. پروژه رو باز کنیم و بفهمیم چطور ساخته شده.
خب وقتی این کار رو خوب یاد گرفتیم، مرحله بعدی میتونه مهندسی معکوس باشه.اینجوریه که یه پروژه کوچیک توی GitHub پیدا کنیم که توسط یه برنامهنویس معتبر ساخته شده، اپلیکیشن رو دانلود کنیم. اجراش کنیم و تمام قابلیتهاش رو بررسی کنیم. باهاش بازی کنیم.
بعد از صفر بسازیمش و وقتی تموم شد، کد خودمون رو با کد اونها مقایسه کنیم(اینجاست که تجربه معنیش اشکار میشه). آیا میتونستیم بهرهوری بیشتری داشته باشیم؟ آیا راهحلهایی پیدا کردیم که قبلاً نتونسته بودیم؟
تبریک میگم : حالا داری وارد لیگهای بزرگتر میشی!
پایان
برنامه نویس باشید و ازش لذت ببرید :)
نویسنده : Dr. Angela Yu
برداشت آزاد و ترجمه : محمد جواد صبرجو