18 puan yazan roxie 2024-11-05 | 58 yorum | WhatsApp'ta paylaş
  • En sevdiğim dil Python. Buna rağmen her yerde — basit script'ler için bile — Java kullanıyorum.
  • Birkaç deneyim:
    • Java tabanlı bir şirkette test senaryolarını JavaScript ile yazdım. Ancak stack trace takibi zordu ve Java ile JavaScript arasında köprü kodu yazmak gereksiz bir uğraşa dönüştü.
    • Logları JSON formatında saklıyorduk ve bir ekip arkadaşım bu logları işleyen logcat adlı bir program yaptı. O programdan memnundum, ama daha sonra benzer bir program Java ile yazılınca 10 kattan fazla performans artışı görüldü.
    • Java hakkındaki zengin deneyim ve kaynaklar sayesinde, web servisi geliştirme açısından Java Python'dan daha hızlıydı. Daha doğru söylemek gerekirse, bu tek bir dili kullanmanın getirdiği bir avantaj.
  • Java hakkındaki en hararetli tartışma konusu verbose olmasıdır. Ama bu aslında hiç de bir dezavantaj değil. Aşağıdaki iki koda bakın.
// java  
Map<String,User> userIdMap = new HashMap<String,User>();  
// python  
userIdMap = {}  
Reklam
  • Ama gerçekte Python kodunun aşağıdaki gibi yazılmış olma ihtimali daha yüksektir. (Aksi halde bakımı gerçekten çok zor olurdu.)
# Map from user ID to User object.  
userIdMap = {}  
  • Yani dinamik tipli bir dil kullanmak, 30 dakikada havalı bir şey yapmak için 14 gün sonrasındaki üretkenliği feda etmek gibidir.
  • Stack Overflow, ASP.NET kullanarak (2010'da) 5 sunucuyla 60,000,000 sayfa görüntülenmesini kaldırdı.
  • Birim test örneğine bakalım. Birim test yazmak ve bakımını yapmak zaman alır. Özellikle tiplerle kolayca doğrulanabilecek istisna durumları, dinamik tipli dillerdeki unit test'lerle de pek iyi yakalanmaz (ör. parser).
  • (Python kullanmama nedenlerinden birini daha eklemek gerekirse) geçici çözüm olarak yazılan bir quick hack zamanla büyüyüp çok önemli bir araca dönüşüyor; ama onu yeniden yazacak fırsat olmadığı için her kullanımda performans ve bakım sorunlarıyla boğuşuluyor.
  • Son olarak, diğer statik tipli diller yerine Java'yı tercih etme nedenleri
    • C/C++ işime uygulaması zor diller
    • C#'ın çapraz platform desteği yetersiz
    • Scala fazla karmaşık
    • D, Go gibi diğer diller işime katmak için fazla yeni
Reklam

  • Bu yazıyı GeekNews'e taşımamın birkaç nedeni var:
    • "Ben Java'yı gerçekten seviyorum!" diyen bir yazıyı ilk kez gördüm, o yüzden ilginç geldi (sadece başlığa bakınca bir ters köşe beklemiştim...)
    • Kendisinin Java ile yapılmış kendi alet çantasına sahip olması eğlenceliydi. Nedense cebinden antik silahlar çıkaran yaşlı bir adam görüntüsü canlandı gözümde.
    • Ben şahsen JavaScript ve Python'ı çok seviyorum. Ama ilk bakışta bu dillerde de eğilim sanki 'bir şekilde tip ekleme' yönünde gibi görünüyor (JavaScript için TypeScript, Python için typing/mypy). Bu durumda bu yazıyı görünce, benim statik tipli dilleri (tipleri hiç zorunlu kılmayan bir şekilde) kullanmamın biraz kendini tatmin etmeye yakın bir şey olup olmadığını düşünmeden edemedim.
  • Yazarın Java ve Python konusunda deneyimi olduğu için bu iki dili doğrudan karşılaştırmış, ama bunu özellikle bu kadar dar çerçevede düşünmek gerekmiyor gibi geliyor. Daha geniş bir perspektiften baktığınızda statik tipli ve dinamik tipli diller hakkında siz ne düşünüyorsunuz?

PS. Belirli bir dili anlamsız yere küçümsemeyelim :D

58 yorum

 
kimjj81 2024-11-11

Bu fazla kişisel bir deneyim olabilir ama bence Java'da asıl sorun dilden çok JVM.
Birden fazla JVM sürümünde bellek yönetiminin düzgün çalışmadığını çok fazla yaşadım.

 
ahwjdekf 2024-11-09

O zaman pandas, numpy'yi de Java ile yapıp kullanın. Böyle iddialarda bulunanları yakında tutmamak gerekir.

 
koreaisbest 2024-11-08

Java web backend için kullanılır, Python da yapay zeka için kullanılır. Performans önemliyse Rust kullanmak gerekir; zaten herkesin bildiği bir şey değil mi? Ama gelecekte yapay zekanın payının artması beklendiği için, "Acaba Java'yı bırakma zamanı geldi mi?" diye düşünülüyor. Ülkemizde "geri kalmamalıyız" şeklinde bir zihniyet de çok yaygın haha

 
savvykang 2024-11-08

Yapay zekaya olan talep artar ve sıradan REST API ya da basit CRUD işleri yerini alıp artık bu tür sistemler yapılmaz hale gelirse, o zaman Java'yı bırakmak mümkün olabilir.
Ayrıca projelerin her zaman tek bir dilden oluşmadığı durumlar da var; bu yüzden dil ile projenin amacını bire bir eşleştirmenin de doğru olmadığını düşünüyorum. Programlama arayüzü Python olup performansın kritik olduğu kısımlarda native code kullanılması yaygın bir durum sonuçta. Ülkemizde projeleri bu şekilde kurgulayan örnekler çok yaygın olmasa da.

 
carnoxen 2024-11-06

Giriş yazısı biraz yetersiz kalmış. Önce orijinal metnin yazıldığı tarihi belirtseydiniz, buradakilerin en azından yarısı bunu bir ölçüde anlayışla karşılardı...

 
roxie 2024-11-07

Ben de diğer kişilerin yorumlarını görünce fark ettim.

Ama ben bunun yakın zamanda yazıldığını peşinen varsaydım ve içeriği okurken hiç de tuhaf gelmedi. En azından benim için hâlâ ikna edici bir yazı.

Bundan ayrı olarak tarihlere bir göz atarım artık haha

 
moderator 2024-11-06

Tartışma hararetleniyor.
İtirazınız varsa lütfen yalnızca içeriğini yazın.
Site kullanım kurallarına aykırı yorumlar silinmiştir.
Ayrıca, kullanım kurallarına uymayan faaliyetleri tekrarlayan hesaplar engellenmiştir; bilginize.
Lütfen yapıcı bir tartışma yürütün.

 
kandk 2024-11-06

Ben Oracle'a (JVM) değil, Google'a (V8) güveniyorum.

 
ilotoki0804 2024-11-06

Python kullandıktan sonra Java’yı ilk gördüğümde gerçekten çok ayrıntılı gelmişti, ama bugünlerde Python’a tam kapsamlı type hint eklemek için gereken kodlara bakınca artık pek de öyle görünmüyor gibi haha. Bence Java’nın asıl zayıf yanı, yöntem adlarını inanılmaz uzun yapmaya çalışan naming convention’ı olabilir.

 
tested 2024-11-06

1 Haziran 2014

 
cosine20 2024-11-06

Ben de statik tipli dilleri tercih ediyorum.
Dinamik tipli dillerin kullanışlı olduğu yanlar var, ancak prodüksiyon ortamında bakımın zorlaştığı durumlarla da sık sık karşılaşılıyor.
Ayrıca dinamik tipli diller genelde tasarım felsefesi olarak "basit kod yazımı"nı hedeflediği için, dil seviyesinde örtük olarak yönettikleri şeyler çok oluyor; bu yüzden optimizasyon için alanın daraldığı durumlar da epey fazla.

Sonuçta mesele, uygulama kolaylığı ile optimizasyon için geniş hareket alanı arasındaki dengeyi geliştirme ortamına göre düşünüp seçmek gibi görünüyor.

 
kandk 2024-11-06

10 yıl önceki yazı, vay be

 
callman7 2024-11-06

Aynen öyle lol

 
idunno 2024-11-06

Java'yı bıraktıktan sonra hayatım huzura kavuştu.

 
jjpark78 2024-11-06

Stack Overflow anketinde Java'nın popülerlik sıralamasının sürekli düşmesinin elbette geçerli nedenleri var.
Özellikle Kore'de o meşhur devlet framework'ünü Spring'e sabitlemiş olmaları yüzünden iş bulurken işe yarıyor ama,
Batı'da legacy dışında yeni bir projeye başlarken Java'yı seçmek artık neredeyse tamamen ortadan kalkmış gibi görünüyor

 
rabbitcarrot 2024-11-07

Bunun için geçerli nedenler olduğu doğru, ama sanırım o nedenleri farklı değerlendiriyorsunuz.

TIOBE sitesinde de programlama dili sıralamasına yalnızca referans olarak bakılması gerektiği, bunun pazar payı veya popülerlikle doğrudan ilişkili olmadığı belirtiliyor.

Sonuç olarak: Python ezici bir payla 1. sıradaysa, piyasaya çıkmış araçlar nerede?
En sık karşılaştıklarımız C/C++, .NET, Java (Kotlin) ve Swift.

Soru ve arama sayısının fazla olması, onun çok kullanılan bir dil olduğu anlamına gelmez.
Python, bilgisayar bilimi eğitimi almamış olsa bile herkesin kullanabileceği bir dildir.
Popüler olduğunu inkâr edemeyiz, ama geliştirme pazarında durum farklı.

 
analogstar 2024-11-07

Instagram, backend tarafında Python kullanıyor.

 
ilotoki0804 2024-11-07

"Piyasaya çıkmış araç" ifadesinin tam olarak ne anlama geldiği biraz belirsiz ama... Django, FastAPI, PyTorch, NumPy, Pandas vb. araçlar zaten yeterli değil mi...?

 
skrevolve 2024-11-06

Başlığı görünce önce yorumları merak edip geldim hahaha. Son zamanlarda dillere bel bağlama alanı gerçekten genişledi.

 
bungker 2024-11-06

Maliyet tarafıyla sınırlı bakarsak, Java bellek kullanımı nedeniyle bulutta maliyetleri epey yükseltiyor. Statik dilli bir programın 100 MB, 200 MB bellekle çalışabildiği durumlarda, Java ile yazıldığında 1 GB, 2 GB gerektirmesi oldukça sık görülüyor; hafif iş parçacıkları da kütüphane uyumluluğu nedeniyle çoğu zaman kullanılamıyor.

 
cosine20 2024-11-06

Java da statik bir dildir ama... bellek sorunu çöp toplayıcıya veya JVM'e ilişkin bir konu; sözünü ettiğiniz "statik bir dilde 100MB, 200MB bellek gerektiren program" ise muhtemelen C, C++ gibi yerel dillere karşılık geliyor.

 
bungker 2024-11-06

Halüsinasyon için özür dilerim. TT Java da statik bir dil, doğru. Bulutta çeşitli maliyetleri toplayınca 1 GB bellek başına yaklaşık 30 bin won hesaplamak gerekiyor; bu yüzden Java ile geliştirilen servislerde oldukça yüksek maliyetler ortaya çıkıyor.

 
constexprif 2024-11-06

İstisnalar varsa bu dinamik tipli bir dildir. Ayrı olarak, tip sistemi ile bellek kullanımının ayrı konular olduğu görüşüne katılıyorum.

 
cosine20 2024-11-06

Bahsettiğiniz istisnanın anlamı bana fazla geniş geliyor; biraz daha ayrıntılı açıklayabilir misiniz?
Benim bildiğim kadarıyla statik/dinamik tipli dillerin tanımı şöyleydi: Bir değişkenin tipi derleme zamanında belirleniyorsa ve bunu değiştirmek için açıkça belirtmek gerekiyorsa bu statik tipli bir dildir; dinamik tipli dil ise çalışma zamanında değişkenin tipinin istenildiği gibi belirlenebildiği ve örtük olarak da değiştirilebildiği dildir.

 
constexprif 2024-11-06

Runtime’da downcasting yapma gibi bir durumla karşılaşıldığında, Java’nın çalışma anında tür kontrolü yapması gerekir. Bu yüzden Java dinamiktir; bu sırada ortaya çıkan şey de istisnadır.
Temelde bu boşluk olmasaydı, istisnalara istisna demeye gerek kalmazdı. throw, fırlatılan nesneyi global bir değişkende tutup goto yapmak şeklindeki bir kalıp için sözdizimsel şeker olurdu.

 
constexprif 2024-11-06

Bahsettiğinize benzer şekilde, tür denetimini çalışma zamanında yapan dillere dinamik tipli denir. Ancak bu, programda ele alınan tüm değerler için geçerlidir. Konu Java olduğuna göre Java’yı örnek alırsak, Java kodu derleme zamanında tür denetiminden geçer; ama bu, o değişkene karşılık gelecek değerin değişkenin türüyle eşleşmesi gerektiği yönünde önemli bir ima da içerir.

 
rabbitcarrot 2024-11-06

Tip kontrolü çalışma zamanında yapılıyor diye dinamik tipliyse, C de dinamik tipli bir dil mi oluyor? void pointer diye bir kavram olduğunu biliyorum; ikisi arasında ne fark var?

 
savvykang 2024-11-07

Hangi C derleyicisi veri türü denetimini koda enjekte edip veri türü yanlış olduğunda açık bir hata üretir? Böyle bir gerçekleştirim varsa lütfen sadece bir örnek verin.

 
constexprif 2024-11-07

C’de bu süreçte tip kontrolü diye bir şey yok. Kayan noktalı veriyi tamsayı olarak okusanız bile hiçbir sorun çıkmıyor, değil mi? Mesele dinamik tipli olması değil, düpedüz tehlikeli olması.

 
secret3056 2024-11-07

Tür denetimi çalışma zamanında yapılıyor diye, dinamik tipliyse C de dinamik tipli bir dil mi oluyor?

Evet, C tür denetimini çalışma zamanında yapsaydı dinamik tipli bir dil olurdu.
Öyle olmadığı için statik tipli bir dildir.

void pointer, yalnızca özgün veri türü bilinmeyen ham bir pointer'dır. Bu pointer'ın gösterdiği adreste hangi türün bulunduğu bilinemez.

 
readiz 2024-11-06

Benim temel görüşüm, en iyi dilin alışık olduğunuz dil olduğudur.

 
yhju101 2024-11-06

Katılıyorum. Bir ekipte ya da organizasyonda kullanılan dilin dışına çıkmak da çok kolay görünmüyor.

 
savvykang 2024-11-06

İş içeriğinin veya görev dağılımının ayrılmasının çeşitli nedenleri arasında bir de dil eklendiğinde, belirli kişiler üzerinde iş yükü artıyor ve personel değiştiğinde işin ilerlemesi duruyor. İşe alımı da etkileyen bir unsur olduğu için, teknoloji yığını seçiminin dikkatle yapılması gerektiğini düşünüyorum.

Ancak tersine, sırf alışık olunduğu için işe alım havuzu dar olan ya da işe alımdan sonra ayrıca öğrenme gerektiren bir dili ısrarla sürdürmek de ayrı bir sorun olur elbette.

 
chwj1212 2024-11-06

Neden C#'ın çapraz platform desteğinin yetersiz olduğunu düşünüyorsunuz? Günümüzde .NET sunucu uygulamalarının çoğu zaten Linux sunucularına dağıtılıyor.
Python baştan itibaren bir karşılaştırma ölçütü değil; Kotlin ve C# ile kıyaslandığında daha ayrıntılı olduğu ve ihtiyaç duyulan pek çok özelliğin eksik olduğu doğru gibi görünüyor.

 
chwj1212 2024-11-06

Ah, bu 10 yıl önceki bir yazıymış. Şimdi durum çok değişti.

 
rabbitcarrot 2024-11-07

C# de sanal makine kullanan bir dil olduğundan, çapraz platform desteğinin çok daha önce gelmiş olması gerekirdi; ama benim bildiğim kadarıyla bu ancak çok yakın zamanda çıktı. Bu yüzden bir süre daha, Windows dışındaki başka işletim sistemlerinde de çalıştırılabildiği düzeyinde bir algı sürecek gibi görünüyor.
Üstelik yılın 365 günü çalışan sunucu ağırlıklı Linux ortamlarında, ilgili sistemde 10 yıldan uzun süredir kararlılığı kanıtlanmış diğer diller yerine yeterince doğrulanmamış .NET'ten çekinilmesi de bir gerçek.
Bu anlamda, çapraz platform açısından yetersiz denmesinin sebebi bu değil mi?

 
lazydonkey456 2024-11-07

Peki ama istikrarın kanıtlandığının ölçütü tam olarak nedir? Sadece kullanım süresinden mi bahsediyorsunuz, ben bunu anlayamadım doğrusu.

 
lazydonkey456 2024-11-07

Bu, 10 yıl önce yazılmış bir yazı olduğu için, .NET Core daha yeni ortaya çıkmışken metin o şekilde kaleme alınmış.
.NET uygulamaları zaten Linux ve Mac'te kararlı biçimde gayet iyi çalışıyor.

 
unsure4000 2024-11-06

Python tarzı sade sözdizimine sahip, statik tipli bir dil gibi bir şey var mı diye bakınırken tesadüfen GDScript'i keşfettim, ama bunun genel amaçlı olarak kullanılmasının zor olması çok büyük bir dezavantaj.
Fırsatınız olursa Godot üzerinden küçük bir proje yapıp GDScript'i biraz denemenizi tavsiye ederim.

 
joyfui 2024-11-06

Kotlin’le tanıştıktan sonra Java’ya karşı bir nefret geliştirdim...

 
nicewook 2024-11-06

Java'da, ne zaman bir özelliğe ihtiyaç duyulsa doğrulanmış bir doğru cevap varmış gibi hissettim.

 
[Bu yorum gizlendi.]
 
mammal 2024-11-06

Sadece Kotlin kullanın.

 
roxie 2024-11-07

Ben de zaten bir Kotlin kullanıcısı olarak e-postayla Kotlin hakkındaki görüşlerini sormuştum; kendisi hiç kullanmadığı için deneyim aktarımında bulunmasının zor olduğunu söyleyerek yanıt vermişti.

 
regentag 2024-11-06

Statik tipli dilleri seviyorum. Çünkü düşünmem gereken şeyleri azaltıyor; ben de o zamanı başka şeyleri düşünmeye ayırabiliyorum.

Java gerçekten çok kendine özgü bir konumda olan bir dil. En son işte Java’yı yaklaşık 10 küsur yıl önce kullandım ama bugün bile hobi için değil, iş için bir program geliştirmem gerekse ilk sırada değerlendireceğim diller listesinde yer alıyor.

Şu anda işte kullandığım ana diller Ada ve C, ama kişisel olarak ya da ekip içinde kullanacağımız araçları çoğunlukla PowerShell ile yazıyorum. Ama yazarken biraz zaman geçsin yeter (5 dakika bile...), kendimi "Bu değişkenin tipi neydi acaba?" diye düşünürken buluyorum. O yüzden bugünlerde tipi mutlaka açıkça belirtiyorum. (PowerShell’de değişken tanımında tip belirtmek de mümkün, atlayıp dinamik olarak kullanmak da.)

C’yi de pek sevmiyorum. Ada olsaydı derleyicinin yakalayacağı tiple ilgili hataları C hiç yakalayamıyor. C benzeri söz dizimine sahip ama Ada’nın tip sistemini destekleyen bir dil olsa ne iyi olurdu diye sık sık düşünüyorum.

Javascript ve Python bana pek sıcak gelmiyor. Perl ya da Shell Script ise... onları düşünmek bile istemiyorum.

 
fooandbar 2024-11-06

Sanırım C dilinin temel felsefesi olan "programcıya güven" yüzünden bu kaçınılmaz...

 
regentag 2024-11-06

Ah, ayrıca Java'yı severim ama Maven'dan nefret ederim.
Güzel eski günlerde Ant ile her şeyi yapabiliyordunuz!

 
savvykang 2024-11-06

Java'ya record ve pattern matching gibi özellikler eklenerek yavaş yavaş modern dilleri yakalıyor olması, en azından teselli verici geliyor.

 
aer0700 2024-11-05

Java'nın çok sayıda referansı olması güzel ama mesele sadece buysa neden C++ olmasın diye düşünüyorum.
Java'nın avantajlarına dair biraz daha fazla şey olsaydı iyi olurdu.

 
aer0700 2024-11-07

Ben ağırlıklı olarak C++ kullandığım için yalnızca C++'ı örnek verdim. Ben de Java'nın iyi bir dil olduğunu düşünüyorum; benim işaret etmek istediğim şey, o asıl gönderide Java'nın avantajlarına dair anlatının yetersiz olduğuydu.
"Java'yı çok seviyorum" diye yazıldıysa, ana eksen Java'nın avantajları olmalıydı ama sanki ana eksen diğer dillere yönelik eleştiriler gibi duruyor.
Belirttiğiniz gibi, Java'nın JVM'inin son derece iyi olduğunu ben de düşünüyorum.

 
roxie 2024-11-07

Tamamen katılıyorum. Bunu illa Java ile sınırlayarak konuşmayalım şeklindeki çekince de aslında bu niyetteydi. Ama pek aktarılmamış gibi görünüyor..

 
anjwoc 2024-11-06

Karşılaştırma grubunun Java ve C++ olması güvenilirliği bir anda epey düşürüyor gibi, haha

 
geekhada 2024-11-06

Sadece Java kullanın

Java, JVM üzerinde çalıştığı için yerel ve makine ortamını aynı şekilde kurmak mümkün. C++ ile tüm geliştiriciler ve makineler için aynı ortamı oluşturmak ise epey zaman alır. Sürdürmesi de zordur...

 
regentag 2024-11-06

Asıl yazarın Java kullanmasının nedeni muhtemelen sadece C++ uygulaması zor bir iş olması gibi görünüyor. Muhtemelen Python ile C++ arasında seçim yapması gerekseydi, C++'ı seçmez miydi?

 
roxie 2024-11-05

düzeltme: "son olarak diğer statik tipli dillerin neden olmadığı" -> "son olarak, diğer statik tipli diller yerine Java'yı tercih etme nedenleri"

 
fau1ty 2024-11-07

Oduna ateş iyi tutuşuyor.. kesinlikle tavsiye

 
roxie 2024-11-07

Benim istediğim yangın bu değil T_T

 
plaaat0102 2024-11-08

Sımsıcak.. öyle..