دیباچهٔ چاپ نخست
این کتاب به شما کمک میکند برنامهنویس بهتری شوید.
ممکن است تنها کار کنید، عضو یک تیم بزرگ باشید، یا بهعنوان مشاور با چندین مشتری بهطور همزمان کار کنید. فرقی نمیکند؛ این کتاب به شما بهعنوان یک فرد کمک میکند کار بهتری انجام دهید. این کتاب نظری نیست—روی موضوعات عملی تمرکز میکنیم، بر اینکه چگونه از تجربهٔ خود برای اتخاذ تصمیمهای آگاهانهتر استفاده کنید. واژهٔ «عملگرا» از لاتین pragmaticus آمده، بهمعنای «در کار مهارتمند»، که خود برگرفته از یونانی πραγματικός است، بهمعنای «مناسب برای استفاده».
این کتاب دربارهٔ عمل کردن است.
برنامهنویسی یک صنعتِ دستی است. در سادهترین شکل، به این برمیگردد که کاری کنید یک کامپیوتر آنچه را میخواهید انجام دهد (یا آنچه کاربرتان میخواهد). شما بهعنوان برنامهنویس، بخشی شنوندهاید، بخشی مشاور، بخشی مترجم، و بخشی فرماندهنده. تلاش میکنید نیازهای گریزان را ثبت کنید و راهی برای بیان آنها بیابید تا یک ماشین ساده بتواند از پسشان برآید. تلاش میکنید کارتـان را مستند کنید تا دیگران بفهمند. تلاش میکنید آن را چنان مهندسی کنید که دیگران بتوانند روی آن بنا کنند. و همهٔ اینها را باید در برابر تیکتاک بیامان ساعت پروژه انجام دهید. هر روز معجزههای کوچکی خلق میکنید.
کار دشواری است.
بسیاری از افراد به شما وعدهٔ کمک میدهند. فروشندگان ابزار، محصول خود را معجزهآسا معرفی میکنند. استادان مکتبها و روششناسیها ادعا میکنند تکنیکشان نتیجه را تضمین میکند. همه ادعا میکنند زبان برنامهنویسیشان بهترین است، و هر سیستمعامل را درمان همهٔ بیماریهای ممکن میدانند.
البته هیچکدام از اینها حقیقت ندارد. پاسخهای آسان وجود ندارد. ابزار، زبان یا سیستمعامل «بهترین» وجود ندارد. تنها چیزهایی وجود دارد که در شرایطی خاص «مناسبتر» هستند.
اینجاست که عملگرایی وارد میشود. نباید به فناوری خاصی دل ببندید؛ باید پیشزمینه و تجربهٔ کافی داشته باشید تا در هر موقعیت، بتوانید راهحلهای مناسب را انتخاب کنید. پیشزمینهٔ شما از فهم اصول بنیادی علوم کامپیوتر میآید، و تجربهٔ شما از مجموعهٔ گستردهای از پروژههای عملی. نظریه و عمل با هم شما را نیرومند میکنند.
رویکردتان را با شرایط و محیط فعلی سازگار میکنید. اهمیت نسبی تمام عواملی را که روی یک پروژه تأثیر دارند میسنجید و از تجربهٔ خود برای ارائهٔ راهحل مناسب استفاده میکنید. و این کار را بهصورت پیوسته و همزمان با پیشرفت کار انجام میدهید. برنامهنویسان عملگرا کار را انجام میدهند—و خوب انجام میدهند.
چه کسانی باید این کتاب را بخوانند؟
این کتاب برای کسانی است که میخواهند برنامهنویسانی مؤثرتر و پربازدهتر شوند. شاید احساس میکنید به اندازهٔ تواناییتان نتیجه نمیگیرید. شاید به همکارانی نگاه میکنید که از ابزارها طوری استفاده میکنند که بهرهوریشان را دوچندان کرده. شاید در شغلی هستید که با فناوریهای قدیمی سروکار دارد، و میخواهید بدانید ایدههای جدید چگونه میتوانند بر کار شما اثر بگذارند.
ما ادعا نمیکنیم همهٔ پاسخها را داریم—یا حتی بیشتر آنها را. و نه اینکه همهٔ ایدههای ما در همهٔ موقعیتها قابل استفادهاند. تنها چیزی که میتوانیم بگوییم این است: اگر رویکرد ما را دنبال کنید، سریع تجربه بهدست میآورید، بهرهوریتان بیشتر میشود، و درک بهتری از کل فرایند توسعه پیدا میکنید. و نرمافزار بهتری خواهید نوشت.
چه چیزی یک برنامهنویس عملگرا را میسازد؟
هر برنامهنویس منحصربهفرد است. هرکدام نقاط قوت و ضعف، ترجیحات و دلزدگیهای خود را دارند. با گذر زمان، هرکس محیط کاری شخصی خود را شکل میدهد؛ محیطی که فردیت او را همانقدر نشان میدهد که سرگرمیها، لباس یا مدل موهایش. بااینحال، اگر برنامهنویس عملگرا باشید، احتمالاً بسیاری از ویژگیهای زیر را دارید:
پذیرندهٔ زودهنگام / سازگار سریع
غریزهای برای فناوریها و تکنیکها دارید و از امتحانکردن چیزهای تازه لذت میبرید. با هر چیز جدید، سریع ارتباط برقرار میکنید و آن را با داشتههایتان ادغام میکنید. اعتمادبهنفستان از تجربه میآید.
پرسشگر
سؤال میپرسید. «جالبه—چطور این را ساختی؟» «با آن کتابخانه مشکل داشتی؟» «این رایانش کوانتومی که میگویند چیست؟» «لینکهای نمادین چطور پیادهسازی میشوند؟» کلکسیوندار ریزدانستهها هستید؛ دانستههایی که شاید سالها بعد تصمیمی را تحت تأثیر بگذارند.
متفکر نقاد
چیزی را بیچونوچرا نمیپذیرید. وقتی همکار میگوید «چون همیشه اینطور بوده»، یا فروشنده وعدهٔ «حل همهٔ مشکلات» میدهد، شما بو میکشید که چالشی در راه است.
واقعگرا
میکوشید ماهیت واقعی هر مسئله را بفهمید. این واقعگرایی به شما حسی درست از دشواریها و زمان لازم میدهد. وقتی بهدرستی بفهمید کاری سخت است یا طول میکشد، توان ادامهدادن را پیدا میکنید.
آشنا با همهچیز
تلاش میکنید دامنهٔ وسیعی از فناوریها و محیطها را بشناسید و از پیشرفتهای جدید عقب نمانید. شاید کار فعلیتان نیازمند تخصص باشد، اما همیشه توانایی حرکت به حوزههای تازه و چالشهای جدید را دارید.
اما ویژگیهای اصلی را تا آخر نگه داشتهایم. تمام برنامهنویسان عملگرا اینها را دارند—و آنقدر بنیادیاند که بهصورت نکته بیانشان میکنیم:
نکتهٔ ۱
به صنعتِ خود اهمیت بده
اعتقاد داریم هیچ ارزشی در توسعهٔ نرمافزار نیست مگر اینکه به خوب انجامدادنش اهمیت بدهید.
نکتهٔ ۲
فکر کن! دربارهٔ کارت
برای برنامهنویس عملگرا بودن، از شما میخواهیم هنگام انجام کار، به کار فکر کنید. این یک حسابرسی یکباره نیست؛ یک ارزیابی انتقادی مداوم از تکتک تصمیمهای روزانهتان است. هرگز روی حالت خودکار کار نکنید. مدام فکر کنید، و در لحظه کارتان را نقد کنید. شعار قدیمی IBM، یعنی THINK!، حکمِ ورد برنامهنویس عملگراست.
اگر این برایتان دشوار بهنظر میرسد، یعنی دقیقاً ویژگی «واقعگرایی» را دارید. این کار وقتتان را میگیرد—وقتی که احتمالاً از قبل زیر فشار است. پاداشش؟ درگیری عمیقتر با کاری که دوست دارید، حس مهارت در حوزههای بیشتر، و لذتِ پیشرفت مداوم. در بلندمدت، این سرمایهگذاری با بهره بازمیگردد: هم شما و هم تیمتان کارآمدتر میشوید، کدی مینویسید که نگهداریاش آسانتر است، و زمان کمتری را در جلسات میگذرانید.
عملگرایان فردی، تیمهای بزرگ
برخی باور دارند که در تیمهای بزرگ یا پروژههای پیچیده، جایی برای فردیت نیست. میگویند: «نرمافزار یک رشتهٔ مهندسی است؛ اگر اعضای تیم خودشان تصمیم بگیرند، همهچیز از هم میپاشد.»
ما کاملاً مخالفیم.
در ساخت نرمافزار باید مهندسی وجود داشته باشد. اما این مانع هنر و صنعت فردی نمیشود. به کلیساهای عظیمی فکر کنید که در اروپا در قرون وسطی ساخته شدند. هرکدام هزاران نفر-سال کار برده و دههها زمان گرفتهاند. درسها منتقل شده و پیشرفتهای مهندسی از دل آنها بیرون آمده است. اما نجاران، سنگتراشان، حکاکان و شیشهکاران همگی صنعتگران بودند؛ هرکدام نیازهای مهندسی را تفسیر میکردند و چیزی خلق میکردند که فراتر از سازهٔ صرف بود. باور آنها به فردیتشان بود که پروژهها را زنده نگه میداشت:
«ما که سنگ میبریم، باید کلیسا را در ذهن داشته باشیم.»
در چارچوب کلی یک پروژه، همیشه جا برای فردیت و صنعتگری وجود دارد. در وضعیت فعلی مهندسی نرمافزار، این موضوع حتی بیشتر صدق میکند. صد سال دیگر، مهندسی امروز ما شاید مانند فنون سازندگان کلیساهای قرون وسطی عجیب و خام بهنظر برسد؛ اما صنعتگریمان همچنان ارزش خواهد داشت.
این یک روند پیوسته است
گردشگری که از کالج ایتن در انگلستان بازدید میکرد، از باغبان پرسید چطور چمنها را اینقدر بینقص نگه میدارد. باغبان گفت:
«خیلی ساده است. هر صبح شبنم را میتکانی، یک روز در میان چمن را میزنی، و هفتهای یکبار غلتک میکشی.»
گردشگر پرسید: «فقط همین؟»
باغبان پاسخ داد: «کاملاً. فقط کافی است این کار را ۵۰۰ سال انجام دهید تا یک چمن عالی داشته باشید.»
چمنزارهای بزرگ به مراقبتهای کوچک روزانه نیاز دارند—و برنامهنویسان بزرگ هم همینطور. مشاوران مدیریتی دوست دارند از واژهٔ ژاپنی کایزن استفاده کنند؛ کلمهای که مفهوم «ایجاد پیوستهٔ بهبودهای کوچک» را بیان میکند. کایزن یکی از دلایل اصلی جهش بهرهوری و کیفیت در تولیدات ژاپنی بود و بعدها در سراسر جهان تقلید شد.
کایزن دربارهٔ افراد نیز صدق میکند. هر روز تلاش کنید مهارتهایی را که دارید تصحیح کنید و ابزارهای تازهای به جعبهابزار خود اضافه کنید. برخلاف چمنهای ایتن، نتایج را در چند روز خواهید دید. و در طول سالها، شگفتزده خواهید شد که چگونه تجربهتان شکوفا شده و مهارتهایتان رشد کردهاند.