سه راه شگفت انگیز برای ساده کد زدن

زندگی خیلی ساده است، اما ما اصرار داریم پیچیده‌اش کنیم.

نوشتن کدهای ساده، واقعا ساده است. اما ما با آماده کردن کدها برای آینده (Future-ready)، کار خودمان را پیچیده می‌کنیم!

وقتی که یاد بگیریم توهم آمادگی برای آینده را کنار بگذاریم، هم کدهایمان تمیزتر و ساده‌تر می‌شود و هم اعتبارمان به عنوان یک برنامه‌نویس خوب، پیش بقیه بالا می‌رود.

اجازه بدهید توضیح بدهم.

آن زمان که در دوران اوج برنامه‌نویسی‌ام بودم، یک اصل وجود داشت که در هر موقعیتی به من یاد داده می‌شد:

«هیچوقت یک کد را دوبار ننویس.»

«باید کدت را بازسازی کنی. باید بخاطر نفع همگانی، کاری کنی که کدت قابل استفاده مجدد باشد. کدت را شبیه جعبه سیاه (black box) کن تا هر برنامه‌نویس دیگری که روی کره زمین هست، بتواند از آن استفاده کند. برنامه‌نویس‌های خوب، کدهای عالی‌شان را تا ابد برای دیگران به یادگار می‌گذارند.»

تا اینجای کار که مشکلی نیست.

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

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

اما بعضی وقت‌ها هم… تنها چیزی که لازم داری یک اردک زرد حمام است.

اولین بار دین پارکر (Deane Parker) بود که در پست زیبایش با عنوان «چطور سخنرانی خوبی بکنیم»، مفهوم اردک حمام را مطرح کرد. در این پست، او توضیح می‌دهد که چطور می‌شود با تمرین کردن سخنرانی با صدای بلند، آن را بهتر کرد. این ایده که از اردک حمام به عنوان شنونده سخنرانی‌مان استفاده کنیم حرف جدیدی نیست؛ اما جذابیتش در اینجاست که هم راحت می‌شود عملی‌اش کرد و هم موثر است.

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

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

و بعد، دیر یا زود بالاخره به آن لحظه «آها!» می‌رسید. جواب معما یک دفعه به ذهنتان می‌رسد.

و تقریبا هر دفعه به خودتان می‌گویید: «وا! من که اینو می‌دونستم!»

در اینجا چند تا از چیزهایی را آورده‌ام که در جلسه‌هایم با اردک حمام، در مورد بهتر کد زدن یاد گرفتم:

لازم نیست هر دفعه Component قابل استفاده مجدد بسازید

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

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

قرار نیست لازمش داشته باشید

«قرار نیست لازمش داشته باشید» (YouArentGonnaNeedIt یا YAGNI) اصلی در برنامه‌نویسی Extreme است که می‌گوید:

«هر چیزی را زمانی بسازید که واقعاً لازمش دارید، نه وقتی که پیش‌بینی می‌کنید لازمش داشته باشید.»

حتی اگر کامل کامل کامل مطمئن بودید که یک Feature را بعداً لازم خواهید داشت، الآن آن را نسازید.

دو دلیل برای اجرای اصل YAGNI وجود دارد:

  • در وقت صرفه‌جویی می‌کنید، چون دیگر کدی که لازم نیست را نمی‌نویسید.
  • کدتان بهتر می‌شود، زیرا آن را با «حدس‌»ها آلوده نمی‌کنید؛ حدس‌هایی که بعداً قرار است معلوم شود که اشتباه بوده‌اند، اما باز هم کسی حذفشان نخواهد کرد.

ساده‌ترین حالتی که ممکن است جواب بدهد را بسازید

برنامه‌نویسی Extreme دو قانون طلایی برای نوشتن کد ساده دارد:

  • یک ویژگی‌ جدید را در ساده‌ترین حالتی که ممکن است جواب بدهد، بسازید. یک عالمه فراساختار (Super structure) حیرت‌‌آور درست نکنید، کارهای تجملاتی و قشنگ‌قشنگ انجام ندهید. فقط کدی را بسازید که کار می‌کند. کدی بسازید که آزمایش‌های واحد (Unit Tests) برای Feature جدید (و همه Featureها، مثل همیشه) را با موفقیت پشت سر بگذارد.
  • این یکی بخش حیاتی قانون است: سیستم را طوری بازسازی کنید که در عین داشتن همه Featureها، ساده‌ترین کد ممکن باشد. با اجرا کردن قانون یکبار و فقط یکبار (OnceAndOnlyOnce) و دیگر قانون‌های کیفیت کد، سیستم را به تمیزترین حالت ممکنش تبدیل کنید.

یادتان باشد که قرار نیست سریع‌ترین راه را پیدا کنیم، بلکه قرار است به ساده‌ترین نتیجه برسیم. بنابراین، در قدم اول متد فعلی را به چند قسمت تقسیم می‌کنیم. با این کار Test Caseهای موجود همچنان اجرا می‌شوند. در قدم بعدی، سراغ یکی از متدهای کوچک‌تر می‌رویم و آن را طوری تغییر می‌دهیم (البته به شکل ساده) که Test Case بعدی انجام شود. همین روند را برای همه متدها ادامه می‌دهیم.

دفعه بعد که گیر کرده بودید، سراغ اردک حمام بروید

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

و وقتی گیر کردید و هیچ چیز کار نمی‌کرد، سراغ اردک حمام بروید.

پس بروید و اردک حمام خودتان را پیدا کنید؛ که همان اردک زرد پوش کلاسیک باشد و چه اردکی که لباس دزد دریایی تنش است. اردکی را انتخاب کنید که با آن راحتید و با ویژگی‌های شخصیتی‌تان سازگار است.

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

همانطور که کریس پاین (Chris Pine) به خوبی گفته است:

«در برنامه‌نویسی مهم نیست که چه چیزی بلدید، مهم این است که جواب کدام مسئله‌ را می‌توانید پیدا کنید.»

ترجمه‌ای از:

3 Amazing Ways To Write Simple Code, The Startup

1200 1021 بوت کمپ برنامه نویسی و آمادگی برای بازارکار کارادمی