حسین پناهنده
حسین پناهنده
خواندن ۷ دقیقه·۳ سال پیش

02-مقدمه کتاب: چکیده کدنویسی تمیز(clean code) اثری فاخر از عمو باب (:


. لینک پست قبلی(پیشگفتار)

سلام?
توی قسمت قبلی، من یک بیوگرافی کوچیک از خودم دادم و شروع کردم به توضیح هدفم از تولید این محتوا و اینکه مبدا شکل گیری هدفم از کجا بود و ...
ولی از این قسمت به بعد سعی میکنم مطالب رو بیشتر متمرکز کنم روی محتوای کتاب و کمتر راجع به مسائل حاشیه‌ای صحبت کنم.
قبل از شروع، می‌خوام یک تشکر از سایت www.zerobook.ir بابت انتشار کتاب به صورت ترجمه شده بکنم و اینکه بقیه کتاب های عمو باب(کدنویس تمیز و معماری تمیز) هم موجود داره و قابل خریداری است.

ترجیح میدم خلاصه مقدمه کتاب رو با یک سوال شروع کنم:

چرا باید به تمیزی کد اهمیت بدیم؟

کل ماجرا به اونجایی برمیگرده که به این درک و فهم برسیم که، چیز های کوچک، کم اهمیت نیستند!
همون‌جور که معمار معروف "لودویگ میس فن در روهه" میگه : خداوند در جزيیات نهفته است.
فرض کنید دو نوع معمار ساختمان وجود داره: نوع اول شخصی آماتوره که هدف‌اش از ساختن یک آپارتمان فقط به اتمام رسوندن ماجرا و تموم کردن پروژه‌ است، و توجه‌ای به ظرافت ساخته‌ی خودش نداره و از کنار جزيیات به سادگی رد میشه، ولی شخص دوم که توی کار خودش حرفه‌ایه و آگاه به این موضوعه که کیفیت کل پروژه تحت‌الشعاع کیفیت تک‌تک اجزای کوچیکه اونه، از کنار انتخاب دستگیره‌های در اون آپارتمان هم به سادگی نمی‌گذره و ترجیح میده یا یک کاری با ظرافت تمام انجام بشه یا اصلا انجام نشه!
پر واضحه که توی مثال بالا شخص دوم رو میشه هنرمند صدا زد و ارزش خروجی کار خیلی بالاتری نسب به شخص اول داره. از این مثال میشه این برداشت رو کرد که: موارد کوچیک مهم هستند.
پس یکی از موارد حرفه‌ای بودن، توجه به نکات ریز و کوچیکه.
البته توجه به جزيیات، بیشتر به عنوان اساس و پایه حرفه‌ای بودن شناخته میشه نه داشتن دیدگاه‌های عالی(کمال گرایی)، حالا چرا؟ به دو دلیل:
اولا، تمرین‌های کوچیک باعث میشه که متخصصان مهارت و اطمینان لازم رو برای انجام کارهای بزرگ به دست بیارن.
دوما، کوچیک‌ترین بینظمی در ساختمان مثله کاشی‌ای که یکمی کجه یا یک میز کثیف و نامرتب، کاملا جذابیت یک مکان بزرگ و مجلل رو از بین میبره. این همون مفهومی که کد تمیز بیان میکنه.
در حالی که، معماری فقط یک استعاره برای توسعه نرم‌افزاره و مخصوصا برای بخشی از نرم‌افزار که محصولی اولیه رو ارایٔه میکنه، مثله اینه که یک معمار یک ساختمان تازه رو تحویل میده.
در همین راستا یک "رویکرد کیفیت" در ژاپن توی سالهای ۱۹۵۱ با عنوان TMP روی صحنه اومد که تمرکز‌اش بیشتر روی نگهداری محصول بود نه تولید. خیلی جالبه که یکی از ستون‌های اصلی این رویکرد، یک مجموعه اصوله که به اصطلاح بهش 5S میگن و جلوتر بهش میرسیم.
این اصول شامل ۵ مورده به شرح زیر:
۱- Seiri: سازمان‌دهی کردن(یا همون مرتب کردن)
۲-Seiton: مرتب بودن(یا همون سیستماتیک)
۳-Seiso: تمیز کردن
۴-Seiketsu: استاندارد عمل کردن
۵-Shutsuke: منظبط بودن
حالا شاید بگی اینایی که گفتی یعنی چی و چه ربطی به موضوع ما داره؟! آفرین، سوال خوبیه الان میگم.
این دیدگاه‌های انتزاعی نسبت به تولید محصول(حالا هر محصولی، می خواد ماشین باشه، آپارتمان باشه یا اصلا یک قطعه موسیقی) خیلی واضح داره میگه روی جزییات محصول تمرکز کن.
یعنی چی؟ یعنی کد باید از هر ۵ فیلتر بالا بگذره تا بشه بهش بگیم "کد تمیز".
توی همون مثال معماری که زدیم، توجه کردن به انتخاب دستگیره در، داره مورد ۱ رو بیان میکنه دقیقا همون قدر که ما باید به انتخاب اسم متغییر هامون دقت کنیم. ما باید به انتخاب اسم متغییر هامون به اندازه اسم کودک تازه متولد شده‌مون اهمیت بدیم!
مورد دیگه‌ای که توی مقدمه آورده شده اینه که، این کتاب مارو وادار میکنه تا چالش‌های خوندن دستورالعمل‌های خوبی رو ادامه بدیم که قبلا با بی‌تفاوتی از کنارشون رد میشدیم.
متاسفانه، ما معمولا این نگرانی هارو به عنوان پایه‌های اصلی هنر برنامه‌نویسی نمیبینیم.ما یک زمان‌هایی دیگه کدنویسی نمیکنیم نه بخاطر اینکه دیگه کاری برای انجام نداریم، بخاطر اینکه تمرکز سیستم بیشتر روی ظاهر بیرونیه تا اون‌چیزی که ما ارایٔه میدیم.یکی دیگه از اهداف این کتاب اینه که این فرهنگ رو به وجود بیاره که، معماری یا برنامه‌نویسی یا مفاهیم سطح بالا دلیل کیفیت باشن نه تسلط روی ابزارها و روش‌های طراحی عالی و ...
درحالی که بازنویسی(refactor) در تولید باعث ایجاد هزینه میشه، بازنگری(review) در طراحی منجر به ارزشه. این همون تفاوت بین مفاهیم سطح بالا با بقیه مفاهیمه که اشتباها معیار تایین کیفیت برای کد تمیزه.
تمام این حرف‌ها گفته شد تا به این نتیجه برسیم که، جمله‌ی "راستگویی در مورد موارد کوچک، کم اهمیت نیست" نه تنها مارو به توجه به موارد کوچیک توصیه میکنه، بلکه به صادق بودن درمورد چیزهای کوچیک نیز دعوت میکنه. معنی این جمله توی کار ما اینه که: ما باید با کدمون صادق باشیم، با همکارامون در مورد وضعیت کدمون صادق باشیم، از همه مهم‌تر با خودمون درباره کدی که نوشتیم صادق باشیم.
شاید این ذهنیت اشتباه برامون به وجود بیاد که این موارد نگرانی‌های بیش از اندازه‌اس، ولی باید در نظر داشته باشیم که هیچ معماری و کدنویسی تمیزی بر کمال‌گرایی اصرار نداره، فقط به صداقت و انجام بهترین کاری که می‌تونیم انجام بدیم تاکید داره.


معرفی کتاب

دوتا اتاق رو در نظر بگیرید که توی هر دوی اونا داره فرآیند کد ریویو انجام میشه; یک واحد اندازه گیری کیفیت کد وجود داره به اسم WTF/minute، یعنی تعداد وات د فاک گفتن در یک دقیقه زمانیکه داریم کد رو بازبینی میکنیم((((((:
حالا یک اتاق تعداد وا د فاک‌هاش زیاده یکی کم.
آیا با دلهره، مشغول اشکال زدایی کدهامون هستیم؟
آیا به کدهایی خیره شدیم که فکر میکردیم کار میکنه؟
آیا مشتری ها شما رو تحت فشار گذاشتن؟
آیا مدیر ها همیشه مزاحم شما میشن؟
چطور وقتی دچار مشکل میشیم، مطمیٔن بشیم که توی کدوم اتاق هستیم؟ جواب: استاد شدن.
دو بخش برای یادگیری استاد شدن وجود داره: دانش و به کارگیری اون.
ما باید دانش اصول، الگوها، شیوه‌ها و ... یک استاد کار رو به دست بیاریم و بعد از طریق سخت کار کردن و تمرین کردن اون دانش رو توی خودمون به وجود بیاریم.
یک مثال برای درک این مسیٔله: ما میتونیم اصول فیزیکی دوچرخه سواری رو یاد بگیریم و با توجه به این فرمول‌ها به این نتیجه برسیم که دوچرخه‌سواری امکان پذیره و تمام دانش مربوط بهش رو هم کسب کنیم. ولی با این حساب باز هم برای اولین بار که می‌خوایم سوار بشیم، باز هم از روی اون میوفتیم زمین(: کدنویسی از این قاعده مستثنی نیست.
هدف این کتاب هم دقیقا همینه، درسته که به ما اصول درست کدنویسی رو یاد میده ولی این تازه نصف راهه، نصف دیگه‌اش مربوط میشه به تمرین‌های سخت و به اصطلاح همون زمین خوردن از روی دوچرخه و دوباره تلاش کردن.
نکته‌ای که به صورت واضح ذکر شده اینه که: این کتاب از اون دسته کتاب‌های"حس بهتر" نیست که شما میتونین توی یک سفر هوایی قبل از رسیدن به زمین بخونین، این کتاب شمارو مجبور میکنه که سخت تمرین کنین.

این کتاب به سه قسمت تقسیم شده:

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

اگر که قسمت های یک و سه رو خوندین و از قسمت دو چشم‌پوشی کردین یا حتی به صورت روزنامه‌وار فقط مطالعه کردین، بهتره که خودتون و بقیه رو گول نزنین و این واقعیت رو قبول کنین که شما فقط یک کتاب"حس خوب"(استعاره از کتاب هایی که مطالعه‌شون جنبه تفریحی دار) رو درباره‌ی نحوه‌ی نوشتن نرم‌افزار خوب خوندین.

نتیجه‌گیری نهایی: تنها زمانی این کتاب روی ما اثر میزاره که، وقت خودمون رو صرف کار کردن روی مطالعات موردیش کنیم و به دنبال هرگام کوچیک و تصمیم گیری در هر دقیقه‌اش خودمون رو به جای نویسنده قرار بدیم و سعی کنیم که خودمون رو مجبور کنیم به فکر کردن توی همون مسیرهایی که نویسنده فکر کرده، اونجایه که ما به فهم عمیق‌تری از اصول، الگوها، شیوه‌ها و اکتشافات میرسیم.


وقتی که ما به دوچرخه‌سواری مسلط شویم، دوچرخه‌سواری جزيی از ما خواهد شد.


خوب این قسمت از کتاب که بخش مقدمه و معرفی کتاب بود هم تموم شد.از قسمت بعدی وارد بخش اصلی کتاب میشیم که تازه شروع ماجراست((:
منتظر قسمت بعدی باش، راستی لینک قسمت قبل رو هم بالای همین پست گزاشتم، اگه این پست رو به عنوان اولین پست از سری خلاصه نویسی‌های کتاب کدنویسی تمیز می‌خونی بهتره که از اولین پست شروع کنی.
خدا نگهدار.✋

(آیدی اینستاگرام من: hossein._.no1)

03-فصل اول: چرایی و تعریف کد تمیز

برنامه نویسیکدنویسیکدنویسی تمیزdeveloperclean code
برنامه نویس اندروید٬ عاشق یادگیری و کشته مرده سبک موسیقی راک
شاید از این پست‌ها خوشتان بیاید