41 puan yazan GN⁺ 2025-01-06 | 3 yorum | WhatsApp'ta paylaş
  • "Yapay zekanın kod analizi hakkındaki düşünce biçimini değiştiren kafa karıştırıcı bir deney"
  • Mevcut yapay zekaların bir React kod tabanını analiz ederken sık sık başarısız olduğuna tanık olundu
  • Nedenin, junior geliştiricilerin kodu ilk kez okurken yaptığı gibi yalnızca satır bazında analiz eden yaklaşım olduğu fark edildi

Bootcamp dönemi ile kıdemli zihniyeti arasındaki fark

  • Junior dönemde dosyaları sırayla, satır satır okurken yönünü çabuk kaybetmek yaygındı
  • Kıdemli geliştiriciler büyük PR'ları incelerken şu yaklaşımı kullanır
    • Önce kritik dosyalara bakar
    • Değişiklikleri işlev bazında gruplayarak kavrar
    • Önce genel mimariyi anlar, ardından uygulama detaylarına iner
  • Bu yaklaşımı yapay zekaya uygulamaya karar verildi

Deney

  • Dosyaları işlevlerine göre gruplandırıp, grup hakkında bağlam bilgisini önce yapay zekaya vermeyi deneyen bir yöntem denendi
  • Örnek kodda FileGroup arayüzü tanımlanıyor ve dosyalar ilgili işlev ile dosya boyutuna göre gruplanarak işleniyor
  • Grup bazında yapay zekaya "bunun hangi işlev alanı olduğu ve özellikle nelere dikkat etmesi gerektiği" gibi yönlendirmeler veren prompt'lar kurgulandı

Şaşırtıcı dönüşüm anı

  • Daha önce yalnızca "JWT token kimlik doğrulama mantığı içeriyor" düzeyinde basit yanıtlar veren yapay zeka
  • "WebSocket bağlantılarına etkisi, yakın zamanda birleştirilen PR'larda race condition olasılığı" gibi kıdemli geliştirici seviyesinde içgörüler sunmaya başladı
  • Yapay zeka sistemin tüm bağlamını dikkate alarak tespitlerde bulunmaya başladı

Gerçekte değişen şey

  • Daha karmaşık bir makine öğrenimi modeli kullanılmadı; esas nokta, yapay zekaya kıdemli geliştirici gibi düşünme sırasının verilmesiydi
    1. Bağlam önce: Önce tüm sistemi anlamak
    2. Pattern matching: Benzer dosyaları gruplayıp tekrar eden mantığı bulmak
    3. Etki analizi: Değişikliklerin tüm sistem üzerindeki etkisini fark etmek
    4. Geçmişi anlama: Önceki kod değişikliklerinin nedenini ve bağlamını izlemek

Beklenmedik yan etkiler

  • Sadece istenen noktayı düzeltmekle kalmayıp, şu içgörüleri de yakalamaya başladı
    • Kopyala-yapıştır kaynaklı yinelenen kod bloklarını belirleme
    • Tutarsız hata işleme kalıpları için uyarı verme
    • Olası performans darboğazlarını saptama
    • Kullanım kalıplarına göre mimari iyileştirme önerileri sunma

Neden önemli

  • Son dönemde yapay zeka tabanlı IDE'ler otomatik kod üretmeye odaklanıyor
  • Ancak sistemin genel bağlamı olmadan yalnızca öneri sunmak, "ekibe yeni katılmış bir junior geliştirici" kadar riskli olabilir
  • Asıl önemli olan, "derinlemesine kod anlayışı"dır

Geriye kalan sorular

  • Bağlamın (geçmiş bilgisinin) ne zaman güncelleneceği ve ne zaman korunacağına karar verme sorunu
  • Birbiriyle çelişen kalıplar bulunduğunda nasıl tepki verileceği
  • Belirsizliği yüksek analiz sonuçlarının kullanıcıya nasıl gösterileceği

Bundan sonraki yön

  • Yapay zekaya kıdemli geliştiricilerde görülen şu sezgilerin de öğretilebilip öğretilemeyeceği değerlendiriliyor
    • Teknik borcu önceden fark etme becerisi
    • Mimari iyileştirme önerilerini proaktif biçimde sunma yetkinliği
    • Kullanım kalıplarından güvenlik sorunlarını tespit etme becerisi
    • Ekip içindeki gayriresmî kuralları sezebilme yetisi
  • Nihai hedef, sadece "daha fazla kod" üretmek değil, "kodu kıdemli geliştirici gibi derinlemesine ve bütünsel biçimde anlamayı" yapay zekaya öğretmek

3 yorum

 
savvykang 2025-01-06

Kod tabanını analiz etmek ve iyileştirmek için sorulabilecek sorular zaten çok kalıplaşmış değil mi? Yazar biraz fazla heyecanlanmış gibi görünüyor.

 
yangeok 2025-01-06

Cursor’da not defteriyle proje genelini açıklatmaya benzer bir bağlam gibi görünüyor.

 
GN⁺ 2025-01-06
Hacker News yorumu
  • Yorumlarda insanlar eleştirel davranıyor. Bu yazı, yeni bir aracın olasılıklarına dair kısa ve olumlu sonuçları ele alıyor ve dürüst, makul düşünceler içeriyor

    • "Senior vs Junior Developer" anlatısı biraz abartılmış olabilir, ancak yazının özü harika
    • İnsanların kendilerini tehdit altında hissedip bu yüzden mi öfkelendiğini merak ediyorum
  • Bu, LLM'lerin etkileyici işler yapabildiğine dair bir başka örnek. Ancak her girdide tutarlı ve doğru çalışan bir sistem kurmak çok zor

    • Kimlik doğrulama sistemi dosyası analizi örneği var
    • Bu hardcoded string önemli bir rol oynuyor, ancak her PR için doğru ve tutarlı şekilde üretilene kadar özel bir şey değil
    • Çeşitli codebase'ler ve gerçek PR'lar üzerinden bir değerlendirme kurulmalı
  • Kod yazımı için daha iyi agent sistemlerine yönelik çıkarılacak dersler olabilir

    • Claude/chatGPT gibi araçlara kod üretmemeleri söyleniyor. İlk yapıyı oluşturduktan sonra kod yazmaları isteniyor
  • Yazının ilk satırını okuyunca kendimi uzaylı gibi hissettim. Yazının tamamını okumam gerekir ama mevcut kodu sıralı şekilde okumak garip geliyor

    • "junior developer" hakkında çok sayıda yanlış algı var
  • İnsan unsurunun önemini vurguluyor. Codebase'in bağlamsal olarak anlaşılması olmadan AI uyarılarının ne anlama geldiği bilinemez

    • "shared pattern"ın ne olduğunu ve neden race condition'a yol açtığını anlamak zor
    • Kimlik doğrulama değişikliği ile "retry logic" PR'ı arasındaki ilişki net değil
  • AI'ın var olmayan API'ler uydurmasını engellemek zor. İyi çalıştığında güzel, ama çoğu zaman iyi çalışmıyor

    • AI en iyi, insanların zaten defalarca yazdığı kodları yazarken çalışıyor
  • Kod bağlamı ve anlama, LLM tarafından üretilen kodun kalitesini artırmak için önemli

    • Bismuth ürünü, kullanıcı isteğine göre projeyi mantıksal alanlara ayırıyor ve codebase içinde gezinmek için symbol bilgilerini arıyor
    • Rakip ürünlerden yalnızca bazıları bu seviyede arama yeteneği sunuyor
  • John McCarthy'nin şikayetindeki gibi, bu bir deney ya da kanıt değil, bir hikâye

    • Topluluğun eleştirel düşünceyi ve disiplini kullanmasını umuyorum
  • Sonuçlar etkileyici. Stil ve tutarlılık konusunda eleştiriler var ama sonuç faydalı görünüyor

    • Başlığa bakınca AI'ın başkalarının çalışmasını görmezden gelip sadece kendi yaptığını öne çıkardığı bir içerik sanmıştım
  • Bu tekniğin önemli bir kısmı yazıda eksik gibi görünüyor. getFileContext() ve shouldStartNewGroup() implementasyonları yok