تا حالا شده یک موضوع مثل فانوسی در مسیر زندگیت باشه؟

قانون «اول بنویس، بعد بهینه کن» که ۹۹٪ جونیورها برعکس انجام می‌دن

بیشتر برنامه‌نویس‌های تازه‌کار (و ح

قانون «اول بنویس، بعد بهینه کن» که ۹۹٪ جونیورها برعکس انجام می‌دن

مدت زمان: ۶ دقیقه

مقدمه

بیشتر برنامه‌نویس‌های تازه‌کار (و حتی خیلی از میدل‌ها!) از همان خط اول شروع می‌کنن به بهینه‌سازی: «اینجا باید O(n) بشه»، «اینجا نباید لوپ داشته باشه»، «باید از بیت‌اپراسیون استفاده کنم». نتیجه؟ ۳ ساعت کد نزده گیر می‌کنن و آخرش یه چیز پیچیده و پر از باگ تحویل می‌دن. قانون طلایی دنیای حرفه‌ای‌ها فقط یه جمله‌ست: اول بنویس که کار کنه، بعد بهینه کن که سریع بشه. این قانون رو کنت تامپسون و برای اولین بار گفت و از اون موقع تا حالا همه مهندس‌های گوگل، آمازون و متا باهاش زندگی می‌کنن.

نکات کلیدی:
  • اول کد رو بنویس که درست کار کنه، بعد سریعش کن
  • ۹۹٪ بهینه‌سازی‌های زودرس (Premature Optimization) ریشه همه شرهاست – دونالد کنوث
  • سرعت کد مهم نیست تا وقتی که اول درست کار نکنه
  • بهینه‌سازی زودرس بزرگ‌ترین دلیل پیچیدگی غیرضروری و باگ‌های عجیبه
تصویر مرتبط با درس

چرا، چگونه و چه کاربردی؟

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

🎯
چرا؟

دقیقاً چرا بهینه‌سازی زودرس اینقدر خطرناکه؟

دونالد کنوث سال ۱۹۷۴ یه جمله تاریخی گفت: «بهینه‌سازی زودرس ریشه همه شرهاست» (Premature optimization is the root of all evil). چرا؟

۱. تو هنوز نمی‌دونی کدوم قسمت واقعاً گلوگاه (bottleneck) هست
۲. داری وقتت رو صرف بهینه کردن چیزی می‌کنی که شاید فقط ۱٪ زمان اجرا رو بگیره
۳. کد بهینه‌شده از اول = کد پیچیده‌تر = باگ بیشتر = نگهداری سخت‌تر
۴. خیلی وقت‌ها بعد از اینکه کد کار کرد، می‌بینی اصلاً نیازی به اون بهینه‌سازی نبوده
۵. آمار نشون میده ۹۷٪ زمان اجرای برنامه تو ۳٪ کدهاست (قانون ۹۰/۱۰)

نتیجه: داری ۱۰۰٪ کدت رو سخت‌تر می‌کنی تا ۳٪ سریع‌تر بشه. معامله بدیه!

🛠️
چطور؟

مراحل دقیق قانون «اول بنویس، بعد بهینه کن» چیه؟

فقط ۴ مرحله ساده، ولی خیلی‌ها نمی‌تونن رعایتش کنن:

۱. اول یه راه‌حل ساده، خوانا و درست بنویس (حتی اگه O(n²) باشه)
→ هدف: کد کار کنه و تست‌ها پاس بشه

۲. تست کامل بنویس (unit test + integration test)
→ بدون تست بعداً نمی‌تونی با خیال راحت بهینه کنی

۳. پروفایل کن (با profiler واقعی مثل pprof، Py-Spy، VisualVM و غیره)
→ ببین دقیقاً کدوم خطوط بیشترین زمان یا حافظه رو می‌گیرن

۴. فقط همون قسمت‌های داغ (hot paths) رو بهینه کن
→ بقیه کد رو دست نزن!

نکته طلایی: اگه بعد از مرحله ۳ دیدی همه چیز زیر ۵۰ میلی‌ثانیه‌ست و نیاز کسب‌وکار نیست، اصلاً دست به کد نزن!

💡
چه کاربردی؟

دقیقاً کی اجازه داریم بهینه‌سازی کنیم؟

فقط تو این ۴ موقعیت:

• وقتی پروفایلر نشون داد یه تابع خاص بیشتر از ۱۰-۲۰٪ زمان کل رو می‌گیره
• وقتی واقعاً محدودیت عملکردی داری (مثلاً باید زیر ۱۰۰ms جواب بدی برای ۱۰k کاربر همزمان)
• وقتی داری لایبرری یا فریم‌ورک عمومی می‌نویسی که میلیون‌ها بار استفاده میشه
• وقتی مدیرت یا مشتری با داده و عدد اومد گفت «این قسمت باید سریع‌تر بشه»

تو بقیه موارد: دستت رو نگه دار! ساده و خوانا بودن خیلی مهم‌تر از ۵ میلی‌ثانیه سرعت بیشتره.

سوالات: سازنده ی نورون های مغزی و تکمیل یادگیری

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

سوالات تستی

1. جمله معروف «Premature optimization is the root of all evil» مال کیه؟

لینوس توروالدز
دونالد کنوث
بیل گیتس
کنت تامپسون

2. اولین قدم درست تو توسعه یه فیچر چیه؟

بهینه کردن الگوریتم
نوشتن کد ساده و کارکن
اندازه‌گیری سرعت
استفاده از cache

3. قبل از بهینه‌سازی حتماً باید چیکار کنیم؟

تست بنویسیم و پروفایل کنیم
کد رو مینیمایز کنیم
از thread استفاده کنیم
الگوریتم رو عوض کنیم

4. طبق قانون ۹۰/۱۰، تقریباً چند درصد کد مسئول ۹۰٪ زمان اجراست؟

۵۰٪
۳۰٪
۱۰٪
۹۰٪

5. اگه بعد از پروفایل کردن دیدی همه چیز زیر ۳۰ms هست، چیکار باید بکنی؟

باز هم بهینه کنی
دست به کد نزنی و بری سراغ فیچر بعدی
از Go به Rust مهاجرت کنی
حتماً cache اضافه کنی

6. بزرگ‌ترین ضرر بهینه‌سازی زودرس چیه؟

کد کندتر میشه
کد پیچیده‌تر و پرباگ‌تر میشه
حافظه بیشتر مصرف می‌کنه
مدیر عصبانی میشه

7. کدوم شرکت‌ها به شدت این قانون «اول بنویس، بعد بهینه کن» رو رعایت می‌کنن؟

استارتاپ‌های کوچک ایرانی
گوگل، آمازون، متا
فقط شرکت‌های بازی‌سازی
هیچ‌کدوم

نتیجه آزمون

امتیاز شما:

هیچ نگران اشتباه جواب دادن نباش، زیرا...

این آزمون و سوالات برای یادگیری بیشتر ساخته شده، نه برای اینکه نگران اشتباه جواب دادن باشیم، این شرکت در آزمون است که باعث بیشتر یادگیری میشود، در درجه آخر نتیجه!!

جمع‌بندی

یادت باشه: تو برنامه‌نویس حرفه‌ای نیستی که کدت از خط اول O(1) باشه. حرفه‌ای کسیه که بدونه کی باید سریع بنویسه و کی باید سریع کنه. ۹۹٪ مواقع، ساده‌ترین کد، بهترین کده. وقتی کدت کار کرد، تست‌ها سبز شدن و پروفایلر گفت همه چیز خوبه؟ برو قهوه بخور و برو سراغ تسک بعدی. بهینه‌سازی مثل نمکه. یه ذره‌اش غذا رو خوشمزه می‌کنه، ولی اگه از اول بریزی تو قابلمه، دیگه نمیشه خوردش! از امروز قول بده: تا وقتی پروفایلر بهت نگفت، دست به پیچیدگی نزن. کدت رو ساده بمونه، زندگیت هم ساده می‌مونه.

همین الان انجام بده:
دفعه بعد که خواستی از اول بیت‌تریک بزنی، خودت رو بزن!
هر وقت وسوسه بهینه‌سازی زودرس اومد، یه بار بلند بگو: «دونالد کنوث داره بهم نگاه می‌کنه»
همین الان یه پروژه قدیمی رو باز کن و ببین چند تا بهینه‌سازی بی‌مورد توش کردی
این قانون رو به دوست جونیورت یاد بده تا نجاتش بدی
پروفایلر دوست واقعیه توئه، نه ChatGPT و نه StackOverflow
شعار جدیدت: «ساده بنویس، دیر بهینه کن، همیشه بخند»
تصویر جمع‌بندی