25 puan yazan GN⁺ 2025-03-28 | 4 yorum | WhatsApp'ta paylaş
  • Ajan tabanlı kodlama asistanları daha yetkin hale geldikçe tepkiler de oldukça çeşitleniyor; bazıları "1 yıl içinde geliştiricilere artık ihtiyaç kalmayacak" iddiasında bulunuyor
  • Diğerleri ise yapay zekanın ürettiği kodun kalitesi ve junior geliştiricilerin bu değişen ortama nasıl hazırlanacağı konusunda kaygılarını dile getiriyor
  • Son birkaç ayda Cursor, Windsurf, Cline gibi ajan tabanlı kodlama yardımcıları kullanıldı ve bunların mevcut kod tabanında değişiklik yapmada çok etkili olduğu görüldü
  • IDE entegrasyonu özellikle etkileyiciydi; test çalıştırma ve otomatik hata düzeltme, lint/derleme hatalarını tespit edip giderme, web araması ve tarayıcı önizleme özellikleri bile entegre durumda
  • Geliştirici ile yapay zeka arasındaki iş birliği deneyimi oldukça etkileyici ve sorunların hızlı çözümüne, özelliklerin uygulanmasına katkı sağlıyor
  • Ancak yine de geliştiricinin sürekli müdahalesi, düzeltmesi ve yön vermesi gerekiyordu
  • Gerçek commit'e dönüşmeyen pek çok durum da oldu; yapay zeka, kendi başına önemsiz olmayan işler için kod yazma konusunda hâlâ yetersizdi
  • Bu nedenle geliştiricinin becerisi ve deneyimi hâlâ önemini koruyor ve gelecekte de sürekli eğitilmesi gerekiyor

Geliştiricinin Doğrudan Müdahale Etmek Zorunda Kaldığı Anlar

  • Yapay zeka araçları belirli alanlarda sürekli zayıf performans gösterdi ve bu durum tekrar tekrar doğrulandı
  • Bazı sorunlar ek prompt'lar veya özel kurallarla kısmen hafifletilebilse de tam kontrol mümkün değil
    • LLM'ler çoğu zaman prompt'taki talimatları tam olarak takip etmiyor
    • Kodlama oturumu uzadıkça çıktıların tutarlılığı düşüyor
  • Bu yüzden aşağıda verilen örnekler, prompt veya ayarlardan bağımsız olarak yeterince ortaya çıkabilecek sorunlar
  • Yapay zeka hataları, etki alanına göre 3 kategoriye ayrılıyor
    • a. Geliştirme hızının ve commit süresinin düşmesi
      • Yapay zeka bazen hızı artırmak yerine yavaşlatıyor
      • Yardımsız kodlamadan daha verimsiz olduğu durumlar var
    • b. Takım iş akışında sürtünme yaratması
      • Tek bir iteration içinde çakışmalar veya iş birliği sorunları doğabiliyor
    • c. Uzun vadeli kod bakım yapılabilirliğinin bozulması
      • Başta sorun yokmuş gibi görünse de gelecekte değişiklik veya genişletme sırasında problemler çıkıyor
  • Etki alanı büyüdükçe, takımın bu sorunu fark edip düzeltmesine yönelik geri bildirim döngüsü uzuyor

Etki Alanı: Commit'e Kadar Geçen Sürenin Uzaması

  • Bu kategori, yapay zekanın yardımcı olmak yerine engel olduğu örneklerden oluşuyor
  • En açık başarısızlık biçimi olduğu için çok büyük bir sorun sayılmıyor
    • Çoğu durumda geliştirici, sorunu commit öncesi aşamada fark edip engelleyebiliyor
  • Çalışmayan kod

    • Yapay zekanın ürettiği kod temelde çalışmıyor
    • Geliştiricinin bunu doğrudan düzeltmesi ya da AI oturumunu kapatıp elle sorunu çözmesi gerekiyor
    • Deneyimli geliştiriciler, neyin yanlış gittiğini hızla teşhis edip müdahale edebiliyor
  • Sorunun yanlış teşhis edilmesi

    • Yapay zeka sorunun nedenini yanlış değerlendirip tamamen alakasız bir yönde çözüm deniyor
    • Geçmiş deneyime dayanarak geliştirici, yapay zekayı yanlış yoldan geri çekebildi

      Örnek: Docker build hatasını mimari ayar sorunu sanıp konfigürasyonu değiştirmesi
      Asıl neden, yanlış mimaride build edilmiş node_modules klasörünün kopyalanmasıydı
      Geçmişte sık karşılaşılan bir sorun olduğu için bu durum hızlıca fark edilip düzeltilebildi

Etki Alanı: Iteration İçindeki Takım İş Akışı

  • Bu kategori, review veya geliştirici müdahalesinin yetersizliği nedeniyle iteration süresi boyunca takım içinde sürtünme oluşan durumları kapsıyor
  • Yazar, geçmişte farklı takımlarda edindiği deneyim sayesinde bu sorunları commit'ten önce fark edip ayarlayabildi
  • Yeni geliştiriciler de yapay zeka ile deneme-yanılma yaşayarak bu dersleri öğrenebilir
  • Ancak yapay zeka nedeniyle kodlama hızı artarsa, takım bu sorunları taşımakta zorlanabilir
  • Aşırı erken çalışma

    • Yapay zeka, kademeli uygulama yerine tüm özelliği tek seferde geniş kapsamlı biçimde ele alma eğiliminde
    • Bu nedenle teknik seçimler uygunsuzsa ya da gereksinimler yanlış anlaşılmışsa, çok fazla iş boşa gidebilir

      Örnek: Frontend stack migration sırasında tüm UI bileşenlerini tek seferde dönüştürmeye çalışması
      Oysa backend ile entegre olan tek bir bileşenden başlayıp kademeli ilerlemek gerekiyordu

  • Kök nedeni analiz etmeden rastgele çözüm üretme

    • Yapay zeka, sorunun temel nedenini analiz etmeden, sadece dışarıdan görünen hatayı çözmeye çalışıyor
    • Sonrasında sorunu devralan başka bir ekip üyesi, bağlam olmadan sorunu yeniden analiz etmek zorunda kalıyor

      Örnek: Docker build sırasında bellek hatası olduğunda, nedeni bulmak yerine yalnızca bellek ayarını artırması

  • Geliştirici iş akışını karmaşıklaştırma

    • Yapay zekanın ürettiği build/çalıştırma biçimi geliştirici deneyimini kötüleştiriyor
    • Bu kodlar hemen commit edilirse diğer ekip üyelerinin iş akışını da olumsuz etkiliyor

      Örnek: Frontend ve backend'i ayrı ayrı çalıştırmak için farklı komutlar sunması
      Örnek: hot reload özelliğinin eksik olması
      Örnek: Karmaşık build ayarlarının hem geliştiriciyi hem de yapay zekayı şaşırtması
      Örnek: Docker hatalarını önceden yakalayamayıp hatayı build'in sonlarına doğru ele almaya çalışması

  • Yanlış anlaşılmış veya eksik gereksinimler

    • Özellik gereksinimleri net verilmezse yapay zeka yanlış anlayıp bambaşka bir yönde implementasyon yapabiliyor
    • Başta müdahale edip düzeltmek ideal olsa da, ister otonom yapay zeka ister düşüncesiz geliştirici olsun, sonraki düzeltme maliyeti artıyor
    • Bu tür yanlış implementasyonlar daha sonra story ilerlerken ortaya çıkıp çok sayıda düzeltme işi ve iletişim maliyeti doğuruyor

Etki Alanı: Uzun Vadeli Bakım Yapılabilirliğinin Bozulması

  • Bu, en sinsi ve tehlikeli etki alanı
    • Başlangıçta kod sorunsuz çalışıyor gibi görünse de daha sonra değiştirmek ve genişletmek zorlaşıyor
  • Bu sorunlar çoğu zaman haftalar ya da aylar sonra fark ediliyor
  • Özellikle bu alanda, yazarın 20 yılı aşkın geliştirme deneyimi en fazla etkili olmuş
  • Uzun ve tekrarlı test kodu

    • Yapay zeka test üretmede iyi olsa da şu sorunlar sık görülüyor:
      • Mevcut testlere entegre etmek yerine yeni test fonksiyonları oluşturması
      • Zaten kapsanmış kısımlar için bile aşırı sayıda assertion eklemesi
    • Yeni başlayan geliştiricilerin yanlış anlayabileceği nokta: Daha fazla test ≠ daha iyi test
    • Tekrar arttıkça bakım zorlaşıyor ve kod değiştiğinde toplu test başarısızlıkları yaşanma olasılığı artıyor
    • Özel komutlarla bunu hafifletmeye çalışılsa da sorun yine de sık yaşanıyor
  • Yeniden kullanılabilirliğin zayıf olması

    • Yapay zekanın yazdığı kod çoğu zaman yeterince modüler olmadığı için yeniden kullanılamıyor

      Örnek: Zaten var olan UI bileşenlerini fark etmeyip aynı şeyi yeniden implemente etmesi
      Örnek: CSS class'ları kullanmak yerine aşırı inline style kullanması

  • Gereğinden fazla karmaşık veya uzun kod

    • Yapay zeka sık sık gereğinden fazla kod üretiyor ve gereksiz kısımların elle temizlenmesi gerekiyor
    • Bu da bakım maliyetini yükseltiyor ve değişiklik sırasında hata olasılığını artırıyor

      Örnek: CSS değişikliğinde çok sayıdaki yinelenen stili tek tek silmek zorunda kalınması
      Örnek: JSON verisini göstermek için gereksiz derecede karmaşık bir web component oluşturulması
      Örnek: Refactoring sırasında mevcut dependency injection zincirini fark etmeyip,
      zaten enjekte edilmiş değeri bir kez daha başka bir parametre olarak geçirerek tasarımı karmaşıklaştırması

      • value = service_a.get_value(); ServiceB(service_a, value=value) biçimi

Sonuç: Yapay zeka tüm kodu gerçekten yazabilir mi?

  • Şimdiye kadarki deneyime bakıldığında, 1 yıl içinde yapay zekanın tüm kodun %90'ını otonom biçimde yazması gerçekçi görünmüyor
  • Buna karşılık, kod yazımında yardımcı rol olarak bazı ekiplerde ve kod tabanlarında %90 düzeyinde destek sunma ihtimali var
  • Nitekim yazar, 15K LOC büyüklüğünde orta karmaşıklıktaki bir projede yaklaşık %80 oranında yapay zeka desteği aldığını belirtiyor

Yapay zekanın hatalarını önlemek için yapılabilecekler

  • Bireysel geliştirici düzeyinde yapılabilecekler

    • Yapay zekanın ürettiği kodu her zaman dikkatle gözden geçirin
      • Düzeltilmesi gerekmeyen durum neredeyse hiç yok
    • AI oturumu kafa karıştırıcı hale gelirse hemen durdurun
      • Prompt'u değiştirin ya da tamamen elle çalışmaya geçin (bazen buna "el yapımı kodlama" da deniyor)
    • Kısa sürede mucize gibi ortaya çıkan "makul görünen" çözümlere karşı dikkatli olun
      • Uzun vadeli bakım maliyetleri gizli olabilir
    • Pair programming uygulayın
      • 4 göz, 2 beyin daha iyi kararlar verir
  • Takım ve organizasyon düzeyinde karşılık verme stratejileri

    • Mevcut kod kalite izleme araçlarını aktif biçimde kullanın
      • Örn. Sonarqube, Codescene
      • AI araçları kullanılırken kod tekrarı, code smell vb. daha yakından izlenmeli
    • Pre-commit hook'ları ve IDE entegre code review ayarları kurun
      • Sorunları geliştirme sürecinin erken safhasında yakalamaya yönelik shift-left stratejisini güçlendirin
    • İyi kod kalitesi alışkanlıklarını yeniden tesis edin
      • Takım içinde yapay zeka kodu nedeniyle yaşanan sorun örneklerini ("Go-wrong log") haftalık retrospektifte paylaşın
    • Özel kurallardan aktif biçimde yararlanın
      • Çoğu yapay zeka aracı, prompt ile birlikte iletilen bir kural seti tanımlamaya izin verir
      • Takım bu rule set'i birlikte geliştirerek yapay zekanın hatalarını azaltabilir
      • Ancak oturum uzadıkça kuralları görmezden gelme olasılığı artar
    • Güven ve iletişime dayalı bir takım kültürü oluşturun
      • Yapay zeka adaptasyonu yeni bir değişimdir ve herkesin acemi olduğunu kabul etmek gerekir
      • "Nasıl olsa AI var, daha hızlı yap" tarzı baskı kalite riskini artırır
      • Psikolojik güvenliğin olduğu ekiplerde sorun paylaşımı ve öğrenme daha canlı olur

4 yorum

 
bus710 2025-03-29

Bu aracı kullananlar, yetkinlik düzeylerinden bağımsız olarak sonuçta yine geliştiriciler olacaktır.... Bundan sonra geliştiricilere gerek kalmayacakmış gibi reklam yapılması biraz garip görünüyor.

 
prunusnira 2025-03-28

İleride nasıl olur bilmiyorum ama şimdilik ana akım olarak kullanmak için pek uygun değil gibi geliyor... Geçenlerde Cursor'u denedim, en temel dosya import path'lerini bile düzgün yakalayamıyordu. Yine de yapmak istediğim şeyi belli ölçüde önceden tahmin etmesi biraz şaşırtıcıydı.

 
daddy 2025-03-28

Docker build sırasında bellek hatası oluştuğunda, en başta neden bu kadar çok bellek kullanıldığını sormak yerine bellek ayarını artırdım
-> Bu... zaten sayısız örnekte hep böyle yaptığımız için.
-> Şimdiki AI, geçmişteki biziz

 
GN⁺ 2025-03-28
Hacker News görüşü
  • Bu günlerde geliştirmelerin çoğunda Cursor kullanıyorum. Bu yazı benim deneyimime çok benziyor

    • Yapay zeka ajanlarının sanki 2021 civarında takılıp kaldığını hissediyorum. Yeni bir paket kurduğunuzda Claude, 4 yıl önce popüler olan eski paketlere ya da uygulamalara geri dönüyor. Bunu düzeltmek çok sinir bozucu. Net talimatlar vermek sorunu hafifletebiliyor ama çözmüyor
    • Bu hataların öngörülemezliği özellikle zorlayıcı. Birkaç ay önce Claude kullanarak faydalı bir web uygulamasını "tek seferde" yaptım. Tam işlevseldi ve şaşırtıcı derecede gelişmişti. Tek başıma yapsaydım haftalarımı ya da hafta sonlarımı alırdı. Ama ona verilen dosyaları kullanarak favicon'u güncellemesini söylediğimde, bir saat boyunca boş yere döndü durdu (sonunda birkaç dakikada kendim çözdüm). Birkaç gün önce benzer kapsamda bir web uygulamasını tekrar yapmaya çalıştım. Yaklaşık 4 saat ajanla uğraştıktan sonra kodu tamamen çöpe atmaya hazır hale geldim
    • Bu yaklaşım, zamanım, uzmanlığım ya da motivasyonum olmadığı için daha önce deneyemediğim projelere yönelme cesareti veriyor. Sürtünmenin azalması heyecan verici, ama anlamlı bir şey üretmek hâlâ zor. Gelişmiş bir MVP yapmak için hâlâ ciddi emek gerekiyor
    • Sürekli tavşanla kaplumbağayı düşünüyorum. Yapay zeka ajanlarına güvenmek cazip geliyor çünkü başta ilerleme çok daha hızlıymış gibi hissettiriyor. Ama sonunda, yavaş ve dikkatli ilerleseydim daha sağlam bir ilerleme kaydetmiş olacağım hissi kalıyor. Elle yaparken nadiren geri dönmek ya da tüm yaklaşımı çöpe atmak gerekir. Yapay zeka güdümlü yaklaşımda 10 kat daha hızlı ilerleyebilirsiniz ama bu sırada işin yaklaşık %70'ini çöpe atabilirsiniz
    • Bu deneyimler yüzünden, benim hayal gücüme göre yapay zekanın 1 yıl içinde kodun %90'ını otonom şekilde yazacağını düşünmüyorum. Ama kodun %90'ını yazmaya yardımcı olabilir
    • Şu anki ortam, otonom araçların abartı döngüsüne benziyor. Çok sayıda iddialı vaat ve gerçek ilerleme oldu, ama önümüzdeki 5 yıl içinde yapay zekanın kendi başına faydalı yazılım yazdığı bir dünya göreceğimizi sanmıyorum
  • Ben yapay zekayı şöyle kullanıyorum: IDE'deki bir yazma yardımcısı gibi; bana çok havalı ve gelişmiş bir kauçuk ördek gibi cevap veriyor

    • Belirli kod parçaları üzerine sık sık ileri geri tartışıyorum. Genellikle neredeyse hiç bağlam olmadan veriyorum, işlev doğru çalışana kadar rafine ediyorum, sonra daha geniş bağlama uyacak şekilde sunuyorum (ya da o kısmı kendim hallediyorum)
    • Şöyle kullanmıyorum: Kendi başına geniş hedeflere ulaşması gereken bir ajan olarak kullanmıyorum
    • Nedeni: Ajan sistemlerinin çıktısının gerçekten başarmaya çalıştığım şeyle uyumlu olduğundan emin olmak için harcamam gereken zaman ve emek çok fazla. Tam da bu harika yazıda anlatılan nedenlerden ötürü
    • İşin ironik yanı, yapay zekayı çok yetenekli bir yazma yardımcısı olarak kullanınca iş akışım ciddi biçimde hızlanıyor. Bu yüzden bir bakıma daha az ajanvari yapay zeka beni daha eleştirel yapıyor; ajan yapay zekanın tuhaflıklarına uyum sağlamak için ayrıca yatırmam gereken zamana karşı daha eleştirel oluyorum
  • Hiç anlamıyorum

    • Deneyimli geliştiricilerin neden bu kadar bariz biçimde kötü ve tatmin edici olmayan bir deneyime kendilerini bağlamaya bu kadar hevesli olduklarını anlamıyorum
    • Ben kod yazmayı ve problem çözmeyi seviyorum. Bu yüzden yazılım geliştirmeyi kariyer olarak seçtim
  • Örnek: Docker build sırasında bellek hatası aldığında, en başta neden bu kadar çok bellek kullanıldığını sormak yerine bellek ayarını artırdı

    • Yapay zeka gerçekten bize benziyor
  • Geliştirici becerileri hâlâ vazgeçilmez — araba kullanamıyorsan direksiyonu da tutamazsın. Peki ya geliştirici enerjisi? Yapay zekadan önce günde yalnızca yaklaşık 2 saat kod yazabiliyordum (gerçek kod yazma süresi). Ama Claude Code kullanınca ara vermeden rahatça 5 saat kod yazabiliyorum. Bisiklet yerine elektrikli bisiklet sürmek gibi hissettiriyor. Yapay zeka, Steve Jobs'un zihin için bisiklet benzetmesi gibi geliyor — beni değiştirmiyor ama artık çok daha uzağa, çok daha hızlı gidebiliyorum

  • Bu diyagram inanılmaz derecede tanıdık geliyor — bizim ekip burada yazan her maddeyi işaretler. Daha yapay zeka kullanmıyor olmamıza rağmen! Bir de sonunda kullanmaya başladığımızı düşünün...

    • "Yanlış anlaşılan gereksinimler" ve "aşırı karmaşık uygulama" resmen maskotumuz. Bu karmaşayı daha iyi ilk konuşmalar ve tekrarlı incelemelerle yavaş yavaş çözmeye çalışıyoruz. Ama alışkanlıklar kolay kaybolmuyor. Yapay zeka yardımı olmadan bu tuzakların içinden çıkan var mı?
  • Bana açık olan şeyi göremiyorum: Etrafımda yapay zeka kullanıyorum

    • Sık sık geliştirme araçları, gözlemlenebilirlik, loglama, dönüşümler vb. araçlar kurup bakımını yapmam gerekiyor. Bunları oluşturup değiştirmek için ajanları kullanırken epey şanslı oldum. Örneğin, özel bir planlama sisteminden veri toplayan ve logları bir araya getiren araçlar
    • Bu araçları kurarken kritik yolun dışında üretilen çok sayıda boilerplate oluyor. Çoğu gün bunu yapmak istemiyorum
  • Yapay zekayı çok yönlendirmek gerekiyor, ama daha iyi prompt'ların daha iyi ajanlara yol açacağı konusunda iyimserim

    • Yazıdaki örneği ele alalım: kod yeniden kullanımı. Kod yazarken, zihnimizde zaten var olan kodların bilinçsiz bir envanterini taşırız. Bilinçsizce kendimize "Bu yeni iş, hâlihazırda çalışan ve test edilmiş koda çok mu benziyor?" diye sorarız. Kodlama ajanının aldığı ilk prompt'lardaki ayrıntılara bakmadım, ama içgüdüm şu: ajana kod tabanında neler olduğuna dair bir envanter tutmasını söyleyen bir prompt eklemek ve yeni kod yerleşimini planlarken yeni işin gereksinimlerini eldeki olanlarla karşılaştırmak iyi olur
    • Evet, bu planlama sürecine çok fazla hesaplama döngüsü ekler. Ama dürüst olmak gerekirse, "ajanın kod yazmasının bedeli bu" demek gerekir. Daha iyi planlama > daha iyi problem çözme
  • Yapay zeka araçlarının listelediğim şeylerde her zaman kötü olduğunu söyleyerek bir giriş yapmak istiyorum

    • Orada bir "not" eksik gibi görünüyor. Neden her zaman kötü olduklarını söyleyerek giriş yapsınlar ki? Tersi daha mantıklı
    • Ayrıca "effected" yerine "affected" olması gereken bir dilbilgisi hatası var
  • Martin Fowler artık web sitesinde alan mı kiralıyor?