پیشگفتار

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


اهداف

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


مخاطبان

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

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


فرایند

ایده‌ی این کتاب زمانی شکل گرفت که وب‌سایت Stickyminds.com در سال ۲۰۰۵ از «دیو» خواست مقاله‌ای درباره‌ی مهارت‌ورزی نرم‌افزار بنویسد.
از آنجا که دیو در آن زمان خودش را یک «شاگرد باتجربه» می‌دانست، تنها موضوعی که راحت درباره‌اش می‌نوشت، شاگردی بود.
او شروع کرد به فکر کردن درباره‌ی اینکه در این باره چه می‌خواهد بگوید.
در همان دوران، نوشته‌ای از برنامه‌نویسی به نام «کریس موریس» خواند که نقل‌قولی از نوازنده‌ی گیتار «پت مثنی» داشت —
و بذر زبان الگوها (pattern language) با مفهوم «بدترین بودن» در ذهنش کاشته شد.

این بذر خیلی زود از وبلاگ دیو به یک ویکی خصوصی منتقل شد که برای سامان‌دهی الگوهای اولیه از آن استفاده می‌کرد.
الگوهای اولیه از مسیر شغلی دیو بین سال‌های ۲۰۰۰ تا ۲۰۰۵ استخراج شده بودند.
اما چون الگو فقط زمانی معنا دارد که راه‌حل مشترکی برای مسئله‌ای مشترک باشد،
دیو شروع کرد به گرفتن بازخورد از سه مسیر:
۱. انتشار عمومی الگوها در وب‌سایتش و دریافت نظرات کاربران.
۲. مصاحبه (عمدتاً از طریق ایمیل) با چهره‌های شناخته‌شده‌ی دنیای توسعه نرم‌افزار برای دریافت نظرشان.
۳. مصاحبه با برنامه‌نویسان کم‌تجربه برای سنجش الگوها در برابر تجربه‌های واقعی‌شان.

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

ما (دیو و اید) با افراد مختلف از استرالیا تا هند و سوئد مصاحبه کردیم.
محیط گفت‌وگوها نیز بسیار متنوع بود — از نظرات در LiveJournal گرفته تا مصاحبه‌ای در کلیسایی زیبا که در قلب منطقه‌ی مالی لندن، در اثر بمباران ویران شده بود.

در همان زمان، افرادی چون «لوران بوساویت»، «داراگ فارل» و «کرایگ پارکینسون» با جسارت این مطالب را در محیط‌های آموزشی مانند coding dojo، کارگاه‌ها و boot campها به کار بردند و بازخوردشان را به ما رساندند.

در اواخر ۲۰۰۵، ما گروهی برای بررسی الگوهایمان در کارگاه Pattern Languages of Programs (PLoP) برگزار کردیم.
در آنجا توانستیم کارمان را به نویسندگان باتجربه‌ی الگو (که به آن‌ها shepherd گفته می‌شود) ارائه دهیم،
بازخورد بگیریم و ادعاهایمان را در برابر تجربه‌ی آنان محک بزنیم.

در همان زمان، «مری تریزلر» از انتشارات O’Reilly با ما تماس گرفت و تشویق‌مان کرد که کار را ادامه دهیم.
او در ویرایش کمک‌مان کرد، و دو سال بعد قراردادی برای چاپ کتاب بستیم.
در این مدت با ده‌ها همکار از طریق ایمیل، گروه‌های کاربری، کنفرانس‌ها و حتی ناهارهای کاری درباره‌ی الگوها صحبت کردیم و همچنان از جامعه‌ی توسعه‌دهندگان بازخورد می‌گیریم (در سایت apprenticeship.oreilly.com).


نتیجه

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


سازمان‌دهی (Organization)

الگو یا Pattern، توصیفی نام‌دار از یک راه‌حل تکرارشونده برای مسئله‌ای در یک زمینه‌ی خاص است.
این توصیف باید به خواننده درک عمیقی از مسئله بدهد تا بتواند یا همان راه‌حل را در موقعیت خودش به‌کار گیرد،
یا تصمیم بگیرد که آن الگو برای موقعیت او مناسب نیست.

این کتاب از چند فصل اصلی تشکیل شده است که هر فصل شامل مجموعه‌ای از الگوهای مرتبط است.
نام الگوها با حروف بزرگ نوشته شده (مثلاً Breakable Toys) و معمولاً به الگوهای مرتبط نیز ارجاع داده می‌شود.
هر فصل، الگوهایش را به‌هم می‌بافد، در ابتدای فصل مقدمه‌ای درباره‌ی موضوع ارائه می‌دهد
و در پایان جمع‌بندی‌ای از مفاهیم همان فصل دارد.
مقدمه‌ی کتاب، زمینه‌ی کلی زبان الگوها را مشخص می‌کند
و نتیجه‌گیری پایانی، تصویری کلی از مهارت، شاگردی، و استادی در حرفه‌ی ما ارائه می‌دهد.


ساختار الگو (Pattern Form)

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

الگوهای ما همگی از چهار بخش تشکیل شده‌اند: زمینه (Context)، مسئله (Problem)، راه‌حل (Solution)،
و یک یا چند اقدام (Actions).


فلسفه‌ی به‌کارگیری الگوها

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

بیشتر الگوهای ما با بخشی به نام «همچنین ببینید (See Also)» پایان می‌یابند
که به شماره‌ی صفحه‌ی الگوهای مرتبط اشاره می‌کند.
این بخش قرار است تو را از خواندن خطی کتاب دور کند
و به خوانشی آزاد و سیال سوق دهد تا روابط میان الگوهای مختلف را عمیق‌تر درک کنی.


کاربرد (Usage)

«یک زبان الگو به هر فرد این توان را می‌دهد که بی‌نهایت ساختمان تازه و منحصربه‌فرد بسازد،
همان‌طور که زبان گفتاری او به وی اجازه می‌دهد بی‌نهایت جمله‌ی تازه بسازد.»
کتاب The Timeless Way of Building، ص ۱۶۷

هدف ما از این پروژه، ساختن زبانی از الگوهاست تا بتوانی مسیر شاگردی و رشد حرفه‌ای خودت را تعریف کنی.
ما نمی‌توانیم زمینه‌ی دقیق زندگی یا کار تو را بدانیم، بنابراین هنگام استفاده از هر الگو،
به زمینه (Context) و بیان مسئله (Problem) آن توجه کن تا ببینی آیا به موقعیت تو می‌خورد یا نه.


تعامل میان الگوها

الگوها با یکدیگر در ارتباط‌اند و می‌توانند ترکیب شوند تا تجربه‌ای عمیق‌تر بسازند.
برای مثال، الگوی Find Mentors (یافتن راهنما) به‌تنهایی بسیار قدرتمند است،
اما اگر آن را با Rubbing Elbows (هم‌نشینی با استادان) ترکیب کنی، اثرش چند برابر می‌شود.

در مقابل، الگوی Expose Your Ignorance (آشکار کردن نادانی خود)
به‌شدت وابسته به الگوهای پشتیبان مانند Confront Your Ignorance (روبرو شدن با نادانی خود)
و Retreat Into Competence (بازگشت به مهارت‌های پایه) است
و برای استفاده‌ی موفق به ظرافت و آگاهی بیشتری نیاز دارد.

مثل تمام زبان‌های الگو، باید مراقب باشی در استفاده از آن‌ها افراط نکنی.
به دنبال بهانه نباش که همه‌ی الگوها را به کار ببری؛
بلکه مجموعه‌ای را انتخاب کن که دقیقاً برای وضعیت کنونی‌ات مناسب است.


نحوه‌ی خواندن کتاب

لازم نیست این کتاب را از ابتدا تا انتها و به ترتیب بخوانی.
دیو هنگام خواندن A Pattern Language اثر «کریستوفر الکساندر»، از وسط شروع کرد
و از پیوند میان الگوها مسیر خودش را دنبال کرد — تجربه‌ای که یادگیری را برایش عمیق‌تر و لذت‌بخش‌تر کرد.

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

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

می‌توانی مثل وب‌گردی با آن رفتار کنی:
از پیوندی به پیوند دیگر بروی، گاهی حواست پرت شود، و هرگز مطمئن نباشی که همه‌چیز را خوانده‌ای —
و این کاملاً اشکالی ندارد.

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

برخی نیز ممکن است نیاز داشته باشند کتاب را دوبار بخوانند:
یک‌بار مرور سریع برای دیدن کلیت الگوها، و بار دوم برای درک ارتباطات عمیق‌تر میان آن‌ها —
و این روش هم کاملاً درست است.

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


استفاده از مثال‌های کد

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

برای نمونه:

سپاس‌گزاری از نویسندگان لازم نیست، اما قدردانی همیشه خوشایند است.
اگر خواستی، این گونه ذکر منبع کن:

«Apprenticeship Patterns نوشته‌ی David H. Hoover و Adewale Oshineye.
حق نشر © ۲۰۱۰ دیوید اچ. هوور و ادواله اوشینیه. ISBN: 978-0-596-51838-7»

اگر احساس می‌کنی استفاده‌ات از مثال‌های کد خارج از محدوده‌ی استفاده‌ی منصفانه است،
می‌توانی با ایمیل permissions@oreilly.com تماس بگیری.


Safari® Books Online

Safari Books Online یک کتابخانهٔ دیجیتال «درخواست‌محور» است که به شما اجازه می‌دهد میان بیش از 7,500 کتاب و ویدئوی مرجع در حوزهٔ فناوری و خلاقیت جست‌وجو کنید و سریعاً پاسخ‌ موردنیازتان را بیابید.
با اشتراک، می‌توانید هر صفحه‌ای از کتابخانه را آنلاین بخوانید و هر ویدئویی را تماشا کنید. کتاب‌ها را روی تلفن همراه و دستگاه‌های موبایل بخوانید. به عناوین جدید پیش از انتشار چاپی دسترسی داشته باشید، به نسخه‌های در حال تولید به‌صورت انحصاری دسترسی پیدا کنید و برای نویسندگان بازخورد بفرستید. نمونه‌کدها را کپی/پیست کنید، موارد محبوب‌تان را سازمان‌دهی کنید، فصل‌ها را دانلود کنید، بخش‌های کلیدی را نشانه‌گذاری کنید، یادداشت بسازید، صفحات را چاپ کنید و از ده‌ها قابلیت صرفه‌جویانهٔ دیگر بهره ببرید.
O’Reilly Media این کتاب را در سرویس Safari Books Online بارگذاری کرده است. برای دسترسی دیجیتال کامل به این کتاب و دیگر عناوین مشابه از O’Reilly و ناشران دیگر، رایگان در این نشانی ثبت‌نام کنید: http://my.safaribooksonline.com.


راه‌های تماس با ما

می‌توانید با Dave از طریق ایمیل dave.hoover@gmail.com تماس بگیرید یا برای دیدن فعالیت‌هایش به صفحهٔ خانگی او سر بزنید.
می‌توانید با Ade از طریق ایمیل ade@oshineye.com تماس بگیرید. وب‌سایت او به عکس‌ها، نوشته‌ها و کد متن‌بازش ارجاع می‌دهد.

لطفاً نظرات و پرسش‌های مرتبط با این کتاب را به ناشر ارسال کنید:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
800-998-9938 (ایالات متحده یا کانادا)
707-829-0515 (بین‌المللی یا محلی)
707-829-0104 (فکس)

برای این کتاب یک صفحهٔ وب داریم که در آن خطاهای چاپی، مثال‌ها و اطلاعات تکمیلی را فهرست می‌کنیم:
http://oreilly.com/catalog/9780596518387/

برای ارسال نظر یا طرح پرسش‌های فنی دربارهٔ کتاب، ایمیل بزنید به: bookquestions@oreilly.com

برای اطلاعات بیشتر دربارهٔ کتاب‌ها، کنفرانس‌ها، مراکز منبع و شبکهٔ O’Reilly به وب‌سایت ما سر بزنید:
http://www.oreilly.com


سپاسگزاری‌های دیو (Dave’s Acknowledgments)

در آغاز باید از کسانی تشکر کنم که نخستین فرصت‌ها را برای ورود من به دنیای برنامه‌نویسی فراهم کردند.
«ایرو شاپیرو»، مدیرعامل شرکت Edventions، در آوریل ۲۰۰۰ در پایان مصاحبه‌ام مرا استخدام کرد.
مدتی بعد مرا با «استیو بونِز»، مدیر فنی Edventions و مدیرعامل Risetime Technologies آشنا کرد،
و هر دوی آن‌ها راهنمای من در نخستین گام‌هایم در یادگیری Perl و برنامه‌نویسی بودند.
وقتی Edventions در آوریل ۲۰۰۱ سرنوشت بسیاری از استارت‌آپ‌های دات‌کام را پیدا کرد و از بین رفت،
استیو برای من در انجمن پزشکی آمریکا (AMA) توصیه‌نامه‌ای نوشت و من سه سال بعدی را در آنجا گذراندم.
همان شب پس از استخدامم به ایرو گفتم:
«ممنون ایرو، که به یه غریبه مثل من اعتماد کردی.»

دو نفر در AMA باعث شدند از زبان برنامه‌نویسی اولم فراتر بروم:
«جان دینکووسکی» استعدادم را دید و مرا برای پروژه‌های اولیه‌ی J2EE به تیمش آورد —
با هزینه‌ی سیاسی نه‌چندان کم برای خودش.
او در تمام ۱۸ ماه حضورم در آن بخش، منبع انگیزه و اعتمادبه‌نفس بود.
«داگ فدورچاک»، سرپرست مستقیمم، آزادی لازم را داد تا ایده‌ی Extreme Programming را به مدیران بالادستی بفروشم
و نخستین پروژه‌ی XP در AMA را اجرا کنم.
از هر دو نفر، به‌خاطر اینکه به یک برنامه‌نویس بی‌تجربه اما پرشور فرصت دادند، سپاسگزارم.

اگر بخواهم از یک نفر نام ببرم که بیشترین تأثیر را بر مسیر من گذاشت،
بی‌تردید آن فرد وایت سادرلند است.
در سال ۲۰۰۲ در گروه Chicago Agile Developers (ChAD) با او آشنا شدم،
زمانی که رهبر گروه بود. از او خواستم «شاگردش» شوم، و با وجود مشغله‌ زیادش —
مشاوره‌ی اجایل، تدریس موسیقی در دانشگاه، و پدر چهار فرزند بودن — پذیرفت گاه‌به‌گاه با من دیدار کند.
راهنمایی‌هایش هدیه‌ای بی‌قیمت بود و اعتمادبه‌نفسی به من داد
تا از AMA جدا شوم و به شرکت‌هایی مثل Object Mentor و ThoughtWorks بپیوندم.

از ThoughtWorks هم سپاسگزارم که دسترسی مرا به جامعه‌ای بزرگ از افراد علاقه‌مند به این پروژه فراهم کرد،
به‌ویژه همکارم ادواله اوشینیه (Adewale Oshineye).
از مارتین فاولر، دانشمند ارشد شرکت، برای وقت‌گذاشتن و اشتراک تجربه‌هایش در نویسندگی متشکرم.
ThoughtWorks هزینه‌ی سفرم به آتلانتا را برای سخنرانی درباره‌ی Apprenticeship Patterns در سال ۲۰۰۵ پرداخت کرد.
از اوبی فرناندز بابت دوستی، تشویق‌ها، دعوت به کنفرانس، و حتی میزبانی در خانه‌اش وقتی پروازم را از دست دادم، ممنونم.
از لوران بوساویت برای ارائه‌ی الگوها در XP France و ترجمه‌ی متن سپاسگزارم،
و از داراگ فارل برای ارائه‌ی آن در Geeknight سیدنی و ارسال ویدئو.
از لیندا رایزینگ که من و اَد را به کنفرانس PLoP 2005 دعوت کرد، و ThoughtWorks که هزینه‌ی پرواز اد از لندن به شیکاگو را پرداخت، نیز سپاسگزارم.

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

از دوستان و همکاران بسیاری سپاسگزارم که با ما مکاتبه کردند و ایده‌ها و تجربه‌هایشان را به اشتراک گذاشتند:
آدام ویلیامز، کریس مک‌ماهون، داراگ فارل، دِسی مک‌آدام، الیزابت کیو، امرسون کلارک، جیک اسکراگز، کراگن سیتاکر، ایوان مور، جو والنز، جاناتان وایس، کنت شنایت، مارتن گوستافسون، مت ساویج، مایکا مارتین، مایکل هیل، میشل پیس، پاتریک کوا، پاتریک موریسون، راوی موهان، استیون بیکر، استیو توک، تیم بیکن، پاول پاگل، انریکه کومبا ریپن‌هاوزن، نونو مارکیز، استیو اسمیت، دنیل سبان، برایان برزیل، متیو راسل، راس مایلز و رف کون.

در سال ۲۰۰۸ وب‌سایت apprenticeship.oreilly.com را راه‌اندازی کردیم
و الگوها را برای دریافت بازخورد منتشر کردیم.
از تمام مشارکت‌کنندگان — از جمله جولی باملر، باب بینی، آنتونی مارکانو، کن مک‌نامارا، تام نووتنی، ویکی رید، مایکل رولف، جوزف تیلور
و به‌ویژه مایکل هانگر — برای بازخوردهای دقیق و بررسی‌های مکرر نسخه‌های اولیه تشکر می‌کنم.

بخش زیادی از این کتاب در قطار Metra Union Pacific West Line بین مرکز شیکاگو و حومه‌های غربی نوشته شد.
از تمام مسافرانی که در سکوت به مطالعه‌ی خود مشغول بودند و اجازه دادند من هم کتابم را بنویسم، سپاسگزارم.

در سال ۲۰۰۶ به Obtiva پیوستم، زمانی که کوین تیلور قانعم کرد
به‌جای پیمانکار، چهارمین کارمند شرکت شوم — تصمیمی عالی که در بسیاری جهات نتیجه داد.
از کوین برای حمایت از ایده‌های خامم، واگذاری سهمی از شرکت،
جمع‌کردن خراب‌کاری‌هایم، و رسیدگی به امور کم‌زرق‌وبرق اما حیاتی تجارت سپاسگزارم.
یکی از ایده‌هایی که کوین اجازه داد پیگیری کنم، تأسیس Software Studio و جذب شاگردانی بود
که بتوانیم آن‌ها را به توسعه‌دهندگان ارشد تبدیل کنیم.
از نخستین سه شاگردمان — برایان تاتنال، جوزف لدی، و نیت جکسون — سپاسگزارم
که سختی‌های آزمون و خطاهای اولیه‌ی مرا تحمل کردند،
و همچنین از سه شاگرد بعدی — کالین هریس، لیا ولتی-ریگر، و ترنر کینگ
به خاطر اشتیاق، پشتکار و میلشان به رشد در شرایط نه‌چندان آسان.

از مری تریزلر سپاسگزارم که از ابتدا مشوق انتشار این پروژه بود.
او نخستین کسی بود که الگوهای اولیه‌مان را در سال ۲۰۰۵ خواند و با وجود آن‌که خودش برنامه‌نویس نبود،
با آن‌ها ارتباط برقرار کرد. مری، از صبر و ایمان تو به ما نویسندگان تازه‌کار صمیمانه متشکرم.

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

من برنامه‌نویسی را در ۲۶ سالگی آغاز کردم، اما زودتر خانواده تشکیل دادم —
دخترم در ۲۴ سالگی‌ام و درست پیش از پایان تحصیلات تکمیلی به دنیا آمد.
اگرچه شروع زندگی خانوادگی در آن شرایط دشوار بود،
فرزندانم به من تمرکز و احساس مسئولیت عمیقی دادند.
از روز تولد رز در ۱۹۹۹ تاکنون حتی یک روز نبوده که بتوانم بیکار باشم —
و این برای کسی که تازه کارش را آغاز کرده، نیروی محرک بزرگی است.
با دیدن رشد و یادگیری آن‌ها، من نیز به یاد گرفته‌ام یادگیری را هرگز متوقف نکنم.
رز، ریکی و چارلی، از اینکه بی‌قید و شرط دوستم دارید و با «فرزند چهارم‌تان» — لپ‌تاپ بابا — کنار آمدید، متشکرم.
حالا که کتاب تمام شده، قول می‌دهم کمتر آن را ببینید.

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

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


سپاسگزاری‌های اَد (Ade’s Acknowledgments)

پیش از هر چیز، باید از تمام کسانی تشکر کنم که دیو از آن‌ها تشکر کرده است؛
زیرا اگر آن‌ها نبودند، دیو امروز در این جایگاه نبود — و در نتیجه من هم در این پروژه حضور نداشتم.

از برنامه‌نویسان پراگماتیک (Andy و Dave) سپاسگزارم،
که با الهام خود مرا با ویکی C2 و گروه Extreme Tuesday Club (XTC) آشنا کردند.
اگر آن تأثیرها نبود، من هرگز با ویکی Bookshelved اثر لوران بوساویت آشنا نمی‌شدم،
و وقتی دیو به شرکت ThoughtWorks پیوست، نمی‌دانستم او کیست.

البته اگر در یکی از شب‌های XTC در محل Old Bank of England،
«پاول همَنت» مرا به چالش نمی‌کشید تا دلیل مقاومت‌م در برابر پیوستن به ThoughtWorks را توضیح دهم،
احتمالاً هیچ‌گاه مشاور آن شرکت نمی‌شدم.
از تو ممنونم، پاول — حضور در ThoughtWorks درهای بسیاری را به رویم گشود.
برای نمونه، حمایت دیو فارلی (مدیر نوآوری وقت شرکت) باعث شد بتوانم به کنفرانس PLoP در «الرتون» بروم
و در آنجا برای نخستین‌بار با دیو حضوری ملاقات کنم.

کسانی که وقت گذاشتند تا درباره جزئیات مسیر شغلی‌شان برای این کتاب با ما گفت‌وگو کنند،
خودشان می‌دانند که چه لطف بزرگی کردند —
نمی‌توانم تک‌تک نام ببرم، اما از صمیم قلب سپاسگزارم.
همین تشکر را به مرورگران کتاب نیز مدیونم که وقت گذاشتند
و نشان‌مان دادند چطور این اثر را بهتر کنیم.

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

از رابرت کونیکسبرگ و ایو اندرسون برای بازخوردهای دقیق‌شان بر نسخه‌های اولیه‌ی دست‌نویس کتاب متشکرم.
همچنین از انریکه کومبا ریپن‌هاوزن سپاسگزارم
که طرح‌های اولیه‌ی OmniGraffle را برای ما ساخت؛
بدون کمک او، اکنون در حال تماشای نمودارهای بسیار زشت و خودکار تولیدشده با Graphviz بودید!

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

از مری تریزلر هم باید تشکر کنم که با وجود تمام تأخیرها،
به دیو و من اعتماد کرد و فرصت انتشار را به ما داد.
مری، یک دِین بزرگ به تو داریم.

و در نهایت، از پدر و مادرم ممنونم.
آن‌ها نخستین رایانه‌هایم را برایم خریدند
و سال‌ها پیش از آنکه خودم بفهمم، تشخیص دادند که باید برنامه‌نویس حرفه‌ای شوم.
اگر آن زمان به حرفشان گوش داده بودم، مسیرم کوتاه‌تر و ساده‌تر می‌بود.


بیانیهٔ «مهارت‌ورزی در نرم‌افزار» (Software Craftsmanship Manifesto)

یادداشت:
در مارس سال ۲۰۰۹، پس از بحث‌های طولانی در فهرست پستی software_craftsmanship،
بیانیهٔ زیر تدوین شد.


به عنوان هنرمندان و مهارت‌ورزان نرم‌افزار،
ما در تلاشیم تا سطح حرفه‌ای توسعهٔ نرم‌افزار را بالاتر ببریم —
با تمرین مداومِ این هنر و یاری به دیگران برای یادگیری آن.
در مسیر این کار، به ارزش‌های زیر دست یافته‌ایم:


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