Bir küme düşünün, buna amele işler kümesi diyelim. Aslında zihinsel emeğimizin parçası olmaması gereken, deterministik ve kurallara bağlanabilen işler: linter’lar, formatter’lar, dead code checker’lar, type checker’lar…
Üretken yapay zeka ile birlikte bu küme genişledi ve doğrudan kodun kendisini içine aldı. Artık şu işler de o mekanik kümenin bir parçası haline geldi:
Standart yapılar: Her projede tekrar eden, mimarisi zaten belli iskeletler. CRUD katmanları, controller/service/repository şablonları, DTO’lar, konfigürasyon sınıfları veya API istemcisi boilerplate’leri.
Veri dönüşümleri: Bir veri yapısını diğerine çeviren mapping işlemleri. Veritabanı modelini API yanıtına çevirmek, JSON parse edip alanları eşlemek, array/dict filtreleyip dönüştürmek gibi yaratıcılık istemeyen hamallıklar.
Rutin implementasyonlar: Özel bir iş mantığı ya da algoritma tasarımı gerektirmeyen; sadece kütüphane API’lerini sırayla çağırmaktan ibaret kodlar. Örneğin standart bir HTTP isteği atıp hata kodunu kontrol etmek veya dosya okuyup satır satır işlemek.
Test ve doğrulama kodları: Girdisi ve beklenen çıktısı zaten belli fonksiyonları sınamak için yazılan mekanik şablonlar. Mock nesneleri ve fixture hazırlamak, arka arkaya assert satırları dizmek, servisin temel çalıştığını teyit eden tek atımlık smoke script’leri ya da health-check çağrıları yazmak gibi kuralı baştan tarif edilebilen işler.
Altyapı ve dağıtım tanımları: Kuralı ve sözdizimi katı standartlara bağlı bildirimsel (declarative) dosyalar. Dockerfile hazırlamak, Terraform blokları ve Helm chart’ları yazmak, GitHub Actions veya GitLab CI pipeline yaml’ları kurgulamak, ortamı ayağa kaldıran Makefile ya da dağıtım script’leri yazmak gibi genelde eski bir projeden kopyalanıp değişkenleri değiştirilen şablon işler.
Bu mekanik işleri bir zamanlar editör eklentileriyle yapıyorduk. Sonra pre-commit hook’ları ve çeşitli komutlar ile otomatize ettik ve ilk diyetimizi uyguladık.
İkinci diyet ise autocomplete üzerine oldu. Önce kelime tamamlamalar ile başladı bu iş. Sonra programlama diline özel sözlükler oluşturulup editörün kod tamamlama becerisi geliştirildi, ardından LSP istemcileriyle imlecin konumuna ve syntax’a göre anlamlı tamamlamalara sahip olduk, TabNine ile ufak ufak model destekli kod parçacıklarını tamamlamaya doğru evrildi vesaire. Sonra ne oldu? Ben bunların hepsini kaldırdım.
Artık editörümü nasıl daha sadeleştirebilirim, başka ne silebilirim, ne kaldırabilirim diye düşünüyorum. Editör bana hız kazandırmalı, sorunsuz çalışmalı, büyük dosyaları açarken bile zorlanmamalı, gözümü yormamalı ve saatlerce aralıksız çalışabilmeliyim. Artık editörden beklentilerim bir şeyleri yazmak üzerine değil; hızlıca bulabilmek, değişiklikleri inceleyebilmek, test etmek, deploy veya release etmek, veritabanında sorgu çalıştırmak, Docker ve Kubernetes servislerini yönetmek.
Ve en önemlisi, AI harness araçlarıyla beraber çalışabilmesi. Burada hala geleceğin nasıl şekilleneceğinden emin değilim. Claude Desktop, Codex, OpenCode artık editör yetenekleriyle birlikte geliyor; ama bunların her biri kendi servislerine mecbur bırakıyor. Bana sanki editör hala bağımsız olmalıymış gibi geliyor. Örneğin Codex veya Claude Code ile çalışırken içinde Emacs veya Vim kullanabilmeyi isterdim. Ya da PyCharm ve VS Code içinde harness araçlarının iyi entegre edilmiş olmasını bekliyorum. Evet, şu anda bu alternatiflerin olduğunu biliyorum; ama henüz tatmin edici bir noktada değiller ve bunları ayrı ayrı kullanmayı tercih ediyorum şimdilik.
