Nerede durduğumuzu daha iyi anlamak için nelerin bittiğini ve devrinin kapandığını özetleyelim.
1.) Kod yazmak
Bunda hemfikir olduğumuzu düşünüyorum. Tartışmaya açık olmayan bir konu.
2.) Kod okumak
Hala itirazlar gelmiyor değil, kod okumanın gereksiz olduğunu söylediğimizde.
Neden kod okumanın gereksiz olduğunu gösteren birkaç güçlü argüman var.
Birincisi, yapay zeka çok iyi kod yazıyor.
İkincisi, yapay zeka çok fazla kod yazıyor.
Üçüncüsü, yazılımcının o kadar kodu okuyacak vakti yok.
Dördüncüsü, yapay zeka yazdığı kodun sağlamasını testlerle sürekli yapıyor.
Burada önemli olan kodu okumak değil, kodu anlamak.
3.) Test yazmak
Test yazmak da artık insan tarafından yapılması anlamlı ve gerekli olan bir aktivite değil.
Ben sistemin nasıl davranması gerektiğini onay/kabul kriterleriyle, sistem için geçerli kuralları ise invariantlarla tanımlıyorum. Yapay zeka tüm testleri bu ikisine göre şekillendirebiliyor.
On binlerce, sadece implementasyonu test eden test yerine, sistemsel kuralların bozulup bozulmadığını söyleyen testler oluşuyor. Böylece testler implementasyonun bekçisi olmaktan çıkıp, sistem davranışının bekçisi hâline geliyor.
4.) Teknolojiyi takip etmek
Yıllarını Java ve onun teknik altyapısıyla geçirmiş birisi olarak beni artık ne Java’nın yeni sürümleri, ne GC, ne JVM ne de yeni dil özellikleri ilgilendiriyor.
Aynı şekilde yeni çatılar ve kullandığım çatıların yeni sürümleri de beni ilgilendirmiyor. Eskiden bir Spring major update için günlerce uğraşırken, hatta bu yer yer teknik nedenlerden dolayı mümkün bile değilken, şimdilerde yapay zekaya:
“Upgrade to X.” demem yetiyor.
Teknolojinin nasıl kullanılacağını bilmek yerine, artık teknolojiden ne istediğimi bilmem gerekiyor. Bu çok büyük bir zihinsel değişim.
5.) Teknik kitap okumak
Teknik kitap okumuyorum.
Bir önceki yazımda belirttiğim gibi yapay zeka ile olan günlük interaksiyonum bana her gün 200 sayfalık bir kitap okumak gibi geliyor.
6.) Teknik dokümantasyon okumak
7.) Stack Overflow’da çözüm aramak
8.) Debugging
Breakpoint koymak, uygulamayı adım adım çalıştırmak, değişkenlerin içine bakmak… Bunlar da giderek insan aktivitesi olmaktan çıkıyor.
Çünkü yapay zeka yalnızca hatayı görmekle kalmıyor; logları, stack trace’i, kodu, testleri ve git geçmişini birlikte analiz ederek hatanın kaynağını bulabiliyor.
9.) Manuel refactoring
10.) Boilerplate yazılım mimarisi üretmek
11.) Klasik code review
Bütün bunları alt alta koyduğumuzda ilginç bir tablo ortaya çıkıyor.
Bahsettiğim hiçbir konu ortadan kalkmadı. Hatta tam tersine bunların hepsi eskisinden çok daha fazla yapılıyor.
Ortadan kalkan, bunları insanın bizzat yapmak zorunda olması.
Yazılımcının işi yukarı doğru taşınıyor.
Yazılım geliştirme bitmiyor. Yazılımcının yazılım geliştirme biçimi bitiyor.
Ve geriye çok daha zor bir iş kalıyor:
Doğru sistemi tarif edebilmek.