توی این پست بعد از مدتها میخوام یک کتاب خوب معرفی کنم در زمینه برنامه نویسی و بعدش شاید یکم گپ خودمونی بزنم. همین دیشب بود که حمید بهم گفت بیا و خلاصه بنویس, اولین بار نیست یک کتاب رو خلاصه نویسی میکنم قبل تر هم توی یک گروهی کتاب اعظم hands on machine learning رو خلاصه کردم بخش اولش رو. امروز بعد از تموم شدن کارهام و یادداشت هام رسیدم به اینکه وقتشه یک کتاب رو بخونم کتاب های نخونده, کارهای تموم نشده و… هست.
خودمونیش
بخش خودمونیش اینه که توی ماه های اخیر در کنار همه اتفاقات خوب کلی اتفاقات بد افتاد… فکر نمیکردم پدرم رو از دست بدم و در دام افسردگی شدیدی قرار گرفتم به طوری که دوست های نزدیکم هم نگرانم هستند. اوضاع کار و درس هم تعریفی نداره حالا بگذریم این چند وقت به اندازه حالم بد باشه.
راستی تازگی ها علاقمند به عکاسی شدم و با یک فروند Nikon D5500 و یک لنز 50mm f1.8 دارم تلاش میکنم که عکاسی کنم! تجربه جالبی اندکی بدور از دنیای دیجیتال. این عکس ها رو هم خودم گرفتم به نظر یکهویی زیبا شده.
معرفی کتاب refactoring
بریم سراغ بخش معرفی کتاب ولی قبلش نویسنده کتاب رو معرفی کنم. احسان رضایی, میتونید احسان رو از بلاگش developit.ir یا توییتر @developit121 پیدا کنید. احسان رو من به عنوان یک فرد دانا در زمینه بک اند میشناسم که php و golang کار میکنه و دوتا کتاب نوشته یکی کتاب الگوهای طراحی به بیان ساده(design patterns/دیزاین پترن) و دیگری ری فکتورینگ refactoring. حتما سری به سایت/بلاگش بزنید.
توی دنیا زبان فارسی نوشته های مهندسی نرم افزار کم هست و احسان از معدود نویسنده هایی هست که در این زمینه میشناسم. قلم ساده و جمع جور بودن (اینجا کتاب refactoring رو منظورم هست) از نکات مثبت اون.
تصمیم گرفتم یک ضرب کتاب رو بخونم و پیش برم.
جلد پشت کتاب:
چرا Refactoring؟
جواب سادس اگر برنامه نویسید لازمش دارید! فرقی نداره جونیور باشید یا سینیور به دلایلی نیاز دارید که این کار رو انجام بدید.
چرا این کتاب؟ دو دلیل اصلی من: ۱- زبان فارسی ۲- سادگی در کنار جامع بودن
تهیه این کتاب:
نگاهی به فهرست این کتاب:
فصل اول - مقدمه
مقدمه
بدهی فنی / Technical debt
فصل دوم - Code Smells
تعریف
Bloaters
- Long Method
- Large Class
- Long Parameter List
- Primitive Obsession
- Data Clumps
Object-Orientation Abusers
- Switch Statements
- Temporary Field
- Refused Bequest
- Alternative Classes with Different Interfaces
Change Preventers
- Divergent Change
- Shotgun Surgery
- Parallel Inheritance Hierarchies
Dispensables
- Lazy class
- Data class
- Duplicate Code
- Dead Code
- Speculative Generality
- Comments
Couplers
- Feature Envy
- Inappropriate Intimacy
- Message Chains
- Middle Man
فصل سوم - Composing Methods
تعریف
Extract Method
Inline Method
Inline Temp
Extract Variable
Replace Temp with Query
Split Temporary Variable
Remove Assignments to Parameters
Replace Method with Method Object
Substitute Algorithm
فصل چهارم - Moving Features between Objects
تعریف
Move Method
Move Field
Extract Class
Inline Class
Hide Delegate
Remove Middle Man
Introduce Foreign Method
فصل پنجم - Organizing Data
تعریف
Self Encapsulate Field
Encapsulate Field
Encapsulate Collection
Replace Data Value with Object
Change Value to Reference
Change Reference to Value
Replace Array with Object
Duplicate Observed Data
Change Unidirectional Association to Bidirectional
Change Bidirectional Association to Unidirectional
Replace Magic Number with Symbolic Constant
Replace Type Code with Class
Replace Type Code with Subclasses
Replace Subclass with Fields
فصل ششم - Simplifying Conditional Expressions
تعریف
Decompose Conditional
Consolidate Conditional Expression
Consolidate Duplicate Conditional Fragments
Remove Control Flag
Replace Nested Conditional with Guard Clauses
Replace Conditional with Polymorphism
Introduce Null Object
Introduce Assertion
فصل ششم - Simplifying Conditional Expressions
تعریف
Rename Method
Remove Parameter
Separate Query from Modifier
Parameterize Method
Replace Parameter with Explicit Methods
Preserve Whole Object
Replace Parameter with Method Call
Introduce Parameter Object
Remove Setting Method
Hide Method
Hide Method
Replace Error Code with Exception
Replace Exception with Test
فصل هشتم - Dealing with Generalization
تعریف
Pull Up Field
Pull Up Method
Pull Up Constructor Body
Push Down Field
Push Down Method
Extract Subclass
Extract Superclass
Extract Interface
Collapse Hierarchy
Form Template Method
Replace Inheritance with Delegation
Replace Delegation with Inheritance