نخست مرتب‌ کنید (tidy first) (۳ و پایانی)

  • یوسف مهرداد

خُب، مرتب‌سازی (tidying) چیست؟
بک با شوخ طبعی همیشگی‌اش توضیح می‌دهد: «هر مرتب‌سازی (tidying) یک بازسازی (refactoring) کوچولو موچولوی نازنازی نادقیق است. هر مرتب‌سازی یک تغییر در ساختار سیستم است که تغییر در رفتار سیستم را آسان‌تر می‌کند. هر کار از نوع «نخست‌ مرتب‌‌ کنید» (tidy-first) تلاش می‌کند ساختارِ کد را بدون ایجاد ترس و وحشت تغییر دهد.”

اجازه دهید مثالی را با هم مرور کنیم. فرض کنید با یک تابع (function) بزرگ که تعداد خط‌های آن زیاد است رو به رو هستید. قبل از تغییر آن، کد تابع را می‌خوانید تا بفهمید چه کار می‌کند و ببینید چطور می‌توانید آن‌را به طور منطقی به بخش‌های (chunk) کوچکتر تقسیم کنید.

توجه کنید که تقسیم کد به بخش‌های کوچک‌تر، یک «مرتب‌سازی»(tidying) ساده است. ما صمیمانه به شما پیشنهاد می‌کنیم به کانال YouTube ما بروید (https://youtu.be/VrkRAVX1h4I) و کل سخنرانی را تماشا کنید تا مثال‌های بیشتری از مرتب‌سازی با استفاده از عبارت‌های نگهبان (guard clause)، توضیح‌ کد (comment) یا توابع کمکی (helping function) را ببینید.

(مترجم؛ عبارت نگهبان (guard clause) یکی از روش های بازسازی کد است که در آن، با استفاده از چندین شرط، ساختار درختی کدی که دارای شرط‌های تو در تو(Nested Conditional) است، حذف و به یک ساختار مسطح تبدیل می‌شود. یک نمونه از آن را در کد زیر می‌توانید ببینید.

منبع کد: refactoring.guru

(مترجم؛ تابع کمکی (helping functions) تابعی است که بخشی از وظیفه‌ی تابع دیگری را انجام می دهد. توابع کمکی برای خوانایی بیشتر کد استفاده می‌شوند چون بخشی از کد تابع اصلی را جدا می‌کنند و نام جداگانه‌ و خوانایی به آن اختصاص می‌دهند. این توابع به شما اجازه می دهند از کد جداشده در تابع‌های دیگر نیز دوباره استفاده کنید.)

چرا تغییر نرم افزار پرهزینه است؟
برداشت دیگری که می‌توانید از این مفهوم طراحی نرم افزار داشته باشید این است که هزینه نرم افزار تقریباً با هزینه تغییر آن برابر است و توسعه اولیه تاثیر چندانی بر آن ندارد. با این حال، همه تغییرات یکسان و شبیه به هم نیستند: گاهی اوقات هزینه کل ایجاد یک تغییرِ “ارزان” تحت تاثیر هزینه‌‌های چند تغییر بسیار گران قرار می‌گیرد. از نظر فنی، توزیع هزینه ویژگی‌ها (features) از توزیع توانی (power law distribution) پیروی می‌کند. چرا برخی از تغییرات بسیار پرهزینه‌تر از بقیه تغییرات هستند؟

(مترجم؛ توزیع توانی در علم آمار، نوعی رابطه بین دو کمیت است که یک کمیت به صورت توانی از دیگری تغییر می‌کند. مثلاً مساحت یک مربع از دیدگاه طول ضلع آن را در نظر بگیرید، اگر طول دو برابر شود، مساحت آن چهار برابر (دو به توان دو برابر) می‌شود [ویکی‌پدیا])

ما همان اثر بهمن (avalanche effect) را در این رفتار مشاهده می‌کنیم، جایی که تغییر پارامترِ یک تابع باعث ایجاد تغییرات متعدد در سیستم می‌شود. رابطه‌ی بین اجزای نرم‌افزاری که باعث بروز و پخش تغییرات متعدد در سیستم می‌شود همان جفت‌شدگی (coupling) است. اما در کنار این وابستگی‌ها و جفت‌شدگی‌های اجزا، ما مشغول جداسازی‌ (decoupling) آنها هم هستیم. اگر به عقب برگردیم و با دقت نگاه کنیم به این نتیجه می‌رسیم که نقش طراحی نرم افزار، مدیریت تصمیم‌های بینابینی (tradeoff) جفت‌شدگی(coupling) /جداسازی(decoupling) است زیرا افزایش هر یک از آنها باعث افزایش هزینه می‌شود.

(مترجم؛ اصطلاح اثر بهمن (avalanche effect) از ریزش بهمن گرفته شده که در آن، سقوط یک سنگ کوچک می تواند برف انبوهی را به حرکت درآورد و به دنبال آن، خرابی زیادی به بار آید. هر چند سنگی که باعث شروع بهمن می‌شود می‌تواند کوچک باشد، اما میزان ویرانی به بار آمده قابل مقایسه با اندازه‌ی آن نیست. به صورت خلاصه در اینجا اثر بهمن به این معناست که تغییری کوچک می‌تواند منجر به تغییرات بزرگی گردد.)

“بنابراین بین این دو یعنی جفت‌شدگی (coupling) یا جداسازی (decoupling) باید نقطه‌ی کمینه‌ی (minimum) هزینه را پیدا کنید. برای این تصمیم‌گیری باید توجه کنید که اگر جفت‌شدگی (coupling) وجود دارد ما باید برای کاهش آن سرمایه‌گذاری کنیم و در نتیجه لازم است هزینه جداسازی (decoupling) را افزایش دهیم تا بتوانیم به آن نقطه‌ی کمینه برسیم. و این توضیحات پاسخ به این سؤال است که «چرا باید نخست مرتب کنیم؟» و کنت بک با این جمله صبحت‌هایش را به پایان می‌رساند در حالی که ما نیز با صحبت‌هایش کاملا موافقیم.

حرف آخر
روش “نخست مرتب کنید” به بررسی تغییرات طراحی در ابعاد بسیار کوچک می‌پردازد و رابطه‌ی برنامه‌نویس با خودش را بررسی می‌کند. این روش چیزهای زیادی برای اندیشیدن و آموختن دارد اگر به دنبال یافتن راه‌هایی هستید تا به کمک آنها بتوانید پروژه‌ها و تیم‌های خود را بهتر مدیریت کنید.
به همین دلیل است که ما در Beetroot به دنبال ایجاد فرهنگی انسان‌محور هستیم تا تیم‌ها در کنار رشد و پیشرفت، با همدلی روی راه‌کارهای تاثیرگذار کار کنند. اگر شما یکی از این تیم‌ها را انتخاب کنید و به آن بپیوندید، ما می‌توانیم با هم کارهای فوق‌العاده‌ای انجام دهیم.

گزیده:
این روزها هر بچه‌ای که مدرسه را تمام می‌کند فکر می‌کند می‌تواند مارک زاکربرگ بعدی باشد و البته با این فناوری‌های جدید مانند محاسبات ابری، آنها واقعا این شانس را دارند.
مارک اندرسن، بنیانگذار نت‌اسکیپ و عضو هیئت مدیره فیس‌بوک

https://bibalan.com/?p=4081
یوسف مهرداد

یوسف مهرداد


کانال تلگرام

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

برای خروج از جستجو کلید ESC را بفشارید