پیشگفتار:
متن زیر بخشهایی از گفتگوی آقای مسعود خاری است که در گروه تلگرامی «متدهای چابک» (Agile Methods) آمده است.
گفتگو:
در گروه پیشنهاد شد که دوستان با همفکری هم یک فهرست از کتابهای ضروری برای مطالعهی تیمهای چابک تهیه کنند.
موضوعاتی که تیمها برای رسیدن به سرآمدی فنی (Technical Excellence) بایستی به صورت جدی و عمیق مطالعه کنند.
مسعود در پاسخ به این سوال که «کتابهای خوب طراحی شی گرا کدام کتابها هستند» پنج کتاب را معرفی میکند:
“کتاب Design Patterns: Elements of Reusable Object-Oriented Software یا Gang of Four کتاب معروف الگوهای طراحی هست که خیلی عالیه. در ابتدا چند اصل طراحی رو بیان میکنه و به شرح بعضی مفاهیم شیءگرایی میپردازه و بعد شروع به معرفی الگوهای طراحی میکنه.
اما این کتاب در سال ۱۹۹۵ نوشته شده و متنش و ادبیاتش و اصطلاحاتش برای برنامهنویسان امروز کمی ناآشناست و کمی هم ثقیل هست. عمدهی برنامهنویسانی که در شرکتهای امروزی میبینم، با متن این کتاب ارتباط برقرار نمیکنند. به علاوه بعد از گذشت بیش از ۲۰ سال و طی تجربه، به نظر میاد بعضی الگوهای این کتاب چندان مفید نیستند و بعضی الگوهای مفید وجود دارند که در کتاب نیومدند. اما به هر حال اگر کسی عزم خودش رو جزم کنه که مطالعهاش در این زمینه رو عمیق کنه، به شدت توصیه میشه.”
“نسخه سوم کتاب Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development به معرفی روشهای تحلیل و طراحی میپردازه و متدهای توسعهی تکراری-افزایشی و به طور خاص UP رو معرفی میکنه و به شرح فازهای اون میپردازه، که راستش توصیه نمیکنم که درگیرش بشید. 🙂 به نظرم چندان مفید نیستند. اما غیر از فرایندها، فصلهایی از کتاب به معرفی اصول و پترنهای طراحی شیءگرا میپردازه که خیلی خوبه.
به طور خاص در فصل ۱۷ به معرفی اصول طراحی GRASP میپردازه که در عین ساده بهنظررسیدن، به نظرم خیلی مهم و پایهای و مفید هستند. در بخشهای بعد از اون هم در مورد شیءگرایی صحبت میکنه.
نسخهی اول این کتاب در سال ۱۹۹۵ نوشته شده. ویرایش سومش مربوط به سال ۲۰۰۴ هست که سعی شده بخشهای فرایندی کتاب با مفاهیم روز (به خصوص چابکی) بهروز بشه. اما همونطور که اشاره کردم، به نظرم چندان در این کار موفق نبوده.”
“کتاب معروف Refactoring: Improving the Design of Existing Code آقای فولر که نیازی به توضیح نداره. خیلی از الگوهای ریفکتورینگ بر مبنای اصول طراحی شیءگرا هستند.
“کتاب معروف Domain-Driven Design: Tackling Complexity in the Heart of Software آقای اوانس که عالی است. و برای کسانی که بعد از مسلطشدن به مفاهیم شیءگرایی، بخوان با مفاهیم پیشرفتهتر آشنا بشن خیلی خوبه. اما برای کسی که بکگراند شیءگرایی نداشته باشه مناسب نیست.”
“کتاب Analysis Patterns; Reusable Object Models فاولر، که به روشهای تحلیل حوزهی مسئله، با استفاده از مفاهیم طراحی شیءگرا میپردازه و بیاندازه عالی و عمیق هست. اما کتاب در سال ۱۹۹۶ نوشته شده، یعنی قبل از این که UML استاندارد بشه 🙂 و متاسفانه نمودارهای کتاب با نمادهای عجیب و غریب دورهی قبل از UML ترسیم شده که کمی خوندن کتاب رو دشوار میکنه.”
در ادامه مسعود به معرفی کتابهایی در حوزهی سرآمدی فنی می پردازد:
“ویرایش دوم کتاب Extreme Programming Explained: Embrace Change که به معرفی متد چابک خودش یعنی XP یا همون Extreme Programming میپردازه. یکی از بهترین کتابهایی هست که خوندم.
از نقاط قوت متد اکسپی اینه که نه تنها فرایندهای مدیریتی، بلکه پرکتیسهای مهندسی لازمهی چابکی رو به خوبی پوشش میده (مثلاً تست و TDD و CI و غیره) که بدون اونها، اجرای فرایندهایی مثل ایتریشن و جلسات روزانه به تنهایی موجب چابکی تیم نمیشه. خیلی از پرکتیسهایی که توسط اکسپی معرفی شدند باعث ایجاد انقلابی در نحوهی توسعهی نرمافزار شده و هنوز پابرجا هستند.
اما از نقاط قوت کتاب (یا شاید باز هم متد اکسپی) اینه که پرکتیسهای مدیریتی و فنی رو به صورت ملقمهای از آیتمهای مستقل و بیربط معرفی نمیکنه. بلکه برای این که به انسجام بین اونها و به نحوهی تاثیرگذاری اونها روی هم پی ببریم، کتاب به یک معرفی سهسطحی میپردازه؛
ارزشها، اصول، و پرکتیسها (Values, Principles, Practices)
ارزشهای اکسپی ریشهی همهی فرایندهای اکسپی هستند و طبعاً خیلی کلی هستند. (مثلاً «فیدبک»، یا «احترام».) پرکتیسها هم روشهای عملی هستند که به بیان نحوه و هدف اجرای کارها میپردازند، که در کتاب به دو دستهی اصلی و جانبی تقسیم میشن. (مثلاً TDD یا CI.) اما برای این که بتونیم بین ارزشها و پرکتیسها پلی برقرار کنیم و به تعامل بین اونها پی ببریم، اکسپی به معرفی مجموعهای از اصول میپردازه که مثل چسبی بین ارزشها و پرکتیسها عمل میکنند. (مثلاً «منفعت متقابل» یا «کیفیت» یا «شکست».)
روی همرفته پی میبریم که اونچه باعث موفقیت تیم چابک میشه، ایجاد بالانس مناسبی از مجموعهی همهی این آیتمهاست که روی هم تاثیر افزاینده و یا حتی گاهاً متناقض دارند، و حذف بعضی از اونها احتمالاً باعث شکست کل فرایند توسعهی نرمافزار میشه. مثلاً «تست» و «CI» به دریافت سریعتر «فیدبک» کمک میکنه و …
این سطح از انسجام بین پرکتیسها رو در متدهای دیگه مشاهده نمیکنیم. حتی اسکرام صرفاً اخیراً به اضافهکردن مجموعهای از «ارزشها» به راهنمای رسمی اسکرام پرداخته.
کتاب کمحجم هست و به صورت مفید و مختصر نوشته شده، که هم نقطهی قوت و هم نقطهی ضعف محسوب میشه. از یک طرف سریعاً میتونید اون رو مرور کنید. از طرف دیگه به شرح عمیق پرکتیسها نمیپردازه که میتونه سوالات زیادی رو در ذهن خواننده باقی بگذاره. البته حالا بعد از گذشت بیش از ۲۰ سال از نسخهی اول اکسپی، منابع خوبی در اینترنت در مورد نحوهی اجرای پرکتیسهای اکسپی وجود داره.
یک مسئلهی دیگه هم در مورد اکسپی و این کتاب این هست که مسلطشدن به فرایند در ابتدا کمی دشوار و زمانبر هست، در قیاس با فرایندهایی مثل اسکرام.
نکتهی دیگهای که برای من کتاب رو خیلی ارزشمند میکنه، پرداختن به مسائل انسانی در کنار مسائل فنی هست که در این سطح نظیرش در کتابها و متدولوژیهای دیگه کمتر دیده میشه. این گزیدهای از فصل اول کتاب هست:
XP is my attempt to reconcile humanity and productivity in my own practice of software development and to share that reconciliation. I had begun to notice that the more humanely I treated myself and others, the more productive we all became. The key to success lies not in self-mortification but in acceptance that we are people in a person-to-person business “.
“کتاب Planning Extreme Programming از آقایان کنت بک و فاولر در مورد برنامهریزی پروژه به روش XP. این کتاب به طور بنیادی به شرح این میپردازه که برنامهریزی چیه و چرا برنامهریزی میکنیم و در روشهای چابک برنامهریزی چطوری کار میکنه. موضوعاتی مثل برنامهریزی رلیز و ایتریشن، نوشتن استوریها و تخمین اونها، این که اصلاً تخمین به چه معنی هست و چرا و چگونه انجام میشه، و مسائل گوناگون پیرامون برنامهریزی، محتوای کتاب رو تشکیل میده.
کتاب نسبتاً کمحجم هست و قلم شیرینی داره. و در این دور و زمونه که دید خیلیها نسبت به تخمین در توسعهی نرمافزار منفی هست، به نظرم میتونه خیلی مفید باشه. 🙂
البته بنده به شخصه توصیه میکنم که به غیر از خوندن این کتاب، دیدگاههایی که متد کانبان به مقولهی برنامهریزی داره رو مکمل این کتاب کنید. و صد البته دیدگاههای دیگهای که در کتب و مقالات دیگه اومده در کنار هم میتونه دید خیلی خوبی نسبت به مقولهی برنامهریزی بده. خلاصه این که به قول اون جملهی معروف از میاموتو موزاشی:
Do not develop an attachment to any one weapon or any one school of fighting.”
“کتاب The Clean Coder: A Code of Conduct for Professional Programmers کتابی عالی از رابرت سی مارتین که به شرح رفتار حرفهای برنامهنویسان میپردازه. این رو با کتاب Clean Code از همین نویسنده اشتباه نگیرید. کتاب Clean Code که کتاب خوبی هم هست و دوستان معرفی کردند، بیشتر به تکنیکهای کدنویسی میپردازه. اما کتاب The Clean Coder بیان میکنه که یک برنامهنویس برای این که حرفهای باشه، چه رفتارها و عادتهایی رو در خودش پرورش میده.
موضوعات کتاب شامل عادتهای کدنویسی، تمرینهای روزمره، «نه گفتن» و «بله گفتن» به مدیران (!)، کار تیمی، رفتارهای محیط کار، مدیریت زمان و مدیریت فشار، اشتباهات برنامهنویسی، تخمین و ماهیت و تکنیکهای تخمین، بعضی پرکتیسهای مهندسی و … هست.
حجم کتاب کم هست و داستانهایی که از تجربهی شخصی نویسنده بیان میشه، خوندنش رو دلپذیر میکنه. به شدت به همگان توصیه میشه.”
گروه متدهای چابک:
برای عضویت در گروه متدهای چابک، از این آدرس استفاده نمایید.
دیدگاهتان را بنویسید