Репост из: سماموس: نوشتههای یوسف مهرداد بیبالان
قانون هایروم (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
طی چند سال گذشته و به دلیل همکاریام برای انتقال (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