کتابهایی که برای یادگیری برنامه نویسی به کار میاد (1)

یکی از بهترین عادت‌هایی که هر برنامه نویسی میتونه داشته باشه کتاب خوندنه. کتاب، علی رغم ظاهر ساده و محتوای نوشتاریش، هنوز هم کارایی داره و چه بسا، بهترین منبع برای یادگیری عمیق موضوعاتیه که آموزش های کمی براش وجود داره. کتاب میتونه مارو بی واسطه با خودش درگیر کنه و تجربه سالها فعالیت یه نویسنده رو در قالب جملات شُسته رفته و موجز بهمون برسونه.و خب کتاب‌های حوزه نرم افزار هم همینطوره. کمتر آدم متخصص و معماری رو میشه پیدا کرد که توی مسیر یادگیریش حداقل یه بار گذرش به یه کتاب نیفتاده باشه.اما این وسط، کتاب‌هایی هم هستن که حکم جزوه درسی رو برای هر برنامه نویسی دارن و خوندنشون جزو اوجب واجباته. توی این مطلب که به زودی ادامه دار میشه، میخام با سه گانه معروف رابرت سی مارتین شروع کنم. آقای مارتین که بین اهل فن به عمو باب هم معروفه، یکی از بهترین مولفین و متخصصین حوزه نرم افزاره که بیش از 50 ساله داره با کتابها، مقاله ها و سخنرانیاش این حرفه رو پیش میندازه و اولین کسی هست که متدلوژی agile رو به ما معرفی کرده.ایشون سه کتاب بسیار شناخته شده و پرخواننده داره که اینا هستن :1- Clean Code : A Handbook of Agile Software Craftsmanshipبه به. چقد طرح جلد دوست داشتنی و خلاقانه سخوشبختانه، ما انقدر صبح تا شب با کدهای کثیف سر و کار داریم که کلا مفهوم کد تمیز از ذهنمون رفته. چه بسا اصن همه این سالها توی این توهم بودیم که خیلی کارمون درسته و کدی که زدیم، بهترین کد عالمه و کور شه هرکی نتونه ببینتش. اما عمو باب چه کرده؟ ایشون سالها قبل کتابی نوشته به اسم Clean Code یا کد تمیز : "کتابچه ای برای استادی در تولید نرم افزار های چابک" و توش ما رو با مهمترین اصول نوشتن کدهای خوانا، تمیز و حرفه ای آشنا کرده.حالا کد تمیز چیه؟ اگه بخوایم به زبون ساده بگیم یعنی کدی که تر تمیزه، آدمو مجبور به فحش دادن نمیکنه، میشه برای برناه نویس غایبش یه فاتحه ای چیزی خوند، قابل تست و ویرایش، خوانا و بدون عیب و ایراده و خلاصه که از هر کدی که میشه نوشت، بهتره. یا به قول استاد شب پره : این کدی که میگم کد نیست، این کد مثه اون کد نیست، اگه کده مثه اون کد نیست، هیچ کدی مثه این کد نیستاستاد مارتین اینجا میگه که اگه یه سری اصول رو موقع کدنویسی رعایت کنی میتونی به یه همچین دستاوردی برسی و طی فصل های مختلف، مارو با این اصول آشنا میکنه. فصلهای کتاب به صورت تیتروار میشن اینا :فصل یک : که درواقع معرفی کتابهدو : کد تمیز چیه؟سه : نام گذاری صحیح به چه صورتیه؟چهار : چطوری function های تمیز و خوب بنویسیمپنج : چطوری کامنت بنویسیمشیش : Formatting یا قالب بندی تیکه کدها یعنی چی؟هفت : Boundaries یا نحوه استفاده از پکیجها، کتابخونه ها و همه کدهای external چجوریاس؟هشت : Unit test نوشتن به چه درد میخوره؟و نه : که درمورد سیستمهای مقیاس وسیع و اینا حرف میزنه.به نظر من که این عنوانها خیلی هیجان انگیزن. ضمن اینکه میشه فهمید کتاب به مفاهیمی فراتر از کدنوشتن ساده میپردازه و به صورت کلی قراره مارو به درک کاملتری از تولید یه نرم افزار اصولی و برنامه خوب برسونه.و اینکه این کتاب انقد مفید و کاربردیه و انقد به زبون ساده و روونی مفاهیم رو میگه که میشه چندین و چندبار خوند، بهش رجوع کرد و مثل یه دستور زبان، کنار دست خودمون قرار داد. خلاصه که اگه هنوز سراغش نرفتید، تا دیر نشده یه کمی شو بخونید و دیگه کم کم بهش معتاد میشید.2- Clean Architectureاستاد حاضر نیست یه قرون خرج طرح جلدها بکنه و همه رو عین هم میزنه. عکسِ کهکشان هم که طبیعتاً از گوگل دانلود شده عمو باب که کلاً ول کن clean بازی نیست و گفته که میخاد تمام مفاهیم خلفت رو از منظر clean بودن به ما یاد بده و بعد ازین دنیا بره. لذا کتاب دوم درمورد معماری تمیزه. این کتاب هم خوشبختانه یکی از تأثیرگذارترین و مهمترین کتابهای این حرفه س و لذت خوندنش مثه لذت خوردن موزه.این جا، استاد با یه نگاه وسیعتر به مبحث طراحی، راهکارهایی ارائه میده برای تولید نرم افزارهایی با ویژگیهای مهمی مثل maintainability، testability و separation of concerns (من کلا نمیدونم کِی باید این term هارو کِی ترجمه کرد و کِی نه. ضمن اینکه خودم همیشه حس کردم کتاب تخصصی اساساً به زبون اصلی معنا میده و ترجمه ش همیشه یه چیزایی رو خوب نمیرسونه. اما حالا معنای این کلمات به فارسی فک کنم بشه : استقرارپذیری، قابل تست بودن و دارای قابلیت جداسازی نگرانیها! – درمورد این آخری سرچ کنید نگرانی تون میره)خلاصه که با خوندن این کتاب میتونیم یاد بگیریم که اصن چطور یه نرم افزار رو طراحی کنیم. فارغ از اینکه حالا زبون برنامه نویسی و فریمورک و این جور مسائل چی هستن.فصلهای کتاب به ترتیب اینا هستن :یک : معرفی ، که میگه اصلا چرا باید معماری رو بلد باشیم و به چه دردمون میخورهدو : Paradigm Overview که قراره با سه تا از مهمترین معماریهای نرم افزاری یعنی معماری لایه ای، معماری پیاز و شش ضلعی آشنا بشیم.سه : Programming Paradigms : اینجا با مفاهیمی مثل OOP و برنامه نویسی component-based و functional آشنا میشیمچهار : اصول اولیه طراحی معماری نرم افزار مثل use case، entity و...پنج : Design Principles and Patterns : اصول SOLID و Dependency Injectionشیش : Component Principles : آشنایی با مفهوم Component و نحوه پیاده سازیشهفت : Case Study تمرین همه مفاهیم قبلی با مثالهای واقعیاین یکی کتاب هم ازون مدلاس که میشه بدون ترتیب خوند. خلاصه که اگه دوست داری نگاه و تخصصت رو نسبت به این حرفه ارتقا بدی و به درجات بالاتری از عرفان برسی، بدون شک باید با مفاهیم معماری آشنا شی و شروع به یادگیریش کنی.3- Clean Coder کتاب سوم، علی رغم شباهت زیاد عنوانش با کتاب اولی، دست گذاشته روی مفاهیم اخلاقی و حرفه ای کار ما به عنوان یه برنامه نویس. اینکه من به عنوان یه آدم این کاره، چه اصولی رو باید توی کارم بلد باشم تا بتونم خودمو حرفه ای نشون بدم. منظور از اصول هم، صرفاً مفاهیم تئوریک نیست، بلکه soft skill ها و مهارتهایی هست که مکمل اوناست.لذا ازین لحاظ، کتاب میتونه بسیار مهم و تر و تازه باشه و یه تکون حسابی به تفکرات ما نسبت به این کار بده. (ازونجایی که خیلیها مثل خود من توی Soft skill ضعف دارن، بی نهایت میتونه کاربردی باشه)عنوان های جذاب هر فصل اینطوریه :یک : Professionalism: اصن حرفه ای بودن یعنی چی؟دو : Saying No : اهمیت نه گفتن، که اصن فراتر از این کار به عنوان یه مهارت رفتاری خیلی خفن شناخته میشهسه : Saying Yes: هرچقد باید خوب نه بگی، خوب هم باید بله بگی. چراشو اینجا میگهچهار : Coding : این فصل رو میشه به نوعی چکیده خیلی فشرده کتاب اول هم دونستپنج : TDD یا Test Driven Development که خیلی مهمه و یه بحث جداگونه س (توی ویرگول هم مطالب خیلی خوب زیادی درموردش نوشتن)شیش : Practicing: چرا کار ما بدون تمرین فایده نداره؟هفت : Acceptance Testingهشت : مدیریت زماننه : نحوه تخمین زدن نیازمندی های پروژهده : Pressure یا چطوری فشار کاریمونو مدیریت کنیمیازده : Collaboration، تعامل ، تیم ورک و همکاری با بقیه بر و بچ تیمو دوازده : Teams and Project : که میشه فصل آخر و مارو با چندتا از متدلوژی های مهم و نقشهای اون آشنا میکنهاستاد میگه تمیز بودن رو اول از خودمون شروع کنیم این کتاب انقد مثالهای خوب و کاربردی توش داره که اصن حد نداره و مهمتر از همه اینا، میتونه نگاه مارو نسبت به شغلمون عوض کنه. اینکه اساساً حرفه ای بودن و اصولی کار کردن چه ویژگیهایی رو میطلبه.همه این کتابها به سادگی از توی اینترنت قابل پیدا کردنه و پیشنهاد میکنم به قول استاد یه تورّقی توشون بکنید.و اگر هم پیش ازین با این کتابها آشنا بودید، اولاً مارو حلال کنید، دوماً خوشحال میشم شما هم یه لیست از کتابهای مفیدتون رو برام بنویسید.