- 2019'da çoğu yazılım mühendisi, makine öğreniminin kendi işlerine nasıl yardımcı olabileceğini hayal etmekte zorlanıyordu
- Ancak 2024'te, yapay zekanın kod yazımına nasıl yardımcı olduğu konusunda yaygın bir heyecan var
- Birçok mühendis, şirket içi araçlarda veya ticari ürünlerde ML tabanlı otomatik tamamlamayı denedi
- Bu yazı, Google'ın dahili yazılım geliştirme araçlarının süregelen dönüşümü içinde en son yapay zeka tabanlı iyileştirmeleri tanıtıyor
- Önümüzdeki 5 yıl içinde beklenen ek değişiklikleri de ele alıyor
- Ayrıca profesyonel yazılım geliştirmeye değer sunan yapay zeka ürünleri oluşturma metodolojisini de ortaya koyuyor
- Bu ekip, Google mühendislerinin zamanlarının çoğunu geçirdiği IDE, kod inceleme, kod arama gibi yazılım geliştirme ortamlarından sorumlu
- Bu iyileştirmelerin geliştirici üretkenliği ve memnuniyeti üzerinde doğrudan etkisi olabileceğini gösteriyor
Zorluklar
- Yapay zeka teknolojisi hızla geliştiği için hangi fikirlerin önce keşfedileceğini öngörmenin zor olması, bu alandaki kalıcı zorluklardan biri
- Teknik olarak mümkün bir demo ile başarılı bir ürünleştirme arasında çoğu zaman önemli bir boşluk bulunuyor
- Fikirleri ürüne dağıtma yaklaşımında üç kılavuz ilke var:
- Teknik uygulanabilirlik ve etkiye göre önceliklendirme: Teknik uygulanabilirliği zaten kanıtlanmış ve mühendisin iş akışı üzerinde yüksek (ölçülebilir) etki yaratması beklenen fikirler üzerinde çalışılıyor
- UX ve model kalitesini iyileştirmek için hızlı öğrenme: Geliştirici üretkenliğini ve memnuniyetini korurken hızlı yineleme yapmaya ve çıkarılan dersleri toplamaya odaklanılıyor. Kullanıcı deneyimi, model kalitesi kadar önemli
- Etkiyi ölçme: Amaç üretkenlik ve memnuniyet metriklerini artırmak olduğundan, bu metrikler geniş çapta izlenmeli
LLM'leri yazılım geliştirmeye uygulamak
- Transformer mimarisinin ortaya çıkışıyla birlikte, LLM'leri yazılım geliştirmeye nasıl uygulayabileceğimizi araştırmaya başlandı
- LLM tabanlı satır içi kod tamamlama, yazılım geliştirmeye uygulanan yapay zekanın en popüler kullanım alanı
- Kodun kendisini eğitim verisi olarak kullanmak, LLM teknolojisinin doğal bir uygulaması
- UX geliştiricilere doğal geliyor. Çünkü kelime düzeyinde otomatik tamamlama uzun süredir IDE'lerin temel özelliği
- Yapay zeka tarafından yazılan yeni karakter oranı gibi etki için kaba ölçümler yapılabiliyor
- Bu nedenlerle, LLM'lerin bu uygulamasının ilk dağıtılanlardan biri olması mantıklı
- Önceki blog yazısında, kod tamamlama ile kullanıcı deneyiminin nasıl iyileştirileceği ve etkinin nasıl ölçüleceği anlatılmıştı
- O zamandan beri, diğer kurumsal ortamlara benzer şekilde hızlı ve sürekli bir büyüme görüldü
- Yazılım mühendisleri arasındaki benimsenme oranı %37 ve kod karakterlerinin %50'sinin tamamlanmasına yardımcı oluyor
- Başlıca iyileştirmeler hem modelden hem de UX'ten geldi
- Bu döngü, sentetik formüller yerine gerçek davranışlardan öğrenmek için kritik önemde
- Çeşitli araçlardan elde edilen günlük verileri ile kullanıcı tercihleri ve ihtiyaçlarını yakalayan kullanım verileri kullanılarak kodlama araçlarındaki (ör. IDE) yapay zeka tabanlı özellikler iyileştiriliyor
- Yapay zeka desteğiyle üretilen kod oranı istikrarlı biçimde artıyor
- Bu, yapay zeka önerilerinden kabul edilen karakter sayısının, elle yazılan karakter sayısı ile yapay zeka önerilerinden kabul edilen karakter sayısının toplamına bölünmesi olarak tanımlanıyor
- Dikkat edilmesi gereken nokta, kopyala-yapıştır ile gelen karakterlerin paydaya dahil edilmemesi
- Birden fazla araçtan uzun yıllar boyunca derlenmiş, dahili yazılım mühendisliği etkinliklerine ilişkin çok büyük ve yüksek kaliteli günlükler kullanılıyor
- Bu veriler sayesinde ayrıntılı kod düzenlemeleri, derleme sonuçları, derleme sorunlarını çözmeye yönelik düzenlemeler, kod kopyala-yapıştır işlemleri, yapıştırılan kodun düzenlenmesi, kod incelemeleri, inceleyici sorunlarını çözmeye yönelik düzenlemeler ve depoya değişiklik gönderimleri temsil edilebiliyor
- Eğitim verisi, hem girdide hem çıktıda görev bazlı açıklamalar eklenmiş hizalanmış bir kod külliyatından oluşuyor
- Sonraki önemli dağıtımlar; kod inceleme yorumlarının çözülmesi (şu anda %8'den fazlası yapay zeka destekli yardımla işleniyor) ve yapıştırılan kodun çevresindeki bağlama otomatik olarak uyarlanmasıydı (şu anda IDE'deki kodun yaklaşık %2'sini oluşturuyor)
- Ek dağıtımlar arasında doğal dille IDE'ye kod düzenleme talimatı verme ve derleme hataları için düzeltme tahmin etme yer alıyor
- Benzer kalıpları izleyen kod okunabilirliği ipuçlarını tahmin etmek gibi başka uygulamalar da mümkün
- Birlikte ele alındığında, dağıtıma alınan bu uygulamalar Google'da başarılı ve yaygın kullanılan uygulamalar oldu ve gerçek endüstriyel ortamda üretkenlik üzerinde ölçülebilir etki yarattı
Öğrenilenler
- Bugüne kadarki çalışmalardan birkaç şey öğrenildi:
- Kullanıcının iş akışına doğal biçimde karışan UX ile en yüksek etki elde ediliyor. Yukarıdaki tüm örneklerde kullanıcıya öneriler sunuluyor ve tek bir dokunuş ya da tıklamayla iş akışındaki bir sonraki adıma geçiliyor. Kullanıcının özelliği tetiklemesi gerektiğini hatırlamasını gerektiren deneyler ölçeklenemedi
- Yapay zeka tabanlı öneriler sayesinde kod yazarının giderek daha çok inceleyiciye dönüştüğü gözlemlendi. İnceleme maliyeti ile katma değer arasındaki dengeyi bulmak önemli. Genelde bu denge, hedef kabul oranı üzerinden kuruluyor
- Çevrimdışı metrikler çoğu zaman kullanıcı değerinin yalnızca kaba bir vekili olduğundan, çevrimiçi A/B deneyleriyle hızlı yineleme anahtar önemde. Yapay zeka tabanlı özellikleri dahili araçlara açmak; kolayca yayınlama ve yineleme yapma, kullanım verisini ölçme ve UX araştırmalarıyla kullanıcılara doğrudan deneyimlerini sorma açısından büyük avantaj sağlıyor
- Özelliklerimizle etkileşimler dahil, yazılım araçları genelinde Google mühendislerinin etkinliklerinden elde edilen yüksek kaliteli veri, model kalitesi için kritik
- UX ve model iyileştirmeleriyle ara aşamalardaki darboğazlar kaldırılırken, fırsattan (çoğunlukla kullanıcı etkinliği, aşağıdaki huninin üst kısmında gösteriliyor) etkiye (uygulanan yapay zeka desteği, huninin alt kısmı) dönüşümün optimize edilmesi önemli
Sırada Ne Var?
- Şimdiye kadarki başarıdan güç alarak, en yeni temel modelleri (Gemini serisi) geliştirici verileriyle (yukarıda bahsedilen DIDACT'ın bir bölümü) birleştirip Google'da yazılım mühendisliğine ML uygulayan mevcut ve yeni uygulamalara güç vermeye odaklanılıyor
- Sektör genelinde, ML tabanlı kod tamamlama yazılım geliştiricilere büyük yardım sağladı
- Kod üretimini geliştirmek için hâlâ fırsatlar var, ancak sonraki aşamanın getirilerinin test, kodu anlama ve kod bakımı gibi daha geniş yazılım mühendisliği faaliyetlerinde ML desteğinden gelmesi bekleniyor
- İkincisi özellikle kurumsal ortamlarda yüksek ilgi görüyor
- Bu fırsatlar, kendi devam eden çalışmalarımıza da yön veriyor
- Sektörde görülebilen iki eğilim öne çıkarılıyor:
- İnsan-bilgisayar etkileşimi genel bir modalite olarak doğal dile kaydı; yazılım mühendisliği görevleri için arayüz olarak dilin kullanılması ve IDE'ye entegre edilmiş biçimde yazılım geliştiricilerin bilgi ihtiyaçlarına açılan bir geçit olarak işlev görmesi yönünde dönüşüm yaşanıyor
- Sorun teşhisinden düzeltmenin uygulanmasına kadar uzanan büyük ölçekli görevlerin ML tabanlı otomasyonu, ilk uygulanabilirlik kanıtlarını göstermeye başladı
- Bu olasılıklar, daha büyük görevleri yerine getirmek için bir veya daha fazla LLM'yi bileşen olarak kullanan sistemlerin kurulmasını mümkün kılan ajanlar ve araç kullanımı alanındaki yeniliklerle destekleniyor
- Yukarıdaki başarıları bu yeni nesil yeteneklere taşımak için, bu konuyu araştıran uygulayıcılar ve araştırmacılardan oluşan topluluğun, alanı pratik mühendislik görevlerine yönlendirmeye yardımcı olacak ortak benchmark'lardan fayda görebileceği belirtiliyor
- Şimdiye kadarki benchmark'lar çoğunlukla kod üretimine odaklıydı (ör. HumanEval)
- Ancak kurumsal ortamlarda, kod migrasyonu ve üretim ortamı debugging'i gibi daha geniş görevler için benchmark'lar özellikle değerli olabilir
- Hata giderme için benchmark'lar (ör. SWEBench) ve bu benchmark'ları hedefleyen prototipler (ör. Cognition AI) yayımlandı
- Topluluğun, daha geniş yazılım mühendisliği görevlerini kapsayacak daha fazla benchmark önermek için bir araya gelmesi teşvik ediliyor
GN⁺ görüşü
- Yapay zekanın hızlı evrimi: Yapay zeka teknolojisi hızla ilerliyor; bu yüzden en güncel teknikleri sürekli öğrenmek ve uygulamak önemli.
- UX ve model kalitesi: Kullanıcı deneyimi ile model kalitesi, yapay zeka araçlarının başarısında kritik unsurlar.
- Verinin önemi: Yüksek kaliteli veri, yapay zeka modellerinin performansını büyük ölçüde belirliyor.
- Gelecekteki olasılıklar: Yapay zekanın yazılım mühendisliğinin farklı alanlarında daha büyük rol üstlenme potansiyeli var.
- Sektör eğilimleri: Doğal dil arayüzleri ve büyük ölçekli görev otomasyonu, yazılım geliştirmenin geleceğini şekillendirecek.
1 yorum
Hacker News görüşleri
Yapay zeka doğru kullanıldığında iki rol üstleniyor: 1) tartışmasız düzeltmelerle geliştiricinin zamanını tasarruf ettirip bilişsel yükü azaltmak. 2) öneriler yoluyla kullanıcıyı daha akıllı ve daha bilgili hale getirmek. Örneğin, kod tamamlama özelliği bazen iyi çalışıyor.
Yapay zeka araçlarının, kullanıcının bir özelliği tetiklemesi gerektiğinde "ölçeklenemediği" yönünde ilginç bir iddia var. IDE içinde yapay zekanın tasarım düzeyinde ve kavramsal fikirler konusunda nasıl yararlı öneriler sunabileceğini düşünüyorum.
Yapay zeka tabanlı öneriler nedeniyle kod yazarının giderek bir inceleyiciye dönüştüğü gözlemleniyor. İnceleme maliyeti ile katılan ek değer arasında denge bulmak önemli.
GPT-4 kullanarak React UI ve Python UI'ı birkaç dakika içinde üretmenin ve kodu inceleyerek nasıl çalıştığını anlamanın faydalı olduğunu düşündüm.
İnsanların sınırlı RAM'i nedeniyle fikirleri dış bir ortama aktarmak gerekiyor. Yapay zekanın önerileri, ilk aşamaları daha hızlı ilerletmeye yardımcı oluyor.
LLM'lerin (büyük dil modelleri) programlamada faydalı olduğu inkar edilemez. Bunu daha akıcı hale getirecek doğru UX temel zorluk. Otomatik tamamlama özelliğini denedim ama önerilerin çoğu kötü olduğu için kapattım.
Kodla ilgili sorular sormak için ChatGPT masaüstü uygulamasını kullanmanın daha faydalı olduğunu düşündüm. Ancak her seferinde ayrıntıları açıklamak zahmetli.
Yapay zeka destekli kod yazma oranının %50'ye kadar çıkma eğilimi ilginç.
Yapay zeka istenen işi nasıl yapacağını söylüyor, ama bunun kötü bir fikir olduğunu söylemiyor. ML tarafından üretilen kodun kalitesi eğitim verisine bağlı.
Yapay zekanın Google'ın yazılım mühendislerinin yerini tamamen almasının ne kadar süreceğini merak ediyorum.
Yapay zekanın nihai hedefi; sistemleri işletmek, uygulamalarda hata ayıklamak, veri depolarını yönetmek ve kullanıcı geri bildirimi ile gereksinim açıklamalarına göre uygulama kodu yazmak.
Yapay zeka araçlarını denemek iyi, ancak başkalarının bunları körü körüne kopyalaması olumsuz etkilere yol açabilir. LLM kullanarak kod yazmanın temel satış noktasını bulmak zor.