Murphy's Law (قانون مورفی) توسط Edward Murphy که یک مهندس هوا و فضای آمریکایی بود ابداع شد که ایدهٔ جالبی دارد بدین صورت که:
اگر راههای متفاوتی برای انجام کاری باشه و این امکان وجود داشته باشد که یکی از آنها به خرابی یا فاجعه بینجامد، حتماً یک نفر کار را به همان صورت انجام خواهد داد!
که برای آشنایی بیشتر با این قانون، میتونید به لینک https://goo.gl/f3K1qD مراجعه نمایید. به طور کلی، برخی از جالبترین و در عین حال اعصابخردکنترین مصداقهای این قانون عبارتند از:
- فرض کنیم که مثلاً در یکی از شعب بانک پاسارگاد دو ATM قرار دارد و ما در یکی از صفها ایستادهایم. نفر مقابل ما یک پیرمرد است که خیلی سر حوصله کارش را میکند و این در حالی است که میبینیم در ATM کناری مشتریان دونهدونه میآیند و سریع میروند. تصمیم میگیریم که به صف کناری بریم اما در کمال ناباوری میبینیم که پیرمرد کارش رو تمام میکنه و صف قبلی راه میافتد و صف جدید که داخل آن ایستادهایم گیر میکند!
- فرض کنیم در کانتکت لیست خود یک شمارهای است که سالها پیش آن را ذخیره کرده و هیچگاه هم نشده که به آن نیازی پیدا کنیم و تصمیم میگیریم آن را حذف کنیم. به محض حذف شدن کانتکت، ظرف یکی دو روز یا نهایتاً یک هفته به کمک آن فرد نیاز مبرم پیدا میکنیم در حالی که هیچ شمارهای از وی نداریم!
- وقتی که سر کلاس درس هستیم و ناگهان پاککن از دستمان میافتد، در کمال ناباوری پاککن به دورترین نقطهٔ ممکن پرت میشود!
- فرض کنیم در یک شهر کوچک زندگی میکنیم و وقتی که با کسی بیرون میرویم که دوست نداریم دیگران ما را با وی ببینند، با نهایت شانس این اتفاق هم میافتد و هرگز کسی ما دو نفر را با همدیگر نمیبینید. حال فرض کنیم که میرویم تهران و با این فرض که در یک شهر پانزده میلیونی احتمال اینکه فرد آشنایی شما دو نفر را با یکدیگر ببیند خیلی کم است اما در کمال ناباوری یک آشنایی مقابل شما سبز شده و دردسرساز میشود!
- نسبت خارش هر نقطه از بدن با Accessibility (دسترسیپذیری) آن رابطهٔ عکس دارد!
- فرض کنیم کارمان به شکلی است که دائم در سفر هوایی هستیم و این در حالی است که همواره هواپیما با یک تأخیر نیم ساعته تا یک ساعته میپرد. یک روز خواب میمانید و با این فرض که مشکلی پیش نمیآید راهی فرودگاه میشوید اما در کمال ناباوری میبینید که دقیقاً همان روز هواپیما On-time پرواز کرده است!
- قرار است از میان حدوداً یکصد CD موردی را پیدا کنید و برای این کار دونهدونه آنها را چک میکنید اما این در حالی است که CD مد نظر جزو همان ده تا CD انتهایی است!
- به محض خرید یک جنس از دیجیکالا، فردا میبینیم که پیشنهاد شگفتانگیز شده!
- سر سفره نشستهاید و مشغول خوردن غذا هستید و مابین شما و سفره حدوداً دو سانتیمتر فاصله هست که قالی مشخص است. از قاشق ماست میریزد اما در کمال ناباوری ماست دقیقاً در جایی فرود میآید که قالی قرار دارد (نه روی شلوار و نه توی سفره بلکه روی قالی دستباف!)
- در پمپ بنزین، جایگاهی که انتخاب میکنیم از همه دیرتر راه میافتد!
- در عوارضی تهران-قم، جایگاهی که انتخاب میکنیم از همه دیرتر راه میافتد!
به نظر میرسد که تجربیات ملموسی تا اینجای بحث مطرح شده باشد و حال نوبت آن میرسد که ببینیم این قانون جالب در صنعت توسعهٔ نرمافزار به چه شکل نمود عینی پیدا میکند.
آشنایی با قانون مورفی در کدنویسی
مسلماً وقتی قانونی نانوشته وجود داشته باشد که از صف بانک گرفته تا صف پمپبنزین و ... را شامل میشود، نیاز به توضیح نیست که ممکن است چنین قانونی در حوزهٔ توسعهٔ نرمافزار (برنامهنویسی) هم نمود عینی پیدا کند که در ادامه چند مثال خواهم زد.
- نرمافزاری که نوشتهایم به اصطلاح Stable است و ماهها بدون هیچ باگی کار میکند. مورد پیش میآید که تصمیم به مسافرت میگیریم و از آنجا که نرمافزار از دید ما باثبات است، هیچ سیستمی با خود به همراه نمیبریم تا کمی از فضای کار دور بوده و بتوانیم بیشتر لذت ببریم. صرفاً یکی دو روز از مسافرت نگذشته که تلفن پشت تلفن که سیستم از کار افتاده است! جالب است بدانیم که هرچه مقصد مسافرت از محل سکونت ما دورتر باشد، احتمال وجود باگهای شدیدتر هم بیشتر خواهد شد!
- کلیهٔ فیلدهای ورودی را Escape میکنیم اما یک فرمی هست که تحت هیچ عنوان احتمال ندارد کسی از وجود آن آگاه باشد و از قضا بیخیال Validate کردن دیتای ورودی از آن طریق میشویم اما در کمال ناباوری از همان نقطه اَتَک میخوریم!
- یک لایببری و فریمورک را انتخاب میکنیم و در مستندات میخوانیم که قرار است نسخهٔ بعدی آن ریلیس شود که به مراتب Stable تر و باگفیریتر هم خواهد بود اما دقیقاً مشخص نیست که زمان عرضه چه موقع هست. به هر حال مجبور میشویم که روی نسخهٔ قدیمیتر شروع به کدنویسی کنیم. به محض اینکه به مراحل پایانی پروژه میرسیم و فقط ۱۰٪ تا پایان آن مانده، یک خبرنامه دریافت میکنیم که خبر از انتشار نسخهٔ ابزار جدید میدهد که از قضیا بکوارد کامپتیبل هم نیست!
- فرض کنیم نرمافزاری داریم که حاوی حدوداً ۱۲ ماژول مختلف است. کلیهٔ I/O ها در اکثر تمامی ماژولها را لاگگیری میکنیم به جز یک مورد و آن هم به این دلیل است که آن ماژول اصلاً چیز مهمی نیست که نیاز به لاگهایش داشته باشیم. سیستم به مشکل میخورد اما لاگها چیزی را نشان نمیدهند که مشکل از کجاست و پس از چند هفته سروکله زدن با نرمافزار میبینیم همان ماژولی که لاگگیری نکردیمش مشکلزا بوده است!
- یک پروژهٔ شخصی داریم و باید آن را هر طور که شده تکمیل کنیم؛ لذا از محل کار اصلی خود مرخصی میگیریم تا منزل بمانیم و کد بزنیم اما در کمال ناباوری همان روزی که مرخصی هستیم برق به مدت ۶ ساعت میرود!
- مشکلی داریم که خود از حلش ناتوانیم لذا شروع به پرسیدن سؤال در استک اورفلو و همچنین ارسال سؤال برای چند نفر از دوستان باتجربهتر از خود میکنیم. به محض اینکه تمامی پیامها سابمیت شد، راهحل به ذهنم خودمان میرسد!
- وقتی که توی فایلزیلا دکمهٔ آپلود رو میزنی تا کدهای آپدیتشده دیپلوی بشن روی سرور، اینترنت قطع میشه!
میبینیم که این دست اتفاقات چقدر ملموس هستند. آیا شما هم تجربهای از قانون مورفی در کدنویسی دارید که جالب باشد؟ با من و دیگران به اشتراک بگذارید.