3 puan yazan GN⁺ 2024-11-27 | 2 yorum | WhatsApp'ta paylaş
  • Yazar bir ornitorenk

    • Eleştirileri görmezden gelmek için yazarı yetersiz diye nitelemek tembelce bir yaklaşımdır.
    • Junior geliştiriciler sorunlara yeni bir bakış açısıyla yaklaşabilir ve bu da onları işe almanın önemli nedenlerinden biridir.
    • Yazar junior bir geliştirici değildir; çeşitli deneyimleri sayesinde dil tasarımı konusunda bir anlayışa sahiptir.
  • Annem sigara içiyor, o zaman sorun yoktur

    • Diğer şirketlerin kullandığı teknolojileri sorgulamadan takip etmek verimsizdir.
    • Teknik bloglar, şirketin imajını daha iyi göstermek amacı da taşır.
    • Tailscale'in blogu dürüsttür, ancak Go'nun sorunlarını çözmek için çok fazla çaba gerekir.
  • İyi tarafları

    • Go'nun asenkron çalışma zamanı ve çöp toplayıcısı çok iyidir.
    • Paket yönetimi, refactoring ve cross-compiling gibi araçları kullanımı kolaydır.
    • Ancak Go'nun dezavantajları göz ardı edilemez ve dil tasarımının tesadüfen şekillenmiş olması bir sorundur.
  • Go bir adadır

    • Go'nun diğer dillerle birlikte çalışabilirliği zayıftır.
    • Go araç zinciri kendine özgüdür ve mevcut assembly dilleri ya da debugger'lar kullanılamaz.
    • Go ile entegrasyonun en kolay yolu bunu ağ sınırları üzerinden yapmaktır.
  • Ya hep ya hiç (bu yüzden de hiçbir şey yapılmıyor)

    • Go, başlatılmamış struct alanlarını geride bırakabilir.
    • Sıfır değerin anlam taşıdığı fikri safçadır ve birçok durumda sorun yaratır.
    • Go kültürü, sorunları çözmekten çok dikkatli olun demeye dayanır.
  • "Rust mükemmel ve hepiniz aptalsınız"

    • Rust kademeli olarak benimsenebilir ve diğer dillerle iyi entegre olur.
    • Rust'ın başarısı kısmen güvenli dillere geçişin mümkün olmasından gelir.
    • Rust'ın da sorunları vardır, ancak bunlar zaman içinde kademeli olarak çözülmektedir.
  • Go'yu prototip/başlangıç dili olarak kullanmak

    • Go, öğrenmesi kolay bir dil olarak görülür, ancak gerçekte çok fazla deneyim gerektirir.
    • Kodun yanlış olduğunu açıkça gösteren özellikler yetersizdir.
    • Go'nun dezavantajları zamanla ortaya çıkar ve kolayca terk edilebilecek bir dil değildir.
  • Golang'ı kullanmaya devam etme nedenlerimizle ilgili yalanlar

    • Başkaları kullanıyorsa bizim için de iyi olacağı düşüncesi
    • Dil tasarımındaki kusurları bireysel ya da toplu olarak kabul edilebilir görmek
    • Dikkatli olursak sorunların üstesinden gelebileceğimiz düşüncesi
    • Yazması kolaysa production yazılım geliştirmek de kolaydır düşüncesi
    • Dil basitse her şeyin de basit olduğu düşüncesi
    • İstediğimiz zaman sonradan yeniden yazabileceğimiz düşüncesi

2 yorum

 
tsboard 2024-11-28

Go diliyle çok kısa ama yoğun bir süre geçirmiş bir amatörün yazı bırakması ne kadar uygun emin değilim ama... Go dilinin artıları ve eksileri gerçekten çok net; bu yüzden onu seçenlerin de kaçınanların da belli nedenleri var gibi görünüyor. Bana kalırsa bunu Rust ile değil, Kotlin(Java) ile karşılaştırmak daha doğru.

Go'nun goroutine'leri gerçekten harika, ama sihir değil. Özellikle backend tarafında sadece tek bir MySQL kullanan küçük projelerde bu eşzamanlılık meselesini yönetmek gerçekten zor. JS/TS runtime'larında çok da dert etmediğiniz MySQL kaynak tükenmesi ya da pool yönetimi, düşündüğünüzden daha zor olabiliyor. Sonuçta bu durumda darboğaz DB olduğu için Go dilinin eşzamanlılık avantajı kısmen soluyor. (JS/TS runtime'larının asenkron I/O'su ya da event loop'u hatta daha uygun olabilir.) Bunu hey gibi bir araçla -c 100 verip denediğinizde hemen anlayabilirsiniz.

Ayrıca iyi bir GC var diye, nesneleri gelişigüzel sadece pointer geçirerek kullanıp temizliği tamamen akışına bırakamazsınız. Her şeyde olduğu gibi burada da trade-off var; Go dilinde de mümkünse küçük nesneleri doğrudan değer kopyasıyla aktarmak ve fonksiyon biter bitmez işlerinin kapanmasını sağlamak daha iyi. Belki eski düşünce tarzına saplanmış olabilirim ama, C/C++ dillerindeki verimlilik bakışıyla pointer'lara kolayca yaklaşmamak gerekiyormuş.

Fonksiyondan error dönerken neredeyse her seferinde geri döndürmek ve onu her seferinde if err != nil {} ile kontrol etmek gerçekten yorucu, ama bu bir avantaj. Çünkü maliyeti try catch'ten daha düşük. Ayrıca finally {} benzeri bir rol üstlenen defer anahtar sözcüğü de harika. Kaynağın ne zaman serbest bırakılacağını düşünmek zorunda kalmamak güzel. Sadece standart kütüphane ile bile gayet iyi bir backend sunucu yapısının hemen kurulabilmesi de güzel (1.23 ve üzeri). Hepsinden önemlisi, hedef OS'e göre build edildiğinde başka bir runtime'a ya da ön kurulumlara ihtiyaç duymaması bence en büyük artısı.

Go dilini uzun süre kullanmadım ama fazla kişisel bir görüşü uzatıyormuşum gibi hissettiğim için burada keseyim. haha Ben Go dilini de seviyorum, diğer dilleri de!

 
GN⁺ 2024-11-27
Hacker News görüşü
  • Go dilinin dezavantajları hakkında birçok eleştiri var, ancak açık hata işleme bunlardan biri değil. İstisna işleme, hata yapmayı fazla kolaylaştıran "sihirli" bir katman ekliyor. Kişisel projelerde Rust'ı tercih ediyorum, ancak farklı seviyelerde geliştiricilerin katıldığı büyük projelerde Go'nun felsefesi modern dünyadaki en makul hata işleme yaklaşımı.

    • Go, sadeliği sayesinde diğer "yeni" dillere göre daha fazla benimseniyor. En iyi dil değil ama pek çok yerleşik görüşü nedeniyle genel amaçlı bir dil olarak çoğu zaman en iyi seçim.
  • Rust ve Go çok farklı ve insanların istediği orta nokta şu anda mevcut değil.

    • Rust'ın tip sistemine benzer bir tip sistemine sahip, nispeten basit bir dile ihtiyaç var.
    • Gleam ve Kotlin biraz benziyor ama tam olarak öyle değil. Rust fazla karmaşık; bilgisayar bilimi eğitimi olmayanlar ya da uzman olmayanlar için zor.
    • Mükemmel bir dil yok, ama Go ve Rust etkileyici şeyler ortaya koydu. Her iki dilden ilham alan, yaygın biçimde kullanılabilir basit bir programlama dili yapılmasını umuyorum.
  • Basit dilleri seviyorum. Teknolojide her zaman ödünleşimler vardır, bu yüzden dengeli eleştiri önemli.

    • Go'yu neden seçtiğime dair bir blog bağlantısı paylaşıyorum.
  • Bir dili eleştirmenin neden bu kadar önemli olduğunu merak ediyorum. Eleştiriler yapıcı bir üslupla yazılmıyor.

    • Her dil eleştirilebilir. Go, "daha sofistike" dillerden farklarına rağmen projelerde harika çalışıyor.
    • Go ekibine geri bildirim veriyorum, dilin yavaş evrimini izliyorum ve toplulukta hizmet sunmaya devam ediyorum.
  • Go'ya yönelik eleştirileri her okuduğumda, yine de Go kullanmaya devam edeceğim.

    • Teoride birçok sorun var, ama pratikte hâlâ iyi bir programlama dili.
    • Açık hata işlemeyi seviyorum. Diğer dillerin eksilerini de çok dert etmiyorum.
    • Go'nun eksilerine duyarlı olanlar şikâyet etmeyi sürdürecek. Herkes kendine en uygun dili seçsin.
  • Başka diller kullandıkça Go'ya geri dönmek istiyorum.

    • Go'da kurulum yapıp kodu indirir, yazarsın ve iş biter. Sürüm, runtime, yapılandırma, build araçları, paket yöneticileri gibi şeyleri düşünmek gerekmez.
    • Rust da benzer bir deneyim sunabiliyor. Python, Typescript, Java kullanırken yapılandırma kaynaklı sorunlar yüzünden programlamaktan korkuyorum.
  • Daha iyi bir Python arıyordum. Go bariz seçimdi ama söz dizimini sevmiyorum.

    • Rust çok fazla özel karakter kullanıyor, Lisp'i ise parantezler ve ters Polonya gösterimi yüzünden sevmiyorum.
    • Python kodunu Nuitka ile derleyip binary olarak dağıtıyorum. C#'ın AOT derlemesiyle ilgileniyorum.
    • Nim ve Crystal'ı seviyorum ama küçük toplulukları engel oluşturuyor. Nim, küçük topluluğuna rağmen harika bir dil.
  • Go ve Rust'ın neden sık sık karşılaştırıldığını anlamıyorum. Java ile karşılaştırmak daha uygun.