اگر برنامه نویس هستید، بر شما واجب است این ده کتاب را مطالعه کنید!

یادگیری مستمر بخش جدانشدنی زندگی همه برنامه نویسان است. اما در سال‌های اخیر سرعت پیشرفت و تغییر سریع تکنولوژی‌ها باعث شده، همه به دنبال یادگیری سریع زبان‌های برنامه نویسی و فریمورک‌های جدید باشند. همین دلیلی شده تا مطالعه و آموزش مفاهیم زیربنایی و مهم که در درازمدت پروژه‌های نرم افزاری را تحت تاثیر قرار می‌دهند به حاشیه رانده شود.هر برنامه نویسی بدون آشنایی با مفاهیمی مانند ریفکتورینگ و دیزاین پترن‌ها می‌تواند پروژه‌ها را تحویل داده و خروجی قابل قبولی به کارفرما ارائه دهند. اما این تازه اول راه است. برنامه‌ای که تحویل کارفرما می‌شود احتیاج به نگهداری دارد و اینجاست که مشکلات نمایان می‌شوند. مشکلاتی مانند هزینه زیاد نگهداری نرم‌افزار و سرعت کم توسعه.خوشبختانه جلو این مشکلات را می‌توان از همان ابتدا تا حدود زیادی گرفت. با اینکه توسعه نرم افزار یک تخصص جدید است. اما در همین سالیان سپری شده تیم‌ها و مهندسان کامپیوتر تجارب ارزشمندی بدست آورده‌اند و آنها را در قالب راهکارهای مختلف برای ما به اشتراک گذاشته‌اند. برنامه نویسان تازه کار با مطالعه و تمرین این راهکارها می‌توانند از اشتباهات رایج اجتناب کنند. در ادامه ده کتاب پیشنهادی معرفی می‌کنیم. اگر مهندس نرم افزار هستید و علاقه دارید در شغل برنامه نویسی پیشرفت کنید حتما این کتاب‌ها را مطالعه کنید.Clean Codeاین کتاب نوشته رابرت مارتین یا عمو بابه. نویسنده در این کتاب راجع به چه چیزهایی صحبت می‌کنه؟ همه میدونیم که هدف اصلی در نوشتن کد خلق برنامه‌ایست که اجرا شود. ولی آیا می‌توانید کدی که تولید کرده‌اید را در آینده بخوانید و تغییر دهید؟ اگر پاسخ شما منفیست این کتاب را بخوانید. با خواندن این کتاب یاد می‌گیرید کدهای بهتری بنویسید. بعد از خواندن این کتاب متوجه می‌شوید که چرا کیفیت کد اهمیت دارد. سعی می‌کنید کدهای بهتری بنویسید. و هیچ وقت دوباره به عقب برنخواهید گشت. Head First Design Patternsاگر به عنوان یک برنامه نویس دنبال کار هستید حتما در مصاحبه‌های شغلی راجع به دیزاین پترن‌ها از شما سوال شده. چرا دیزاین پترن‌ها مهم هستند؟ چون در هر لحظه حتما حداقل یک نفر در این دنیا با مشکلی مشابه مشکلی که شما در پروژه خود با‌ آن روبرو شده‌اید دست و پنجه نرم می‌کند. و احتمالا قبلا یک نفر این مشکل را حل کرده. این کتاب پترن‌های تست شده‌ای که بقیه استفاده کرده و کارایی آنها ثابت شده را در اختیار شما قرار می‌دهد. اگرچه این کتاب همه دیزاین پترن‌های دنیا را شامل نمی‌شود ولی هر پترنی که شما برای حل کردن مسائل واقعی نیاز دارید را در بر می‌گیرد.The Pragmatic Programmerخواندن این کتاب هم از واجبات است. پراگماتیک پروگرامر دید شما را به برنامه نویسی تغییر می‌دهد. شما را آموزش می‌دهد تا برنامه نویس بهتری شوید. این کتاب حتی بر روی زبان برنامه نویسی خاصی هم تمرکز نکرده و نکاتی را به شما آموزش می‌دهد که در همه زبان‌های برنام نویسی می‌توانید استفاده کنید. در پی خواندن این کتاب انتظار داشته باشید هم شخصیت و هم عادات برنامه نویسی شما تغییر کند.Soft Skills: The Software Developer's Life Manualکتاب Soft Skills اصلا درباره برنامه نویسی نیست. اما به زندگی شما به عنوان یک برنام نویس شکل میدهد. این کتاب قسمت‌هایی از زندگی یک برنامه نویس را بررسی می‌کند که معمولا نادیده گرفته می‌شوند.موضوعاتی که این کتاب به آنها اشاره می‌کند شامل امور مالی، زندگی شغلی، بازاریابی،‌ پروداکتیویتی، فیتنس و توسعه روحی است. The Clean Coder: A Code of Conduct for Professional Programmersنویسنده این کتاب هم رابرت مارتین هست. محتوای آن، موضوعاتی که بیشتر برنام نویسان آنها را نادیده می‌گیرند را پوشش می‌دهد. با خواندن این کتاب متوجه می‌شوید که به چه کسی برنامه نویس حرفه‌ای گفته می‌شود؟ و چگونه به عنوان یک برنامه نویس حرفه‌ای زندگی خود را به جلو ببرید؟ چه نکات مدیریتی می‌تواند در زندگی برنامه نویسان تغییر ایجاد کند؟ و در نهایت این کتاب نکاتی برای توسعه مهارت‌هایتان در اختیارتان قرار می‌دهد.Code Complete: A Practical Handbook of Software Constructionکتاب Code Complete سرشار از اطلاعات مفید است. به راحتی می‌توان کتاب را با مرجع جامع برنامه نویسی اشتباه گرفت. حجم ۹۰۰ صفحه‌ای کتاب هم گواه این ادعاست. نگران تعداد صفحه‌های کتاب نباشید و با هر سرعتی که برای شما ممکن است آن را بخوانید. نویسنده سعی در پوشش همه نکات مهم توسعه نرم افزار داشته. اگر اطلاعات بیشتری هم نیاز داشته باشید کتاب پر از رفرنس به منابع دیگر درباره هر موضوعی است.The Mythical Man-month: Essays on Software Engineeringافرادی که در دنیای نرم افزار این کتاب را با انجیل مقایسه می‌کنند کم نیستند. احتمالا به خاطر روش نگارش و نکاتی که دربارشه آنها در کتاب صحبت شده. این کتاب نکاتی مانند مدیریت پروژه، توسعه نرم افزار، اشتباهاتی که باید از آنها اجتناب کنیم و ابزارها، کنترل کیفیت را پوشش می‌دهد. اگر در آینده قصد دارید به عنوان مدیر پروژه کار کنید. خواندن این کتاب به شدت توصیه می‌شود. Peopleware: Productive Projects and Teamsکتاب peopleware هم مستقیما درباره برنامه نویسی نیست. اما برای برنامه نویس ها اهمیت دارد. این کتاب درباره مدیریت و انگیزه دادن به برنامه نویسان است. نویسنده فاکتورهایی که می‌تواند برنامه نویسان را کم انگیزه کند مطرح کرده و برای آنها راه حل ارائه داده. این کتاب برای مدیرانی که یک تیم برنامه نویس را مدیریت می‌کنند عالیست.Working Effectively With Legacy Codeچیزهایی هستند که همه از آنها متنفرند. یکی از آنها کار کردن با کدهای قدیمیست. کد اجرایی که امکان اجرای آن روی آخرین ورژن سیستم عامل نیست. اکثر مواقع چاره‌ای ندارید جز کار کردن با این نوع کدها. این کتاب نکات ساده‌ای در اختیار شما قرار میدهد. که به شما کمک خواهد کرد با این نوع کدها بهتر کار کنید.Refactoring by Martin Fowlerنوشتن کدی که کار می‌کند کافی نیست. اطمینان از اینکه کد شما به بهترین شکل و در بهینه ترین حالت قرار دارد مهم‌تر است. هدف اصلی ریفکتورینگ بهینه سازی ویژگی‌های غیر اجرایی کد است. مارتین فاولر در این کتاب مفاهیم و راهکارهای ریفکتورینگ را به بهترین شکل ارائه کرده. با خواندن این کتاب به اهمیت ریفکتور کردن پی برده و متوجه می‌شوید که چرا هر برنامه نویسی باید با آن آشنا باشد. کتاب ریفکتورینگ با آموزش روش‌های شناخت نشانه‌های عیب و ایراد در کد، آشنایی با ساختار منطقی کلاس‌ها و اشیا و جابجایی ویژگی‌ها از یک شی به دیگری و همچنین معرفی ابزارهای مفید برای ریفکتور کردن کد، شما را در بهینه سازی کدهایتان توانا تر می‌کند.ده کتاب در این پست معرفی شده که هر کدام می‌تواند یک قدم زندگی حرفه‌ای شما را به جلو ببرد. پس منتظر نباشید تا فرصتی برای مطالعه آنها پیدا کنید. از همین الان شروع کنید. شاید مسیری طولانی پیش روی باشه، ولی یک سفر هزار کیلومتری با یک قدم شروع می‌شه. پس قدم اول را بردارید.بروز رسانی: توی این چند روز دوستانی که این مطلب رو خوندن کتاب‌های دیگه‌ای رو پیشنهاد دادن که فکر میکردن باید توی این لیست بهشون اشاره میشده. اگر شما هم فکر میکنین کتابی جا مونده توی کامنت‌ها بگین. من سعی میکنم توی یکی دو هفته آینده که لیست این کتاب‌ها کامل تر شد. آخر این نوشته یک لیست از اون کتاب‌ها هم قرار بدم.بروز رسانی۲: در ادامه لیست چند کتاب که توی توییتر و اینجا در نظرات معرفی شده بود را مشاهده می‌کنید. دو کتاب دیگه هم خودم اضافه کردم که فکر میکنم مفید هستند.نکته دیگه‌ای هم که بهش اشاره شده بود اینه که مفاهیم پایه مثل سیستم‌عامل، ساختمان داده و طراحی الگوریتم هم بسیار مهم هستند. به نظر بنده اگر شما سراغ این لیست کتاب‌ها آمدید و قصد مطالعه آنها را دارید حتما قبلا مباحث پایه را مطالعه کرده‌اید. اگر این کار را نکرده‌اید حتما اول این کار را بکنید.Clean Architecture: A Craftsman's Guide to Software Structure and DesignCracking the Coding Interview97 Things Every Software Architect Should Know: Collective Wisdom from the ExpertsPatterns of Enterprise Application ArchitectureComputer Systems: A Programmer's PerspectiveOperating System Concepts