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

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

اگر به عنوان یک برنامه نویس دنبال کار هستید حتما در مصاحبههای شغلی راجع به دیزاین پترنها از شما سوال شده. چرا دیزاین پترنها مهم هستند؟ چون در هر لحظه حتما حداقل یک نفر در این دنیا با مشکلی مشابه مشکلی که شما در پروژه خود با آن روبرو شدهاید دست و پنجه نرم میکند. و احتمالا قبلا یک نفر این مشکل را حل کرده. این کتاب پترنهای تست شدهای که بقیه استفاده کرده و کارایی آنها ثابت شده را در اختیار شما قرار میدهد. اگرچه این کتاب همه دیزاین پترنهای دنیا را شامل نمیشود ولی هر پترنی که شما برای حل کردن مسائل واقعی نیاز دارید را در بر میگیرد.

خواندن این کتاب هم از واجبات است. پراگماتیک پروگرامر دید شما را به برنامه نویسی تغییر میدهد. شما را آموزش میدهد تا برنامه نویس بهتری شوید. این کتاب حتی بر روی زبان برنامه نویسی خاصی هم تمرکز نکرده و نکاتی را به شما آموزش میدهد که در همه زبانهای برنام نویسی میتوانید استفاده کنید.
در پی خواندن این کتاب انتظار داشته باشید هم شخصیت و هم عادات برنامه نویسی شما تغییر کند.

کتاب Soft Skills اصلا درباره برنامه نویسی نیست. اما به زندگی شما به عنوان یک برنام نویس شکل میدهد. این کتاب قسمتهایی از زندگی یک برنامه نویس را بررسی میکند که معمولا نادیده گرفته میشوند.
موضوعاتی که این کتاب به آنها اشاره میکند شامل امور مالی، زندگی شغلی، بازاریابی، پروداکتیویتی، فیتنس و توسعه روحی است.

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

کتاب Code Complete سرشار از اطلاعات مفید است. به راحتی میتوان کتاب را با مرجع جامع برنامه نویسی اشتباه گرفت. حجم ۹۰۰ صفحهای کتاب هم گواه این ادعاست. نگران تعداد صفحههای کتاب نباشید و با هر سرعتی که برای شما ممکن است آن را بخوانید.
نویسنده سعی در پوشش همه نکات مهم توسعه نرم افزار داشته. اگر اطلاعات بیشتری هم نیاز داشته باشید کتاب پر از رفرنس به منابع دیگر درباره هر موضوعی است.

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

کتاب peopleware هم مستقیما درباره برنامه نویسی نیست. اما برای برنامه نویس ها اهمیت دارد. این کتاب درباره مدیریت و انگیزه دادن به برنامه نویسان است. نویسنده فاکتورهایی که میتواند برنامه نویسان را کم انگیزه کند مطرح کرده و برای آنها راه حل ارائه داده. این کتاب برای مدیرانی که یک تیم برنامه نویس را مدیریت میکنند عالیست.

چیزهایی هستند که همه از آنها متنفرند. یکی از آنها کار کردن با کدهای قدیمیست. کد اجرایی که امکان اجرای آن روی آخرین ورژن سیستم عامل نیست. اکثر مواقع چارهای ندارید جز کار کردن با این نوع کدها. این کتاب نکات سادهای در اختیار شما قرار میدهد. که به شما کمک خواهد کرد با این نوع کدها بهتر کار کنید.

نوشتن کدی که کار میکند کافی نیست. اطمینان از اینکه کد شما به بهترین شکل و در بهینه ترین حالت قرار دارد مهمتر است. هدف اصلی ریفکتورینگ بهینه سازی ویژگیهای غیر اجرایی کد است. مارتین فاولر در این کتاب مفاهیم و راهکارهای ریفکتورینگ را به بهترین شکل ارائه کرده. با خواندن این کتاب به اهمیت ریفکتور کردن پی برده و متوجه میشوید که چرا هر برنامه نویسی باید با آن آشنا باشد.
کتاب ریفکتورینگ با آموزش روشهای شناخت نشانههای عیب و ایراد در کد، آشنایی با ساختار منطقی کلاسها و اشیا و جابجایی ویژگیها از یک شی به دیگری و همچنین معرفی ابزارهای مفید برای ریفکتور کردن کد، شما را در بهینه سازی کدهایتان توانا تر میکند.
ده کتاب در این پست معرفی شده که هر کدام میتواند یک قدم زندگی حرفهای شما را به جلو ببرد. پس منتظر نباشید تا فرصتی برای مطالعه آنها پیدا کنید. از همین الان شروع کنید. شاید مسیری طولانی پیش روی باشه، ولی یک سفر هزار کیلومتری با یک قدم شروع میشه. پس قدم اول را بردارید.
بروز رسانی: توی این چند روز دوستانی که این مطلب رو خوندن کتابهای دیگهای رو پیشنهاد دادن که فکر میکردن باید توی این لیست بهشون اشاره میشده. اگر شما هم فکر میکنین کتابی جا مونده توی کامنتها بگین. من سعی میکنم توی یکی دو هفته آینده که لیست این کتابها کامل تر شد. آخر این نوشته یک لیست از اون کتابها هم قرار بدم.
بروز رسانی۲: در ادامه لیست چند کتاب که توی توییتر و اینجا در نظرات معرفی شده بود را مشاهده میکنید. دو کتاب دیگه هم خودم اضافه کردم که فکر میکنم مفید هستند.
نکته دیگهای هم که بهش اشاره شده بود اینه که مفاهیم پایه مثل سیستمعامل، ساختمان داده و طراحی الگوریتم هم بسیار مهم هستند. به نظر بنده اگر شما سراغ این لیست کتابها آمدید و قصد مطالعه آنها را دارید حتما قبلا مباحث پایه را مطالعه کردهاید. اگر این کار را نکردهاید حتما اول این کار را بکنید.