ابزارها و آماده سازی: خوب، بد، زشت!

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

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

دو پدیده

در متون رشته فناوری اطلاعات، دو پدیده مرتبط مطرح شده که اهمیت و مشکلات آماده سازی را شرح می‌دهند. اولی Axe Sharpening یا «تبر تیز کردن» در کتاب Dreaming in Code و دومی Yak Shaving یا «اصلاح گاومیش» در کتاب Jargon Files آمده است.

«اگر به من شش ساعت برای قطع یک درخت زمان بدهید، چهار ساعت اول را به تیز کردن تبرم خواهم پرداخت.»
— منسوب به آبراهام لینکن

این نقل قول بر اهمیت انتخاب و آماده سازی ابزار مناسب قبل از شروع به کار تاکید دارد. اگر هدف از صرف انرژی، انجام بهینه کار و نه فقط صرف وقت باشد، تیز بودن تبر و مناسب بودن ابزار به اندازه خود کار اهمیت خواهد داشت. چرا که شاید با تبر کند یا ابزار نامناسب، کار به دقت و تمیزی مورد نظر انجام نشود، یا هزینه‌ها و صدماتی به انجام دهنده یا محصول نهایی وارد شود.
این دست آماده سازی‌ها نشانه‌های مشخصی دارند:

  • به شکل مستقیم به کار اصلی ارتباط دارند.
  • فهرستی متناهی از موارد یا اقدامات مورد نیاز تشکیل می‌دهند.
  • اغلب نتیجه‌شان قابل بازاستفاده یا اشتراک است.
  • زمان صرف شده برای آماده سازی این موارد از زمان انجام کار اصلی می‌کاهد.

این نوع آماده سازی در دنیای توسعه نرم افزار ممکن است به شکل‌های زیر باشد:

  • راه اندازی و تنظیم IDE: شامل بارگزاری، نصب، پیکربندی زبان برنامه نویسی، نصب افزونه و اتصال به Source Controller
  • راه اندازی Environment جدید: مثل راه اندازی سرور Staging نرم افزار در حال توسعه
  • جستجو برای Libraryهای خاص و پرکاربرد: مثلا کتابخانه API آمازون یا کلاسی برای استخراج و دستکاری مشخصات Exif فایل‌های JPG

 

«وقتی دارید یک فعالیت احمقانه و مسخره انجام می‌دهید که هیچ شباهت واضحی با کاری که واقعا باید انجام بدهید ندارد، اما از طریق ۱۲ لایه رابطه سببی فعالیت‌تان به کار نهایی ارتباط دارد!»
— تعریف جرمی اچ. براون از Yak Shaving

داستانی هست که روزی پدر خانواده قصد داشت عصر جمعه ماشینش را بشورد. وقتی به پارکینگ رفت یادش افتاد که سری شلنگشان خراب شده و امکان تنظیم شدت و زاویه آب نیست. فکر کرد سرشلنگی همسایشان را موقتا قرض بگیرد تا سر شلنگی مناسبی تهیه کند. وقتی داشت به سمت در می‌رفت به خاطرش آمد چند شب پیش پسرش در تولد فرزند همسایه دعوت بوده و شب موقع برگشتن خواب‌آلود بوده و با بالشت و لحاف به خانه آورده شده، با خودش فکر کرد بهتر است بالشت و لحاف هم بهشان پس بدهد. وقتی به خانه رفت همسرش گفت امروز صبح بچه‌ها در حین شوخی و بازی بالشت را پرت کردند و درزش شکافته و بخشی از الیاف داخلش بیرون ریخته و خراب شده. با بررسی فهمید الیاف این بالشت‌ها از پشم نوع خاصی گاومیش است. با کمی جستجو متوجه شد این گاومیش‌ها در تبت زندگی میکنند و فرآوری پشمشان در چین انجام می‌شود. تصمیم گرفت بلیط هواپیمایی به تبت تهیه کند تا کمی از پشم یکی از این گاومیش‌ها را بتراشد، با خود به چین ببرد، پس از آماده شدن به خانه بیاورد، بالشت را با پشم جدید پر کند، به همراه لحاف برای همسایه ببرد، سرشلنگی‌شان را قرض بگیرد و ماشینش را بشورد!

اصطلاح «اصلاح گاومیش» اولین بار در یکی از فهرست‌های ایمیلی دانشگاه MIT توسط جرمی براون و بعدها در Jargon Files اریک ریموند استفاده شده. این نوع آماده سازی هم نشانه‌هایی دارد:

  • معمولا ارتباط مستقیمی بین هر مورد یا مرحله با کار اصلی یا نتیجه نهایی وجود ندارد.
  • فهرست متناهی از موارد وجود ندارد و نقشه راه مشخصی برای تکمیل کارها نمیتوان ترسیم کرد.
  • موارد به مرور در حین انجام کارها اضافه می‌شوند و از ابتدا پیش بینی نشده‌اند.

از این جنس آماده سازی در توسعه نرم افزار زیاد است، اغلب ما با روایتی مشابه این مورد مواجه شدیم:

برای خودکار کردن یک کار تکراری و روتین سیستم، تصمیم میگیری یک script آماده استفاده کنی. این script به آخرین نسخه lib_xyz نیاز داره که الان نسخه قدیمی‌ترش روی سیستم هست و چند بسته دیگه بهش وابسته‌اند. شروع می‌کنی به آپدیت کردن بسته‌ها و نهایتا kernel هم آپدیت میشه. کارت گرافیکت روی kernel جدید کمی بازی درمیاره. لازمه آخرین نسخه driverش رو از سورس compile کنی تا شاید درست بشه. میخوای سورس رو دانلود کنی که میبینی سایت سازنده تحریم کرده و ….

این ماجراها ادامه دارد:

Automation

Automation by xkcd.com

چه کنیم؟

اغلب تشخیص اینکه که در حال «تبر تیز کردن» هستیم یا «اصلاح گاومیش» کار ساده‌ای نیست، چون طیفی از فعالیت‌ها بین این دو حد وجود دارند و مرز شفاف و مشخصی ندارند. ممکن است گاهی اوقات رفع کردن مشکلاتی که در حین انجام کاری می‌بینید ضروری باشد و از ضررهای آتی پیشگیری کند. شاید تنها ابزار کمکی در این فرآیند نگاه سیستماتیک به مقوله آماده سازی باشد، به شکلی که قبل از انجام کارها به این سوالات پاسخ بدهیم:

  1. مقصود و هدف نهایی کار ما چیست؟
  2. محدوده اثر و طول عمر کار ما چقدر است؟
  3. منابع و محدودیت‌های کار چیست؟ (زمان، پول، نگه‌داری)
  4. تجربه ما در موضوع کار چقدر است؟
  5. آیا می‌توانیم نقشه راهی با فازهای مشخص کنترلی ترسیم کنیم؟

شاید برای کارهای دم دستی خیلی سریع و ذهنی این سوالات را مرور کنیم و برای کارهای بزرگتر و تیمی به صورت مکتوب و تیمی بهشان پاسخ دهیم. ولی صرف خودآگاهی و توجه به احتمال گرفتاری در تله «اصلاح گاومیش» به ما کمک می‌کند با سخت‌گیری بیشتری هر قدم را برداریم.

نکته تکمیلی برای تازه کارها، وجه مثبت «اصلاح گاومیش» است. این روند آماده سازی یا انجام کار می‌تواند ابزاری برای کشف مسیرها و امکانات مجاور باشد و به یک تازه کار برای روشن کرد زمین آن موضوع و مهارت خاص کمک کند. البته به شرطی که در زمان آزاد و برای پروژه‌های شخصی به کار گرفته شود.

 

پانوشت‌ها:

1 نظر برای “ابزارها و آماده سازی: خوب، بد، زشت!

پاسخ دهید

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