قانون هایروم (Hyrum’s Law)-بخش اول
طی چند سال گذشته و به دلیل همکاریام برای انتقال (migration) زیرساختهای سطح پایین یکی از پیچیدهترین سیستمهای نرمافزاری روی کرهی خاکی به نکات مهمی دربارهی تفاوت بین رابط (interface) و پیادهسازی آن (implementation) برخورد کردهام. معمولن ما رابط (interface) را تجریدی (abstraction) برای ارتباط با سیستم میدانیم و پیادهسازی (implementation) را هم روشی میدانیم که سیستم کارش را انجام میدهد. برای نمونه فرمان و پدالهای گاز و ترمز در خودرو مانند رابط عمل میکنند و چرخها و موتور هم مانند پیادهسازی هستند (ارتباط ما با خودرو از طریق فرمان و پدالها است ولی خودرو به کمک موتور و چرخها کار خواستهشده را انجام میدهد). چنین مفهومی به دلایل متعددی مفید است که مهمتریناش این است که پیچیدگی بسیاری از سیستمهای پرکاربرد خیلی سریع به حدی میرسد که فهم و شناخت کامل آن برای یک فرد یا گروه دشوار میگردد و تجریدها (abstraction) برای مدیریت این پیچیدگی بسیار مهم و حیاتیاند.
تعریف سطح درستِ تجرید (abstraction)، موضوع کاملن جداگانهای است که در اینجا به آن نمیپردازیم (کتاب نفر ماه افسانهای -Mythical Man-Month- را ببینید). نکته مهم این است که وقتی یک تجرید (abstraction) تعریف شد ما دوست داریم آن را غیرقابل تغییر، شفاف و تفسیرناپذیر بدانیم. به عبارت دیگر، هر رابط (interface) از دیدگاه نظری باید مرز شفافی بین استفادهکنندگان یک سیستم و پیادهسازی داخلی سیستم ترسیم کند. اما از دیدگاه عملی، با رشد تعداد استفادهکنندگان و استفاده از سیستم، این نظریه نقض میشود و استفادهکنندگان شروع به اعتماد و اتکا به جزییات پیادهسازی میکنند. این جزییات یا دانسته از طریق رابط (interface) به بیرون درز کرده یا خود استفادهکنندگان موقع استفاده از سیستم آنها را کشف کرده و فهمیدهاند. «قانون تجریدهای دارای نشتی اسپولسکی» (Spolsky’s Law of Leaky Abstractions) توضیح میدهد که چگونه استفادهکنندگان به جزییات پیادهسازی اعتماد و اتکا میکنند.
نهایت چنین اتفاقی ما را به سوی مفهومی هدایت میکند که در محاوره به آن «قانون رابطهای ضمنی یا غیرشفاف» (The Law of Implicit Interfaces) گفته میشود: با فرض وجود تعداد کافی از استفادهکنندگان، چیزی به نام پیادهسازی خصوصی (private implementation) وجود ندارد [پیادهسازی خصوصی به این معناست که استفادهکننده هیچ اطلاعی از نحوه و روش پیادهسازی داخلی سیستم ندارند].
گزیده:
وقتی داشتم این کد رو مینوشتم فقط من و خدا میفهمیدیم من دارم چه کار میکنم. الان دیگه فقط خدا میدونه! 😀
ناشناس
https://t.me/bibalan_com
https://bibalan.com/?p=4652
Post #82
778
Forwarded from سماموس: نوشتههای یوسف مهرداد بیبالان (Yousef Mehrdad)
Telegram سماموس: نوشتههای یوسف مهرداد بیبالان این کانال برای اطلاعرسانی نوشتههای وبلاگ سماموس (bibalan.com) ایجاد شده است. مطالب پس از انتشار در وبلاگ، در این کانال نیز منتشر خواهد شد. امیدوارم که مطالب آن برای شما مفید باشد و خوشحال خواهم شد تا نظرات و بازخوردهای شما عزیزان را دریافت کنم.- 👍 3