AI-Generated Code Debt: Yapay Zekaya Yazdırılan Kodların Gizli Maliyeti ve “Ghost Refactoring” Tehlikesi

AI-Generated Code Debt: Yapay Zekaya Yazdırılan Kodların Gizli Maliyeti ve “Ghost Refactoring” Tehlikesi
AI-Generated Code Debt: Yapay Zekaya Yazdırılan Kodların Gizli Maliyeti ve "Ghost Refactoring" Tehlikesi
Bizi Google'da tercih edilen kaynak yapın!

Yazılım dünyası, tarihinin en büyük ve en kontrolsüz üretim patlamalarından birini yaşıyor. GitHub Copilot, Cursor, Claude ve ChatGPT gibi araçlar, kod yazma bariyerini neredeyse tamamen ortadan kaldırdı. Artık aklına bir fikir gelen herhangi bir geliştirici, indie hacker veya Micro-SaaS kurucusu, günler içinde çalışan bir MVP (Minimum Viable Product) ortaya koyabiliyor. Ancak bu kontrolsüz ve göz kamaştırıcı hızın arkasında, projenin temeline yerleştirilen saatli bir bomba var: Yapay Zeka Kaynaklı Teknik Borç (AI-Generated Code Debt). Büyük dil modelleri (LLM) birer yazılım mimarı değildir; onlar sadece kendilerine verilen veri setlerinden yola çıkarak bir sonraki en mantıklı kelimeyi veya kod token’ını tahmin eden istatistical makinelerdir. Bu makinelerin tek bir motivasyonu vardır: Kendilerinden istenen o anki spesifik göreve, projenin geleceğini ve genel mimarisini hiç umursamadan, hatasız görünen en hızlı yanıtı üretmek. Eğer direksiyonu tamamen yapay zekaya bırakırsanız, projenizin çok kısa bir süre içinde geri dönülemez bir çöp dağına dönüştüğünü kendi gözlerinizle görürsünüz. Bu rehberde, yapay zekayı projenizi çürütmeden, kıdemli bir kod amelesi gibi nasıl verimli kullanabileceğinizi en ince teknik detaylarına kadar inceleyeceğiz.

1. Başımızın Belası: “Ghost Refactoring” (Hayalet Refaktör) Nedir?

Yapay zekayla kod yazarken geliştiricilerin düştüğü en büyük tuzak, modele arka arkaya, bağlamdan kopuk ve anlık komutlar vermektir. Geliştirici sohbet ekranını açar ve modele sırasıyla şu talimatları verir: “Şu sayfaya bir buton ekle”, “Şimdi o butona basılınca arkadaki API’den veriyi çek”, “Gelen veriyi bir tablo içinde listele”. Yapay zeka, bu komutların her birini yerine getirirken projenizin tüm mimari haritasını, veri akış şemalarını veya arka plandaki veritabanı ilişkilerini bütünsel olarak analiz etmez. Modelin tek gördüğü, o an ona verdiğiniz dosyanın küçük bir parçası veya sınırlı bir bağlam penceresidir (context window). İşte yazılımcıların ruhunun bile duymadığı Ghost Refactoring (Hayalet Refaktör) tehlikesi tam olarak bu noktada filizlenir.

Yapay zeka, sizin son istediğiniz özelliği koda sorunsuz bir şekilde entegre edebilmek adına, arka planda tıkır tıkır çalışan mevcut mimari yapıları, global state yönetimini, fonksiyon isimlerini, hatta veritabanı şemalarını sizin bilginiz ve onayınız dışında gizlice değiştirmeye başlar. Terminale bakarsınız hiçbir hata yoktur; tarayıcıyı açarsınız buton çalışıyordur ve her şey harika görünüyordur. Ancak o sırada yapay zeka, projenin bambaşka bir modülünde yer alan ve o fonksiyona göbekten bağlı olan kritik bir bağımlılığı (dependency) gizlice kırmıştır. Bu hayalet müdahaleler, projenizin erken aşamalarında fark edilmez. Ne zaman ki projeye yeni bir özellik eklemek isteseniz, sistem alakasız yerlerden patlak vermeye başlar. Birkaç ayın sonunda elinizde kimsenin içinden çıkamadığı, dokunulduğu an çöken, dökümantasyonu olmayan ve yapay zekanın bile artık anlamayı reddettiği devasa bir spagetti kod yığını kalır. Ghost Refactoring, kontrolsüz hızın projenize kestiği en ağır faturadır.

2. .cursorrules ve Sistem Promptlarını Sıkılaştırın

Yapay zekanın kafasına göre kod üretip projenizin mimari yapısını bozmasını engellemenin ilk yolu, onun hareket alanını anayasal kurallarla sınırlandırmaktır. Kullandığınız modern kod editörlerinde (örneğin Cursor veya VS Code) mutlaka projenizin kök dizinine (root) bir .cursorrules dosyası eklemek zorundasınız. Bu dosya, modelin her promptta uymak zorunda olduğu katı kırmızı çizgileri içerir. Yapay zekaya doğrudan “Bana şu özelliği yaz” derseniz, model en tembel ve en kısa yolu seçecektir. Bunun yerine .cursorrules dosyanıza veya sistem promptunuza şu tarz askeri disiplinde talimatlar eklemelisiniz:

# PROJE MİMARİ KURALLARI
1. Kod yazarken asla ve asla varsayımlarda bulunma.
2. Eğer mevcut bir fonksiyonu, arayüzü (interface) veya veri yapısını değiştireceksen, bu değişikliğin projenin diğer bağımlılıklarını nasıl etkileyeceğini önce derinlemesine analiz et ve analiz raporunu bana sun.
3. Kodu doğrudan üretmek yerine, önce kullanacağın dizayn paternini (design pattern), veri akış şemasını ve state yönetimini bana açıkla.
4. Ben yazılı olarak 'Onaylıyorum' demeden kesinlikle tek bir satır kod bloğu oluşturma veya dosyalara müdahale etme.
5. Yazdığın her fonksiyonda katı tip tanımlamalarını (strict typing) zorunlu kıl ve any tipini kesinlikle kullanma.

Bu yaklaşım, yapay zekanın kendi kendine inisiyatif alıp projenin mimarisini bozmasının önüne geçer. Direksiyonun ve nihai kararların her zaman sizde kalmasını sağlar. Yapay zeka artık bir karar mercii değil, sadece sizin verdiğiniz mimari kararları koda döken itaatkar bir iş gücü haline gelir.

3. Katı Kod İnceleme (Code Review) Ajanları Kurgulayın

Gerçek hayattaki profesyonel yazılım ekiplerinde hiçbir mühendis yazdığı kodu doğrudan ana dala (main branch) gönderemez. Kod önce kıdemli mühendisler tarafından satır satır incelenir, eleştirilir ve onaylanırsa sisteme dahil edilir. Tek başınıza çalışıyor olsanız bile bu mekanizmayı yapay zeka ile simüle etmek zorundasınız. Yapay zekanın yazdığı kodu asla körü körüne projenize eklemeyin. Kendi kendinize bir “Çiftli Yapay Zeka Ajanı” (Dual-Agent) mimarisi kurgulayın. Bunun için lokalinizde çalışan bağımsız bir model (Ollama üzerinden Llama 3 veya Mistral gibi) ya da tamamen farklı bir chat penceresinde açılmış Claude API’si kullanabilirsiniz.

Bu ikinci ajanın yegane görevi kod yazmak değil, ilk ajanın yazdığı kodu acımasızca eleştirmek, açıklarını bulmak ve tabiri caizse koda kök söktürmek olmalıdır. İlk yapay zekanın ürettiği kod bloklarını bu denetçi ajana verip şu spesifik soruları sormalısınız: “Bu kodda bellek sızıntısı (memory leak) riski var mı? Veritabanına gereksiz yere mükerrer sorgular (N+1 problemi) atılıyor mu? Bu kodun güvenlik açıkları nelerdir ve input validasyonu doğru yapılmış mıdır? Performans açısından daha optimize bir yol var mı?”. Göreceksiniz ki, kodu yazan yapay zekanın “kusursuz ve harika” dediği yapıya, kodu denetleyen yapay zeka ajanınız düzinelerce ölümcül hata, performans darboğazı ve optimizasyon eksiği bulacaktır. AI’ın hatasını yine bir AI denetimiyle yakalamak, teknik borcu daha oluşmadan kaynağında yok eder.

4. Yapay Zekayı Testlerle Eğitin (TDD Yaklaşımı)

Yapay zekanın hata yapma ve Ghost Refactoring üretme olasılığını matematiksel olarak sıfıra yaklaştırmanın en kesin yolu, Test Güdümlü Geliştirme (Test-Driven Development – TDD) metodolojisini yapay zeka süreçlerine entegre etmektir. Geliştiricilerin çoğu yapay zekaya doğrudan iş mantığını (business logic) yazdırmaya çalışır. Bu çok büyük bir hatadır. Doğru yöntem, modele önce yazılacak özelliğin birim testlerini (unit test) yazdırmaktır. Yapay zekaya tam olarak hangi girdileri alacağını ve çıktı olarak ne beklediğinizi söyleyin ve ona uygun test senaryolarını (Jest, Mocha veya PyTest kullanarak) oluşturmasını isteyin.

Test kodları elinizde hazır olduktan ve bu testlerin boş kodda patladığını (red aşaması) terminalde gördükten sonra, yapay zekaya dönüp şu komutu verin: “İşte yazmış olduğun birim testleri. Şimdi bana sadece ve sadece bu testleri hatasız bir şekilde geçecek en sade, en optimize ana fonksiyonu üret.” Yapay zeka bu aşamada artık kafasına göre sağa sola sapamaz, gereksiz kütüphaneler çağıramaz veya mimariyi bozamaz. Çünkü önünde geçmek zorunda olduğu deterministik ve katı test sınırları vardır. Kod testleri geçtiği an (green aşaması), elinizde yapay zekanın bile bozmayı başaramadığı, doğruluğu kanıtlanmış kaya gibi sağlam bir kod bloğu kalır.

5. “Vibe Coding” Tuzağından Çıkın, Koda Gerçekten Dokunun

Son dönemde yazılım dünyasında “Vibe Coding” adı verilen tehlikeli bir akım türedi. Yazılımcılar artık kod editörünü açıyor, arkasına yaslanıyor, kahvesini yudumlarken sadece yapay zekayla sohbet ederek tüm uygulamayı ayağa kaldırıyor. Koda hiç dokunmuyorlar, satırları okumuyorlar; tek kriterleri terminalde kırmızı bir hata uyarısı çıkmaması ve uygulamanın o anlık çalışıyor görünmesi. Bu, bir projenin geleceğine yapılabilecek en büyük kötülüktür. Terminalde hata vermeyen bir kod, o kodun kaliteli, güvenli veya ölçeklenebilir olduğu anlamına gelmez. Yapay zekanın ürettiği her bir fonksiyonu, her bir döngüyü ve çağrılan her bir harici kütüphaneyi, sanki işe yeni almışsınız ve yeteneklerinden asla emin olmadığınız güvensiz bir stajyer yazmış gibi satır satır incelemek zorundasınız.

O satırın orada neden durduğunu, o değişkenin neden tanımlandığını, o kütüphanenin projeye getirdiği ek yükü (bundle size) tam olarak anlamadan ve idrak etmeden o kodu asla ve asla kendi deponuza (repository) dahil etmeyin. Yapay zekanın sağladığı kontrolsüz hız, geliştiricinin teknik kaslarını köreltir ve onu tembelliğe iter. Unutmayın, yapay zeka hız kazandırır ancak o hızın getirdiği teknik borcu gelecekte temizlemek zorunda kalacak olan kişi yine sizsiniz. Koda dokunmaktan, mimariyi incelemekten ve satır satır okumaktan asla vazgeçmeyin.

6. Şirket Satışında (Exit) Teknik Borç Şoku

Bir Micro-SaaS kurucusu veya bireysel girişimci olarak nihai hedefiniz projenizi büyütmek, düzenli gelir elde etmek ve günün birinde büyük bir şirkete veya yatırım fonuna projenizi satarak başarılı bir **Exit** gerçekleştirmektir. Ancak profesyonel yatırımcılar ve kurumsal şirketler bir yazılımı sadece getirdiği aylık gelire (MRR) bakarak satın almazlar. Satış sözleşmesi imzalanmadan önce, alıcı firmanın kıdemli yazılım mimarları ve mühendisleri projenizin kod tabanını incelemek üzere **Technical Due Diligence (Teknik Derinlemesine İnceleme)** adı verilen çok katı bir denetim süreci başlatırlar. Bu süreçte uzmanlar kod tabanınızı bir röntgen cihazı gibi tararlar.

Eğer projenizi yapay zekaya kopyala-yapıştır mantığıyla, hiçbir kurala uymadan, testleri yazılmamış, dökümantasyonu yapılmamış ve Ghost Refactoring canavarının istilasına uğramış bir şekilde geliştirdiyseniz, bu inceleme sırasında her şey gün yüzüne çıkar. Karşılaştıkları spagetti kod yapısını gören kurumsal mühendisler, projenin sürdürülemez ve devralınamaz olduğuna dair rapor verirler. Bu raporun sonucunda ya yatırımcılar masadan tamamen kalkar ya da projenize biçilen değerleme (satış fiyatı) teknik borcun temizlenme maliyeti gerekçe gösterilerek trajik bir şekilde aşağı çekilir. Bugün yapay zeka ile kazandığınızı sandığınız o kontrolsüz birkaç saatlik hız, yarın exit masasında yüz binlerce dolarlık büyük bir kayıp olarak karşınıza dikilir. Çalışan kod değerlidir, ancak sürdürülebilir, dökümante edilmiş ve temiz yazılmış kod çok daha değerlidir.

Sonuç: Yönetici Koltuğunu Asla Terk Etmeyin

Yapay zeka, yazılım dünyasındaki üretim bariyerlerini tamamen yıkan, bireysel girişimcilerin devasa ekiplere karşı kafa tutmasını sağlayan muazzam bir güç ve harika bir kaldıraçtır. Bu gücü tamamen reddetmek çağın gerisinde kalmaktır. Ancak başarılı bir yazılım girişimcisi olmak, sadece hızlıca çalışan bir şeyler ortaya koymaktan ibaret değildir. Asıl başarı, o yazılımı yıllarca ayakta tutabilecek, sunucu maliyetlerini optimize edebilecek ve başkasına devrettiğinizde karşınızdaki mühendisin kolayca anlayıp üzerine geliştirme yapabileceği sürdürülebilir bir altyapı inşa etmektir. Yapay zekayı harika bir asistan, çok hızlı bir iş gücü olarak konumlandırın; ancak projenizin baş mimarı, baş denetçisi ve yönetici koltuğundaki tek patronu her zaman siz olun.