AI Kodunun En Büyük Problemi: Çalışıyor Olması

Yapay zekâ ile kod yazmanın en tehlikeli tarafı kodun çalışmaması değil.

Çalışması.

Çünkü çalışmayan kodu zaten anlarsınız. Hata verir, program açılmaz, test patlar ve dönüp bakarsınız.

Çalışan kod ise çok daha sinsidir.

Ekranda istediğiniz sonucu gösterir. Butona basarsınız, işlem gerçekleşir. Veritabanına kayıt gider. API cevap verir.

Sonra herkes mutlu olur.

Ta ki bir gün o kodu değiştirmeye çalışana kadar.

İşte o zaman yapay zekânın birkaç saniyede yazdığı kodun neden sizi haftalarca uğraştırabileceğini keşfetmeye başlarsınız.

Kod çalışıyor diye iyi kod mu oldu?

Yapay zekâya “Bana kullanıcı giriş sistemi yaz” diyorsunuz.

Birkaç saniye sonra yüzlerce satır kod geliyor.

Gayet etkileyici.

Kodun içine bakıyorsunuz.

Değişkenler var.

Fonksiyonlar var.

Hata kontrolü var.

Yorumlar var.

Hatta güvenlik açısından önemli görünen birkaç satır bile var.

Çalıştırıyorsunuz.

Çalışıyor.

İşte tehlike burada başlıyor.

Çünkü özellikle kod konusunda deneyimi sınırlı biri için çalışan kod ile iyi yazılmış kod arasındaki farkı anlamak oldukça zor.

Yapay zekâ da size gelip:

“Bu arada burada ileride başınıza bela olacak birkaç mimari problem bıraktım.”

demiyor.

Tam tersine oldukça kendinden emin bir şekilde kodu önünüze koyuyor.

Yapay zekâ kötü kodu çok hızlı yazıyor

Eskiden kötü kod yazmak için biraz zaman harcamanız gerekiyordu.

Şimdi yapay zekâ sayesinde kötü kod üretme hızınız inanılmaz arttı.

Bu aslında yapay zekânın en başarılı olduğu alanlardan biri olabilir.

İnsan saatlerce uğraşıp karmaşık bir kod yazardı.

Şimdi AI’ya veriyorsunuz.

“Bunu biraz daha geliştir.”

Diyorsunuz.

AI geliştiriyor.

“Buna giriş sistemi ekle.”

Ekliyor.

“Admin paneli de olsun.”

Ekliyor.

“API yap.”

Onu da ekliyor.

“Bir de bildirim sistemi.”

Tamam.

Bir süre sonra elinizde çalışan ama kimsenin dokunmak istemediği bir kod yığını bulunuyor.

Ve en komik tarafı:

Bunu siz yazmadınız.

Ama artık bakımını siz yapacaksınız.

AI kodu neden bu kadar ikna edici?

Çünkü yapay zekâ kötü kodu genellikle kötü görünür şekilde yazmıyor.

Kod düzgün biçimlendirilmiş.

İsimlendirmeler makul.

Fonksiyonlar mantıklı görünüyor.

Açıklamalar eklenmiş.

Hatta bazen gereğinden fazla yorum bile var.

Bütün bunlar kodun kaliteli olduğu izlenimini yaratıyor.

Ama kod kalitesinin önemli bir bölümü ilk bakışta görünmez.

Mimari kararlar.

Bağımlılıklar.

Performans.

Güvenlik.

Hata yönetimi.

Ölçeklenebilirlik.

Bakım kolaylığı.

Veri akışının tutarlılığı.

Kodun başka bölümlerle nasıl etkileştiği.

Bunları anlamadan sadece kodun çalışmasına bakmak, bir otomobilin kaportasına bakıp motorun sağlam olduğunu düşünmeye benziyor.

“Ama testlerden geçti”

Bir başka modern savunma da şu:

“Ama testlerden geçiyor.”

Güzel.

Testlerden geçmesi iyi.

Fakat testlerin neyi test ettiğini de bilmek gerekiyor.

Bir test belirli girdiler için beklenen sonucu alıyorsa, bu kodun bütün sorunlarının ortadan kalktığı anlamına gelmez.

Testlerin kapsamadığı durumlar vardır.

Yanlış tasarlanmış testler vardır.

Hiç yazılmamış testler vardır.

Ve en önemlisi, yanlış tasarlanmış bir sistem kusursuz şekilde test edilebilir.

Yani AI’nın ürettiği kötü mimariyi test etmek, kötü mimariyi iyi mimariye dönüştürmez.

Sadece onun beklenen şekilde kötü çalıştığını doğrular.

AI, teknik borcu da otomatikleştirdi

Teknik borç yazılım dünyasının eski problemlerinden biri.

Fakat yapay zekâ bunu başka bir seviyeye taşıma potansiyeline sahip.

Çünkü artık bir geliştirici “Şimdilik böyle yapalım” dediğinde bunun maliyetini ödemek için aylarca beklemesine gerek yok.

AI aynı yaklaşımı birkaç dakika içinde onlarca dosyaya yayabiliyor.

Bir şeyi hızlıca çözüyorsunuz.

Sonra başka bir özellik istiyorsunuz.

AI mevcut yapının üzerine yeni kod ekliyor.

Sonra başka bir özellik.

Sonra başka bir düzeltme.

Kod büyüyor.

Karmaşıklık büyüyor.

Ama proje hâlâ çalışıyor.

Bu nedenle kimse alarm vermiyor.

Ta ki bir gün küçük bir değişiklik yapmak isteyene kadar.

“Şu fonksiyonu değiştireyim” dediğiniz an

İşte gerçek sınav burada.

Bir insanın yazdığı eski kodu bile anlamak bazen zordur.

AI tarafından farklı zamanlarda, farklı promptlarla üretilmiş kodu anlamak daha da eğlenceli olabilir.

Çünkü her isteğinizde yapay zekâ mevcut mimariyi kendi anlayışına göre yeniden yorumlayabilir.

Bir yerde bir yöntem kullanır.

Başka bir yerde başka yöntem.

Bir dosyada hata yönetimi vardır.

Diğerinde yoktur.

Bir fonksiyon async çalışır.

Diğeri farklı bir yaklaşım kullanır.

Kodun tamamı teknik olarak çalışır.

Ama ortada tutarlı bir mühendislik anlayışı olmayabilir.

Bu noktada proje artık yazılım olmaktan çıkıp AI’nın zaman içinde verdiği kararların arkeolojik kazısına dönüşür.

AI sizin yerinize düşünmüyor

Burada en büyük yanlış anlaşılmalardan biri ortaya çıkıyor.

AI kod yazabiliyor.

Ama kod yazmak ile yazılım mühendisliği aynı şey değil.

Bir yapay zekâ size fonksiyon üretebilir.

API endpoint yazabilir.

SQL sorgusu oluşturabilir.

Bir sınıf tasarlayabilir.

Ama bütün sistemin hangi problemi çözdüğünü, hangi kısıtların önemli olduğunu ve gelecekte nereye gideceğini sizin kadar iyi bilmeyebilir.

Çünkü yapay zekâya verdiğiniz bağlam ne kadar sınırlıysa, kararlarının dayandığı bilgi de o kadar sınırlıdır.

Siz ise çoğu zaman bütün projenin geçmişini, müşterinin saçma isteklerini, sunucunun eski konfigürasyonunu ve üç yıl önce verilmiş o garip mimari kararı biliyorsunuz.

AI bunların hiçbirini kafasında yaşamıyor.

Ama kod yazıyor.

Hem de büyük bir özgüvenle.

En tehlikeli kullanıcı tipi: Kodun çalıştığını sanan

AI kod üretimini kullanmanın kendisi problem değil.

Asıl problem, üretilen kodu incelemeden kabul etmek.

Çünkü yapay zekâ size mükemmel görünen bir çözüm sunabilir.

Siz de:

“Çalıştı.”

dersiniz.

Sonra ikinci özellik gelir.

O da çalışır.

Üçüncü gelir.

O da çalışır.

Bir süre sonra sistem büyür.

Ve siz farkında olmadan AI’nın verdiği bütün küçük kararları biriktirmiş olursunuz.

Her karar tek başına önemsiz görünür.

Ama yüzlercesi birleşince ortaya korkunç bir yapı çıkar.

Sorun genellikle ilk gün ortaya çıkmaz.

Sorun, altıncı ayda çıkar.

Eskiden bilgisayar programcıyı yönetirdi, şimdi prompt yönetiyor

Yapay zekâ ile yazılım geliştirme bazen tuhaf bir yere gidiyor.

Eskiden geliştirici kodu yazardı.

Şimdi geliştirici prompt yazıyor.

“Bunu değiştir.”

“Şunu ekle.”

“Bu hatayı düzelt.”

“Bunu daha modern yap.”

“Performansı artır.”

“Responsive yap.”

“Bir de dark mode ekle.”

Ve AI kod üretiyor.

Bu süreç çok hızlı.

O kadar hızlı ki geliştiricinin üretilen kodu gerçekten anlaması için ayırdığı zaman azalabiliyor.

Çünkü kod üretme hızı, kodu okuma hızından çok daha yüksek.

İşte burada ciddi bir problem var.

Kod üretimi otomatikleşirken kodu anlama otomatikleşmiyor.

Çalışan kod bazen en tehlikeli koddur

Kötü kodun hata vermesi aslında bir uyarıdır.

Sistem size bağırıyordur.

“Burada bir problem var.”

Çalışan ama kötü tasarlanmış kod ise sessizdir.

Bugün çalışır.

Yarın çalışır.

Gelecek hafta da çalışır.

Sonra proje büyür.

Bir geliştirici gelir ve küçük bir değişiklik yapmaya çalışır.

Bir dosyayı değiştirir.

Başka bir şey bozulur.

Onu düzeltir.

Başka bir şey bozulur.

Bir süre sonra kimse sistemin neden böyle çalıştığını bilmez.

Ve bir noktada o meşhur cümle ortaya çıkar:

“Sakın ona dokunma, çalışıyor.”

İşte AI ile yazılmış kodun da düşebileceği yer tam olarak burası.

Çalışıyor olması kalite garantisi değildir.

Çalışıyor olması sadece şu an için çalıştığı anlamına gelir.

Asıl mesele, yarın da anlayabileceğiniz, değiştirebileceğiniz ve güvenebileceğiniz bir yazılım bırakıp bırakmadığıdır.

Yorum Bırak