Bir projeyi ilk yazdığında her şey güzel gider. Kod çalışır, özellikler eklenir, teslim tarihi yetişir. Sonra aylar geçer. Bir bug gelir, basit gibi görünür. “Şuraya küçük bir dokunuş yapayım” dersin. Bir anda başka yerler bozulur. Bu döngüyü on yıldır sayısız kez yaşadım. İşin ilginç yanı şu: Sorun çoğu zaman teknik eksiklik değil, kodun anlaşılmaz hale gelmesidir. İşte bu yüzden bu yazıyı hazırladım.
Bu içerikte sana net bir söz veriyorum. KISS, DRY ve SOLID’i ezberletmeyeceğim. Gerçek projede nasıl işlediğini göstereceğim. Kod kalitesini artırmak için rehber ilkeler arayan biriysen, doğru yerdesin. Yazılım projelerinde bakım maliyetini düşürme yolları konusunda da somut örnekler göreceksin. Temiz kod yazma prensipleri nelerdir diye soruyorsan, bu yazının sonunda kendi koduna daha farklı gözle bakacaksın.
Yazılımda Temiz Kod Prensipleri: KISS, DRY ve SOLID konusu bazen “akademik” gibi anlatılıyor. Oysa çok pratik. Ekipte biri izne çıktığında kodu kim devam ettirecek? İki ay sonra sen kendin bu kodu anlayabilecek misin? Sürdürülebilir yazılım geliştirme best practice’leri tam olarak bu soruların etrafında şekilleniyor.
Temiz Kod Nedir?
Temiz Kod Kavramının Tanımı
Temiz kod, sadece çalışan kod değildir. Okunabilen, anlaşılabilen ve güvenle değiştirilebilen koddur. Bir satırı okuduğunda “Bu ne yapıyor?” diye değil, “Tamam, burası bu işi yapıyor” diye düşünmeni sağlar. Ben temiz kodu şu şekilde test ederim: Kodu ilk kez gören biri, 10 dakika içinde ana fikri anlayabiliyor mu?
Okunabilirlik mi, Performans mı?
Bu ikisi sık sık karşı karşıya getiriliyor. Ama çoğu projede asıl kazanç okunabilirliktir. Performans elbette önemli. Fakat performans ihtiyacı olan noktalar genelde sınırlıdır. Benim deneyimimde projelerin büyük kısmı “performans yüzünden” değil, “bakım zorluğu yüzünden” yavaşlar. Yüksek kod kalitesi ile yazılım projelerinde verimlilik dediğimiz şey de buradan gelir.
Temiz Kodun Uzun Vadeli Faydaları
Temiz kod, değişikliği ucuzlatır. Yeni özellik eklerken daha az çekinirsin. Test yazmak kolaylaşır. Code review süresi kısalır. Ekipte bilgi akışı hızlanır. Kısacası proje daha uzun yaşar.
Temiz Kod Yazmamanın Bedeli
Bedel genelde görünmez başlar. “Şimdilik böyle kalsın” dersin. Sonra o “şimdilik” büyür. Bir noktada küçük bir değişiklik, saatlerce uğraş demektir. En kötüsü şu: Ekipte kimse dokunmak istemez. O bölüm “kırılgan bölge” olur. Zamanla proje seni değil, sen projeyi taşımaya başlarsın.
Neden Temiz Kod Prensiplerine İhtiyacımız Var?
Kodun Okunabilirliği ve Bakımı
Bugün yazdığın kodu yarın da anlayabilmek istiyorsan prensiplere ihtiyacın var. Prensipler, karar verirken “bu doğru mu?” sorusuna dayanak sağlar. Yoksa herkes kendi tarzıyla yazar ve proje çorba olur.
Takım Çalışmasında Temiz Kodun Önemi
Takımda kod yazarken aslında iki kişi için yazarsın. Birincisi bilgisayar. İkincisi takım arkadaşın. Okunmayan kod, paylaşılmayan bilgi demektir. Kod inceleme ve yazılım kalite toplulukları yakınımda diye arayanların da temel ihtiyacı budur: Daha iyi ekip alışkanlıkları.
Hata Oranını Azaltma
Karmaşık kod daha çok hata üretir. Çünkü zihinsel yük artar. Basit ve düzenli kodda bug saklamak daha zordur. Hata çıkarsa da bulmak daha kolaydır.
Yazılımın Ölçeklenebilirliği
Ölçeklenebilirlik sadece sunucu sayısı değildir. Kodun da ölçeklenmesi gerekir. Özellik sayısı arttıkça kodun yönetilebilir kalması, prensiplerle mümkün olur.
KISS Prensibi (Keep It Simple, Stupid)
KISS Prensibi Nedir?
KISS, “basit tut” der. Çözümün karmaşık olmasına gerek yoksa karmaşıklaştırma. Bu prensip özellikle yeni başlayanların ve hatta deneyimlilerin düştüğü bir tuzağı engeller: Gereksiz akıllılık.
Basitlik Neden Güçlüdür?
Çünkü basit çözüm daha az şey kırar. Daha az açıklama ister. Daha hızlı test edilir. Benim ekiplerde en çok duyduğum cümlelerden biri şudur: “Bunu daha şık yapayım.” Şık olmak güzel, ama şıklık okunabilirliği düşürüyorsa proje zarar görür.
KISS İhlal Edildiğinde Ne Olur?
Gereksiz Soyutlamalar
Henüz ihtiyaç yokken katman katman soyutlama yapmak sık görülen bir durum. Örneğin iki yerde kullanılan küçük bir fonksiyon için dev bir “manager” yapısı kurmak. Sonuç: Kodun içine girmek zorlaşır.
Aşırı Karmaşık Çözümler
Bazen tek bir if ile çözülecek bir işi, üç farklı dosyaya dağıtılmış yapı ile çözmeye çalışıyoruz. Bunun adı mühendislik değil, yük bindirmektir.
KISS Prensibine Uygun Kod Yazma Örnekleri
Gerçek bir örnek vereyim. Bir yerde tarih formatlayacaksın. İlk yaklaşım: “Her ihtimale karşı” farklı format seçenekleri, config yapıları, ekstra parametreler. KISS yaklaşımı: Bugün ihtiyacın olan formatı basit bir fonksiyonla üret. Yarın ihtiyaç değişirse genişlet. KISS “geleceği düşünme” demez. “Geleceği tahmin etmeye çalışma” der.
DRY Prensibi (Don’t Repeat Yourself)
DRY Prensibi Nedir?
DRY, aynı bilginin veya aynı işin kodda tekrar edilmemesini söyler. Tekrar varsa, bir gün değişiklik gerektiğinde iki yeri unutursun. Buglar böyle çıkar.
Kod Tekrarı Neden Zararlıdır?
Çünkü bakım maliyetini büyütür. Bir iş kuralı değiştiğinde, tüm kopyaları bulup güncellemen gerekir. Birini kaçırırsan sistem tutarsız davranır. Yazılım projelerinde bakım maliyetini düşürme yolları arasında DRY ilk sıralardadır.
DRY ve Copy-Paste Arasındaki Fark
Copy-paste hızlı hissettirir. Ama her kopya yeni bir risk demektir. DRY ise ortak olan kısmı tek yere toplar. Örneğin aynı validasyon kurallarını farklı formlarda tekrar yazmak yerine, bir doğrulama fonksiyonunda toplamak gibi.
DRY Prensibi Yanlış Uygulanırsa
Aşırı Soyutlama Problemi
Her benzerliği ortaklaştırmaya çalışmak da hatadır. İki kod parçası bugün benzer olabilir ama yarın farklı yönlere gidebilir. Zorla birleştirirsen, ileride ayrıştırmak daha zor olur. DRY “her şeyi tekleştir” demek değildir. “Gerçekten aynı olanı tekleştir” demektir.
Erken Optimizasyon
Henüz aynı iş tekrar etmiyorken “olur da tekrar ederse” diye soyutlama yapmak, gereksiz yük getirir. Ben genelde şu kuralı kullanıyorum: En az iki kez tekrar görmeden soyutlamaya koşma. İki kez gördüğünde de gerçekten aynı mı diye kontrol et.
SOLID Prensipleri Nedir?
SOLID Neden Ortaya Çıktı?
Yazılım büyüdükçe sınıflar şişer, bağımlılıklar artar, değişiklik yapmak zorlaşır. SOLID, özellikle nesne yönelimli tasarımda bu dertleri azaltmak için bir rehber gibi düşünülür.
SOLID’in Büyük Resimdeki Yeri
SOLID, kodun esnek ve test edilebilir olmasını destekler. Ama şunu en baştan söyleyeyim: SOLID bir amaç değil, araçtır. Gerektiği yerde kullanılır. Her yerde değil.
SOLID Prensipleri Detaylı İnceleme
Single Responsibility Principle (SRP)
Bir Sınıfın Tek Sorumluluğu Olmalı
SRP şunu der: Bir sınıfın değişmesi için tek bir sebebi olmalı. Yani bir sınıf hem veri çekiyor, hem formatlıyor, hem log yazıyorsa, muhtemelen çok iş yapıyordur. Ben bunu “aynı masada üç iş yapmaya çalışmak” gibi görüyorum. Oluyor, ama yoruyor.
SRP İhlalinin Sonuçları
Sınıf büyür, test etmek zorlaşır, küçük değişiklikler büyük etki üretir. Ekipte biri o sınıfa dokunmaktan çekinir. İşte o an proje yavaşlar.
Open/Closed Principle (OCP)
Genişlemeye Açık, Değişime Kapalı Olmak
OCP, yeni özellik eklerken mevcut kodu mümkün olduğunca az değiştirmeyi hedefler. Bu, bug riskini azaltır.
OCP Gerçek Hayat Örneği
Örneğin ödeme yöntemleri var. Kredi kartı, havale, kapıda ödeme. İlk başta hepsini if else ile yazarsın. Sonra yeni ödeme yöntemi gelir ve her yeri değiştirmen gerekir. OCP yaklaşımında, yeni ödeme yöntemini yeni bir modül gibi ekler, eski kodu çok az oynarsın.
Liskov Substitution Principle (LSP)
Alt Sınıflar Üst Sınıfların Yerini Alabilmeli
LSP’nin özü şu: Bir üst sınıfın kullanıldığı yerde alt sınıfı koyduğunda sistem bozulmamalı. Bu, miras yapısında sıkça gözden kaçıyor.
LSP İhlali Ne Gibi Sorunlar Doğurur?
Alt sınıf beklenmeyen davranış sergiler. Örneğin üst sınıf “her zaman kayıt yapar” diye düşünürsün ama alt sınıf bazı durumlarda kayıt yapmaz. Sonra sistemin başka yerleri bu varsayımla kırılır.
Interface Segregation Principle (ISP)
Gereksiz Metotlara Zorlanmamak
ISP der ki: Büyük bir interface yerine, küçük ve amaç odaklı interface’ler daha iyidir. Bir sınıf kullanmayacağı metotları implement etmek zorunda kalmamalı.
Büyük Interface’lerin Zararları
Gereksiz metotlar şişkinlik yaratır. Testi zorlaştırır. Değişiklik etkisini büyütür. Bir metot eklemek bile birçok yeri bozar.
Dependency Inversion Principle (DIP)
Bağımlılıkların Soyutlamalara Yapılması
DIP, yüksek seviyeli modüllerin düşük seviyeli detaylara bağımlı olmamasını söyler. Yani “iş mantığı” doğrudan “veritabanı kütüphanesi” gibi detaylara sıkı sıkıya bağlanmamalı. Araya bir soyutlama koyarsın.
DIP ve Test Edilebilirlik
DIP doğru uygulandığında test yazmak kolaylaşır. Çünkü gerçek veritabanı yerine sahte bir bileşenle test yapabilirsin. Benim için DIP’in en büyük getirisi budur.
KISS, DRY ve SOLID Birlikte Nasıl Çalışır?
Birbirini Tamamlayan Prensipler
KISS, kodu basit tutar. DRY, tekrarları azaltır. SOLID, tasarımın esnek olmasına yardım eder. Birlikte kullanıldığında, kod hem okunur hem sürdürülebilir olur. Yazılımda Temiz Kod Prensipleri: KISS, DRY ve SOLID ifadesi aslında bu uyumu anlatır.
Çeliştiği Düşünülen Senaryolar
Bazen DRY ile KISS çelişiyor gibi görünür. Bir şeyi ortaklaştırmak kodu karmaşık hale getiriyorsa KISS devreye girer. Yani DRY adına gereksiz soyutlama yaparsan, KISS’i ihlal edebilirsin. Burada denge önemli.
Hangisi Ne Zaman Öncelikli?
Yeni başlıyorsan genelde KISS önceliklidir. Kodun basit ve anlaşılır olsun. Tekrarlar belirginleşince DRY ile toparla. Proje büyüdükçe, belirli noktalarda SOLID ile esneklik kazandır. Benim pratik sıralamam çoğu zaman böyledir.
Temiz Kod Yazarken Sık Yapılan Hatalar
Her Yerde SOLID Uygulamaya Çalışmak
SOLID’i her satıra uygulamaya çalışmak, projeyi gereksiz uzatabilir. Küçük bir projede büyük mimari kurmak çoğu zaman gereksizdir. Prensipleri amaç değil rehber gibi gör.
Gereksiz Design Pattern Kullanımı
Pattern kullanmak kötü değil. Ama sırf “profesyonel görünmek” için pattern eklemek kodu ağırlaştırır. Pattern ihtiyaca hizmet etmeli.
“Çok Akıllı” Kod Yazma İsteği
Bu tuzak çok yaygın. Tek satırda harikalar yaratmak istiyoruz. Ama iki ay sonra o tek satırı kimse okumuyor. Akıllı kod değil, anlaşılır kod kazandırır.
Okunabilirlikten Uzaklaşmak
En büyük hata bu. İsimlendirme kötü olunca, yorumlar artmaya başlar. Oysa iyi isimlendirme çoğu yorumu gereksiz kılar.
Temiz Kod Gerçek Projelerde Nasıl Uygulanır?
Küçük Projelerde Temiz Kod
Küçük projelerde en büyük katkı KISS ve temel DRY yaklaşımıdır. Dosya düzeni, anlaşılır fonksiyonlar, net isimlendirme. Bunlar küçük projeyi bile “düzgün” gösterir.
Büyük ve Uzun Ömürlü Projelerde Temiz Kod
Büyük projelerde süreçler de devreye girer. Code review alışkanlığı, test kültürü, versiyonlama disiplini. Versiyonlamanın neden kritik olduğuna dair iyi bir okuma yapmak istersen şu içeriği inceleyebilirsin: https://www.diyarbakiryazilim.org/posts/yazilim-projelerinde-versiyonlama-neden-hayati
Refactoring ve Temiz Kod İlişkisi
Refactoring, kodun davranışını değiştirmeden yapısını iyileştirmektir. Temiz kod alışkanlığı olan ekipler refactoring’i “büyük temizlik” gibi değil, düzenli bakım gibi görür. Ben de bunu öneriyorum. Her sprint küçük iyileştirmeler, uzun vadede büyük rahatlık sağlar.
Temiz Kodun Kariyere Etkisi
Profesyonel Geliştirici Olmanın Temeli
Profesyonellik sadece yeni teknoloji bilmek değildir. Yazdığın kodun başkası tarafından rahatça sürdürülebilmesi de profesyonelliktir. Yazılımda Temiz Kod Prensipleri: KISS, DRY ve SOLID bu yüzden kariyerinin her aşamasında işine yarar.
Code Review Süreçlerinde Temiz Kod
Code review’da en çok konuşulan şey şudur: “Bunu daha anlaşılır yapabilir miyiz?” Temiz kod prensipleri ile yazılmış bir PR daha hızlı onay alır. Ekip içi iletişim de güçlenir.
İş Görüşmelerinde Temiz Kod Beklentisi
Birçok iş görüşmesinde canlı kodlama olur. Çözüm kadar çözümün okunabilirliği de değerlendirilir. Fonksiyon isimleri, sorumluluk ayrımı, tekrarlar. Bunlar fark yaratır.
Sonuç: Temiz Kod Bir Tercih Değil, Alışkanlıktır
Prensipleri Ezberlemek Değil, Anlamak
KISS, DRY, SOLID birer slogan değil. Karar verme araçlarıdır. Bu yüzden ezberden çok, “neden?” kısmını kavramak gerekir.
Zamanla Gelişen Bir Beceri
Temiz kod yazma becerisi bir gecede gelmez. Ben hâlâ yazdığım kodu geri dönüp iyileştiriyorum. Bu işin doğası bu. Önemli olan düzenli olarak daha iyiye gitmek.
Daha Az Kod, Daha Fazla Değer
Temiz kodun güzelliği burada. Daha az satır, daha az tekrar, daha net akış. Sonuç olarak daha hızlı geliştirme ve daha az hata.
Yazılımda Temiz Kod Prensipleri: KISS, DRY ve SOLID konusunu gerçekten uygulamaya dökmek istiyorsan yalnız kalman gerekmiyor. Ekip içi kalite standartları, kod inceleme alışkanlığı ve doğru rehberlik süreci çok hızlandırır. Diyarbakır Yazılım Topluluğu’nun eğitim ve destek hizmetlerini görmek için https://www.diyarbakiryazilim.org/services sayfasına göz atabilirsin. Topluluğu daha yakından tanımak istersen https://www.diyarbakiryazilim.org/about sayfası sana iyi bir başlangıç olur.
Bugün küçük bir adım at. Kendi kodundan bir dosya seç. İki fonksiyonun ismini daha anlaşılır yap. Tekrarlayan bir kısmı toparla. Gereksiz soyutlamayı sadeleştir. Yarın başka bir dosyada devam et. Temiz kod böyle birikiyor.
Sık Sorulan Sorular
Yazılımda temiz kod prensipleri nedir ve neden önemlidir?
Temiz kod prensipleri, kodun okunabilir ve sürdürülebilir olmasını sağlar. Bu da bakım maliyetini düşürür, hata oranını azaltır ve ekip içinde verimliliği artırır.
KISS prensibi nedir ve gerçek projelerde nasıl uygulanır?
KISS, çözümü gereksiz yere zorlaştırmamayı söyler. Gerçek projede basit isimlendirme, net fonksiyonlar ve ihtiyacı aşmayan tasarım tercihleriyle uygulanır.
DRY prensibi ne anlama gelir ve hangi hataları önler?
DRY, kod tekrarını azaltmayı hedefler. Tekrarlar yüzünden oluşan tutarsızlıkları, unutulan güncellemeleri ve bakım zorluklarını önlemeye yardımcı olur.
SOLID prensipleri nelerdir ve hangi problemleri çözer?
SOLID, SRP, OCP, LSP, ISP ve DIP prensiplerinden oluşur. Büyük projelerde sınıfların şişmesini, bağımlılık karmaşasını ve test zorluğunu azaltmaya yardımcı olur.
Temiz kod ve SOLID prensipleri eğitimi yakınımda nereden alınabilir?
Topluluklar, mentorluk süreçleri ve proje bazlı eğitimler bu konuda çok faydalıdır. Diyarbakır Yazılım Topluluğu’nun hizmetlerine göz atmak için https://www.diyarbakiryazilim.org/services sayfasını inceleyebilirsin.
Temiz kod alışkanlığını birlikte güçlendirmek istersen Diyarbakır Yazılım Topluluğu’na uğra. https://www.diyarbakiryazilim.org