clean-code-persian icon indicating copy to clipboard operation
clean-code-persian copied to clipboard

📔 group translation and update of the Clean Code book

ترجمه آزاد کتاب کد تمیز

این پروژه یک کار گروهی برای ترجمه آزاد یکی از بهترین کتاب های برنامه نویسیه.بعد از اینکه توسعه ریپازیتوری اصلی متوقف شد تصمیم گرفتیم اینجا این پروژه رو تکمیل و بهبود بدیم

درباره کتاب

این کتاب سعی دارد توسعه‌ی نرم‌افزار به روش چابک (Agile) را به شما آموزش دهد. داستان نوشتن کتاب از آنجا شروع شد که رابرت.سی.مارتین (Robert C. Martin معروف به عمو باب) نویسنده‌ی این کتاب، مدت‌ها قبل، سردمدارانِ تفکرِ اجایل را به یک دورهمی دوستانه دعوت کرد. هدف اصلی این دورهمی بررسی نقاط اشتراک متدهای توسعه نظیر اسکرام، کریستال، ایکس.پی، پراگماتیک و … بود. نهایتاً نتیجه‌ی این گردهمایی به نام‌گذاری متدها و طبقه‌بندی روش‌های مختلف زیر پرچمی تحت عنوان اجایل/چابک (یا Adaptive) منتهی شد. از دیگر ثمرات این جلسه، توافق بر سر ۴ ارزش (Value) کلیدی و ۱۲ اصل(Principle) دیگر مبتنی بر ارزش‌های فوق بود که می‌توانید در اجایل‌مانیفستو مطالعه کنید.

بعدها عمو باب به کمک سایر همکارانش در موسسه‌ی Object Mentor روش‌های مختلف کدنویسی را بررسی کرده و بهترین موارد را استخراج کردند. این روش‌ها به تدریج روی هم تلنبار شد و نهایتاً در قالب کتابِ Clean Code در اختیار عموم برنامه‌نویسان قرار گرفت. مفاهیم این کتاب تا آنجا مورد توجه توسعه‌دهندگان قرار گرفت که در مدت کوتاهی به یکی از پرفروش‌ترین کتاب‌های آمازون تبدیل شد. رابرت.سی.مارتین با تکیه بر اصول اجایل، نکاتی را در کتابش مطرح کرد که باعث تمییزتر شدن کدها، نگه‌داری آسان‌تر، درک بهتر منطق برنامه و بهبود عملکرد آن می‌شود. در این کتاب روش نوشتن کدهای ماژولار، چگونگی اشکال‌زدایی برنامه، نحوه‌ی استفاده از توسعه‌ی آزمون محور (TDD: Test Driven Development) و … نیز آموزش داده می‌شود.

بیشتر بخوانید

راهنمای مشارکت

بخش هایی از کتاب که به زبان انگلیسی هستند و ترجمه نشده. کافیه اون قسمت ها رو با ترجمه جایگزین کنید و یه ریکوئست بفرستید. منم سر وقت اون رو باز بینی میکنم و اگه خوب بود به ترجمه اضافه میشه.

بخش های ترجمه شده

  • 0_مقدمه

  • 1_کد تمیز

    • کد همیشه وجود خواهد داشت

    • کد بد

    • هزینه کلی مالک یک شلختگی بودن

    • طراحی مجدد بزرگ در اسمان

    • نگرش

    • مسئله بغرنج اصلی

    • هنر کد تمیز؟

    • کد تمیز چیست؟

    • مکتب فکری!

  • 2_اسامی با معنی

    • استفاده از اسم‌های بیان کننده منظور (Intention-Revealing Names)

    • خودداری از دادن اطلاعات اشتباه

    • تفاوت‌های با معنی ایجاد کنید

    • از اسم‌های قابل تلفظ استفاده کنید

    • از اسامی قابل جستجو استفاده کنید

    • از رمزگذاری خودداری کنید

      • نمادگذاری مجارستانی

      • پیشوندهای متغیر

      • واسط‌ها (interface) و پیاده‌سازی‌ها

    • از نگاشت ذهنی خودداری کنید

    • نام کلاس‌ها

      • نام متدها
    • بانمک نباشید

    • برای هر مفهوم یک کلمه انتخاب کنید

    • با ایهام ننویسید

    • از دامنه واژگان مربوط به راه حل استفاده کنید

    • از دامنه واژگان صورت مسئله استفاده کنید

    • ساختارهای با معنی اضافه کنید

    • سخن پایانی

  • 3_توابع

    • کوچک بودن!
      • بلوک ها و تو رفتگی ها
    • انجام دادن یک کار دیگر
      • بخش‌های داخت توابع
    • یک سطح انتزاع به ازای هر تابع
      • خواندن کد از بالا به پایین: قاعده گام به گام
    • Switch Statements
    • استفاده از نام های توصیفی
    • آرگومان های تابع
      • فرم رایج Monadic
      • آرگومان های پرچم
      • توابع Dyadic
      • سه آرگومانی
      • آبجکت های آرگومان
      • لیست های آرگومان
      • افعال و کیوردها
    • نداشتن هیچ عوارض جانبی
      • آرگومان های خروجی
    • جداسازی رایج Query
    • ترجیح Exception ها نسبت به برگرداندن کد خطا
      • استخراج بلوک های Try/Catch
      • مدیریت خطا یک چیز است
      • آهنربای وابستگی Error.java
    • خود را تکرار نکنید
    • برنامه نویسی ساخت یافته
    • چگونه می توانید توابعی مانند این را بنویسید؟
    • نتیجه گیری
  • کامنت ها ۴

    • کامنت ها برای کد بد نوشته نشده اند
    • منظورتان را با کد برسانید
    • کامنت های خوب
      • کامنت های قانونی
      • کامنت های آموزنده
      • شرح نیت
      • شفاف سازی
      • هشدار پیامدها
      • TODO کامنت های
      • تقویت
      • اسناد java در API های عمومی
    • کامنت های بد
      • غرزدن
      • کامنت های اضافی
      • کامنت‌های گمراه کننده
      • کامنت های مجاز
      • کامنت های گزارشی
      • کامنت های شلوغ
      • شلوغی هولناک
      • زمانی که میتوانید از یک تابع یا متغییر استفاده کنید از کامنت ها استفاده نکنید
      • نشانگرهای موقعیت
      • کامنت های بستن آکولاد
      • خصیصه‌ها و خطوط معرف نویسنده کد
      • کامنت کردن کد
      • HTML کامنت های
      • اطلاعات غیرمحلی
      • اطلاعات بیش از اندازه
      • ارتباط نامشخص
      • عناوین تابع
      • اسناد java در کد غیرعمومی
      • مثال
  • ۵ قالب‌بندی

    • هدف قالب‌بندی
    • قالب بندی عمودی
      • استعاره روزنامه
      • گشودگی عمودی بین مفاهیم
      • تراکم عمودی
      • فاصله عمودی
      • ترتیب عمودی
    • قالب‌بندی افقی
      • گشودگی و چگالی افقی
      • ترازبندی افقی
      • تورفتگی
      • دامنه های ساختگی
    • قوانین تیم
    • قوانین قالب بندی عمو باب