گردآوری: یاسر کازرونی
پیشگفتار:
متن زیر خلاصهی بخشهایی از گفتگوی اعضای گروه تلگرامی «متدهای چابک» (Agile Methods) است.
گفتگو:
در گروه پیشنهاد شد که دوستان با همفکری هم یک فهرست از کتابهای ضروری برای مطالعهی تیمهای چابک تهیه کنند. موضوعاتی که تیمها برای رسیدن به سرآمدی فنی (Technical Excellence) بایستی به صورت جدی و عمیق مطالعه کنند.
———————–
محمد حسین:
کتاب The Art of Agile Development نوشتهی آقای جیمز شور را معرفی میکند. او دلیل این معرفی را متن روان کتاب میداند و این کتاب را به کسانی که بعد از خواندن چند متن کوتاه مثل بیانیه چابک و راهنمای اسکرام میخواهند با مفاهیم چابکی آشنایی عمیقتری پیدا کنند به عنوان اولین کتاب پیشنهاد میکند.
موضوع کتاب آشنایی با مفاهیم XP است و بدون اینکه تجربههای مدیریتی و فرهنگی را کم کند به مخاطب اهمیت تجربههای فنی را تشریح میکند. همچنین تاثیرات متقابل تجربههای فنی را فوقالعاده خوب تشریح میکند و به مخاطب توضیح میدهد که چابکی با یک یا دو تجربهی فنی به دست نمیآید و فقط با برنامهریزی اسپرینت و جلسه روزانه چابکی ایجاد نمیشود!
ایشان به شدت خواندن این کتاب را حتی برای باتجربهها پیشنهاد میکنند.
———————–
روحالله:
او به تیمهایی که مشغول توسعه نرمافزارهای سازمانی هستند توصیه میکند که برای دستیابی به سرآمدی فنی (Technical Excellence) حداقل یک کتاب درباره Domain Driven Design مطالعه کنند.
او در ادامه سه کتاب شاخص را در این زمینه معرفی میکند:
کتاب Domain-Driven Design: Tackling Complexity in the Heart of Software از اریک اوانس اولین کتابی است که در این زمینه نوشته شده است. در این کتاب، الگوهای تکنیکی و الگوهای استراتژیک را به خوبی توضیح داده شده است و کتاب مرجع محسوب میشود.
کتاب بعدی Implementing Domain-Driven Design نوشته ورنون است. این کتاب مکمل کتاب اوانس است. فرق مهم این کتاب با کتاب قبلی این است که به مباحث معماری CQRS میپردازد و از این نظر یک انسجام فکری در خواننده ایجاد میکند.
کتاب سوم Patterns, Principles, and Practices of Domain-Driven Design نوشته اسکات میلت است که جدیدترین کتاب در این زمینه محسوب میشود. این کتاب توانسته است بازخوردهای توسعهدهندگان و پیشنهادات آنها را مطرح کند و از کتابهای قبلی کاملتر به نظر میرسد.
ایشان در انتها پیشنهاد میکند که اگر فقط میخواهید یک کتاب را بخوانید و توسعهدهنده با زبانهای داتنتی هستید کتاب سوم را بخوانید و اگر توسعهدهنده جاوایی هستید کتاب دوم را بخوانید. هر جا هم نیاز به مطالعه عمیقتر داشتید کتاب اوانس رو بخوانید.
———————–
محمد حسین:
او کتاب ماندگار و کلاسیک Working Effectively with Legacy Code از مایکل فذرز را معرفی میکند. این کتاب درباره این است که چگونه در سیستمهای قدیمی (Legacy System) تغییر ایجاد کنیم و آنها را به سمت بهتر شدن سوق دهیم.
این کتاب مکمل دو کتاب دیگر یعنی کتاب Refactoring مارتین فاولر و کتاب Clean Code رابرت مارتین است که بایستی در هر تیمی که قرار است از یک سیستم موجود مدت طولانی نگهداری کند، مطالعه شود. البته کتاب فذرز از دو کتاب دیگر پیشرفتهتر است و بهتر است بعد از مطالعه آن دو کتاب دیگر خوانده شود تا خواننده درک بهتری از مطالب آن داشته باشد.
مارتین فولر در کتاب Refactoring به مبحث بازسازی کد میپردازد و فذرز دربارهی آماده کردن سیستم برای بازسازی کدها صحبت میکند. این موضوع از آن جهت حائز اهمیت است که بازنویسی کد بدون آزمون واحد خطرناک است و احتمالاً منجر به تولید باگ میشود؛ زیرا تا وقتی که پوشش آزمون صددرصد روی کُد نداشته باشیم، اطمینان نداریم تغییراتمان باعث ایجاد باگ شده است یا نه؟ از این رو فاولر در کتابش بازنویسی کد را با پشتیبانی آزمون واحد (Unit Test) توام میداند اما از طرفی به این سؤال هم جوابی نمیدهد که چگونه در سیستمی که از قبل موجود است آزمون واحد اضافه کنیم! او فرض میکند که سیستم از ابتدا با TDD توسعه یافته است.
این سؤالی است که مایکل فذرز به آن جواب میدهد. در کل میتوان گفت که موضوع کتاب ایشان این است که چگونه به کمک آزمونهای واحد، در یک سیستم موجود که آزمون واحد ندارد تغییر ایجاد کنیم! از این نظر فذرز آزمونهای واحد را به چاقوی جراحی تشبیه میکند؛ او میگوید: «همانطور که جراحی کردن نیاز به ابزار حرفهای یعنی چاقوی مخصوص جراحی دارد، تغییر دادن در سیستم موجود نیاز به ابزار حرفهای دارد که آزمون واحد است». فذرز حتی میگوید: «تغییر دادن در یک سیستم موجود بدون آزمون واحد کاری غیرحرفهای هست! چون ممکن است منجر به باگ شود.»
این کتاب پر از مثالهایی است که مشخص است از پروژههای واقعی گرفته شده است یا لااقل شبیه پروژههای واقعی هستند. این کتاب قرار است به خواننده یاد بدهد که چگونه سیستمهایی که طراحی بدی دارند و یا کدهای کثیفی دارند را اصلاح کند. اکثر مثالهای کتاب با زبانهای جاوا و ++C است.
این کتاب از سه بخش اصلی تشکیل میشود که هر کدام شامل چند فصل است:
در بخش اول مفاهیم کلی را مطرح میکند (که خلاصهای از آن را آوردیم) و مفاهیمی مثل آزمون واحد را تعریف میکند.
در بخش دوم که بخش اصلی کتاب است برای حالتهای مختلف راهنماییهایی برای تغییر کُد ارائه میدهد. مثلاً «من نمیتوانم این متد را در آزمون فراخوانی کنم» یا «من میخواهم یک تغییر بدهم ولی نمیدانم چه تستهایی باید بنویسم که مکمل هم باشند».
در بخش سوم هم یک کاتالوگ از تکنیکهای وابستگیشکنی (Dependency Breaking) را مطرح میکند که شبیه تکنیکهای بازنویسیهای فاولر است با این تفاوت که کمریسک است و هدفش صرفاً شکستن وابستگیهای داخل کُد برای آسان شدن نوشتن آزمون واحد است؛ تازه بعد از آن میتوان بازنویسیهای کتاب فاولر را انجام داد.
در انتها پیشنهاد میشود از قبل درباره آزمون واحد خودکار و TDD لااقل مطالعه مختصری داشته باشید. مایکل فذرز که نویسنده کتاب است، سالها تجربه کار روی بهتر کردن کد سیستمهای موجود در تیمها را دارد و به عنوان متخصص این حوزه شناخته میشود.
گروه متدهای چابک:
برای عضویت در گروه متدهای چابک، از این آدرس استفاده نمایید.
دیدگاهتان را بنویسید