Temiz Kod İlkeleri

Temiz Kod İlkeleri Programlama Deneyiminizi Nasıl Dönüştürür?

Kod bir kez yazılır ve yüzlerce kez okunur. Bir fonksiyonu yazan geliştirici, nadiren altı ay sonra hata ayıklamasını yapan, yeni bir gereksinim için genişleten veya üretim sırasında meydana gelen bir olayda uç durumlarını anlamak zorunda kalan kişidir. Kod yazarken alınan her karar; bir değişkenin adı, bir fonksiyonun uzunluğu, bir sınıfın yapısı, bir sonraki okuyucunun işini ya kolaylaştırır ya da zorlaştırır. Temiz kod, sistematik olarak kolaylaştırma disiplinidir.

Bu kavram, Robert C. Martin, "Uncle Bob" tarafından Clean Code: A Handbook of Agile Software Craftsmanship (2008) adlı eserinde resmileştirilmiştir ve bu eser, konuyla ilgili temel referans kaynağı olmaya devam etmektedir. Martin Fowler'ın Refactoring: Improving the Design of Existing Code adlı eseri ise tamamlayıcı bir sorunu ele almaktadır: mevcut kod temiz değilse ve temizlenmesi gerekiyorsa ne yapılmalı? Bu iki eser birlikte, temiz kod uygulamasının entelektüel temelini tanımlar. Bu kılavuz, kurumsal eski sistemleri sürdüren geliştiriciler için RPG ve PL/I dahil olmak üzere en yaygın kullanılan dillerde çalışan kod örnekleriyle birlikte temel prensiplerini kapsamaktadır.

Gözle Görülmeyen Kod İhlallerini Temizleyin

SMART TS XL COBOL, Java, Python, RPG ve daha birçok dilde karmaşıklığı, tekrarlanan kodları ve kullanılmayan kodları bulur.

Daha fazla bilgi

Temiz Kod Nedir?

Temiz kod, okunması, anlaşılması, test edilmesi ve değiştirilmesi kolay olan kaynak koddur. Bu tanımda "kolay" kelimesi gerçekten önemli bir rol oynuyor. Bir derleyicinin kabul ettiği kod, mutlaka temiz kod değildir. Tüm testlerden geçen kod da mutlaka temiz kod değildir. Kod, onu yazmayan başka bir geliştirici tarafından, yazıldığı sırada öngörülmeyen bir bağlamda, amacını hızlıca anlayabiliyor, güvenle değiştirebiliyor ve beklenmedik sonuçlar olmadan genişletebiliyorsa temizdir.

Martin Fowler'ın tanımı en çok alıntılananıdır: "Herhangi bir aptal, bilgisayarın anlayabileceği kod yazabilir. İyi programcılar ise insanların anlayabileceği kod yazarlar." Temiz kodun ölçütü, makine tarafından yürütülme değil, insan kavrayışıdır.

Temiz kod estetikle ilgili değildir. Kendi başına belirli bir stil kılavuzunu takip etmekle de ilgili değildir. Temiz kod, her yeni değişikliğin ne kadar çaba gerektireceğini belirleyen kodun yapısal özellikleriyle ilgilidir. Temiz kod ilkelerini sürekli ihlal eden bir kod tabanı, geçmişteki kısayolların bileşik maliyeti olan teknik borcu sürekli olarak biriktirir; ta ki her yeni özellik, yeni bir şey eklemeden önce mevcut karmaşıklığı anlamayı ve dikkatlice yönetmeyi gerektirene kadar.

Temiz Kod Prensipleri: Hızlı Referans

Robert C. Martin'in temiz kod ilkeleri, uygulanabilir bir dizi kılavuz olarak özetlenebilir. Aşağıdaki tablo, her ilkeyi temel kuralı ve önlediği sorunla eşleştirmektedir:

IlkeÇekirdek KuralÖnlediği Sorun
Anlamlı İsimlerİsimler amacı, değişkenleri, fonksiyonları ve sınıfları ortaya koymalıdır.Bilişsel yük kod çözme nedir x, tmpya da obj aslında temsil ediyor
Küçük FonksiyonlarFonksiyonlar tek bir şey yapar; tek bir ekrana sığar.Test edilemez, okunamaz, sorumlulukları birbirine karıştıran devasa yapılar.
Tek SorumlulukHer sınıfın/modülün değişmesinin bir nedeni vardır.Birbirinden bağımsız birçok şeyin değişmesiyle bozulan Tanrı dersleri.
KURU (Kendinizi Tekrar Etmeyin)Her bilgi parçasının bir temsili vardır.Hata düzeltmeleri bir kopyada uygulandı, diğerlerinde uygulanmadı; mantık kayması
KISS (Keep It Simple - Basit Tut)İşe yarayan en basit çözümü tercih edin.Kimsenin aklına gelmeyen sorunları çözen, aşırı karmaşık kod.
YAGNI (Buna İhtiyacın Olmayacak)İhtiyaç duyulana kadar özellik geliştirmeyin.Faydasız karmaşıklık yaratan, ölü spekülatif kod.
Açık/Kapalı PrensibiUzatılmaya açık, değiştirilmeye kapalı.Yeni davranış eklenirken mevcut davranışı bozan kod.
Endişelerin AyrılmasıFarklı yerlerde farklı sorumluluklarBir şeyi değiştirmenin, birbiriyle ilgisi olmayan başka şeyleri de bozduğu karmaşık kod yapısı.
"Ne" sorusuna yorum yapmaktan kaçının; "Neden" sorusuna yorum yapın.Kod ne olduğunu açıklar; yorumlar nedenini açıklar.Güncelliğini yitirmiş ve bilgilendirmekten çok yanıltıcı yorumlar.
İzci KuralıKodu bulduğunuzdan daha temiz bırakın.Aşamalı ihmal nedeniyle kalitenin kademeli olarak azalması

Temiz Kodun Temel Prensipleri Açıklandı

KURU, Kendini Tekrarlama

DRY (Don't Repeat Yourself - Kendini Tekrarlama) ilkesi, bir sistem içinde her bilgi parçasının tek, açık ve yetkili bir temsile sahip olması gerektiğini savunur. Aynı mantık birden fazla yerde göründüğünde, bu temsiller kaçınılmaz olarak farklılaşır. Bir iş kuralı değişikliği, birden fazla dosyada arama ve değiştirme işlemine dönüşür ve bir kopyanın eksik olması bir hataya yol açar.

DRY prensibi yalnızca kopyala yapıştır kod için geçerli değildir. Yapılandırma, dokümantasyon ve veri şemaları için de geçerlidir. Aynı bilginin iki yerde korunması gerekiyorsa, kodun birebir kopyalanıp kopyalanmadığına bakılmaksızın DRY prensibini ihlal etmiş olursunuz.

KISS, Basit Tut,

KISS (Keep It Simple, Stupid - Basit Tut, Aptal) yaklaşımına göre, sistemler en iyi şekilde basit tutulduğunda çalışır ve basitlik temel bir tasarım hedefi olmalıdır. Karmaşıklık, gelişmişliğin bir işareti değil, bir şeyin daha açık bir şekilde ifade edilebileceğinin bir işaretidir.

Pratik çıkarım şu: İki çözüm aynı problemi çözüyorsa, daha basit olanı tercih edin. Daha karmaşık çözüm, henüz karşılaşmadığınız uç durumları ele alabilir. Bu, kodla karşılaşan herkes için anlaşılmasını kesinlikle zorlaştıracaktır.

YAGNI, Buna İhtiyacınız Olmayacak

YAGNI, ihtiyaç duyulana kadar işlevsellik eklemeyi önermez. Bu, gelecekte gerçekleşmesi beklenen ancak asla gerçekleşmeyen gereksinimler için esnek, genişletilebilir sistemler oluşturma yönündeki yaygın dürtüye bir yanıt niteliğindedir. Varsayımsal bir gelecekteki kullanım durumu için var olan her soyutlama, arayüz ve yapılandırma seçeneği, bugün kodu okuyan her geliştirici için bilişsel bir yük oluşturur.

Anlamlı İsimler

İsimler, kaynak kodda birincil iletişim mekanizmasıdır. Örneğin, bir fonksiyona şu isim verilir: process() İşlediği şey, ne zaman işlediği veya ne döndürdüğü hakkında hiçbir bilgi vermez. calculateMonthlyInterest() Kesin bir şekilde iletişim kurar.

Bir isim için temel testler şunlardır: Uygulamasını okumadan neyi temsil ettiğini anlayabilir misiniz? İsim, amacını, parametrelerini ve dönüş değerini ortaya koyuyor mu? Ne yaptığını açıklamak için bir yoruma ihtiyacınız olur mu?

Küçük Fonksiyonlar

Robert C. Martin'in temel kuralı şudur: Fonksiyonlar küçük olmalı, gerekenden daha küçük olmalıdır. Tek bir iş yapan bir fonksiyon açıkça adlandırılabilir, tek başına test edilebilir ve uygulamasını okumadan anlaşılabilir. Birden fazla iş yapan bir fonksiyon ise bunların hepsini aynı anda anlamayı gerektirir.

İşlevlere uygulanan tek sorumluluk ilkesi şudur: Bir işlev tek bir şey yapmalı, onu iyi yapmalı ve yalnızca onu yapmalıdır. Bir işlevin ne yaptığını açıklamak için "ve" kelimesine ihtiyaç duyuyorsanız, muhtemelen çok fazla şey yapıyor demektir.

Java'da Temiz Kod

Java'nın ayrıntılı yapısı, temiz kod disiplinini özellikle önemli kılıyor. Dilin gerektirdiği şablon kodlar, dikkatli yönetilmediği takdirde kodun amacını gizleyebilir.

Java

// Before: unclear names, mixed responsibilities, magic numbers
public double calc(int x, int y) {
    double r = 0;
    if (y > 1000) {
        r = x * y * 0.1;
    } else {
        r = x * y * 0.05;
    }
    return r;
}

// After: meaningful names, single responsibility, named constants
private static final double PREMIUM_DISCOUNT_RATE = 0.10;
private static final double STANDARD_DISCOUNT_RATE = 0.05;
private static final int PREMIUM_THRESHOLD = 1000;

public double calculateDiscount(int quantity, int unitPrice) {
    double subtotal = quantity * unitPrice;
    return isPremiumOrder(unitPrice) 
        ? subtotal * PREMIUM_DISCOUNT_RATE 
        : subtotal * STANDARD_DISCOUNT_RATE;
}

private boolean isPremiumOrder(int unitPrice) {
    return unitPrice > PREMIUM_THRESHOLD;
}

Java için temel temiz kod uygulamaları şunlardır: kalıtım yerine bileşimi tercih edin, veri işleme için uzun döngüler yerine akışları kullanın, sihirli sayıları adlandırılmış sabitlere ayırın ve sınıfları tek bir sorumluluğa odaklı tutun. Robert C. Martin'in Java için temiz kod ilkeleri arasında, sınıfların satır sayısıyla değil, sorumluluk sayısıyla ölçülen küçük olması gerektiği kuralı da yer alır.

Java

// Clean Java: streams over imperative loops
List<String> activeUserEmails = users.stream()
    .filter(User::isActive)
    .map(User::getEmail)
    .collect(Collectors.toList());

Python'da Temiz Kod

Python'ın tasarım felsefesi olan "açık olan, örtük olandan daha iyidir; basit olan, karmaşık olandan daha iyidir" ilkesi, temiz kod prensipleriyle doğal olarak örtüşmektedir. PEP 8, Python'ın resmi stil kılavuzu ve temiz Python kodu için temel ölçüttür.

piton

# Before: vague names, long function, no separation
def do_stuff(d):
    res = []
    for i in d:
        if i['a'] > 18:
            res.append(i['n'].upper())
    return res

# After: meaningful names, separated concerns, Pythonic style
def get_adult_names_uppercase(users: list[dict]) -> list[str]:
    return [
        user["name"].upper()
        for user in users
        if user["age"] > 18
    ]

piton

# Clean Python: context managers for resource handling
# Before: manual, error-prone
f = open("data.txt")
data = f.read()
f.close()

# After: guaranteed cleanup, self-documenting intent
with open("data.txt") as f:
    data = f.read()

Python'a özgü temiz kod, basit dönüşümler için manuel döngüler yerine liste anlama ifadelerini, kendi kendini belgeleyen fonksiyon imzaları için tür ipuçlarını, kaynak yönetimi için bağlam yöneticilerini ve yapılandırılmış veriler için yalın sözlükler yerine veri sınıflarını veya adlandırılmış demetleri kullanır.

JavaScript ve TypeScript'te Temiz Kod

JavaScript'in esnekliği hem gücü hem de temiz kod konusunda karşılaştığı en büyük zorluktur. Disiplin olmadan, JavaScript kod tabanlarında tutarsız kalıplar, örtük tür dönüştürmeleri ve karmaşık geri çağırma zincirleri birikir.

javascript

// Before: var, callback hell, no error handling
function getUser(id, cb) {
    db.query('SELECT * FROM users WHERE id = ' + id, function(err, rows) {
        if (err) cb(err);
        cb(null, rows[0]);
    });
}

// After: async/await, parameterized query, proper error handling
async function getUserById(userId: number): Promise<User | null> {
    const [rows] = await db.execute(
        'SELECT * FROM users WHERE id = ?',
        [userId]
    );
    return rows[0] ?? null;
}

daktilo ile yazılmış yazı

// Clean TypeScript: explicit types replace implicit any
// Before
function process(data) {
    return data.map(x => x.v * 2);
}

// After
interface DataPoint {
    value: number;
    label: string;
}

function doubleValues(dataPoints: DataPoint[]): number[] {
    return dataPoints.map(point => point.value * 2);
}

Temiz JavaScript kullanımı const varsayılan olarak, let Yeniden ciltleme gerektiğinde ve asla varSaf fonksiyonlar, aynı girdinin her zaman aynı çıktıyı üretmesi, yan etkilerinin olmaması nedeniyle JavaScript mantığının en temiz yapı taşıdır.

C# ile Temiz Kod

C#, temiz ve anlamlı kod yazmak için güçlü özellikler sunar. Dilin evrimi, LINQ, kayıtlar, desen eşleştirme, boş değer alabilen referans türleri, sürekli olarak daha bildirimsel ve okunabilir bir sözdizimine doğru ilerlemektedir.

csharp

// Before: magic numbers, verbose loop, mutable state
public double CalculateTotal(List<OrderItem> items)
{
    double total = 0;
    foreach (var item in items)
    {
        if (item.Quantity > 10)
            total += item.UnitPrice * item.Quantity * 0.9;
        else
            total += item.UnitPrice * item.Quantity;
    }
    return total;
}

// After: named constant, LINQ, single expression
private const double BulkDiscountRate = 0.9;
private const int BulkDiscountThreshold = 10;

public double CalculateTotal(IEnumerable<OrderItem> items) =>
    items.Sum(item => item.Quantity > BulkDiscountThreshold
        ? item.UnitPrice * item.Quantity * BulkDiscountRate
        : item.UnitPrice * item.Quantity);

C# temiz kod prensipleri: kapsülleme için public alanlar yerine özellikler kullanın, bildirimsel veri işlemleri için LINQ'den yararlanın, değiştirilemez veri yapıları için kayıtlar kullanın, metot imzalarında somut tipler yerine arayüzleri tercih edin ve null değer alabilen referans tipleri kullanın.string? vs string) sıfır güvenliğini açık hale getirmek için.

Kotlin'de Temiz Kod

Kotlin'in tasarımı, Java'yı temiz tutmayı zorlaştıran gereksiz kod tekrarını azaltırken, temiz kodu doğal olarak destekleyen özellikler, veri sınıfları, genişletme fonksiyonları ve null güvenliği gibi unsurlar ekliyor.

KOTLIN

// Before: verbose Java-style Kotlin
class User {
    var name: String = ""
    var email: String = ""
    var age: Int = 0
}

fun processUsers(users: List<User>): List<String> {
    val result = mutableListOf<String>()
    for (user in users) {
        if (user.age >= 18) {
            result.add(user.email)
        }
    }
    return result
}

// After: idiomatic clean Kotlin
data class User(val name: String, val email: String, val age: Int)

fun getAdultEmails(users: List<User>): List<String> =
    users.filter { it.age >= 18 }.map { it.email }

Kotlin'in data class Eşitlik, hashCode, kopyalama ve toString yöntemlerini otomatik olarak sağlar, böylece Java veri sınıflarını uzun ve hataya açık hale getiren gereksiz kod tekrarını ortadan kaldırır. Genişletme fonksiyonları, kalıtım kullanmadan mevcut sınıflara temiz yardımcı yöntemler eklemenizi sağlar.

RPG ve PL/I'de Temiz Kod: Eski Diller, Modern Prensipler

Temiz kod prensipleri, dünya çapında finans sistemlerini, sigorta platformlarını ve devlet uygulamalarını çalıştıran kurumsal diller de dahil olmak üzere her dil için geçerlidir. RPG (Rapor Programı Oluşturucu) ve PL/I, birçok kuruluşta hala aktif olarak kullanılmaktadır ve Java veya Python'ı temiz kılan aynı disiplin, RPG ve PL/I'yi de sürdürülebilir kılmaktadır.

RPG'de (ILE RPG) temiz kod :

rpg

     // Before: cryptic two-character names, magic numbers
     C                   EVAL      D = Q * P * 1.05
     C                   IF        Q > 100
     C                   EVAL      D = Q * P * 0.95
     C                   ENDIF

     // After: meaningful names, named constants, clear intent
      /free
       dcl-c BULK_DISCOUNT_THRESHOLD 100;
       dcl-c BULK_DISCOUNT_RATE      0.95;
       dcl-c STANDARD_RATE          1.05;

       dcl-proc CalculateOrderTotal;
         dcl-pi *N packed(15:2);
           quantity  packed(7:0) value;
           unitPrice packed(9:2) value;
         end-pi;

         if quantity > BULK_DISCOUNT_THRESHOLD;
           return quantity * unitPrice * BULK_DISCOUNT_RATE;
         else;
           return quantity * unitPrice * STANDARD_RATE;
         endif;
       end-proc;
      /end-free

Temiz RPG uygulamalarının temel noktaları: ILE RPG'nin serbest formatını kullanın (/freeOkunabilirliği artırmak için sabit biçim yerine adlandırılmış sözdizimi kullanın, prosedürlere açıklayıcı isimler verin, sabit kodlanmış değerleri adlandırılmış sabitlerle değiştirin. dcl-cve uzun programları odaklanmış prosedürlere ayırmak için dcl-proc.

PL/I'de temiz kod :

kat

/* Before: single-letter names, no structure */
CALC: PROC(X, Y) RETURNS(FLOAT);
  DCL (X, Y, R) FLOAT;
  IF Y > 1000 THEN R = X * Y * 0.1;
  ELSE R = X * Y * 0.05;
  RETURN(R);
END CALC;

/* After: meaningful names, named constants, clear intent */
DCL PREMIUM_THRESHOLD  FIXED DECIMAL(7) INIT(1000);
DCL PREMIUM_RATE       FLOAT           INIT(0.10);
DCL STANDARD_RATE      FLOAT           INIT(0.05);

CALCULATE_DISCOUNT: PROC(QUANTITY, UNIT_PRICE) RETURNS(FLOAT);
  DCL (QUANTITY, UNIT_PRICE) FLOAT;
  DCL SUBTOTAL              FLOAT;

  SUBTOTAL = QUANTITY * UNIT_PRICE;

  IF UNIT_PRICE > PREMIUM_THRESHOLD
    THEN RETURN(SUBTOTAL * PREMIUM_RATE);
    ELSE RETURN(SUBTOTAL * STANDARD_RATE);

END CALCULATE_DISCOUNT;

PL/I'nin temiz kod prensipleri, modern dillerin prensiplerini yansıtır: anlamlı tanımlayıcılar (PL/I'nin 31 karakterlik sınırı açıklayıcı isimler için yeterlidir), sihirli sayılar yerine adlandırılmış sabitler, tek bir göreve odaklanmış prosedürler ve ON koşul sistemi kullanılarak açık hata yönetimi.

Temiz Kod Araçları ve Statik Analiz

Kod incelemesi yoluyla temiz kod ilkelerini manuel olarak uygulamak gerekli ancak büyük ölçekte yeterli değildir. Statik analiz araçları, temiz kod ölçütlerini otomatik olarak uygular ve birleştirilmeden önce ihlalleri işaretler.

araçDillerNeyi Uyguluyor
SonarQube / SonarCloud30+ dilKarmaşıklık, tekrarlama, kod hataları, güvenlik
Kontrol stiliJavaAdlandırma kuralları, biçimlendirme, yapı
PMDJava, ApexYinelenen kod, kullanılmayan değişkenler, karmaşıklık
ESLint + typescript-eslintJavaScript, Yazı TipiStil, karmaşıklık, kullanılmayan kod, asenkron desenler
Pylint + RadonPythonPEP 8, karmaşıklık, sürdürülebilirlik endeksi
Yeniden KeskinleştiriciC#Kod stili, gereksiz kod, yeniden düzenleme önerileri
ClippyRustDeyimsel kalıplar, yaygın hatalar
SMART TS XLCOBOL, RPG, PL/I, Java, Python ve daha fazlasıDiller arası karmaşıklık, tekrarlama, ölü kod

Araçların ölçtüğü en yaygın temiz kod metrikleri şunlardır: döngüsel karmaşıklık (karar dallarının sayısı, 10'un üzeri uyarı, 20'nin üzeri kritik), bilişsel karmaşıklık (kodun anlaşılmasının ne kadar zor olduğu, okunabilirlik ölçümü için döngüsel karmaşıklığı geliştiren SonarQube'a özgü bir metrik) ve tekrarlama oranı (kodun tekrarlanan yüzdesi, %3'ün üzeri dikkat gerektirir).

Ne kadar SMART TS XL Kurumsal kod tabanlarında temiz kod uygulamasını zorunlu kılar.

Yukarıda listelenen temiz kod araçları tek bir dil içinde çalışır. Java servislerinin, Python işlem hatlarının, COBOL toplu iş programlarının, RPG modüllerinin ve JCL iş akışlarının bir arada bulunduğu kurumsal ortamlarda, her dilin temiz kod ihlallerinin eş zamanlı olarak ölçülmesi gerekir ve diller arası bileşenler arasındaki ilişkiler, herhangi bir dosyanın içindeki kalite kadar önemlidir.

SMART TS XL'S statik kod analizi Ortamdaki her dil için eş zamanlı olarak temiz kod ölçütleri uygulanır. Döngüsel karmaşıklık, tekrarlama oranları, ölü kod tespiti ve yapısal bağımlılık ölçütleri, Java sınıfları için kullanılan aynı metodoloji kullanılarak COBOL programları için hesaplanır ve böylece tüm uygulama portföyünde karşılaştırılabilir, birleşik kalite ölçümleri elde edilir.

Etki analizi özelliği, temiz kod ihlallerini mimari ölçekte ele alınabilir hale getirir: bir COBOL paragrafının düzinelerce başka programla yüksek bağımlılığı olduğunda, etki analizi herhangi bir yeniden düzenleme başlamadan önce hangi bileşenlerin etkilendiğini tam olarak gösterir. Bu, ekiplerin büyük kod tabanlarında yaşadığı yeniden düzenleme felcini, tanımlanmış kapsamı olan yapılandırılmış bir iyileştirme programına dönüştürür.

Uygulama bağımlılık haritalaması, sistem düzeyinde temiz kod mimari ihlallerini belirler: hangi bileşenlerin kurumsal ölçekte "Tanrı Sınıfı" haline geldiği, dairesel bağımlılıkların dil sınırları boyunca sorumlulukların ayrılması ilkesini ihlal ettiği ve aynı iş mantığının, iki kopyanın da diğerinden haberdar olmadan birden fazla sistemde bağımsız olarak uygulandığı yerler. Bu diller arası DRY ihlali, aynı iş kuralının bir COBOL programında, bir Java servisinde ve bir Python işlem hattında ayrı ayrı sürdürülmesi, kurumsal sistemlerdeki en maliyetli temiz kod ihlali kategorisidir ve tek dilli herhangi bir araç için görünmezdir.

Temiz kod prensiplerini uygulayan ekipler için miras modernizasyonu programları SMART TS XL Bu, yeniden düzenleme işlemini kolaylaştıran ön analiz olanağı sağlar: dönüştürme başlamadan önce ölü kod kapsam dışında bırakılır, öncelikli dikkat gerektiren en karmaşık bileşenler belirlenir ve herhangi bir değişiklik yapılmadan önce tam bağımlılık grafiği sunulur.

Temiz Kod, Bireysel Bir Uygulama Değil, Takım Disiplinidir

Bu kılavuzdaki ilkeleri ifade etmek, uygulamaktan daha kolaydır. Herhangi bir geliştirici tek başına temiz bir fonksiyon yazabilir. Zorluk, bir ekip genelinde, zaman içinde ve katkıda bulunanlar değiştikçe büyüyen bir kod tabanında temiz kodu korumaktır. Bu üç şey gerektirir: herkesin bildiği ve üzerinde anlaştığı ortak standartlar, bu standartları otomatik olarak uygulayan araçlar ve kademeli iyileştirme kültürü; izci kuralının tutarlı bir şekilde uygulanması, kodun her parçasını bulunduğundan biraz daha temiz bırakmak.

Robert C. Martin'in yaklaşımı her zaman en kullanışlı olanıdır: "Temiz kod her zaman, işine önem veren biri tarafından yazılmış gibi görünür." Birinin önem verdiğinin kanıtı, hataların yokluğu değil, okunabilir isimlerin, odaklanmış fonksiyonların, net yapının ve sürprizlerin olmamasının varlığıdır. Bu kanıt, bir kod tabanını çalışmaya, katkıda bulunmaya ve başarılı bir sistemin yıllar içinde biriktireceği ekip değişiklikleri boyunca sürdürmeye değer kılan şeydir.