پیشگفتار
بهیاد دارم زمانی را که دیو و اندی نخستینبار دربارهٔ نسخهٔ جدید این کتاب توییت کردند. خبر بزرگی بود. واکنش جامعهٔ برنامهنویسی را با هیجان تماشا کردم. خطوط زمانیام پر از انتظار شد. پس از بیست سال، برنامهنویس عملگرا همچنان بهاندازهٔ روز نخست مرتبط و تأثیرگذار است.
اینکه کتابی با چنین پیشینهای چنین واکنشی برانگیزد، معنای بسیاری دارد. من این امتیاز را داشتم که نسخهٔ منتشرنشدهای را برای نوشتن این پیشگفتار بخوانم، و در همانجا فهمیدم چرا چنین سروصدایی ایجاد کرده است. گرچه کتابی فنی است، اما فقط «کتاب فنی» نامیدن آن کملطفی است. کتابهای فنی معمولاً هراسانگیزند؛ پر از واژههای بزرگ، اصطلاحات غریب، و مثالهایی پیچیده که ناخواسته باعث میشوند احساس کنید نادان هستید. هرچه تجربهٔ نویسنده بیشتر باشد، آسانتر فراموش میکند یاد گرفتن مفاهیم تازه، آغازِ راه بودن، چه حسی دارد.
با وجود دههها تجربهٔ برنامهنویسی، دیو و اندی از پسِ چالش دشوار نوشتن با همان هیجان کسانی برآمدهاند که تازه این درسها را آموختهاند. از بالا به خواننده نگاه نمیکنند. فرض نمیکنند متخصص هستید. حتی فرض نمیکنند نسخهٔ نخست کتاب را خواندهاید. همانطور که هستید شما را میپذیرند—برنامهنویسانی که میخواهند بهتر شوند. صفحات این کتاب را صرف این میکنند که قدمبهقدم شما را به آنجا برسانند.
البته منصفانه است بگوییم که این کار را پیشتر نیز انجام داده بودند. نسخهٔ نخست پر از مثالهای ملموس، ایدههای تازه، و نکات کاربردی برای تقویت مهارتهای برنامهنویسی و پرورش ذهن برنامهنویسی بود؛ نکاتی که امروز هم کاربرد دارند. اما این ویرایش تازه دو بهبود عمده دارد.
اولی روشن است: برخی ارجاعات و مثالهای قدیمی کنار گذاشته شده و جای خود را به محتوای تازه و امروزی دادهاند. دیگر مثالهایی دربارهٔ loop invariant یا ماشینهای build نخواهید دید. دیو و اندی محتوای قدرتمند خود را نگه داشتهاند و اطمینان یافتهاند که درسها همچنان بیمزاحمت مثالهای تاریخگذشته منتقل میشود. ایدههای قدیمی مانند DRY را غبارروبی کردهاند و با لایهای تازه از پرداخت، دوباره درخشان کردهاند.
اما دومی چیزی است که این نسخه را واقعاً هیجانانگیز میکند. پس از نوشتن نسخهٔ نخست، فرصت داشتند دربارهٔ آنچه میخواستند بیان کنند، پیامهایی که میخواستند در ذهن خوانندگان باقی بماند، و اینکه کتاب چگونه دریافت شده است، تأمل کنند. بازخورد گرفتند. دیدند چه چیزهایی ماندگار شده، چه چیزهایی نیاز به اصلاح داشته، و چه مواردی درست فهمیده نشده است. در بیست سالی که این کتاب در دست و دل برنامهنویسان سراسر جهان چرخیده، دیو و اندی این بازتابها را بررسی کرده و مفاهیم و ایدههای تازهای شکل دادهاند.
آنها اهمیت «عاملیت» را آموختهاند و دریافتهاند که برنامهنویسان شاید بیش از بسیاری از حرفهها اختیار عمل دارند. کتاب را با پیام ساده اما عمیقی آغاز میکنند: «این زندگی خودت است.» این جمله قدرتی را که در پایگاه کد، در شغل، و در مسیر حرفهایمان داریم به یادمان میآورد. همین جمله لحن باقی کتاب را شکل میدهد—اینکه این اثر، چیزی فراتر از یک کتاب فنیِ پر از مثالهای کد است.
آنچه این کتاب را در میان انبوه کتابهای فنی متمایز میکند، فهمی است که از معنای واقعی «برنامهنویس بودن» دارد. برنامهنویسی یعنی تلاش برای کمتر دردناک کردن آینده. یعنی آسانتر کردن مسیر برای همتیمیها. یعنی اشتباه کردن و توان بازگشت داشتن. یعنی شکل دادن عادتهای خوب. یعنی شناخت ابزارها. نوشتن کد فقط بخشی از دنیای برنامهنویس بودن است، و این کتاب آن دنیا را بررسی میکند.
من زمان زیادی را صرف اندیشه دربارهٔ سفر برنامهنویسی کردهام. بزرگ نشدهام که کدنویسی کنم؛ آن را در دانشگاه نخواندم؛ نوجوانیام را با دستکاری ابزارهای تکنولوژی نگذراندهام. در اواسط بیستسالگی وارد دنیای برنامهنویسی شدم و مجبور بودم بفهمم «برنامهنویس بودن» یعنی چه. این جامعه با هر اجتماع دیگری که دیده بودم فرق داشت. نوعی پایبندی شدید به یادگیری و عملگرایی در آن هست که هم دلنشین است و هم ترسبرانگیز.
برای من واقعاً شبیه ورود به جهانی تازه بود—یا دستکم شهری تازه. باید همسایهها را میشناختم، سوپرمارکت خودم را پیدا میکردم، بهترین کافهها را کشف میکردم. زمان برد تا چیدمان شهر را بفهمم، مسیرهای کارآمد را پیدا کنم، از خیابانهای پرترافیک دوری کنم، بفهمم چه ساعتی ترافیک میریزد. آبوهوا متفاوت بود، لباسهای تازهای لازم داشتم.
هفتهها و حتی ماههای نخست در شهری تازه میتواند ترسناک باشد. چه قدر دلنشین میشد اگر همسایهای دوستداشتنی و آگاه میداشتم که مدتهاست آنجا زندگی میکند؛ کسی که بتواند شهر را نشانم دهد، کافهها را معرفی کند؛ کسی که بهخوبی فرهنگ و نبض شهر را بشناسد تا نهتنها احساس خانهبودن کنم، بلکه بتوانم عضوی مؤثر از آن جامعه شوم. دیو و اندی همان همسایهها هستند.
برای تازهواردها، بهآسانی ممکن است نه از خود عمل برنامهنویسی بلکه از «فرآیند برنامهنویس شدن» احساس فشار کنند. لازم است یک تغییر ذهنیت رخ دهد—تغییری در عادتها، رفتارها و انتظارات. بهتر شدن در برنامهنویسی فقط با بلد بودن کدنویسی رخ نمیدهد؛ نیازمند قصد، تمرین آگاهانه و پیوستگی است. این کتاب راهنمایی است برای اینکه چطور بهشیوهای مؤثرتر برنامهنویس بهتری شویم.
اما اشتباه نکنید—این کتاب به شما نمیگوید برنامهنویسی «باید» چگونه باشد. نه فلسفهپردازانه است و نه داورانه. فقط روشن و بیپیرایه میگوید «برنامهنویس عملگرا چیست»—چطور کار میکند و چگونه به کد نگاه میکند. انتخاب را به عهدهٔ خود شما میگذارد. اگر احساس کنید مناسب شما نیست، چیزی را از شما دریغ نمیکند. اما اگر انتخاب کنید که میخواهید چنین برنامهنویسی باشید، آنها همان همسایگان مهربان و باتجربهاند که مسیر را نشانتان خواهند داد.