آنتروپی نرم افزار: بی نظمی های کوچک، شکست های بزرگ
ترجمه ای آزاد از بخش سوم کتاب The Pragmatic Programmer
درحالی که توسعه ی نرم افزار از همه ی قوانین فیزیکی در امان است ولی افزایش آنتروپی (Entropy) یا همان بی نظمی ضربه ی سختی به آن می زند. آنتروپی اصطلاحی در فیزیک است که به میزان "بی نظمی" در سیستم اشاره دارد. متاسفانه قوانین ترمودینامیک این اطمینان را به ما داده اند که میزان بی نظمی در جهان به سمت بیشینه (Maximum) حرکت می کند. وقتی بی نظمی در نرم افزار افزایش می یابد، به آن "پوسیدگی نرم افزار" می گوییم. بعضی از اهالی این فن، خوش بینانه اسم آن را بدهی فنی یا همان Technical Debts گذاشته اند با این مفهوم که یک روزی برای برطرف کردن آن باز خواهند گشت. که احتمال زیاد هرگز آن روز نخواهد رسید. حالا اسمش را هرچیزی که بگذاریم، پوسیدگی نرم افزار یا بدهی فنی، این موضوع به صورت غیرقابل کنترلی گسترش خواهد یافت.
عوامل زیادی می تواند در پوسیدگی نرم افزار (همان چیزی که شما به آن خوش بینانه بدهی فنی می گویید) نقش بازی کنند. البته به نظر می رسد مهم ترین عامل را می توان روانشناسی یا فرهنگ کار در پروژه دانست. حتی اگر شما یک تیم یک نفره هم باشید باز روانشناسی پروژه تان خیلی نکته ی ظریفی است. با وجود بهترین افراد و بهترین برنامه ریزی ها بازهم یک پروژه در مدت حیات خودش می تواند خرابی های زیادی را تجربه کند. این درحالی است که پروژه های دیگری وجود دارند که با وجود مشکلات بسیار بزرگ و عقب افتادن های مداوم ولی با موفقیت، در مقابل گرایش طبیعی میل به بی نظمی مبارزه می کنند و شرایط را مدیریت مس کنند و بسیار خوب ظاهر می شوند.
چه چیزی تفاوت ها را می سازد؟
در شهرها بعضی از ساختمان ها بسیار زیبا و تمیز هستند و بعضی دیگر بسیار کثیف و خراب. چرا چنین چیزی را می بینیم؟ تحقیقات در مورد جرایم، زوال ها و خرابی های شهری پرده از مکانیزمی برداشت که این اتفاق را رقم می زند. چیزی که خیلی سریع یک خانه ی تمیز و زیبایی که در آن آدم ها به راحتی سکونت دارند را به خرابه ای غیر قابل تحمل تبدیل می کند:
یک پنجره ی شکسته
یک پنجره ی شکسته، که برای مدتی به همان صورت رها شده باشد. حس رها شدن را به اهالی آن ساختمان می دهد. حسی که توان مراقبت از ساختمان را از آنها می گیرد. چند وقت بعد پنجره ی بعدی می شکند. حالا اهالی ساختمان در محیط های مشترک ساختمان زباله های شان را می ریزند. روی در و دیوارها نقاشی ها ظاهر می شوند. آسیب های جدی به بنای ساختمان وارد می شود. در یک چشم به هم زدن ساختمان آنقدر آسیب می بیند که دیگر مالک ها تمایلی به ترمیم آن ندارند و آن حس رها شدگی به واقعیت تبدیل می شود. (البته در ایران با افزایش روزانه ی قیمت مسکن خیلی بعید است 😉 ولی به هر حال در مثال مناقشه نیست.)
چرا این تغییر ایجاد شد؟ روانشناس ها مطالعاتی انجام داده اند که نشان می دهد ناامیدی می تواند مسری باشد. وقتی در محله ای مشکل و یا خرابی های متعددی رها شده است. در ذهن اهالی آن محله این ایده، رشد می کند و تقویت می شود که حتما هیچ چیز قابل اصلاح نیست و هیچ کسی به ما اهمیتی نمی دهد و همه ی ما محکوم به این شرایط هستیم. این افکار منفی که بین اعضای آن جامعه، محله یا تیم منتشر می شود، گسترش می یابد تا همه را در برمی گیرد.
نکته : پنجره ای را شکسته رها نکنید.
در برنامه ای که تولید می کنید هیچ پنجره ای را شکسته و تعمیر نشده رها نکنید. پنجره ی شکسته های برنامه ی شما می تواند طراحی بد، تصمیم های اشتباه یا کدهای ضعیف باشند. هر کدام از ایرادها را، به محض اینکه متوجه شدید، برطرف کنید. حتی اگر زمان کافی برای برطرف کردن آنها ندارید، آنها را از برنامه تان حذف کنید یا حواستان را به آن بخش، خیلی جمع کنید. شاید شما بتوانید تکه کدی که خراب است را Comment کنید یا در آن بخش از برنامه یک پیام "در دست ساخت" یا "خارج از سرویس" بدهید یا در نهایت داده های ساختگی را جایگزین کنید. بالاخره کاری کنید که جلوی آسیب بیشتر را بگیرد یا حداقل نشان دهد که شما به اوضاع مسلط هستید.
ما به وضوح دیده ایم که با شروع شکسته شدن یک پنجره، به سرعت برنامه ای که به خوبی کار می کرد، از کار می افتد. با اینکه عوامل دیگری هم می تواند در خراب شدن یک نرم افزار مشارکت کنند، اما بی توجهی، بیش ترین نقش را در خراب شدن نرم افزار بازی کرده است و سرعت این فرایند را زیاد می کند.
شاید شما فکر کنید که هیچ کس وقت این را ندارد که راه بیفتد و پنجره های شکسته ی برنامه را ترمیم کند. پس بهتر است به فکر یک سطل آشغال خوب برای برنامه تان باشید یا هرچه سریع تر به سراغ یک برنامه ی دیگر بروید. ولی لطفا اجازه ندهید بی نظمی (آنتروپی) پیروز شود.
آن روی سکه
یک روز خانه ی مرد ثروتمندی که خانه اش پر از وسایل زیبا و گران قیمت بود، آتش گرفت. وقتی مامورهای آتش نشانی برای خاموش کردن آتش آمدند دلشان نیامد با شلنگ ها و کفش های کثیف شان روی فرش های زیبا بروند تا آتش را خاموش کنند. آنها تمام تلاش شان را کردند تا در دم درب بایستند و از راه دور آتش را خاموش کنند. این درحالیست که آنها برای اینکه در زمان اطفای حریق مراقب وسایل باشند آموزش خاصی ندیده اند و اصلا این موضوع در اولویت کاری آنها قرار ندارد. تمام آموزش ها و تمرین های شان درباره ی خاموش کردن آتش در سریع ترین زمان ممکن است. ولی به خاطر زیبایی زیادی که آن خانه داشت هیچ کس دلش نمی آمد باعث خرابی و کثیفی آن شود.
این داستان روی دیگر موضوع این مقاله است که درباره ی آن با عبارت رها کردن پنجره ی شکسته صحبت کردیم. اگر در موقعیت یک برنامه نویس وارد کدی شوید که نامرتب نوشته شده است و پر از پنجره های شکسته ی رها شده است، قطعا شما هم انگیزه ای برای نوشتن کد خوب یا اصلاح بخش های خراب کد ندارید. ولی وقتی وارد کدی می شوید که همه ی اصول کد نویسی تمیز در آن رعایت شده است و مشخص است که افراد قبلی مراقبت زیادی از آن کرده اند، حتی اگر شما برای این کار آموزش کافی ندیده باشید یا بخاطر زمانبندی تحویل پروژه فرصت کافی نداشته باشید، مثل همان آتش نشان های داستان بالا حاضر نخواهید شد ننگ کثیف کردن این کد به دامن شما بیفتد.
رمز داشتن یک نرم افزار خوب که مدت ها به درستی و با کیفیت کار می کند جمله ی ساده ی "هیچ پنجره ای نباید شکسته رها شود." است. پس لطفا هرروز با خودتان این جمله را تکرار کنید.
برای تمرین در این موضوع
- یک یا دو پنجره ی شکسته در پروژه تان را پیدا کنید و درباره ی علت ایجاد آنها و البته راه حل برطرف کردن آنها با همکاران تان صحبت کنید.