دیباچهٔ ویرایش دوم
در دههٔ ۱۹۹۰ با شرکتهایی کار میکردیم که پروژههایشان به مشکل خورده بود. خودمان را در موقعیتی میدیدیم که مدام همان حرفها را تکرار میکردیم: شاید بهتر باشد قبل از انتشار آن را آزمایش کنید؛ چرا کد فقط روی کامپیوتر مری کامپایل میشود؟ چرا هیچکس از کاربران سؤال نپرسیده است؟
برای صرفهجویی در زمان با مشتریان جدید، شروع کردیم به یادداشتبرداری. و آن یادداشتها شد «برنامهنویس عملگرا». برخلاف انتظارمان، کتاب ظاهراً با بسیاری از خوانندگان ارتباط برقرار کرد و در این ۲۰ سال همچنان محبوب ماند.
اما ۲۰ سال در دنیای نرمافزار چندین نسل محسوب میشود. اگر یک برنامهنویس از سال ۱۹۹۹ را در یک تیم امروزی رها کنید، در این دنیای عجیب و تازه به زحمت میافتد. و همینطور دنیای دههٔ ۹۰ برای برنامهنویس امروز غریب است. اشارههای کتاب به چیزهایی مثل CORBA، ابزارهای CASE و حلقههای اندیسدار نهایتاً «بامزه» و احتمالاً گیجکننده بودند.
در عین حال، ۲۰ سال هیچ تأثیری بر عقل سلیم نگذاشته است. فناوری تغییر کرده، اما انسانها نه. شیوهها و رویکردهایی که آن زمان ایدهٔ خوبی بودند، امروز هم ایدهٔ خوبی هستند. این جنبههای کتاب خوب پیر شدهاند.
بنابراین وقتی زمان ساختن ویرایش بیستمین سالگرد فرا رسید، باید تصمیم میگرفتیم. میتوانستیم فقط فناوریهای ذکرشده را بهروز کنیم و کار را تمامشده بدانیم. یا اینکه دوباره به مفروضات پشت شیوههای پیشنهادیمان نگاه کنیم، با بهرهگیری از دو دهه تجربهٔ اضافه.
در نهایت، هر دو کار را انجام دادیم.
در نتیجه، این کتاب چیزی شبیه «کشتی تزئوس» شده است. تقریباً یکسوم موضوعات کتاب کاملاً جدید است. از باقی مطالب، بخش زیادی یا جزئاً یا کاملاً بازنویسی شدهاند. قصد ما این بود که همهچیز شفافتر، مرتبطتر و تا حد امکان ماندگارتر باشد.
برخی تصمیمهای دشوار هم گرفتیم. ضمیمهٔ «منابع» را حذف کردیم؛ هم به این دلیل که بهروز نگهداشتنش عملاً ناممکن بود، و هم اینکه امروزه جستوجوی آنچه میخواهید بسیار سادهتر است. موضوعات مرتبط با همزمانی را بازتنظیم و بازنویسی کردیم، با توجه به فراوانی سختافزارهای موازی و کمبود ابزارهای خوب برای مواجهه با آن. محتوا اضافه کردیم تا تغییر نگرشها و محیطها را منعکس کنیم—از جنبش چابک که خودمان در راهاندازیاش نقش داشتیم، تا افزایش محبوبیت الگوهای برنامهنویسی تابعی و نیاز روزافزون به توجه به حریم خصوصی و امنیت.
جالب اینکه بحثهای ما دربارهٔ محتوای این نسخه بسیار کمتر از زمانی بود که نسخهٔ نخست را نوشتیم. هردوی ما حس میکردیم تشخیص چیزهای مهم آسانتر شده است.
در هر حال، نتیجهاش همین کتاب است. امیدواریم از آن لذت ببرید. شاید برخی شیوههای جدید را بپذیرید. شاید تصمیم بگیرید بعضی پیشنهادهای ما اشتباهاند. در کارتان درگیر شوید. بازخورد بدهید. اما مهمتر از همه، یادتان باشد که باید از این کار لذت ببرید.
ساختار کتاب
این کتاب مجموعهای از موضوعات کوتاه است. هر موضوع مستقل است و به یک مضمون مشخص میپردازد. ارجاعهای متعددی میان موضوعات خواهید یافت که به قرار گرفتن هر موضوع در زمینهٔ مناسب کمک میکند. آزادید موضوعات را به هر ترتیبی بخوانید—این کتابی نیست که لازم باشد از ابتدا تا انتها بخوانید.
گاه به جعبههایی برمیخورید که با «نکتهٔ n» مشخص شدهاند (مثل نکتهٔ ۱: «به حرفهٔ خود اهمیت بده»). علاوه بر تأکید بر نکات متن، باور داریم این نکتهها خودشخصیت دارند—ما هر روز با آنها زندگی میکنیم. خلاصهٔ تمام نکتهها را روی کارت جداشدنی پشت جلد پیدا خواهید کرد.
در جاهایی که مناسب بوده، تمرینها و چالشهایی هم آوردهایم. تمرینها معمولاً پاسخهای نسبتاً مستقیم دارند، درحالیکه چالشها بازتر هستند. برای اینکه برداشت ما را بدانید، پاسخ تمرینها را در یک ضمیمه آوردهایم، هرچند برای اغلب آنها تنها یک پاسخ درست وجود ندارد. چالشها میتوانند مبنای گفتوگوی گروهی یا کار مقالهای در دورههای پیشرفتهٔ برنامهنویسی باشند.
فهرستنامهای کوتاه نیز آوردهایم که کتابها و مقالههایی را شامل میشود که صراحتاً به آنها ارجاع دادهایم.
نامها و اصطلاحات
در جایجای کتاب به اصطلاحات خاصی برمیخورید—گاهی واژههای کاملاً انگلیسی که معنای فنی گرفتهاند و گاهی واژههای ساختهشدهای که دانشمندان کامپیوتر به زبان تحمیل کردهاند. بار نخست که از این اصطلاحات استفاده میکنیم، تلاش میکنیم آن را تعریف کنیم یا دستکم معنایش را روشن سازیم. بااینحال مطمئنیم برخی از این اصطلاحات از قلم افتادهاند؛ و برخی دیگر، مثل «شیء» یا «پایگاهدادهٔ رابطهای»، آنقدر رایجاند که تعریف دوبارهشان خستهکننده میشود.
اگر به اصطلاحی برخوردید که برایتان ناآشناست، از آن نگذرید. وقت بگذارید و معنایش را پیدا کنید—شاید در وب، شاید در یک کتاب علوم کامپیوتر. و اگر فرصت داشتید، ایمیلی برایمان بفرستید و گلایه کنید تا در نسخهٔ بعدی تعریف آن را بیفزاییم.
با این اوصاف، تصمیم گرفتیم از دانشمندان کامپیوتر هم انتقام کوچکی بگیریم. گاهی برای مفاهیمی اصطلاحات خوبی وجود دارد، اما ما تصمیم گرفتهایم آنها را نادیده بگیریم. چرا؟ چون آن اصطلاحات معمولاً به یک حوزهٔ خاص یا یک مرحلهٔ خاص از توسعه محدودند. و یکی از اصول بنیادین این کتاب این است که بیشتر تکنیکهایی که توصیه میکنیم جهانشمولاند: مثلاً «ماژولار بودن» هم به کد مربوط است، هم طراحی، هم مستندسازی، و هم سازماندهی تیم. هرگاه میخواستیم از اصطلاح رایج استفاده کنیم اما در زمینهای گستردهتر، نتیجه مبهم میشد—اصطلاح بار معنایی گذشتهاش را با خود میآورد. آنوقت بود که ما هم به زوال زبان کمک کردیم و اصطلاحات تازهای ساختیم.
کد منبع و دیگر منابع
بیشتر کدهای موجود در این کتاب از پروندههای منبع قابلکامپایل استخراج شدهاند که در وبسایت ما قابل دانلود هستند.
در همانجا پیوندهایی به منابع مفید، بهروزرسانیهای کتاب، و اخبار مربوط به دیگر فعالیتهای «برنامهنویس عملگرا» خواهید یافت.
ارسال بازخورد
خوشحال میشویم از شما بشنویم. ایمیل ما:
سپاسگزاریهای ویرایش دوم
در این ۲۰ سال هزاران گفتوگوی جذاب دربارهٔ برنامهنویسی داشتهایم—در کنفرانسها، دورهها، و حتی گاهی در هواپیما. هرکدام از این گفتگوها به درک ما از فرایند توسعه افزوده و در بهروزرسانی این نسخه سهم داشتهاند. از همهٔ شما سپاسگزاریم (و لطفاً همچنان وقتی اشتباه میکنیم به ما بگویید).
از شرکتکنندگان در فرایند بتای کتاب نیز سپاسگزاریم. پرسشها و نظرات شما به ما کمک کرد توضیحات را بهتر کنیم.
پیش از مرحلهٔ بتا، کتاب را با چند نفر برای اظهار نظر به اشتراک گذاشتیم. از Vicky Brasseur، جف لنگر، و کیم شرایر برای نظرات دقیقشان سپاسگزاریم؛ و از خوزه والیم و نیک کاتبرت برای بازبینیهای فنیشان.
از ران جفریز هم سپاسگزاریم که اجازه داد از مثال سودوکو استفاده کنیم. همچنین قدردان دوستانمان در Pearson هستیم که پذیرفتند این کتاب را به روش خودمان بسازیم.
و در نهایت، سپاس ویژه از همهٔ «برنامهنویسان عملگرا» که در این ۲۰ سال برنامهنویسی را برای همه بهتر کردهاند. به امید بیست سال دیگر.