Clean Code diye bir şey yok
(steveonstuff.com)- İnsanlar 'clean' kod için çabalıyor ama 'clean' kullanışlı bir ölçüt değil
- Kod basitçe 'clean' olamaz. Çünkü 'clean' kod hakkında aslında hiçbir şey açıklamaz
- İnsanların bir kodun clean olduğunu söylemesi, genelde o kodun bir açıdan harika olmasındandır
Clean code gerçekten iyi kod mudur?
-
Kod birçok farklı nedenle harika olabilir
→ okunması kolay, anlaşılması kolay, basit, performanslı, güvenli, zarif, test edilebilir, kapsüllenmiş, genişletilebilir, bakım yapılabilir, yeniden kullanılabilir.. -
Ancak bu özellikler bazı açılardan birbiriyle çelişir
→ en basit kod muhtemelen test etmesi en kolay kod olmayacaktır
→ arayüzler ve enjekte edilen bağımlılıklar test etmeyi kolaylaştırır ama basitlikten uzaklaşır
→ çok fazla singleton kullanmak anlamayı kolaylaştırabilir ama bakım yapılabilir bir uygulama ortaya çıkarmayabilir -
Bunların bazıları temelde birbirine zıt olduğundan hepsini aynı anda sağlamak zor olabilir
→ mühendislik Trade-off'lardan ibarettir; burada konuşulan ödünleşimler üzerine ekip içinde tartışmak da mümkün olabilir
Kod harikaysa, "neden öyle olduğunu" konuşmalıyız
- Biri bir çözümün 'clean' olduğunu söylediğinde, çoğu zaman bunun nedenini rasyonel biçimde açıklayamaz ve sadece daha iyi bir seçim olduğunu söyler
- Teknik çözümler hakkında yapıcı bir tartışma yürütmek için, bir çözümün neden diğerinden daha iyi olduğunu açıkça ifade edebilmek gerekir
→ sadece 'clean' demek yerine 'decoupled, anlaşılması kolay, test etmeye uygun..'
Doğru terimleri kullanmalıyız
- Kodlama genellikle bir takım sporudur. Tek başınıza hack'lerken istediğinizi yapabilirsiniz ama bir ekiple çalışırken fikirleri tartışmanız gerekir
- Teknik çözümler hakkında belirli bir dil kullanarak konuşmak ve tüm ekibin ortak bir anlayışa sahip olması, birbirimizi anlamak açısından çok önemlidir
- 'Clean code' ifadesi herkes için farklı bir şey ifade eder
→ birine göre mimarisi iyi tanımlanmıştır, bir başkasına göre kod tutarlı bir biçim stiliyle basitçe yazılmıştır.. - 'kapsüllenmiş', 'test edilebilir', 'yeniden kullanılabilir' gibi kelimelerin üzerinde hepimizin uzlaştığı anlamları vardır
- Kodun özelliklerini anlatırken daha somut kelimeler kullandığımızda aynı sayfada olduğumuzdan emin oluruz
- 'clean', 'iyi' kelimesi kadar düşük bir kesinliğe sahiptir
Öyleyse 'clean code' nedir?
-
Ben, bir kodu 'clean' diye tanımladığımızda çoğu zaman şu sonuca vardım: 'kod iyidir ama neden iyi olduğundan tam olarak emin değiliz'
→ ya da kodun neden iyi olduğunu biliyoruzdur ama bunu açıkça anlatacak kelimeyi bulamıyoruzdur -
Böyle bir sezgiyi geliştirmek iyidir ama orada durmamak gerekir. Biraz daha derine inip 'bu kod neden iyi'yi anlamaya çalışmalıyız
→ bu kodun diğerlerinde olmayan başka bir özelliği mi var? Ve bu özellik projemiz için en uygun olan mı? Belki de bu doğru çözüm değildir -
İhtiyacımız olanın clean code değil, ______ code olduğunu güvenle söyleyebilmeyi umuyorum
6 yorum
Güzel yazı için teşekkürler ~~
Legacy code'u gelişi güzel tekmeleme
Sen hayatında bir kez bile ilk requirement'ı karşılamayı başardın mı
Katılıyorum.
Yazarın 'o kitap'ta sözünü ettiği clean code’un, bunlar arasında "anlaşılması kolay" ve "test edilebilir" olana odaklandığı anlaşılıyor. Elbette ikisinin de çok önemli ölçütler olduğunu düşünüyorum. Ancak henüz standartlaşmamış spesifikasyonlar ya da tamamlanmamış kütüphaneler yüzünden zaman zaman sözde "hack" kullanmak gerekebiliyor; bu nedenle, programın kalitesi uğruna kodun kalitesinden ödün verilen kısımlar kaçınılmaz görünüyor.
Katılıyorum. “Temiz”i “yüksek kalite” olarak gördüğümüzde, (Weinberg’in de söylediği gibi) kalite birisi için değerli olan bir şey olduğuna göre, kaliteye ilişkin ölçüt ve tanımın ekip içinde gerekli olduğunu düşünüyorum.
Belirsiz biçimde "clean code" demek yerine, tam olarak neyi kastettiğimizi açıkça söyleyelim diyen bir yazı.
Bununla ilgili olarak Hacker News'te de "clean code" yorumunun ne anlama geldiğine dair çeşitli görüşler var. Yorumlara da göz atın
There’s No Such Thing as Clean Code https://news.ycombinator.com/item?id=30111516
Konu biraz farklı olsa da, daha önce paylaşılmış aşağıdaki yazıya da bakabilirsiniz