Clean code, KİSS, YAGNI, SRP vb gibi kod yazma teknik ve prensiplerine son tutunmalar devam ediyor.
Artık kodun reusable olması gerekmediği konusunda yaptığım paylaşıma gelen yorumlardan bunu anlıyorum.
Kod hakkında benim takip ettiğim tek bir teknik yöntem var: uygulamanın kendisi ya da onu oluşturan uygulama özellikleri istediğim davranışı sergiliyorlar mı?
Yani ben sadece uygulama davranışlarını test ediyorum.
Bunun eski programlama dünyasındaki karşılığı acceptance testing, yani onay kabul testleri.
Onay kabul testleri uygulama ve uygulama özelliklerini blackbox olarak test eder.
Uygulama bir kara kutudur ve içinde ne olduğu bilinmez. Bu kara kutunun giriş, çıkış noktaları vardır ve testler bu giriş çıkış noktaları üzerinden bu kara kutu ile alışveriş yaparlar. Eğer belli girdiler doğrultusunda beklenen çıktılar alınıyorsa, o zaman onay kabul kriterleri çalışıyor demektir yani uygulamadan beklenen davranış alınmıştır.
Tüm bu durum bir fonksiyona indirgenebilir: f(a) = b;
f() kara kutu olan uygulamanın kendisi, f(a) test ettiğim uygulama özelliğidir. A değerini verdiğimde, kara kutu b çıktığını bana vermek zorundadır. Benim uygulamadan beklenttim bu yöndedir. Bu her zaman a değeri için b çıktısı olmak zorundadır. Eğer a için c geliyorsa, testler hatalıdır ve beklentilerim karşılanmamaktadır.
Sadece bir fonksiyona (f()) indirgediğimiz bir uygulama içinde çalışan kodun clean, srp, dip gibi tasarım prensiplerine uygun, reusable ya da extendable olması hiç mi hiç önem taşımamaktadır. Bu eskiden geçerliydi, çünkü orada deterministik kod ortaya çıkarma özelliği sınırlıydı. Kodu insanlar yazıyordu ve insanlar bolca hatalı kod yazıyordu. Yapay zeka ile bu durum ortadan kalkmıştır. Yapay zeka beklentileri karşılayacak f() fonksiyonunu nokta atışı yazma kabiliyetlerine sahip.
Derlenen ve makina koduna dönüşen koda baksaydınız, bahsi geçen teknik ve prensiplerin nasıl ayaklar altına alındığını ve aslında bunların sadece insanların gidişata hakim olmak içn gerekli zihinsel modeli oluşturmak için oluştulmuş araçlar olduğunu görürdünüz, çünkü insan zihni bu kadar karmaşık yapılara hükmedecek özellikte değil. O yüzden kontrollü ilerleyebilmesi için bu mekanizmaları oluşturmak ve kullanmak zorunda.
Yazdıklarım, kodun iç yapısının tamamen önemsiz olduğu anlamına gelmez. Güvenlik, performans, gözlemlenebilirlik ve değişiklik maliyeti hâlâ gerçektir. Fakat artık her ihtimale karşı “clean”, reusable ve extendable kod üretmek zorunda değiliz. İhtiyaç doğduğunda kodu yeniden üretebilir veya dönüştürebiliriz.
100, 200 token sonra ne okuduğunu bile anlamakta zorlanan insan zihni için clean code gerekiyor, milyonlarca tokeni aynı anda işleyebilen bir yapay zeka için bu gerekli değil.
Kodu kutssallaştırmayı bırakmamız gerekiyor. Başka bir devirde yaşadığımızı kabul edelim.
Belki de artık kodun nasıl göründüğünü daha az, müşterinin ne istediğini ve uygulamanın gerçekten o davranışı üretip üretmediğini daha fazla konuşmalıyız.