pre-mature optimization is root of all evil

بهینه‌سازی پیش از موعد چیست ؟
نخستین بار مفهوم بهینه‌سازی پیش از موعد در حوزه مهندسی نرم‌افزار اهمیت زیادی پیدا کرد. این اصطلاح توسط «سِر تونی هوآر» استفاده شد و «دونالد ای ناث» آن را به‌شهرت رسانید. وی درباره بهینه‌سازی پیش از موعد می‌گوید:
«هیچ شکی نیست که جام مقدس کارآیی به هدر رفتن منجر می‌شود. برنامه‌نویسان زمان بسیار زیادی را صرف نگرانی، تأمل و تفکر در خصوص سرعت قسمت‌های بی‌اهمیت برنامه‌های خود می‌کنند و تمام تلاش‌های انجام شده برای بالا بردن کارآیی و بازدهی در زمان دیباگ کردن و نگهداری برنامه تأثیرات منفی بسزایی را به همراه خواهد داشت. در ۹۷ درصد موارد باید کارآیی‌های کوچک را فراموش کنیم. بهینه‌سازی پیش از موعد ریشه بسیاری از شکست‌ها و خرابکاری‌ها است.
یک برنامه‌نویس خوب با چنین بهینه‌سازی‌هایی احساس رضایت‌مندی و خشنودی نمی‌کند. بلکه با هوشمندی و خردمندی و با دقت زیاد به‌کدهای بحرانی برنامه نگاه می‌کند. البته فقط بعد از این‌که آن کدها شناسایی شده باشد.»

چگونه از بهینه سازی پیش از موعد جلوگیری کنیم؟
شما می‌توانید وظایف گوناگون خود را با در نظر گرفتن نکات اولویت‌بندی کرده و تعیین کنید، هر کار را در کدام مرحله باید انجام دهید تا مطمئن شوید، هیچ بهینه‌سازی پیش از موعدی انجام نخواهید داد.
بیشتر انسان‌ها معتقدند: «بهینه‌سازی پیش از موعد ریشه تمام ضررها است.» و آن را با خود تکرار می‌کنند. اما این مسئله را فراموش می‌کنند که: «باید تقریبا در ۹۷ درصد موارد راندمان و بازدهی‌های کوچک را فراموش کنیم: بهینه‌سازی پیش از موعد ریشه تمام ضررها است. بااین‌حال نباید فرصت‌های خود را در آن سه درصد بحرانی از بین ببریم.»این مسئله می‌تواند برای ارزیابی شرایط و تصمیم‌گیری درباره بهینه‌سازی کاملا منطقی باشد، حتی اگر در مراحل کاملا ابتدایی باشیم. این مسئله می‌تواند به چند دلیل اتفاق بیافتد، شاید فکر می‌کنید یک تغییر و اصلاح کوچک مزیت قابل‌توجهی را به همراه خواهد داشت یا بهینه‌سازی به شما اجازه می‌دهد تا با گلوگاه‌هایی که در کار خود دارید روبه‌رو شوید یا دوری کردن از بهینه‌سازی به یک نقصان فنی خیلی مهم در آینده منجر می‌شود.
این مفهوم در ۳ درصد موارد صدق می‌کند. به‌عنوان‌مثال، یک اصل مرسوم در این مورد، قانون ۸۰/۲۰ است. یعنی این‌که ۸۰ درصد از خروجی مثبتی که تجربه می‌کنید از ۲۰ درصد کاری که انجام می‌دهید، حاصل می‌شود .

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

 برای مثال profiler مجموعه‌ای از ابزارها برای کاوش، بهینه سازی و عیب‌یابی عملکرد است.
ابزارهای Android profiler اطلاعاتی را در زمان واقعی ارائه می‌دهند تا به ما در درک اینکه برنامه ما چگونه از cpu، حافظه، شبکه و منابع باتری استفاده می‌کند کمک می کند .
انواع profiler های موجود در اندروید:
1 .Network Profiler
فعالیت شبکه در زمان واقعی را در یک جدول زمانی نمایش می‌دهد، داده‌های ارسال شده و دریافت شده و همچنین تعداد اتصالات فعلی را نشان می‌دهد.این به شما امکان می‌دهد چگونگی و زمان انتقال داده‌های برنامه خود را بررسی کنید و کدها را به طور مناسب بهینه کنید. همچنین یک نمای thread وجود دارد که می‌توانیم ببینیم کار در کجا انجام می‌شود.
2 . Energy Profiler
به ما کمک می‌کند تا مشکلاتی را که می‌تواند باعث ایجاد مشکلات مربوط به انرژی شود را پیدا کنیم. این تجزیه و تحلیل، تقسیم مصرف انرژی برآورده شده برنامه‌ها از اجزاء سیستم را نشان می‌دهد .ما می‌توانیم رویداد‌های پس‌زمینه‌ای که ممکن است باعث تخلیه باتری شود را بررسی کنیم. همچنین می‌توانیم از Energy Profiler برای یافتن وقایع سیستمی استفاده کنیم که می‌تواند بر مصرف انرژی تاثیر بگذارد، از جمله wake lock، jobs و زنگ هشدار و غیره.
3. Memory Profiler
 مولفه‌ای است که به ما کمک می‌کند نشت حافظه را شناسایی کنیم که می‌تواند منجر به گیر کردن، فریز شدن و یا حتی خرابی برنامه می‌شود.
این نمودار در زمان واقعی استفاده از حافظه برنامه شما را نشان می‌دهد و به شما امکان می‌دهد مجموعه‌ای از زباله‌ها(اجزائی که بدون استفاده در حافظه باقی مانده‌اند) را جمع‌آوری کنید، garbage collections را به زور اجرا کنید و تخصیص حافظه را ردیابی کنید.
4 .CPU Profiler
بهینه سازی استفاده از CPU در برنامه ما دارای مزایای بسیاری است، ازجمله ارائه تجربه کاربری سریع‌تر و نرم‌تر و حفظ عمر باتری دستگاه.