بلاگ

معرفی کتاب Refactoring و کمی گپ خودمونی

معرفی کتاب Refactoring و کمی گپ خودمونی

توی این پست بعد از مدتها میخوام یک کتاب خوب معرفی کنم در زمینه برنامه نویسی و بعدش شاید یکم گپ خودمونی بزنم. همین دیشب بود که حمید بهم گفت بیا و خلاصه بنویس, اولین بار نیست یک کتاب رو خلاصه نویسی میکنم قبل تر هم توی یک گروهی کتاب اعظم hands on machine learning رو خلاصه کردم بخش اولش رو. امروز بعد از تموم شدن کارهام و یادداشت هام رسیدم به اینکه وقتشه یک کتاب رو بخونم کتاب های نخونده, کارهای تموم نشده و… هست.

خودمونیش

بخش خودمونیش اینه که توی ماه های اخیر در کنار همه اتفاقات خوب کلی اتفاقات بد افتاد… فکر نمیکردم پدرم رو از دست بدم و در دام افسردگی شدیدی قرار گرفتم به طوری که دوست های نزدیکم هم نگرانم هستند. اوضاع کار و درس هم تعریفی نداره حالا بگذریم این چند وقت به اندازه حالم بد باشه.

راستی تازگی ها علاقمند به عکاسی شدم و با یک فروند Nikon D5500 و یک لنز 50mm f1.8 دارم تلاش میکنم که عکاسی کنم! تجربه جالبی اندکی بدور از دنیای دیجیتال. این عکس ها رو هم خودم گرفتم به نظر یکهویی زیبا شده.

معرفی کتاب refactoring

کتاب refactoring

بریم سراغ بخش معرفی کتاب ولی قبلش نویسنده کتاب رو معرفی کنم. احسان رضایی, میتونید احسان رو از بلاگش developit.ir یا توییتر @developit121 پیدا کنید. احسان رو من به عنوان یک فرد دانا در زمینه بک اند میشناسم که php و golang کار میکنه و دوتا کتاب نوشته یکی کتاب الگوهای طراحی به بیان ساده(design patterns/دیزاین پترن) و دیگری ری فکتورینگ refactoring. حتما سری به سایت/بلاگش بزنید.

توی دنیا زبان فارسی نوشته های مهندسی نرم افزار کم هست و احسان از معدود نویسنده هایی هست که در این زمینه میشناسم. قلم ساده و جمع جور بودن (اینجا کتاب refactoring رو منظورم هست) از نکات مثبت اون.

تصمیم گرفتم یک ضرب کتاب رو بخونم و پیش برم.

جلد پشت کتاب:

کتاب 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