قانون هایروم (Hyrum’s Law)-بخش دوم
به عبارت دیگر، در صورتی که رابط (interface) به تعداد کافی استفادهکننده داشته باشد، مجموع استفادهکنندگان خواسته یا ناخواسته به بخشهای مختلف پیادهسازی وابسته خواهند شد. نتیجهی چنین اتفاقی، سختتر شدن اعمال تغییرات در پیادهسازی رابطها است زیرا از این نقطه به بعد، پیادهسازی نه تنها باید با بخش مستندشده و شفاف رابطها (explicitly documented interface) تطبیق داشته باشد بلکه باید با بخش پنهان و غیرشفاف رابطها (implicit interface) که ناشی از روش استفاده از آنهاست نیز همخوانی داشته باشد. ما معمولن این پدیده را «سازگاری با خطا برای خطا« (bug-for-bug compatibility) مینامیم [«سازگاری با خطا برای خطا» یا «سازگاری با خطا» تکنیکی است که در آن خطاها یا رفتارهای نادرست نسخهی قبلی یک نرمافزار در نسخهی جدید آن با آگاهی و خودخواسته باقی گذاشته میشوند. مترجم]
شکلگیری رابط پنهان (implicit interface) معمولن تدریجی است و استفادهکنندگان رابط عمومن از شکلگیری آن آگاهی ندارند. برای مثال، یک رابط ممکن است هیچ تضمین یا اطلاعاتی دربارهی کارایی و سرعت خود اعلام نکرده باشد، با این حال استفادهکنندگان بر اساس تجربهی خود، کمکم به این جمعبندی میرسند که سطح سرعت و کارایی سیستم چقدر است و از آن به بعد انتظار دارند که کارایی سیستم دستِکم در همان سطح باقی بماند یا بهبود پیدا کند. این گونه انتظارات به بخشی از رابط پنهان (implicit interface) سیستم تبدیل میگردد و از آن پس، تغییرات سیستم باید این سطح از کارایی را پوشش دهد تا کارهای استفادهکنندگان دچار اختلال نگردد.
همهی استفادهکنندگان فقط به یک رابط پنهان یکسان وابسته نمیشوند. با فرض وجود تعداد کافی استفادهکنندگان، رابط پنهان در نهایت کاملن با پیادهسازی مطابقت خواهد داشت. در چنین شرایطی، رابط (interface) محو میشود و پیادهسازی (implementation) جای رابط را میگیرد و هر گونه تغییری در آن، انتظارات استفادهکنندگان را مختل میکند. اگر خوش شانس باشیم، آزمونهای جامع و خودکار میتوانند این گونه مغایرت با انتظارات استفادهکنندگان را پیدا کنند ولی نمیتوانند آنها را رفع کنند.
رابطهای پنهان (implicit interface) نتیجهی رشد طبیعی و ارگانیک سیستمهای بزرگ هستند. هرچند آرزو میکنیم که چنین مشکلی برای سیستمها به وجود نیاید، اما عاقلانه است که موقع ساخت و نگهداری سیستمهای پیچیده، مهندسان و طراحان رابطهای پنهان را مد نظر داشته باشند و به آن توجه کنند. به یاد داشته باشید که رابطهای پنهان چگونه طراحی و تکامل سیستمها را محدود میکنند و دقت کنید که برای هر سیستم پراستفادهای، رابط (interface) مفهومی بسیار پیچیدهتر از چیزی است که فکر میکنید.
هویرام کیست؟
هویرام رایت (Hyrum Wright) دانشمند ارشد (Principal Scientist) ادوبی (Adobe) است و قبل از آن، مهندس نرمافزار در گوگل بود. او روی ابزارها و زیرساخت مدیریت تغییر کد در مقیاس بزرگ کار میکند و سالهای زیادی را صرف بهبود کتابخانههای زیربنایی و مبتنی بر سیپلاسپلاس گوگل کرده است. او یکی از نویسندگان کتاب Software Engineering at Google نیز است.
منبع:
www.hyrumslaw.com
گزیده:
پسری از پدر برنامهنویساش پرسید «بابا، واسه چی خورشید از شرق طلوع میکنه و در غرب غروب؟»
پدرش پاسخ داد:
پسرم داره کار میکنه کاری به کارش نداشته باش! 😀
A son asked his father (a #programmer) why the sun rises in the east, and sets in the west. His response? It works, don’t touch!
https://hottg.com/bibalan_com
https://bibalan.com/?p=4652
>>Click here to continue<<
