Katılımcılar, Go blogundaki herkese açık bir gönderi ve VS Code’daki rastgele bir istem aracılığıyla toplandı ve sonuçta 4.005 yanıt elde edildi.
Anket sorularını öncelikli olarak birkaç konu etrafında odaklandı: Go ile geliştirmeye ilişkin genel görüş ve geri bildirim, Go ile birlikte kullanılan teknoloji yığınları, geliştiricilerin yeni Go projelerine nasıl başladıkları, araç zinciri hata mesajlarıyla ilgili son deneyimler ve geliştiricilerin makine öğrenimi/yapay zekaya olan ilgisini anlama.
Geliştirici duyarlılığı
Temel çıkarım, geçen yıl Go ile çalışmayı seçen insanların büyük çoğunluğunun deneyimlerinden memnun olduğu.
Üstelik Go ile çalışan kişilerin sayısı da artmaya devam ediyor; bunun kanıtları Stack Overflow’un Geliştirici Anketi (profesyonel geliştiricilerin %14’ünün geçen yıl Go ile çalıştığını ortaya koyan, yıllık bazda yaklaşık %15 artış) ve go.dev analizleri gibi harici araştırmalardan görülebiliyor (ziyaretçi sayısında yıldan yıla %8’lik bir artış olduğunu gösteriyor).
Bu büyümeyi yüksek memnuniyet puanıyla birleştirmek, Go’nun geliştiricilerin ilgisini çekmeye devam ettiğinin kanıtı ve dili öğrenmeyi seçen birçok geliştiricinin, kararlarından uzun süre sonra kendilerini iyi hissettiğini gösteriyor.
Geliştirici ortamları
Önceki yıllarda olduğu gibi, ankete katılanların çoğunluğu bize Linux (%63) ve macOS (%58) sistemlerinde Go ile çalıştıklarını söyledi.
Go topluluğunun yeni üyelerinin Windows ile çalışma olasılığının daha deneyimli Go geliştiricilerine göre daha yüksek olduğunu görülüyor. Bu, Windows tabanlı geliştirmenin yeni geliştiricilerin Go ekosistemine dahil edilmesi açısından önemli olduğunun ve ekibimizin 2024’te daha fazla odaklanmayı umduğu bir konu olduğunun bir işareti olarak da yorumlanabiliyor.
Katılımcılar ağırlıklı olarak Linux dağıtımlarına odaklanmaya devam ediyor. Bulut geliştirme ve konteynerleştirilmiş iş yükleri için Go’nun yaygınlığı göz önüne alındığında, bu şaşırtıcı değil ancak yine de önemli bir onay.
Kuruluşun büyüklüğü veya deneyim düzeyi gibi faktörlere dayalı olarak çok az anlamlı farklılık bulundu; aslında, acemi Go geliştiricilerinin Windows üzerinde geliştirme yapma olasılıkları daha yüksek gibi görünse de, %92’si hala Linux sistemlerine dağıtım yapıyor.
Belki de bu dökümden elde edilen en ilginç bulgu, daha deneyimli Go geliştiricilerinin daha geniş bir sistem yelpazesine (en önemlisi WebAssembly ve IoT) dağıtım yaptıklarını söylemesi. Ayrıca hem IoT hem de WebAssembly’nin son yıllarda istikrarlı bir şekilde arttığı ve her birinin 2021’de %3’ten 2023’te sırasıyla %6 ve %5’e yükseldiğini gözlemlendi.
Bilgi işlem mimarisi manzarası son birkaç yılda değişti ve bunun Go geliştiricilerinin birlikte çalıştıklarını söyledikleri mevcut mimarilere de yansıdığını görülüyor. x86 uyumlu sistemler hâlâ geliştirme çalışmalarının çoğunluğunu (%89) oluştururken, ARM64 de artık katılımcıların çoğunluğu (%56) tarafından kullanılıyor.
Bu benimsemenin kısmen Apple Silicon tarafından yönlendirildiği görülüyor; macOS geliştiricilerinin artık x86 tabanlı mimariler yerine ARM64 için geliştirdiklerini söyleme olasılıkları daha yüksek (%76’ya karşı %71). Ancak ARM64’ün benimsenmesine neden olan tek faktör Apple donanımı değil: macOS üzerinde hiç geliştirme yapmayan katılımcıların %29’u hâlâ ARM64 için geliştirdiklerini söylüyor.
Go Geliştirici Anketi’ne yanıt verenler arasında en yaygın kod düzenleyicileri VS Code (%44) ve GoLand (%31) olmaya devam ediyor. Bu oranların her ikisi de 2023’ün ilk yarısına göre hafif bir düşüş gösterdi (sırasıyla %46 ve %33), ancak bu anketin hata payı dahilinde kalıyor.
“Diğer” kategorisinde ise yanıtların çoğunluğunu Helix oluşturdu. Yukarıdaki işletim sistemlerine ilişkin sonuçlara benzer şekilde, bunun kod düzenleyici kullanımında anlamlı bir değişikliği temsil etiğine inanılmıyor; bunun yerine bunun gibi bir topluluk anketinde görülmesi beklenen değişkenliğin bir kısmını gösteriyor.
Grubun VS Code’a karşı oldukça önyargılı olduğu bilindiğinden, özellikle bu soru için rastgele örneklenmiş yanıt verenler VS Code’un dışında tutuldu. Ancak bunun, sonuçların her yıl varyasyona karşı daha duyarlı hale gelmesi gibi bir yan etkisi var.
Teknoloji yığınları
Go geliştiricilerinin etkileşimde bulunduğu yazılım ve hizmet ağını daha iyi anlamak için teknoloji yığınları hakkında birkaç soru soruldu.
Öncelikle Go’nun modern bulut tabanlı geliştirme için bir dil olduğu söyleniyor. Gerçekten de ankete katılanların %75’i bulut hizmetleriyle entegre olan Go yazılımı üzerinde çalışıyor.
Ankete katılanların neredeyse yarısı için bu, AWS’yi (%48) içeriyordu ve neredeyse üçte biri Go geliştirmeleri ve dağıtımları için GCP’yi (%29) kullandı. Hem AWS hem de GCP için kullanım, büyük kuruluşlar ve küçük kuruluşlar arasında eşit şekilde dengelenmiş.
Microsoft Azure, büyük kuruluşlarda (1.000’den fazla çalışanı olan şirketler) küçük mağazalara göre önemli ölçüde daha fazla kullanılma olasılığı olan tek bulut sağlayıcısı; diğer sağlayıcılar kuruluşun büyüklüğüne bağlı olarak kullanımda anlamlı bir farklılık göstermiyor.
Veritabanları, yazılım sistemlerinin son derece yaygın bileşenleri ve katılımcıların %91’inin üzerinde çalıştıkları Go hizmetlerinin en az birini kullandığını söylediği görülüyor.
En sık görülen PostgreSQL’di (%59), ancak Go geliştiricilerinin dikkate alması gereken birkaç standart veritabanının olmadığını söylemek yanlış olmaz. Küçük kuruluşlardan gelen katılımcıların PostgreSQL ve Redis kullanarak raporlama yapma olasılıklarının daha yüksek olduğu, büyük kuruluşlardaki geliştiricilerin ise bulut sağlayıcılarına özel bir veritabanı kullanma olasılıklarının daha yüksek olduğu, yine kuruluş boyutuna dayalı farklılıklar görülüyor.
Geliştiriciler yeni Go projelerine nasıl başlıyor?
Ankete katılanların çoğunluğu, yeni bir Go projesine başlarken ya şablonları kullandıklarını ya da mevcut projelerden kopyala-yapıştır kodları kullandıklarını söyledi (%58).
Beş yıldan az Go deneyimine sahip katılımcılar arasında bu oran neredeyse ⅔’ye (%63) yükseldi. Bu, şablon tabanlı yaklaşımın ortak, resmi olmayan bir yaklaşımı komut tarzı araçlarla uyumlu hale getirerek, geliştiricilerin halihazırda bulundukları yerde buluştuğunun önemli bir onayıydı.
Bu sonuçlar, geliştiricilerin önceki bölümde karşılaştıklarını söylediği zorluklarla uyumlu. Verilen yanıtlar, aynı zamanda proje yapısı ile tasarım kalıpları arasındaki farkın anlaşılmasına da yardımcı oluyor; neredeyse iki kat daha fazla katılımcı, Go proje şablonlarının ikincisinden ziyade ilkini sağlamasını istediğini söylüyor.
Hata işlemeye yönelik geliştirici hedefleri
Yanıt verenlerin çoğunluğu Go’nun hata işleme yaklaşımını takdir etti (%55) ve bunun hataları ne zaman kontrol edeceklerini bilmelerine yardımcı olduğunu (%50) söyledi.
Bu sonuçların her ikisi de Go deneyimi daha fazla olan katılımcılar için daha güçlüydü; bu da geliştiricilerin zaman içinde Go’nun hata yönetimi yaklaşımını takdir etmeye başladıklarını veya bunun geliştiricilerin sonunda Go ekosisteminden ayrılmalarına (veya en azından Go’ya yanıt vermeyi bırakmalarına) yol açan faktörlerden biri olduğunu gösteriyor.
İlginç bir şekilde, katılımcılar Go’nun hata işleme yaklaşımını takdir ettiklerini söylediklerinde, bunun aynı zamanda çok sayıda standart kodla sonuçlandığını söyleme olasılıkları düşüktü.
Katılımcıların belirttiği belirli sorunlar arasında hangi hata türlerinin kontrol edileceğini bilme zorlukları (%28), hata mesajıyla birlikte yığın izlemeyi kolayca gösterme isteği (%28) ve hataların tamamen göz ardı edilebilmesi (%19) yer alıyor. Ankete katılanların yaklaşık ⅓’ü, Rust’un operatörü (%31) gibi diğer dillerdeki kavramları da benimsemekle ilgilendi.
Go ekibinin dile istisna ekleme planı yok ancak bu genel bir istek olduğu için bu bir yanıt seçeneği olarak dahil edildi. Yanıt veren 10 kişiden yalnızca 1’i Go’da istisnaları kullanabilmek istediğini söyledi ve bu durum deneyimle ters orantılıydı; daha deneyimli Go geliştiricilerinin istisnalarla ilgilenme olasılığı Go topluluğuna yeni katılan katılımcılara göre daha azdı.
ML/AI kullanım örneklerini anlama
Go ekibi, gelişen yeni makine öğrenimi/yapay zeka teknolojilerinin yazılım geliştirmeyi iki farklı açıdan nasıl etkileyebileceğini düşünüyor: 1) makine öğrenimi/yapay zeka araçları, mühendislerin daha iyi yazılım yazmasına nasıl yardımcı olabilir ve 2) Go, mühendislerin makine öğrenimi/yapay zeka getirmesine nasıl yardımcı olabilir? uygulamalarına ve hizmetlerine destek var mı? Aşağıda bu alanların her birini ayrıntılı olarak ele alınıyor.
AI/ML olasılıkları etrafında bir heyecan döngüsü içinde olunduğunu inkar edecek pek bir şey yok. Geliştiricilerin karşılaştığı daha geniş zorluklara ve yapay zekanın normal çalışmalarında yararlı olabileceğini düşündükleri yerlere odaklanmak için bir adım geri atıldı. Özellikle sektörün kodlama asistanlarına odaklandığı göz önüne alındığında, cevaplar biraz şaşırtıcıydı.
İlk olarak, katılımcıların yaklaşık yarısının faydalı olabileceğini düşündüğü birkaç yapay zeka kullanım örneği görülüyor: testler oluşturmak (%49), yerinde en iyi uygulamaları önermek (%47) ve olası hataları geliştirme sürecinin erken safhalarında yakalamak (%46).
Bu en iyi kullanım durumlarının ortak noktası, her birinin bir mühendisin yazdığı kodun kalitesini ve güvenilirliğini artırmaya yardımcı olabilmesi. Dördüncü bir kullanım durumu (belgelerin yazılmasına yardım) katılımcıların yaklaşık ⅓’ünün ilgisini çekti. Geri kalan vakalar, potansiyel olarak verimli fikirlerin uzun bir kuyruğunu içeriyor; ancak bunlar ilk dörde kıyasla önemli ölçüde daha az genel ilgi görüyor.
Geliştiricilerin Go ile ilgili deneyim sürelerine bakıldığında, acemi yanıt verenlerin derleyici hatalarını çözme konusunda yardıma ve bir Go kodu parçasının ne yaptığını açıklamaya deneyimli Go geliştiricilerinden daha fazla ilgi duydukları görülüyor.
Bunlar yapay zekanın yeni Gopher’lar için başlangıç deneyimini iyileştirmeye yardımcı olabileceği alanlar olabilir; örneğin bir yapay zeka asistanı, belgelenmemiş bir kod bloğunun ne yaptığını doğal dilde açıklamaya yardımcı olabilir veya belirli hata mesajlarına ortak çözümler önerebilir.
Bunun tersine, “yaygın hataları yakalama” gibi konularda deneyim düzeyleri arasında hiçbir fark görülmüyor; hem acemi hem de deneyimli Go geliştiricileri, bu konuda yardımcı olacak araçlardan memnun kalacaklarını söylüyor.
Yapay zeka özelliklerini uygulamalara ve hizmetlere getirme
Go geliştiricilerinin AI/ML destekli araçlardan nasıl yararlanabileceğini incelemenin yanı sıra, Go ile AI destekli uygulamalar ve hizmetler (veya destekleyici altyapı) oluşturma planlarını da araştırıldı.
Benimseme eğrisinin henüz başında olunduğu görüldü: Yanıt verenlerin çoğu henüz bu alanlarda Go’yu kullanmayı denemedi, ancak her konuya yanıt verenlerin yaklaşık yarısının belli bir düzeyde ilgi gösterdiği görüldü.
Örneğin, yanıt verenlerin çoğunluğu üzerinde çalıştıkları Go hizmetlerini Yüksek Lisans’larla entegre etmeye ilgi duyduklarını (%49) bildirdiler, ancak yalnızca %13’ü bunu zaten yaptı veya şu anda bu kullanım durumunu değerlendiriyor. Bu anket sırasında verilen yanıtlar, geliştiricilerin Go to call LLM’leri doğrudan kullanmakla, ML/AI sistemlerini güçlendirmek için gereken veri hatlarını oluşturmakla ve diğer hizmetlerin ML/AI ile etkileşimde bulunmak üzere arayabileceği API uç noktaları oluşturmakla en çok ilgilenebileceklerini gösteriyor.
Mikro hizmetler
Ankette Mikro hizmetler noktasında katılımcıların büyük çoğunluğu (%43) çoğunlukla mikro hizmetler üzerinde çalıştıklarını söylerken, diğer bir ¼’ü hem mikro hizmetler hem de monolitlerin bir karışımı üzerinde çalıştıklarını söyledi.
Katılımcıların yalnızca yaklaşık ⅕’i çoğunlukla monolitik Go uygulamaları üzerinde çalışıyor. Bu, katılımcıların çalıştığı kuruluşun büyüklüğüne bağlı olarak farklılıklar gördüğümüz birkaç alandan biri; büyük kuruluşların, küçük şirketlere göre bir mikro hizmet mimarisini benimseme olasılıkları daha yüksek görünmekte. Büyük kuruluşlardan (>1.000 çalışan) katılımcılar büyük olasılıkla mikro hizmetler üzerinde çalıştıklarını (%55) söylerken, bu katılımcıların yalnızca %11’i öncelikle monolitler üzerinde çalışıyor.
Ankete katılanların çoğunluğu çok dilli dillerde mikro hizmetler oluşturuyor ve yalnızca yaklaşık ¼’ü yalnızca Go kullanıyor. Python (%33), Node.js (%28) ve Java (%26) ile birlikte en yaygın yardımcı dil. Yine kuruluş büyüklüğüne göre farklılıklar görülüyor; daha büyük kuruluşlar Python (%43) ve Java (%36) mikro hizmetlerini entegre etme olasılığının daha yüksek olduğunu, küçük kuruluşların ise yalnızca Go (%30) kullanma olasılığının biraz daha yüksek olduğunu görüyoruz. Kuruluşun büyüklüğüne bağlı olarak diğer dillerin de eşit şekilde kullanıldığı görüldü.
Genel olarak katılımcılar, mikro hizmet tabanlı uygulamalar yazarken karşılaştıkları en büyük zorlukların test ve hata ayıklama olduğunu, ardından operasyonel karmaşıklığın geldiğini söyledi.
Diğer pek çok zorluk bu grafiğin uzun kuyruğunda yer alıyor, ancak “taşınabilirlik” çoğu yanıt veren için sorun olmayan bir konu olarak öne çıkıyor.
Anket nasıl bir tablo çıkardı?
Anketin son sorusu her zaman katılımcılara Go hakkında paylaşmak istedikleri başka bir şey olup olmadığını soruyor. İnsanların en sık verdiği geri bildirim “teşekkür ederim!” oldu ve bu yıl da farklı olmadı (%33).
Talep edilen dil iyileştirmeleri açısından, iyileştirilmiş ifade (%12), iyileştirilmiş hata işleme (%12) ve iyileştirilmiş tür güvenliği veya güvenilirliği (%9) arasında üç yönlü istatistiksel bir bağ görüldü.
Katılımcıların ifade kabiliyetini geliştirmeye yönelik çeşitli fikirleri vardı; bu geri bildirimin genel eğilimi şuydu: “İşte sık sık yazdığım belirli bir şey ve bunu Go’da ifade etmenin daha kolay olmasını diliyorum.” Hata işlemeyle ilgili sorunlar, bugün bu kodun ayrıntı düzeyiyle ilgili şikayetler olmaya devam ederken, tür güvenliğiyle ilgili geri bildirimler en çok toplam türlerine değiniyordu.