Yapay zeka çağında kıdemli geliştirici yetkinlikleri: Daha iyi sonuçlar için deneyimden yararlanmak
(manuel.kiessling.net)- Son birkaç ayda hem kişisel projelerde hem de işte yapay zeka destekli kodlama araçlarını deneysel olarak kullandım
- Sonuçlar çok olumluydu; hem geliştirme süresinin kısaldığını hem de ortaya çıkan işin kalitesinin arttığını gördüm
- Öte yandan, bazı geliştiriciler yapay zeka araçlarının iyi çalışmadığına dair olumsuz geri bildirimler de paylaşıyor
- Bu deneyim sayesinde, yapay zeka kullanılan yazılım geliştirmenin verimlilik açısından bir sonraki sıçramayı yapma potansiyeline sahip olduğuna ikna oldum
- Ancak bunun için eleştirel süzgeçten geçirilmemiş bir kabulleniş değil, doğru bir bakış açısı ve dengeli bir yaklaşım gerekiyor
- Bu yazıda bizzat deneyimlediğim ve keşfettiğim en iyi pratikleri paylaşarak
yapay zeka araçlarının akıllıca benimsenmesini daha geniş geliştirici topluluğunda biraz olsun hızlandırmayı amaçlıyorum
Yapay zeka kodlama araçlarının bugünkü kullanım durumu
- Twitter’da gözlemlediğim kadarıyla, yapay zeka kodlama araçları profesyonel olmayan geliştiriciler arasında büyük ilgi görüyor
- Bu kişiler yapay zeka sayesinde yeni projelere girişiyor ve keyif alarak geliştirme öğreniyor
- Bu eğilim olumlu; yeni kullanıcı kitleleri için teknolojiye giriş bariyerini düşürmeye katkı sağlıyor
- Ancak bu, yapay zeka araçlarının potansiyelinin yalnızca bir yönünü gösteriyor
- Kıdemli geliştiriciler gibi profesyonel bağlamlarda da yapay zeka büyük değer sunabilir
Kıdemli geliştiricinin güçlü yanları
- Hâlâ gelişimin erken aşamalarında olsak da, şu ana kadarki vardığım sonuç şu:
- Kıdemli geliştiriciler, yapay zeka araçlarından en etkili şekilde yararlanabilecek konumda
- Bu yalnızca yardım almak değil, optimize edilmiş bir kullanım düzeyine ulaşmak anlamına geliyor
- Temel nokta şu:
Yapay zeka çağında biraz demode görünebilecek geliştirme deneyimi ve proje yürütme bilgisi,
aslında bu araçları en iyi şekilde kullanmanın temelidir - LLM tabanlı programlama ajanlarını bir benzetmeyle anlatmak gerekirse,
- Bunlar programlama bilgisi çok güçlü, ancak mevcut bağlamda tasarım anlayışı zayıf bir junior geliştiriciye daha çok benziyor
- Bu yüzden onlara gerçek işler emanet etmek için,
- stratejik hazırlık ve yönlendirme şart
- Bu rolü yerine getirebilecek en uygun kişi ise kıdemli geliştiricidir
- Sonuç olarak, yapay zeka araçları gibi en ileri teknolojiler bile geleneksel geliştirme pratikleri ve deneyim üzerine kurulduğunda en etkili şekilde kullanılabilir
Başarılı bir yapay zeka kodlama oturumu için üç temel unsur
- Yapay zeka ile birlikte iyi sonuçlar elde etmek için şu üç unsur önemlidir:
- İyi yapılandırılmış gereksinimler (Well-structured Requirements)
- Araç tabanlı kalite korkulukları (Tool-based Guard Rails)
- Dosya tabanlı keyframing tekniği (File-based Keyframing)
- Ayrıntılara geçmeden önce, yapay zeka kullanılan gerçek proje örneklerini tanıtıyorum
- Green-field proje: Sıfırdan başlatılan proje
- Brown-field proje: Mevcut kod tabanı üzerine yeni işlev eklenen proje
- Her iki durumda da odak, yapay zekanın uygulamanın tamamını neredeyse tek başına hayata geçirdiği örneklerde
- Yani yalnızca otomatik tamamlama desteği veya sohbet tabanlı yardımcı olarak değil,
ajan modunda gerçek işleri yapan bir yaklaşım söz konusu
- Yani yalnızca otomatik tamamlama desteği veya sohbet tabanlı yardımcı olarak değil,
- Kullanılan araç Cursor idi
- Anthropic’in Claude Sonnet 3.7 modeli üzerine kurulu
- Tüm proje dosyalarını doğrudan düzenleyebilme ve ilgili komutları çalıştırabilme yeteneği sunuyor
Örnek 1: Platform Problem Monitoring (Green-field proje)
- Cursor ve Claude kullanarak Platform Problem Monitoring adlı yeni bir uygulama geliştirdim
- Kaynak kod: GitHub bağlantısı
- Bu uygulama her saat ELK’nin Elasticsearch sunucusuna bağlanıp hata mesajlarını topluyor ve
web platformunun mevcut sorun durumunu özetleyen biçimlendirilmiş bir e-posta raporu gönderiyor - Tüm uygulama yapay zeka tarafından üretildi; elle yazdığım bir kod yoktu
- Python diline çok hâkim olmamama rağmen,
- mimari, operasyon ve en iyi pratikler konusundaki geniş anlayışım sayesinde süreç sorunsuz ilerledi
- Bu proje, alışık olmadığım bir teknoloji yığınında yapay zekanın ne kadar yardımcı olabileceğini deneme fırsatıydı
Not: Kod kalitesi sorunları
HackerNews tartışmasında logging yapılandırması, özel ayar ayrıştırma ve race condition gibi kod kalitesi sorunlarına dikkat çekildi
Bu projenin amacı production kodu üretmekten çok hızlı prototipleme idi
uzun vadeli bakım veya dilin yerleşik kalıplarından ziyade işlevselliğin hayata geçirilmesine odaklanıldı
Örnek 2: Process Management UI Integration (Brown-field proje)
- Mevcut PHP/Symfony tabanlı eski bir backend işlevine UI entegre edilen bir örnek
- Backend, cron tabanlı CLI komutlarıyla çalışıyordu ve herhangi bir UI yoktu
- Bu işlevi modern bir Symfony uygulamasına entegre etmek istedim
- Modern kod tabanı, test sistemi ve stil rehberine sahip UI dostu bir yapıdan yararlanarak
- Başlıca çalışmalar şunlardı:
- Legacy sistemle HTTP API üzerinden iletişim kurmak
- Sistemler arasında veri aktarımını uygulamak
- UI tasarım sistemine uygun ekranlar oluşturmak
- Ortak Symfony bundle içinde bir API istemcisi geliştirmek
- Keyframe dosyaları dışında, tüm uygulama yapay zeka tarafından otomatik olarak yapıldı
İki projeden çıkarılan temel içgörüler
- Green-field proje: Alışık olunmayan bir teknoloji yığınında bile yapay zeka desteğiyle işlevsel bir uygulama geliştirilebiliyor
- Brown-field proje: UI geliştirme bana tanıdık bir alan olmamasına rağmen, yapay zeka sayesinde işlev hızlıca tamamlandı
- Bu iki örnek sayesinde, yapay zeka araçlarının kişisel verimlilikte ve ekip genelindeki iş akışında somut değişiklikler yaratabileceğini hissettim
- Ancak yapay zekanın gerçekten büyük zaman tasarrufu sağlayabilmesi için başlangıçta kurulum yatırımı ve stratejik bir yaklaşım gerekiyor
- Tıpkı yetenekli bir junior geliştiriciyi iyi yönlendirmek gibi hareket edildiğinde en iyi sonuç elde ediliyor
İyi yapılandırılmış gereksinim yazımının önemi
- Başarılı bir yapay zeka kodlama oturumunun kalbi, sistematik ve kapsamlı bir gereksinim dokümanıdır
- Gerçek proje olan Platform Problem Monitoring için oturum başlamadan önce REQUIREMENTS.md belgesi hazırlandı
- Bu belge toplam 371 satırdan oluşuyor ve şu hiyerarşik yapıyı izliyor:
- En üst seviye: temel gereksinimlerin tek satırlık özeti
- Üst seviye: kullanım senaryoları ve geliştirme motivasyonu
- Orta seviye: süreçler ve çalışma biçimi
- Orta seviye: mimari, teknoloji yığını ve kısıtlar
- Alt seviye: somut iş adımlarının girdi/çıktı/yan etki ölçütleriyle ayrıntılı dökümü
- Bu şekilde yapılandırılmış bir belge, yapay zekaya da net bir çerçeve sunarak daha doğru sonuçlar üretmesini sağlar
- Böyle bir belgeyi hazırlamak zaman ve emek ister, ancak başarılı bir uygulama için zorunlu bir yatırımdır
- Yazılım geliştirmede bilinen bir söz vardır:
“6 haftalık uygulama, 2 saatlik planlamadan tasarruf ettirir”
- İronik bir ifade olsa da, uygulama aşamasındaki verimsizliğin çoğu zaman planlama eksikliğinden kaynaklandığı gerçeğini yansıtır
- Bu yüzden projeler her zaman klavyede değil, beyaz tahtada başlamalıdır; bu ilke yapay zeka ile iş birliği yaparken de aynen geçerlidir
- Pratikte bir Cursor oturumuna şu adımlarla başlıyorum:
- Yapay zekanın gereksinimleri kendi cümleleriyle özetlemesini istiyorum
- Bir yürütme planı oluşturmasını istiyorum
- Belirsiz noktalar için soru sormasını teşvik ediyorum
- Ancak bu doğrulama aşamasından sonra yapay zekayı “Agent” moduna alıp uygulamaya başlatıyorum
Araç tabanlı kalite korkulukları kurmak
- Gereksinim dokümanı hedefi tanımlıyorsa, kalite korkulukları da o hedefe giden en kısa rotada kalmayı sağlar
- Geliştirme sırasında gerçek zamanlı geri bildirimin önemi neyse, statik analiz araçları da yapay zeka için o kadar değerlidir
- Örneğin, null kontrolü eksikliğini yayına çıktıktan sonra müşteri bildirimiyle fark etmektense geliştirme aşamasında saptamak çok daha verimlidir
- Bu nedenle yapay zeka kodlama oturumu başlamadan önce şu kalite güvence araçlarını mutlaka kuruyorum
- Makefile örneği temel alınarak:
black,isort: kod biçimlendirmeruff: lintingmypy: tip denetimibandit: güvenlik analizi- test paketi bütünü
- Makefile örneği temel alınarak:
- Claude tabanlı yapay zeka ajanı bu araçları tanıyıp kullanabiliyor
- Örneğin tip denetimi başarısız olursa, yapay zeka kodu kendisi düzeltip denetimden geçecek hâle getiriyor
- İşlevsel doğrulama için curl komutlarıyla API test istekleri de sağlıyorum
- Yapay zekanın endpoint’leri doğrudan çağırıp yanıtları kontrol ederek kodu iyileştirmesi özellikle etkileyici
- Bu tür araç tabanlı korkuluklar, yapay zekanın güvenilir sonuçlar üretebilmesini destekleyen vazgeçilmez bileşenlerdir
Dosya tabanlı keyframing tekniği
- Yapay zeka yaratıcı uygulamada güçlü olsa da, kod yapısı veya dosya organizasyonu konusunda yön duygusu eksik kalabiliyor
- Bunu telafi etmek için kullandığım strateji dosya tabanlı keyframing (file-based keyframing)
- Bu teknik, animasyon üretimindeki keyframe yaklaşımından ilham alıyor:
- Usta animatörün önce önemli sahneleri (keyframe’leri) oluşturduğu, geri kalan kısımların ise destek ekip tarafından doldurulduğu yöntem
- Böylece kalite korunurken üretim verimliliği de artıyor
- Gerçek yapay zeka kodlama projelerinde uygulamaya başlamadan önce boş iskelet dosyalar (stub files) oluşturuyorum
- Örneğin API endpoint’leri, API istemcisi, controller sınıfları, Twig template’leri gibi
- Bu keyframe dosyaları, yapay zekaya şu gibi kritik bağlamsal bilgileri sağlar:
- Projenin dosya organizasyon biçimi
- Namespace yapısı
- Adlandırma kuralları
- Tutarlı kod kalıpları
- Tüm yapıyı prompt içinde açıklamak yerine, ipuçlarını doğrudan kod tabanının içine yerleştirerek yapay zekanın çıkarım doğruluğunu artırmak mümkün oluyor
- Bu yaklaşım, yapay zeka çağında bile hâlâ önemli olan “isim verme” ilkesinin altını çiziyor
- Yapay zeka dil temelli çalıştığı için, niyet ve anlam taşıyan metinler daha iyi sonuçlar doğuruyor
Gerçek bir örnekle birleşik uygulama: abonelik sözleşmeleri dashboard UI’ı geliştirme
- Yukarıda anlatılan üç temel ilkenin tek bir projede birlikte nasıl uygulandığını gösteren pratik bir örnek:
- İyi yapılandırılmış gereksinim dokümantasyonu
- Araç tabanlı kalite korkulukları
- Dosya tabanlı keyframing tekniği
-
Projeye genel bakış
- Hedef: platform içindeki abonelik sözleşmesi bilgilerini tablo biçiminde görselleştiren salt okunur bir web UI dashboard’u geliştirmek
- Ortam: çoklu kod tabanı (monorepo) yapısı
backend-app: Symfony 5 uygulaması, veriyi tutuyorjanus-christophorus: Symfony 7 uygulaması, UI’ı sunuyorjanus-shared-bundle: API istemcisi uygulamasını içeriyorjanus-webui-bundle: stil rehberi, Tailwind ayarları ve Twig template’lerini içeriyor
-
Gereksinim yapısı
- Backend verisini API üzerinden okuyup frontend UI’da göstermek
- Gerçek API endpoint’lerine ek olarak demo modu desteği (test için sahte veri sağlama)
- UI’ın stil rehberiyle tutarlı olacak şekilde uygulanması
- Her katman şu bileşenlerle hayata geçiriliyor:
- API endpoint’i
- API istemcisi
- Presentation katmanı servis sınıfı
- Controller ve Twig template’i
-
Yapay zeka oturumu için ön hazırlık
- Tüm kod tabanlarında dosya tabanlı keyframing yaklaşımıyla boş dosyalar önceden oluşturuldu
- Mevcut stil rehberi, navigasyon servisi ve benzer işlevler yapay zekaya referans malzemesi olarak verildi
- Her kod tabanında kalite araçları (PHPStan vb.) çalıştırılabilir durumda
- Örneğin
.dxcli/dxcli.sh qualitybetiği kullanılıyor
- Örneğin
-
İlkelerin birlikte kullanım biçimi
- Gereksinimlerin düzenlenmesi: Prompt içinde ayrıntılı ihtiyaçlar ve sistem yapısı açıklanıyor
- Korkulukların sağlanması: Kod denetim araçlarının kullanımı tarif ediliyor
- Keyframe’lerin sağlanması: Hedef dosyalar önceden oluşturularak yapay zekanın kodu doğru yere ve doğru bağlamla yazması sağlanıyor
-
Başlıca hedefler
- Sözleşme bilgilerine hızlıca bütünsel bakış sağlayan bir UI sunmak
- Gerçek uygulamada yapay zekanın soru sorup plan yapabilmesi için net yapı ve ipuçları sağlamak
- Bu örnek, yapay zeka araçları ile insan deneyiminin birlikte çalıştığında ne kadar güçlü bir sinerji yaratabildiğini çok iyi gösteriyor
Sonuç: yapay zeka araçları + insan deneyimi = en iyi kombinasyon
- İyi yapılandırılmış gereksinimler, araç tabanlı korkuluklar ve dosya tabanlı keyframe’ler sağlandığında
yapay zekanın güçlü yeteneklerinden yararlanırken kod kalitesini ve mimari tutarlılığı korumak mümkün oluyor - Bu geleneksel geliştirme pratikleri yapay zeka çağında hâlâ geçerliliğini koruyor
hatta kıdemli geliştiricinin deneyimi ve içgörüsü sayesinde daha da büyük etki yaratıyor - Sonuçta yapay zeka yalnızca bir araç
ve onu doğru kullanabilecek insan deneyimi ile becerisi, bugün her zamankinden daha önemli
1 yorum
Hacker News görüşleri
Deneyimli bir Python geliştiricisi belirli bir dosyayı inceledikten sonra, bunun junior bir yazılım mühendisinin hatalarıyla dolu olduğunu belirtiyor
load_json'ın sorunlu olması25 yıllık deneyime sahip bir hobi amaçlı kod yazarı, LLM ve vibecoding'in yaratıcılığı körelttiğini hissediyor
40 yaşın altındaki bir geliştirici, AI'ın yük hafifleten bir araç olarak faydalı olduğunu düşünüyor
AI ile kod üretimini verimsiz bulan bir kullanıcı
AI'ın yeni projelerde (greenfield) faydalı, mevcut projelerde (brownfield) ise verimsiz olduğunu düşünen bir kullanıcı
Projeye başlarken Markdown dosyasıyla plan yapan bir geliştirici
AI çağında yazılım mühendisliği deneyiminin önemli olduğunu düşünen bir kullanıcı
Enformasyon teorisindeki "şaşırtıcılık" kavramını LLM'lere uygulamaya çalışan bir kullanıcı
Test güdümlü geliştirme (TDD) ile AI'ın ürettiği koda yön vermek isteyen bir kullanıcı
AI'ın mevcut halinin yazılımın gelecekte gitmesi gereken yönle uyuşmadığından endişe eden bir kullanıcı
AI'ın çok hızlı geliştiğini ve bunun bunaltıcı olabileceğini düşünen bir kullanıcı