ساده نگهش دار احمق!

2019-11-05
15 دقیقه مطالعه

ساده نگهش دار احمق یا Keep It Simple Stupid که اصطلاحا به صورت KISS هم مخفف میشه یه اصل طراحیه که اون اوائل از ارتش ایالات متحده‌ی آمریکا دور و بر سال 1960 سر و کله‌ش پیدا شد.

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

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

توی این نوشته من قصد دارم این موضوع رو توی دنیای کامپیوتر و توسعه‌ی نرم افزار بررسی کنم.

اصل KISS توی دنیای کامپیوتر عملا یک نوع مینیمالیسم محسوب میشه و معمولا به همون شکل تعریفش ازش پیروی میشه.

مثل هر موضوع دیگه‌ای این اصل هم طرفدارا و مخالفای خودش رو داره و باید بگم من یکی از طرفدارای این اصل محسوب میشم. همیشه توی توسعه‌ی نرم افزار بهتره سادگی حرف اول رو بزنه. وقتی نرم افزارهای ساده می‌نویسیم در واقع داریم کار رو برای خودمون یا هر کسی که قراره بعد از ما روی اون نرم افزار کار کنه ساده می‌کنیم. حدیث داریم که «کد خوب مثل جوک خوب هست، اگه قرار باشه توضیحش بدیم دیگه بامزه نیست!».

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

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

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

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

حالا که حرف از فلسفه‌ی یونیکس شد خیلی دوست دارم یه قسمت کوچیک از کتاب The Art Of Unix Programming رو براتون بنویسم. این کتاب نوشته‌ی اریک ریموند، یکی از بزرگترین برنامه نویس‌های تاریخه که کمک شایانی توی توسعه‌ی سیستم‌های یونیکسی و شبه یونیکسی کرده. کتاب فوق العاده‌ایه و اگه وقت دارین توصیه می‌کنم حتما حتما بخونیدش.

اما من می‌خوام یه بخشیش رو براتون اینجا بنویسم که «17 قانون یونیکسی اریک ریموند» نام داره. اریک ریموند سعی کرده فلسفه‌ی یونیکس رو توی 17 تا قانون براتون خلاصه کنه که در ادامه با هم می‌خونیمشون:

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

این از 17 قانون اریک ریموند که سعی کردم به قابل فهم ترین شکل ممکن ترجمه‌ش کنم اما هر چقدر هم که بد ترجمه کرده باشم انقدر این قوانین ساده هستن که کاملا قابل فهمن. با این تعاریف شاید خیلی‌هاتون قانع شده باشین بهتره برنامه‌هامون رو ساده بنویسیم.

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

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

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

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

از گنو/لینوکس هم بیایم بیرون و برسیم به حرف آخر…

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

و اما دیگه از پست خارج شیم و یکم حرفای مهمل بزنیم و بریم پی کارمون :)))

دوستی دیشب بهم پیام داد که اون ویدئوکست‌های لاراول که در موردش نوشتی و قولش رو دادی چی شد؟ جواب این سوال هم اینه که این روزا سرم خیلی شلوغ بود و الانم یکم سرم خلوت شده، ماه نوامبر هم که هست، دارم پک می‌کنم که چند روزی برم مسافرت (پیشاپیش اگه خوش گذشت جاتون خالی) :)) اما سر قولم هستم و وقتی برگشتم حتما چند قسمتی منتشر می‌کنم براتون.

در نهایت پیشنهاد می‌کنم آهنگ Estranged از حضرات Guns N’ Roses رو هم گوش کنید که اگه تا الان گوش ندادید خیلی ضرر کردید! (اینو کل این هفته به همه گفتم!!)


سورس این پست رو می‌تونین از اینجا ببینین :)