Startup'lar neden Java'dan kaçınıyor?
(news.ycombinator.com)Startup'lar neden Java'dan kaçınıyor? HN'de sorulan soruya verilen yanıtlar
- En büyük neden, Java ekosisteminin bozulmuş olması; Maven/Gradle vb. korkunç.
- Spring'i körü körüne takip eden geliştiriciler yüzünden kaçınılıyor.
- Bunun nedeni, Java'nın
hibernate/springbootile karıştırılması. - Java, sıkıcı kurumsal kodlama olarak görülüyor; Rust gibi modern ve popüler bir seçenek değil.
- JVM kullanmak gerekiyorsa Kotlin veya Clojure gibi başka dilleri kullanmak daha iyi.
- 2022'de yeni startup'ınızın Java kullandığını söylemek, Cobol kullandığını söylemek gibi.
- Bir zamanlar havalı ve trenddi ama sonra Oracle ortaya çıktı.
47 yorum
Sonuna kadar katılıyorum. Oracle devraldıktan sonra gerilemeye başladı
Maliyetin ve insan kaynağının altından kalkabilecek seviyede olmadıkları zaten apaçık ortadayken ne anlatıyorsun ki...
Maven/Gradle gibi şeylerin berbatlığı
Bunu görünce yazarın seviyesinin ortada olduğunu ima ediyor.
Büyüklerimizin söylediklerini dikkatle dinleyip gidiyorum.
İşe alımın kolay olması gibi bir avantaj, gerçekten de herkesin başvurması gibi bir dezavantaja dönüşebiliyor sanırım.
Kotlin ve Scala’yı da aşmış, JVM’i ustalıkla bilen deneyimli kişiler de olacaktır; SI sektöründe Java deneyimi 10 yılı geçmiş ama teknik olarak kendini geliştirme isteği olmadığı için Stream API’yi bile bilmeyen ve hâlâ o dönemin sözdiziminde kalan kişiler de olacaktır. Go veya Rust için işe alım yapıldığında, ikinci gruptakilerin oranı epey azalır gibi geliyor. Python içinse emin değilim...
Java'dan Kotlin'e geçmek zor değil, JSP'den Thymeleaf'e geçmek de zor değil. Sadece referans eksikliği gibi bir rahatsızlık var. Her ne olursa olsun önce nesneler, kalıtım ve yapısal tasarım üzerinde çalışın. Kütüphanelere ya da yan araçlara bağımlı olmak, sadece acemi olduğunuzu kanıtlar.
Bana kalırsa Java, uzun bir geçmişe sahip olduğu için bilgi asimetrisinin oldukça fazla olduğu bir dil gibi görünüyor.
Sonuçta bir döneme damga vurmuş bir dil olduğu için, o dönemin ürettiği bilgi birikiminin hâlâ çok fazla kaldığını ve bugüne kadar sayısız sürüm yükseltmesi yapılmış olmasına rağmen bu birikimin sanki hâlâ geçerliymiş gibi yeniden üretildiği durumların da çok fazla olduğunu düşünüyorum.
Yeni sürümlere uygun yeni yaklaşımlar bulma konusunda çok zorlandığımı hatırlıyorum.
Diğer dillerde hiç yok değil ama parçalanmanın çok yoğun olduğu diller denirse Python ve Java öne çıkar diye düşünüyorum.
Ama Python, geliştirme hızı açısından çok iyi değerlendirildiği için startup'larda hâlâ zaman zaman tercih ediliyor gibi görünüyor.
Ancak bunun, startup'ların Java'dan kaçınmasıyla aynı nedene dayanmadığını düşünüyorum.
[Startup'larda Java'dan kaçınma nedenleri]
[Yine de startup'larda Java'yı seçmek için nedenler]
[Ancak yine de yeniden düşünmek gereken neden]
Java’nın iyi ya da kötü olması bir yana, benim hissiyatım Java’nın yurt dışındaki startup’larda ana akım olmadığı yönünde.
Yurt dışındaki şirket satın alımları için teknoloji analizi işi yapmıştım ve tek bir yerde bile Java yoktu. İlginç olan ise, beklenmedik şekilde .NET’in oldukça yaygın olmasıydı.
Daha 2-3 yıl önce de benzer bir deneyim yaşadığım için, bu söylenenler bana anlamlı geliyor.
Maven fazla ayrıntılı olduğu için ben de pek sevmiyorum
ama demek ki Gradle da korkunçmuş.
Bana göre npm daha korkutucu gerçi;
Bir de COBOL biraz sınırı aşmış gibi geliyor
Galiba daha çok büyük şirket geliştiricileri kullandığı için haha
Her neyse, Java'nın körü körüne eleştirildiği manzarayı her gördüğümde eğleniyorum. Örneklere bakınca herkesin kendi karanlık deneyimleri görünüyor.
Java fazla tembeldi.
Bu eleştirileri hak ediyor.
Son zamanlarda biraz çabalıyor gibi ama bence daha çok eleştiri almalı.
Nasıl olsa nesiller geçtikçe başka bir dil yine ana akım olacaktır. Startup’larda yeni akımları benimsemek için karar alma süreci daha basit; kullandıkları dilin ana akım hâline gelmesi de startup aşamasını aşmaları anlamına geliyor. Büyük ölçekli şirketlerde ise karar alma süreci daha karmaşık ve çeşitli çıkar ilişkileri olduğundan, ancak istikrarı kanıtlandıktan sonra benimsenmesi gibi bir fark yok mu sizce?
1959’da ortaya çıkan COBOL, finans sektöründe ancak 21. yüzyıla gelindiğinde ortadan kayboldu. Bu arada, sizin pek iyi bulmadığınız Java da açık kaynak olarak başladı ve bir dönem SOHO’da en popüler dildi. Ayrıca Java’nın büyük şirket dili imajı kazanması, Oracle’ın onu satın almasının ardından ve Kore’de devlet öncülüğündeki e-Government Framework’ün ortaya çıkmasıyla oldu.
Java yalnızca Kore'de popülerdirefsanesinin nereden çıktığını merak ediyorum. Ülkedeki büyük IT şirketi denen yerler de en fazla Naver, Kakao, Line ve Coupang gibi iki üç şirket; ikisi de Java kullandığı için mi böyle düşünülüyor acaba?Elbette ABD'de mühendis havuzu çok daha geniş olduğu için ekipleri başka dillerle kurmak daha avantajlı olabiliyor, ama FAANG dahil tüm ABD IT şirketlerinde de Java son derece yaygın bir teknoloji yığınıdır.
Şirketler çok büyük olduğu için takımden takıma fark çok ciddi, ama Amazon'da şirket içi standart framework doğrudan Java diye biliyorum (2. sürümde Spring kullanıp şimdi Guice'a geçtiklerini duymuştum). Google'da da aşağı yukarı yarı yarıya C++ / Java, ayrıca Python kullanan bazı ekipler de var diye biliyorum. Apple'da da bildiğim kadarıyla web servislerinin çoğu Java üzerinde çalışıyor.
Netflix için zaten söylemeye gerek yok; Hystrix, Zuul, Eureka'nın hepsi Netflix'te yapıldı, dolayısıyla dünyada Spring'i en iyi kullanan şirket olabilir diye düşünüyorum.
Facebook'ta da çoğunlukla C++ ya da Hack kullanılıyor ama bazı ekiplerin Java kullandığını biliyorum.
Twitter da başlangıçta Ruby kullanıp sonra JVM dili olan Scala'ya geçmiş diye biliyorum; bunun dışında da Atlassian, VMware, Red Hat gibi büyük şirketlerde tam tersine Java kullanmayan bir yer bulmak daha zor olur.
Kafka, Hadoop gibi şeylerin hepsi JVM üzerinde çalıştığı için, doğrudan serviste Java kullanmasa bile gerçekten Java'ya hiç ihtiyaç duymayan bir şirket var mıdır emin değilim.
Geçmişte Java'nın çok kullanıldığını inkâr eden kimse yok. Bu, yazının ana fikrinden biraz uzak gibi görünüyor.
Yazınızın kendisi ülkeye bakmaksızın genel olarak büyük şirketlerden bahsediyor; ancak yorumlarda özellikle "Kore'de durum böyle" ya da "bu sadece Kore'ye özgü" şeklindeki ifadelere alışılmadık derecede sık rastladığım için bunu belirtiyorum.
Sadece Kore'de Java'nın çok kullanıldığını söyleyemeyiz, ancak Kore'de özellikle Java'nın yaygın olduğu gerçekten doğru gibi görünüyor. Örneğin JetBrains'in geçen yılki anket sonuçlarında, "Java, Güney Kore, Çin ve Almanya'da en çok kullanılan dildir. Java'nın payı Güney Kore'de %53, Çin'de %47 ve Almanya'da %33'tür." deniyordu. Bu durum üzerinde, diğer kişilerin de yorumlarda sıkça belirttiği elektronik devlet çerçevesinin varlığı ve devlet destekli kodlama eğitimi müfredatı gibi etkenlerin kesinlikle etkili olmuş olabileceğini düşünüyorum.
Bazı yorumlara bakınca, eskiden paylaşılmış C++ ile ilgili yazı aklıma geliyor. Koreli geliştirici topluluklarında C++ ve Java'nın neredeyse dokunulmaz mertebesine yükseldiği açıkmış haha, eleştirdiğin anda sayısız insanın tetik noktası basılmış gibi oluyor...
Java'nın da elbette yerel pazarı kasıp kavurmasının nedenleri var ama C++'ı Java ile aynı gruba koymak biraz... hehe
"Tetikleyici düğme" ifadesi çok da iyi bir ifade gibi görünmüyor. Çünkü karşı tarafı kötü şekilde tanımlıyor.
Biraz daha birbirine saygı duyan bir topluluk olsak ne güzel olur diye düşünerek naçizane söylemek istedim. Özür dilerim.
Katılıyorum. Özür dilemeniz gerekiyormuş gibi görünmüyor.
Startup'ların Java'dan kaçındığından çok, diğer dillerin/framework'lerin avantajlarının daha büyük olduğunu düşünüyorum; ama Java/Spring ekosisteminin sanıldığı kadar iyi olmadığına da katılıyorum. Açıkçası bir Spring geliştiricisiyim ama Spring'i pek sevdiğim söylenemez. Web uygulaması geliştirmeyi Java dışında (fiilen Spring'le eşanlamlı) başka ortamlarda yapmış geliştirici çok az olduğu için bu his daha da güçlü...
Spring
Java
JVM ekosisteminin avantajları elbette var; bu yüzden yeni projelerde Kotlin neredeyse şart, ayrıca Spring'i kullanmak için net bir neden yoksa Ktor gibi hafif bir framework'le başlamanın daha doğru olduğunu düşünüyorum. İşaret ettiğim eksiler konusunda "tasarım yanlış yapılmış", "Spring felsefesi doğru anlaşılmadan geliştirilmiş" diyen çok kişi var ama OOP başka dillerle de yapılabiliyor...
Yorum bölümü oldukça dağınık ve saldırgan bir haldeyken, empati kurulabilecek bir yorum bu.
Yeni dillerin ve framework’lerin daha aktif biçimde benimsenmesi gerektiği görüşüne katılıyorum; ancak dürüst olmak gerekirse, bugün sıfırdan başlayan yeni projelerde bile en güncel LTS sürümü olan Java 17 yerine, ortada mantıklı bir gerekçe olmadan alışkanlıkla Java 8’i seçen insanların hâlâ çok fazla olması ülkemizdeki gerçek durum. Tistory gibi bloglarda, “Java 1.8 indirme yöntemi” türü yazıların 2022 tarihli olarak yayımlandığını görmek gerçekten çok kolay. Bunu görünce, burada bulunan pek çok kişinin Java’dan bu kadar nefret eder gibi bir tavır sergilemesinin haksız olmadığını düşünmeden edemiyorum.
Yine de bu sorunların yalnızca Java adlı dilin kendisinden kaynaklandığını sanmıyorum. Bana kalırsa asıl daha büyük sorun, özellikle ülkemizde daha belirgin görünen değişime düşman kültür ile gelişmeyen kopyala-yapıştır kodun yaygınlığı olabilir. Nitekim ben de şu anda C# ile geliştirilmiş benzer türde birkaç programın bakımını yapıyorum; dilin kendisinin Java’dan daha iyi olduğunu düşünsem de, dil ne kadar iyi olursa olsun, önceki kişinin eski proje kodlarını alelacele kopyala-yapıştır yaparak geçiştirdiği kodun korkunçluğunu engellemenin bir yolu olmuyor. Üstelik şimdi dış ortam koşullarındaki değişiklikler nedeniyle, bu şekilde tekrarlanan kodların önemli bir kısmını yıl sonuna kadar mutlaka değiştirmek zorunda olduğumuz bir durum ortaya çıkmış durumda; bu da işleri daha da korkunç hâle getiriyor.
Bu, yalnızca yerelde tetiklenen bir kriz düğmesi gibi.
Eskiden beri çok kullanılan Java'dan vazgeçmek zor görünüyor; insan kaynağına da sürekli ihtiyaç olduğu için, devlet destekli kurslarda aynı müfredatla Spring için yetiştirilecek elemanlar seri üretim gibi çıkarılıyor...
Böyle bir döngünün kırılmasının zor olacağını düşünüyorum.
Kotlin + Spring kullanmaya yönelik girişimleri ise olumlu buluyorum.
Docker kullandıkça...
Docker image boyutu da gereksiz yere büyüyor.
Çalışması da uzun sürüyor vs...
Bu aralar herkes Docker kullandığı için pek tercih edilmez olmuş gibi de geliyor..
Java ekosistemi hiçbir zaman gerçekten bozulmadı.
Sayısız açık kaynak proje var ve sürüm yükseltmeleriyle güncel geliştirme trendlerini diğer dillere göre daha hızlı yansıttığını düşünüyorum.
gradle/mavenbirer build aracı; sadece bir seçimdir, zorunluluk değildir.Başka birçok build aracı da var, isteyen istediğini kullanabilir.
Node tarafında neden
npmkullanılıyor? Çünkü kullanışlı.gradle/mavenda aynı şekilde kullanışlı olduğu için yaygın olarak kullanılıyor.Java'da da birçok framework olmasına rağmen
springkullanılmasının nedeni, esnek genişletilebilirlik, proje yönetimindeki kolaylık ve istikrarlı performans sunması; bence popülerliğini bugüne kadar bu yüzden korudu.Startup'ların iş ölçeği büyüdükçe neden Java'ya geçtiğine bakarsanız, çoğu bunu istikrarlı proje yönetimi nedeniyle tercih ediyor.
Şimdiye kadar küçük ölçekte Python ya da Node ile geliştirme yaparken sorun olmayabilir; ancak iş başarılı olup geliştirici sayısı 100'e, 1000'e çıkıp aynı proje üzerinde çalışıldığında artık Python ya da Node'un avantajlarını korumak zorlaşıyor, hatta dezavantajları daha belirgin hale geliyor.
Büyük ölçekli projelerde kalite yönetimi yaparken aynı zamanda kararlılığı da güvence altına aldığı için Java'ya geçildiğini düşünüyorum.
Muhtemelen Java'dan daha iyi bir alternatif dil olsaydı, insanlar herkesten önce o alternatif dili kullanmaz mıydı?
Son olarak, Java ile yapılan servislerde başlangıçtaki giriş eşiği yüksek ve altyapı maliyeti fazladır; bu yüzden startup'ların ilk dönemlerinde yüksek maliyet ve fazla zaman harcayarak kurulum yapmak yerine, kolay ve hızlı uygulanabilen dilleri daha çok kullandıklarını görebiliyoruz.
En azından ülke içinde bakınca yalnızca Java geliştiricisi fazlasıyla var. Daha doğrusu Java geliştiricisi değil, sadece Spring geliştiricileri var. e-Government Framework Spring olduğu için sıradan geliştiricilerin hepsi sadece Spring öğrenip çıkıyor. Böyle tiplerin deneyimlisi de fazlasıyla birikince durum böyle oluyor. Ne çeşitlilik kaldı ne de dil ekosistemi; zaten bozulmuş durumda. Spring olmadan basit bir ilan panosu bile yapamayanlara Java geliştiricisi diyen çok kişi var.
Bu sorunun kilit noktası "startup"; önemli olan "istikrar/ölçeklenebilirlik"ten çok "geliştirme hızı".
Startup'lar için zaman paradır!
(daha sonra zaman ve para olunca Java'ya mı geçilir?)
Ayrıca Java'nın popülerliği muhtemelen yalnızca Kore'ye özgü bir durum değil. Hâlâ en popüler programlama dilleri arasında ilk 3'te.
Bu yüzden Java'ya geçildiği yönündeki söylem sanki yalnızca Kore'de geçerli gibi görünüyor.
Büyük şirketlerde Java ile yapılmış çok şey olduğu için, en büyük amaç bakım ve sürdürülebilirlik oluyor.
Oracle’ın devreye girip girmemesi aslında çoğu sahadaki şirket için pek geçerli değil... Naver, Kakao, Line, Coupang, Baemin’in ana sistemlerinin hepsi Java. Nexon gibi oyun şirketlerinin iç backend ağları da Java ile yazılıyor.
Java ekosisteminin bozulduğuna ya da Gradle’ın korkunç olduğuna ise hiç katılmıyorum
Java eski bir dil ve Java geliştiricisi çok diye, bu insanların yeni şeyler öğrenmek istemediği ya da kalitelerinin düşük olduğu sonucu nasıl çıkarılıyor gerçekten anlamıyorum.
Nekarakubae'nin hepsinde ana dil olarak Java kullanılıyor ve son dönemde ancak Kotlin yavaş yavaş devreye alınan bir seviyede.
Yoksa gerçekten asıl ustalar startup'larda falan mı, böyle bir şey mi deniyor? haha
"hotshit" için daha uygun bir çeviri var gibi görünüyor.
"2022'de yeni girişiminizin Java kullandığını söylemek, Cobol kullandığını söylemekle aynı şey."
Kore'de Java geliştiricisi bulmanın kolay olduğu mantığını yenmek mümkün değil. Böyle işe alınan geliştiricilerin kalitesi ise, orası şüpheli.
Java ekosistemi çökmüş mü? Spring neden uygun değilmiş? Dayanaklar fazlasıyla zayıf.
JVM bir kripto para olsaydı, Java da Bitcoin olurdu.
hahahahahahahahahahahaha
Eskiden boşuna “Java için iki kişi lazım” mem’i yoktu zaten.. Üstelik devletin standart framework’ü diye, kamuya yönelik SI işlerinde de neredeyse yarı zorunlu olarak JAVA kullandırıyorlar ....
Java tarafındaki toolchain'in pek iyi olmadığını söylemek biraz zor geliyor.
Maven/Gradle'ın yönetim biçimi, npm yüzünden canı yanmış biri için kıyaslanınca adeta nimet gibiydi...
Ben de kariyerime Java ile başladım ve yaklaşık 4 yıl boyunca bir şirkette yalnızca Java geliştiricisi olarak çalıştıktan sonra şirket değiştirirken Python, Ruby, Go gibi çeşitli dillerle tanıştım; son dönemde ise kariyerime Solidity geliştiricisi olarak devam ediyorum.
Son zamanlarda birçok startup belirli bir büyüme aşamasını tamamlayıp istikrarlı bir rotaya girdikçe altyapısını çoğunlukla Java’ya taşıyor gibi görünüyor. Neden böyle değiştirdiklerini düşününce,
bunun herkesin alışkanlıkla yaptığı bir şey olduğu hissine kapıldım.
Birçok lead seviyesindeki geliştirici Java’ya alışkın ve başka dilleri öğrenmeye isteksiz olduğu için, kendilerine tanıdık gelen Java’yı kullanıyor; böyle insanlar startup’larda yoğunlaştığında da altyapıların tamamı Java tabanlı hale geliyor gibi görünüyor.
Kişisel olarak, sırf alışkanlık yüzünden altyapıyı baştan aşağı değiştirmeyi anlamakta zorlanıyorum; ancak insanların doğası gereği yeni şeyler öğrenmeye isteksiz olduğunu ve Güney Kore’de Java ekosistemi çok sağlam olduğu için bunu değiştirmenin oldukça zor göründüğünü düşünüyorum.
Java ve Spring, büyük ölçekli servisleri istikrarlı şekilde sunmak için iyidir,
ancak erken aşama bir startup’ın hizmeti küçük ölçekli olduğundan Java’nın avantajlarını ortaya koymak kolay olmaz.
Erken aşama startup’larda az sayıda kişiyle hem Front hem Back yapılması gereken durumlar da olur; bu yüzden Java yerine
Node.js ya da JS ile tek seferde geliştirmek daha pratiktir.
Sonuçta startup’lar seri yatırım alınca çoğu zaten Java ve Spring’e geçiyor.
Bakınca bazen, sırf alışık oldukları için performans ayarı ve sorun giderme işlerini kendilerinin daha rahat yaptığı şeyi “istikrarlı” diye tanımlıyorlarmış gibi geliyor bana.
Herkesin bildiği gibi Java, bellek yönetimini otomatikleştirme gibi bugün artık son derece doğal kabul edilen birçok özelliği daha ilk sürümlerinden itibaren sunuyordu. Java’nın ilk ortaya çıktığı 1990’larda ise C ya da C++ gibi, geliştiricinin küçük hatalarının bellek sızıntısına yol açarak uygulamanın genel güvenilirliğini bugüne kıyasla çok daha kolay etkileyebildiği diller çok daha yaygın kullanılıyordu. Böyle bir dönemde, geçici bir çalışma duraklaması (Stop-the-world) yaşansa bile bellek sorunları yüzünden servisinizin tamamen çökme olasılığını ciddi biçimde düşüren bir dilin ortaya çıkışı oldukça sansasyonel olmuş olmalı. Bu yüzden Java’nın daha ilk dönemlerinden itibaren diğer dillere kıyasla çok daha kararlı olduğu yönünde bir imajla başladığını ve bunun bugünlere kadar sürdüğünü düşünüyorum.
Ayrıca bugün itibarıyla Java’nın, çeşitli servislerde uzun yıllar boyunca yaygın biçimde kullanılmasıyla oluşmuş bir güvenilirliği ve birikmiş deneyimi var. Bu nedenle söylediğiniz gibi performans tuning’i ya da troubleshooting yapmak da daha kolay olabiliyor; hem ticari hem de açık kaynak tarafta çok sayıda araç ve çözüm de mevcut. Yaygın kullanılan bir ürünün ekosistemi, başlı başına sorun çözmeyi kolaylaştıran bir etki yaratır; arıza durumunda problemleri çözmenin kolay olması sayesinde downtime’ın azaltılabilmesi de kararlılığa önem verenler açısından büyük bir avantaj olacaktır.
Diğer yorumlarda sıkça anılan Kotlin’e gelince, burada GeekNews’teki başka bir kullanıcının yorumuna göre şaşırtıcı biçimde hâlâ derleyici hataları ya da uyumlulukla ilgili sorunlar epey fazla görünüyor. Aynı JVM’i kullanan ve artık neredeyse 10 yıldır açık olan bir dilde durum böyleyse, değerlendirme ölçütlerinde kararlılığı en üst sıraya koyuyorsanız, mümkün olduğunca uzun yıllar boyunca yeterince doğrulanmış olanı seçmeye yönelmenin gayet makul olduğunu düşünüyorum.
Bu arada bugün bakınca kulağa oldukça tuhaf gelebilir ama Java ilk ortaya çıktığında, Im Baekjun’un 『Polyglot Programming』 (2014) adlı kitabındaki ifadeyle söylersek, “yenilikçi, genç ve hatta seksi bir his veriyordu.” Bununla bağlantılı olarak, Java’nın babası James Gosling’in 1997’de yazdığı bir metnin çevirisini paylaşıyorum.
Spring’e yönelmenin nedeninin Kore geliştirici pazarının kendine özgü yapısında yattığını düşünüyorum.
Yurt dışında ise JVM, bu yazıda da belirtildiği gibi, genel olarak Kotlin’e geçiyor.
Bence de
springfanatikleri yüzünden Java’nın imajı kötüleşti.Özellikle Kore’de, biri Java yaptığını söyleyince sanki her şey doğrudan Spring Boot’muş gibi algılanıyor. Java = Spring Boot gibi bir anlayış çok yaygın.
Java bilmeyen bir geliştirici olarak bu hoşuma gitti.
Yine de startup'ta eleman ararken en hızlısı bu olur gibi..
Ama Kore'de...
Ben de bir zamanlar Java kullanıyordum ama artık mümkünse Java kullanmak istemiyorum.
Neden hem hüzünlü hem de güldürüyor..? hahaha
(Eskiden çalıştığım startup'ta Java kullanıyorduk ama şimdi kullanmıyoruz)