6 puan yazan baeba 5 시간 전 | Henüz yorum yok. | WhatsApp'ta paylaş

Özet

  • Yapay zeka kod yazımının önemli bir bölümünü otomatikleştirirken, geliştiricinin temel rolü doğrudan uygulamadan tasarım, doğrulama ve kontrole kayıyor.
  • Programcılığın özü çok kod yazmak değil, belirsiz gereksinimlerin ayrıntılarını doldurup bunları yeniden kullanılabilir biçimde soyutlamaktır.
  • Yapay zekaya ayrıntılı uygulama yöntemleri dikte etmektense hedefi ve bağlamı sunup kararı ona devretmek daha etkilidir.
  • Yapay zeka işleri tek seferde yürütmek yerine çıktıları belirtim, test, uygulama, refactoring ve doğrulama olarak ayırmak kaliteyi artırır.
  • Yapay zekanın çıktısı deterministik olmadığından testler, derleyici, linter ve doğrulama kapıları gibi deterministik bir harness gerekir.
  • Geleceğin geliştiricisinin, basit bir kod yazarı değil, yapay zeka ajanlarıyla doğrulama sistemlerini bağlayan bir sistem tasarımcısı ve harness mühendisine daha yakın olacağı öngörülüyor.

Giriş

Yapay zekanın sarstığı geliştirici kimliği

  • Yapay zeka yalnızca doğal dil talimatlarıyla yüzlerce satır kod üretirken, mevcut geliştirme yetkinliklerine dair ölçütler değişiyor.

  • Geçmişte boş bir editörde hızlı kod yazabilme yeteneği, geliştiricinin başlıca rekabet gücü olarak görülüyordu.

  • Bugün bilgi ve uygulama yöntemlerini yapay zeka sağlarken şu sorular ortaya çıkıyor.

    • Kodu doğrudan yazmadan da buna geliştirme denebilir mi?
    • Yapay zeka uygulamanın ayrıntılarını ele alırsa geliştiriciye hangi rol kalır?
    • Geleneksel bilgisayar bilimi bilgisi ve programlama tarihi bugün hâlâ gerekli mi?
  • Yazı bu meseleyi ayrıntı, soyutlama, nedensizlik ve harness kavramları etrafında açıklıyor.

Programlama tarihinin anlamı

  • Geçmişteki programlama bilgisi, basit bir teknikler listesi değil; dönemin geliştiricilerinin sorun çözüp yeni soyutlama katmanları oluşturma süreciydi.
  • Makine dili, assembly, structured programming, nesne yönelimli yaklaşım ve framework'ler, alt katmanların karmaşıklığını gizlemek için ortaya çıktı.
  • Eski teknolojileri doğrudan kullanmıyor olsak da, bu tarihi anlamak geliştirici rolünün zaman içinde nasıl tekrar tekrar değiştiğini görmeyi sağlar.

Ana bölüm

1. Geliştirici, ayrıntıları somutlaştıran kişidir

  • Ürün planlaması genelde ürünün amacıyla genel yönünü verir, ancak gerçek uygulama için gereken tüm koşulları belirtmez.

  • Örneğin “nickname düzenleme” gibi basit bir özellikte bile şu ayrıntılar vardır.

    • Boş string'e izin verilip verilmeyeceği
    • Özel karakterler ve emoji'lerin nasıl ele alınacağı
    • Ağ hataları ve geciken yanıtların nasıl işleneceği
    • Düzenleme sırasında ekrandan çıkıldığında ne olacağı
    • Hata mesajının yeri ve ifade biçimi
  • Geliştiricinin işi, bu boşlukları mantıksal kurallar ve istisna işleme ile somutlaştırma sürecidir.

  • Bu nedenle geliştiricinin uzmanlığı basit özellik uygulamaktan çok belirsiz gereksinimleri tamamlanmış sistem davranışına dönüştürebilme yeteneğinde yatar.

2. Soyutlama, çözülmüş ayrıntıları gizleme sürecidir

  • Geliştiriciler tekrar eden işleri azaltmak için bir kez çözdükleri sorunları function, module, library ve framework gibi yapılara paketler.

  • Soyutlamanın özü şudur.

    • Tekrarlayan iç davranışları gizlemek
    • Dışarıya yalnızca gerekli işlevleri açmak
    • Değişebilir kısımlarla sabit kalacak kısımlar arasındaki sınırı belirlemek
  • Sağlam soyutlamalar biriktikçe yeni katmanlar oluşur ve üst katmandaki geliştiriciler alt düzey uygulamanın tamamını bilmeden de çalışabilir.

  • Bugünkü geliştirme ortamı, önceki kuşak geliştiricilerin kurduğu soyutlama katmanları üzerinde çalışıyor.

3. Geliştiricinin ihtiyaç duyduğu derinlik, bulunduğu konuma göre değişir

  • Tüm soyutlamalar tamamlanmış değildir.

  • İç uygulamayı istikrarlı biçimde gizleyebilen katmanlar “tamamlanmış soyutlama” sayılabilir.

  • İç ayrıntıların performans sorunu ya da hata olarak sürekli dışarı sızdığı katmanlar ise “sürmekte olan soyutlama”ya karşılık gelir.

  • Aynı teknoloji bile geliştiricinin rolüne göre farklı durumda olabilir.

    • Genel web geliştiricisi için tarayıcı görece tamamlanmış bir katmandır.
    • Tarayıcı motoru geliştiricisi için rendering süreci doğrudan ele alınması gereken ayrıntılı bir sorundur.
  • Geliştiricinin ihtiyaç duyduğu derinlik, her teknolojiyi bilmek değil; sorumlu olduğu katmandaki sızıntı ve sınırları anlayabilecek düzeyde olmaktır.

4. Yapay zeka yeni bir soyutlama katmanı olarak ortaya çıktı

  • Yapay zeka, geliştiricinin eskiden doğrudan yaptığı kod yazımı ve tekrarlı uygulama işlerini hızla yerine getiriyor.
  • Böylece yapay zeka, basit bir verimlilik aracını aşarak geliştirme sürecinin kendisini soyutlayan yeni bir katman gibi işlemeye başladı.
  • Ancak yapay zekanın kod üretmesi, gereksinim yorumlama, yapı tasarımı, kalite doğrulama ve operasyon sorumluluğunu otomatik olarak çözmez.
  • Hatta uygulama maliyeti düştükçe üretilen kodu birleştirme ve doğrulama maliyetinin önemi artar.

5. Ayrıntılı talimatlar yapay zekanın performansını sınırlayabilir

  • Yazar, erişilebilirlik odaklı bir UI yan projesinde kodu doğrudan yazmadan yalnızca yapay zekayla geliştirmeyi denedi.

  • Başta yapay zekaya somut uygulama yöntemleri verdi, ancak yapay zeka verilen yönteme saplanıp kalıyor ve istisna işlemeyi tekrar tekrar ekliyordu.

  • Sonuçta kod karmaşıklaştı, çeşitli yan etkiler ortaya çıktı ve daha uygun standart yöntemler ancak sonradan uygulanabildi.

  • Bu örnek, kullanıcının sunduğu ilk yöntemin yapay zekanın muhakemesini sınırlayan bir anchor işlevi görebileceğini gösteriyor.

  • Çözüm yöntemini ve kod yapısını fazla dikte etmektense şunları vermek daha etkilidir.

    • Problemin arka planı ve amacı
    • Mevcut sistemin bağlamı
    • Mutlaka karşılanması gereken sonuç
    • Değiştirilmemesi gereken kısıtlar

6. Talimatlardan çok hedef ve bağlam devredilmelidir

  • Yapay zekanın performansı arttıkça ayrıntılı prosedürleri doğrudan belirtmektense hedef merkezli devir daha etkili olabilir.

  • Bu devir modelinde geliştirici, “nasıl uygulanacağını” tamamen belirlemek yerine “neden gerekli olduğunu” ve “neyin başarılması gerektiğini” açıkça iletir.

  • Ancak tam özerklik verilirse yapay zeka kullanıcının niyetinden çok kodu değiştirme işine odaklanabilir.

  • Bu yüzden yapay zekanın önce şu adımları yapmasını sağlayacak şekilde iş akışını sınırlamak gerekir.

    • Talebin niyetini analiz etme
    • Eksik bilgiler için soru sorma
    • Çözüm planı sunma
    • Kullanıcı onayından sonra uygulama
  • Esas nokta, basit yasak komutlarından çok o aşamada izin verilen çıktıları açıkça tanımlamaktır.

7. Her seferde yalnızca tek bir çıktı tanımlanmalıdır

  • LLM'lerin tek bir yanıtta üretebileceği çıktı miktarı ve muhakeme kapsamı sınırlıdır.

  • Test yazımı ile uygulamayı aynı anda isterseniz, kaynaklar son hedef olan kodun tamamlanmasına yoğunlaşır ve test kalitesi düşebilir.

  • Yazar TDD işini şu şekilde ayırıyor.

    • /red: yalnızca başarısız olan testleri yaz
    • /green: testleri geçecek en küçük uygulamayı yaz
    • /refactor: testleri koruyarak kod yapısını iyileştir
  • Her aşamanın çıktısını teke indirmek, yapay zekanın ara adımları atlaması ya da biçimsel olarak geçiştirmesi sorununu azaltabilir.

  • Bu da prompt tasarımının özünün davranışı uzun uzun açıklamak değil, tek bir görevde üretilmesi gereken çıktıyı tanımlamak olduğunu gösterir.

8. Markdown belgeleri ve skill'ler yeni kod haline geliyor

  • Belirtim, test, uygulama, doğrulama ve commit işlerini ayrı ayrı skill'lere bölerseniz şu tür bir pipeline kurulabilir.

    • Belirtim yazımı
    • Başarısız test üretimi
    • Özelliğin uygulanması
    • Refactoring
    • Doğrulama
    • Commit
  • Her skill, girdi, çıktı ve kısıtlar taşıdığı için function benzeri çalışır.

  • Skill'leri ve kuralları kaydeden Markdown belgeleri, basit bir açıklama dokümanı değil; yapay zekanın davranışını belirleyen yürütme kuralları olarak işlev görür.

  • Bu süreçte mevcut yazılım tasarım ilkeleri de uygulanabilir.

    • Tek bir skill'e tek sorumluluk vermeyi öngören single responsibility principle
    • Bilgi ve kuralları ayrı dosyalara ayıran modülerlik
    • Çekirdek skill'leri değiştirmeden harici bilgi dosyalarıyla genişlemeyi sağlayan open-closed principle
  • Platform yalnızca IDE'den Markdown belgelerine kaymıştır; işi parçalara ayırıp birbirine bağlama eylemi hâlâ programlamadır.

9. Yapay zeka ile kodlamadaki temel risk nedensizliktir

  • Geleneksel programlar aynı girdiye karşı büyük ölçüde aynı çıktıyı üretir.

  • Yapay zeka ise aynı isteğe karşı farklı kodlar ve kararlar üretebilir.

  • Yapay zeka büyük çaplı refactoring yaptığında işlev çalışsa bile şu sorunlar kalır.

    • Değişen kodun doğruluğunu gözden geçirme
    • Silinen kodun gerçekten gereksiz olup olmadığına karar verme
    • Yeni yan etki olasılıkları
    • Bakım ve dağıtım sorumluluğu
  • Yapay zeka kod üretim hızını artırır, ancak sonucun kararlılığını ve sorumluluğunu otomatik olarak sağlamaz.

  • Production ortamında önemli olan, üretim yeteneğinden çok değişiklik kapsamını kontrol etme ve sonucu doğrulama becerisidir.

10. Yapay zeka tavanı düşük problemlerde güçlüdür

  • Yapay zekanın kolayca ele aldığı problemler genelde gereksinimleri ve çözüm yolları yeterince bilinen, yani “iyi tanımlanmış problemler”dir.

  • Bu tür sorunlar, mevcut library, framework ve pattern gibi tamamlanmış soyutlama unsurlarını birleştirerek çözülebilir.

  • Yapay zeka, insanlığın biriktirdiği kodu ve problem çözme kalıplarını olasılıksal olarak birleştirmede güçlüdür.

  • Buna karşılık şu tür yüksek zorluktaki problemlerde ek insan muhakemesi gerekir.

    • Gereksinimleri eksik olan problemler
    • Karmaşık domain kuralları
    • Büyük ölçekli sistem etkileşimleri
    • Operasyon ortamındaki istisnai durumlar
    • Güvenlik, performans, regülasyon ve sorumluluğun birleştiği problemler
  • Basit uygulamanın değeri tamamen ortadan kalkmasa da, uygulamanın kendisi giderek genel kullanıcıların da yapabileceği bir alana kayabilir.

11. Geliştiricinin ayrıntı işi yapay zeka kontrolüne kayıyor

  • Geçmişte geliştirici, deterministik kod yazarak öngörülmesi zor kullanıcı girdilerine ve operasyon ortamlarına karşı savunma kuruyordu.

  • Yapay zeka çağında ise deterministik bir ürünü, deterministik olmayan yapay zekayla üretmek gerekiyor.

  • Geliştiricinin ele alması gereken ayrıntılar şu alanlara kayıyor.

    • Yapay zekanın yanlış hedefe saplanmaması için görev kapsamını belirleme
    • Aşama bazında giriş ve çıkış biçimlerini tanımlama
    • Bağlam ve bilgi dokümanlarını yönetme
    • Büyük çaplı değişikliklerin kapsamını sınırlama
    • Hata durumunda kurtarma prosedürleri tasarlama
    • Sonuçların kalite ve güvenliğini doğrulama
  • Basit uygulama işleri otomatikleştikçe geliştirme işinin ağırlığı istisna işleme ve kontrol sorunlarına kayabilir.

12. Yapay zeka çıktıları deterministik araçlarla doğrulanmalıdır

  • Yapay zekanın ürettiği sonucu yalnızca başka bir yapay zekayla doğrulatmak, yeterli güvenilirlik sağlamaya yetmeyebilir.

  • Sistem çıktısının doğru olup olmadığını değerlendirmek için açık bir doğru cevap ölçütü, yani bir oracle gerekir.

  • Deterministik olmayan yapay zeka doğrulama ölçütünü de keyfî biçimde üretirse, doğru sonucu yanlış değiştirme ya da doğrulama ölçütünü bozma riski doğar.

  • Bu nedenle doğrulama ölçütü mümkün olduğunca deterministik araçlardan oluşmalıdır.

    • Compiler ve type checker'lar
    • Otomatik testler
    • Linter ve statik analiz
    • Schema denetimi
    • Performans ve güvenlik ölçütleri
    • Onay süreçleri ve değişiklik kapsamı sınırlamaları
  • Yapay zekanın muhakemesi yardımcı araç olarak kullanılabilir, ancak nihai geçiş kararı yeniden üretilebilir ölçütlere bağlanmalıdır.

13. Harness, yapay zeka geliştirmesinin temel altyapısı haline geliyor

  • Harness, yapay zekanın iş sürecinde hataları biriktirmesini ya da kapsam dışına çıkmasını önlemek için aşama aşama yerleştirilen doğrulama düzenidir.

  • Başlıca bileşenler şunlardır.

    • İş adımlarını ayıran pipeline
    • Aşama bazlı giriş/çıkış biçimleri
    • Otomatik testler ve statik analiz
    • Hata durumunda durduran doğrulama kapıları
    • Değiştirilebilecek dosya ve kapsam sınırları
    • İnsan onayı ve review süreçleri
  • Harness, tek bir aşamadaki küçük bir hatanın sonraki aşamada büyümesini engeller.

  • Yapay zekadan yararlanma becerisi, yalnızca iyi prompt yazma becerisiyle değil; öngörülemez çıktıları kararlı bir sistem içinde tutabilme becerisiyle değerlendirilebilir.


Sonuç

Geliştirici yok olmuyor, rolü yer değiştiriyor

  • Yapay zeka basit kod yazımı ve tekrarlı uygulama işlerini hızla otomatikleştiriyor.

  • Ancak ürün düzeyinde bir sonuç üretmek için hâlâ şu rollere ihtiyaç var.

    • Problemi ve hedefi tanımlama
    • Sistem yapısını tasarlama
    • İş adımları ve çıktıları ayırma
    • Yapay zeka ajanları arasındaki akışı koordine etme
    • Doğrulama ölçütleri ve harness kurma
    • Operasyon sonuçlarına ilişkin nihai sorumluluğu üstlenme
  • Geliştiricinin işi, doğrudan kod yazma oranının azalması ve yapay zekanın ürettiği kodu bir sistem halinde örgütleyip kontrol etme yönünde değişebilir.

Prompt yazımı programlamanın yeni bir biçimidir

  • Tekrarlı kullanılan talimatları skill ve kurallara dönüştürüp bunları bir pipeline ile bağlama süreci, function ve module tasarlamaya benzer.
  • Markdown belgeleri, yapay zekanın bağlamını, davranışını ve çıktı biçimini tanımlayan yeni bir kod katmanı olarak işlev görebilir.
  • Geliştirici, kendi deneyimini ve örtük muhakeme ölçütlerini dokümante ederek yapay zekanın yeniden kullanabileceği biçimde soyutlamalıdır.
  • Bu, yalnızca mevcut sistemleri soyutlamak değil, geliştiricinin kendi çalışma biçimini ve karar sürecini de soyutlamak anlamına gelir.

Geleceğin geliştiricisinin temel yetkinlikleri

  • Problemi doğru tanımlama becerisi
  • Hedef ve bağlam odaklı iş devri yapabilme becerisi
  • Karmaşık işleri küçük çıktılara ayırma becerisi
  • Skill ve ajanları bir pipeline içinde kurma becerisi
  • Deterministik doğrulama ölçütleri tasarlama becerisi
  • Deterministik olmayan sonuçların riskini kontrol eden harness kurma becerisi
  • Yapay zekanın ürettiği sonuçları anlayıp nihai sorumluluğu üstlenebilecek teknik derinlik

Genel değerlendirme

  • Yapay zeka, geliştirmenin özünü ortadan kaldırmaktan çok, geliştiricinin ele aldığı soyutlama katmanını değiştiriyor.
  • Önceki kuşak geliştiriciler kodun ve sistemin ayrıntılarını ele alıyorduysa, geleceğin geliştiricileri de yapay zekanın davranışı ve çıktılarından doğan ayrıntıları ele almak zorunda kalacak.
  • Kod üretme maliyeti düşerken doğrulama, birleştirme, operasyon ve kontrolün önemi daha da artabilir.
  • Programcının özü yazı yazmak değil, ayrıntıları keşfetme, bunları soyutlama ve güvenilir sistemler halinde düzenleme becerisidir.

Henüz yorum yok.

Henüz yorum yok.