The Pragmatic Programmer کتابی است که توسط Andrew Hunt و David Thomas نوشته شده و در سال 1999 توسط انتشارات Addison-Wesley Professional منتشر شد (واژۀ Pragmatic از واژۀ لاتین Pragmaticus به معنای «خبره در تجارت» گرفته شده و این واژه خود از یک واژۀ یونانی به معنای «عمل کردن» نشأت گرفته است.) در مقدمهٔ این کتاب آمده که دیدگاههای این دو نویسنده به شما کمک خواهند کرد تا برنامهنویس بهتری شوید و این در حالی است که اصلاً مهم نیست تنها کار کنید، عضوی از تیم توسعۀ یک پروژۀ بزرگ باشید و یا اینکه به عنوان مشاور در آن واحد با مشتریان زیادی سروکار داشته باشید چرا که در هر صورت این کتاب به شما کمک خواهد کرد تا به عنوان یک دولوپر، بهتر کار کنید. محتوای این کتاب صرفاً تئوری نبوده بلکه سعی شده تا بیشتر بر روی مباحث عملی و استفاده از تجربیات نویسندگانش در دستیابی به تصمیمات آگاهانهتر، متمرکز شود.
در ادامهٔ مقدمهٔ کتاب The Pragmatic Programmer: From Journeyman to Master آمده است:
هر دولوپری شخصیتی منحصربهفرد داشته که مانند هر شخص دیگری علائق و ترجیحاتی دارد. درست مانند نحوۀ پوشش، مدل مو، طرز صحبت کردن و ... که زندگی روزمرۀ یک فرد را میسازند، علائق و ترجیحات شخصی یک دولوپر نیز در طول زمان بر برنامههایی که مینویسد تأثیرگذار بوده و به آنها شکل میدهد.
برنامهنویسی یک هنر است. در سادهترین تعریف، برنامهنویسی به عملی اطلاق میشود که در طی آن شما کاری میکنید تا کامپیوتر تَسک (کار) مد نظرتان را انجام دهد. به طور کلی، شخصیت یک برنامهنویس از یک بخش شنونده، یک بخش مشاور، یک بخش مفسر و یک بخش فرمانده تشکیل شده است؛ همچنین وی سعی میکند تا نیازهای خود یا دیگران را بشناسد و آنها را به نحوی که برآوردن آنها برای یک ماشین به راحتی عملی باشد تعریف کند. علاوه بر این، وی سعی میکند کار خود را مستند کند تا برای دیگران قابلفهم باشد و کار خود را مهندسی کند تا دیگران بتوانند آن را پایۀ کارهای بعدی قرار دهند. از همه مهمتر اینکه یک برنامهنویس همۀ این کارها را در حالی انجام میدهد که تیکتاک بیامان ساعت نزدیک شدن به لحظۀ پایانی تحویل پروژه (دِدلاین) را به او یادآور میشود. در واقع، یک برنامهنویس هر روز معجزهای تازه میآفریند که چنین کاری اصلاً ساده نیست.
در این میان، ابزارهای زیادی مدعی هستند که میخواهند کار را برای شما سادهتر کنند؛ تولیدکنندگان ابزارها و نرمافزارهای کمکی همواره از کارایی محصولات خود دَم میزنند و مشاوران ادعا میکنند که تکنیکهای پیشنهادی آنها قطعاً نتیجهبخش خواهد بود. هر کسی معتقد است که زبان برنامهنویسی او بهترین زبان ممکن است و هر سیستمعاملی مدعی است که به همۀ نیازهای کاربران پاسخ داده است.
بدیهی است که هیچکدام از این ادعاها درست نیستند و یک راهحل واحد همیشه نمیتواند بهترین باشد. یک زبان برنامهنویسی خاص، یک ابزار خاص، یک سیستمعامل خاص و ... نمیتواند همیشه بهترین پاسخ را برای همۀ نیازها ارائه دهد. در این عرصه، بحثِ همیشه بهترین بودن مطرح نیست بلکه بحث اصلی این است که چگونه هر ابزار، زبان، نرمافزار و ... در شرایط خاصی میتواند مناسبترین گزینه باشد.
اینجا است که پای عملگرایی به میان میآید به طوری که لزومی ندارد به یک تکنولوژی خاص وفادار بمانید؛ بلکه لازم است پسزمینۀ ذهنی خود را تقویت نموده و با تکنولوژیهای متنوع تجربیاتی داشته باشید تا در شرایط خاص بتوانید تصمیمات درستتری بگیرید. آشنایی با مفاهیم تئوریک از یک سو و همچنین تجربۀ شما از حضور در پروژههای متعدد، باعث میشود تا تئوری و عمل در کنار یکدیگر شما را قدرتمندتر کنند.
در واقع، با تکیه بر دانش و تجربۀ خود هر بار که با موقعیت جدیدی روبهرو میشوید، رویکرد خود را با توجه به شرایط و محیط تغییر میدهید و در مورد اهمیت نسبی تکتک عوامل مؤثر بر پروژه قضاوت نموده و بهترین راهحل را پیدا میکنید. این دقیقاً همان کاری است که برنامهنویسان عمگرا انجام میدهند و این دقیقاً همان چیزی است که کتاب The Pragmatic Programmer به آن میپردازد.
چه کسانی باید کتاب The Pragmatic Programmer را بخوانند؟
اگر گاهی احساس سرخوردگی دارید و حس میکنید که به توانایی بالقوۀ خود دست پیدا نکردهاید، اگر وقتی به همکاران خود نگاه میکنید متوجه میشوید که آنها در مقایسه با شما از ابزارهای بهتر و کاربردیتری استفاده میکنند و اگر از تکنولوژیهای قدیمی استفاده میکنید و میخواهید با ایدههای جدید در زمینۀ کاری خود آشنا شوید، این کتاب برای شما است. گروه هدف این کتاب همۀ برنامهنویسانی است که میخواهند نقش مؤثرتر و سازندهتری در حرفۀ خود داشته باشند.
نویسندگان این کتاب نَه ادعا میکنند که در این کتاب به همۀ سؤالات پاسخ داده و نَه میگویند که ایدههایشان در همۀ موقعیتها کارساز است؛ بلکه تنها ادعایشان این است که اگر از روش ایشان پیروی کنید، خواهید توانست:
- در زمان کوتاهتری تجربیات بیشتری به دست آورید
- کارایی شما افزایش مییابد
- به بخشهای مختلف مرتبط با کار خود مسلطتر میشوید
- و میتوانید نرمافزارهای بهتری بنویسید
دولوپرهای عملگرا چه خصوصیاتی دارند؟
به طور کلی، ویژگیهای مشترک میان دولوپرهای عملگرا در دستههای زیر تقسیمبندی میشوند:
- علاقهمندی به تکنولوژیهای جدید: آنها به یک تکنولوژی خاص وفادار نمیمانند. این افراد غریزه و کشش خاصی به تکنولوژیها و تکنیکهای جدید داشته و دوست دارند تا همه چیز را تجربه کنند به طوری که وقتی با چیز جدیدی روبهرو میشوند، به راحتی میتوانند آن را درک نموده و تجربۀ حاصل از آن را با دانش قبلی خود ترکیب نمایند.
- کنجکاوی: آنها همیشه و در مورد همه چیز سؤال پرسیده و جستجو میکنند. گاهی به نظر میرسد که سؤالات آنها تمامی ندارد اما واقعیت این است که آنها با یافتن پاسخ هر سؤال، تغییری هرچند اندک در روند تصمیمگیری خود ایجاد میکنند.
- تفکر انتقادی: این افراد اهل چالش هستند و علاقهای ندارند که چیزی را بدون آگاهی و دلیل بپذیرند.
- واقعگرایی: آنها سعی میکنند به ماهیت آنچه که خود را در چهرۀ یک مشکل نشان داده پی ببرند و این واقعگرایی به ایشان کمک میکنند تا دید گستردهتری نسبت به مشکلات پیدا کرده و در مقابل آنها عملکرد قویتری داشته باشند.
- همهفنحریف بودن: آنها دائماً در تلاشند تا با مجموعۀ گستردهای از تکنولوژیها و محیطهای برنامهنویسی جدید آشنا شده و همواره از تحولات جدید آگاه شوند. ایشان در کار خود خبره بوده و به محیط، ابزار و یا زبان خاصی وابسته نبوده و در صورت نیاز میتوانند در شرایطی کاملاً جدید به کار خود ادامه دهند.
آشنایی با ساختار کتاب The Pragmatic Programmer
این کتاب در 8 فصل مجزا نوشته شده و این در حالی است که برای خواندن این کتاب نیازی نیست تا آن را از اول به آخر بخوانید زیرا هر فصل از این کتاب موضوع خاصی را پوشش داده و خواندن هیچ فصلی پیشنیاز فصلهای دیگر نیست (در جاهای مختلف کتاب ممکن است به مسائل مهمی برخورید که در قالب یکسری نکات شمارهگذاری شده در کادرهای مشخصی مطرح شدهاند.)
همچنین این کتاب شامل ۲ پیوست است که پیوست اول شامل کتاب شناسی، آدرس سایتهای منبع و فهرستی از نشریات، کتابها و سازمانهای حرفهای توصیه شده مرتبط با بحث کتاب است و در بخشهای مختلف کتاب تمرینات و چالشهای متناسب با موضوع مورد بحث گنجانده شده است.
تمارین این کتاب پاسخهای ساده و مشخصی دارند در حالی که چالشهای برنامهنویسی مطرح شده گستردهتر بوده و پاسخهای متنوعی برای آنها امکانپذیر است. برای اینکه ایدهای برای فکر کردن در اختیار شما قرار گیرد، پاسخ تمرینات در پیوست دوم ذکر شده است (دقت داشته باشید که در اکثر موارد بیش از یک پاسخ درست وجود دارد.) چالشها میتوانند به عنوان موضوع بحثهای گروهی و یا در سطوح پیشرفتهتر، به عنوان موضوعی برای نگارش یک مقاله مد نظر قرار گیرند.
سخن پایانی
هر چند The Pragmatic Programmer: From Journeyman to Master در حوزهٔ کدنویسی کتاب جدیدی نیست و سالها از اولین انتشار آن میگذرد، اما نظرات متنوعی در تحسین این کتاب از سوی افراد مختلف مطرح شده است که از آن جمله میتوان به Martin Fowler نویسندۀ کتاب Refactoring and UML Distilled اشاره کرد که در مورد این کتاب چنین گفته است:
یک نسخه از اون رو میخرم، دو بار میخونمش و سپس به همۀ همکارانم میگویم که برن و یک نسخه از اون رو برای خود بخرن. این کتابیه که هیچوقت اون رو به کسی قرض نخواهم داد زیرا ممکنه دیگه برنگردوننش!
آیا کتاب The Pragmatic Programmer را مطالعه کردهاید و آیا با نقدی که در مورد این کتاب نوشته شده است موافقید؟ نظرات و دیدگاههای خود را با سایر کاربران سکان آکادمی به اشتراک بگذارید.