Yaşasın! Java yeniden öldü?

Yaşasın! Java yeniden öldü?

Her gün yeni baştan bir şeylerin öldürüldüğü bir sistemin çarklarıyız sadece….

Bir süredir stajım sebebi ile yazmaya ara vermiştim. Ta ki staj bitip de şöyle bir kanıya ulaşana kadar. Şirketler içerisinde hala pek çok noktada “en iyi çözüm” Java’dan geldiği için Java kullanılıyor. Ancak staj yaptığım yerdeki yazılımcılara kalırsa Java çoktan ölmüş. Ya bu bir yerden tanıdık geliyor ama… Neyse…

Daha öncesinde şu yazımda Java’nın geleceğini bir sorunsal olarak ele almıştım. Neden eski popülaritesini yitirdi ve temelde yatan sorunlardan bahsetmiştim. Peki neden yeniden benzeri görünebilecek bir yazı yazma gereği duydum. Çünkü yarım bilgiye sahip olan forum yazarları, daha programlamadan dahi anlamayan bir avuç acemi kişi Java hakkında iyi veya kötü bir yazı yazmayı, bir nevi düşeni tekmelemeyi, kendilerinin ne kadar bilgili olduğunu etrafa göstermek için bir fırsat biliyor. Ve her Türkçe yazıda “Bak şimdi Java öldü.”, “Bu sene Java’nın son senesi.”, “Java’nın ruhuna el fatiha” başlıklarını görüyorum. Peki bu kadar kolay mıdır bir dile öldün diyebilmek biraz da ona bakalım.

Hepsinden önce dillerin popülerlik kıyaslaması için kullanılan bazı kıstaslar var. Bunların en bilineni Github’un yaptığı senelik raporlar. Octoverse adı verilen bu raporlara şurdan erişebilirsiniz. Bu raporlarda dillerin popülaritesi temel olarak son 12 ayda açılan depoların en çok hangi dillerde açıldığına bakarak, dillerin kullanım miktarlarını ise kaç deponun kaçta kaçı hangi dille yazıldı gibi kriterlere bakarak dillerden hangisinin kullanımında düşüş oldu, hangi dil popülerliğini yitirdi veya hangi dil daha da popüler oldu ortaya koyuyorlar. Bir diğer rapor Stack Overflow tarafından yapılmakta, onda ise senelik dil kullanım raporlarında programlama dillerini soru ve cevap sayısını esas alarak sıralıyor. Benzer şekilde, ünlü endeks sitesi Tiobe, programlama dillerini dünya çapındaki yetenekli mühendislerin sayısına, satılan kurslara, para karşılığında satılan dillerin satış istatistiklerine ve üçüncü taraf yazılım şirketlerinin ticari yazılımlarının hangi diller ile yazıldığına göre sıralar. Bir de popülarite istatistiklerini Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube ve Baidu gibi popüler arama motorlarında bu dillere ait araştırma kullanılır. Bütün bu raporlarda temel olarak karşımıza çıkan gerçek şu:

“2011’de Sun Microsystems’in satılması ve ardından yaşana Java SE lisans değişimi yüzünden yaklaşık %20’lerde seyreden popülerlik 2 sene içinde hızla düşüş yaşayarak %10’lar seviyesine indi.”

https://www.tiobe.com/tiobe-index/java/

Şu anda Tiobe 2019 endeksine göre Java %10.43 ile üçüncü sırada. Bu kodların bir kısmını eskiden gelen ve devam ettirilen kodlar bir kısmını ise yeni geliştirilen projeler içermekte.

Düşüşün Sebepleri

“Java ölüyor” ve “java programcıları artık talep görmüyor” diyenlerin, diğer dillere geçişi savunurken görmezden geldiği en önemli konu düşüşün sebepleri. Düşüşlerin bir kısmı daha öncesinde belirttiğim gibi Oracle JDK’nın lisansında meydana gelen değişim oldu. Java 11 ve sonrası için gelen bu değişimde şirketler artık kendi projelerinde Oracle JDK’yı kafasına göre kullanamayacak. Bu biraz acımasız gibi görünse de daha öncesinde anlattığım gibi bunda Google’nin payı çok büyük. Büyük bir kod ambarı olan JDK’dan (Oracle’nin iddiasına istinaden) kod çalıp bunları Android içerisine entegre etmeleri açık kaynak kodlu yazılımların manüple edilmesini engellemek amacı ile pek çok projeye bu şekilde bir koruma yapısı gelmesine neden oldu. Yani bu lisans değişimi başka projeler için de bir başlangıç niteliğinde oldu denilebilir.

Bir diğer düşüş sebebi ise yine Google sebebiyle yaşanan bir düşüş. Android’e kod yazmak için bir süredir olabildiğine Java yerine alternatif dilleri pompalayan Android Topluluğu sebebiyle 2016’dan bu yana Kotlin ve diğer dillere doğru bir kayış yaşandı. Bunun ne önemi var dersek octoverse istatistikleri ve TIOBE endeksini karşılaştırırsak eğer; an itibari ile %0.45 kullanım oranı ile 28. sırada olan DartLang, 2019’dan bu yana %120 büyüme rakamlarına ulaştı. 2015’den beri aktif olarak bulunan bu dilin 2 senede bu denli bir yükseliş yakalamasının da temel sebebi takdir edersiniz ki Flutter mobil framework’ü oldu.

Ancak Java’nın sadece mobilden ibaret olmadığını istatistikler açık bir şekilde göstermekte. Java’nın günümüzde farklı projelerde yaygın olarak kullanılmaya devam ediyor. Java yazılım geliştirme alanında olduğu gibi, OpenJDK projesi ile direk şirketler tarafından sunulan Java temelli projelerde (en büyük örneklerden birisi de Jetbrains’in editör ve cloud yazılım ailesi), büyük veri, yapay zeka, blockchain uygulamaları, mobil uygulamalar, nesnelerin interneti ve web geliştirme gibi çeşitli alanlarda günlük kullanımı da hala devam etmekte.

Artarak mı devam etmekte diye bir soru soracak olursanız IoT Developer Survey’in ortaya koyduğu raporda, IoT cihazları için gömülü yazılım ürünleri programcılarının Java’yı tercih ettiğini açıkça ortaya koyuluyor. Bunun temel nedeni Java dilinin platform bağımsızlığı ve yüksek taşınabilirlik özelliğidir. Google’ın IoT teknolojilerinden çekilmesi, AWS’nin kendi JDK’sı ile bu alana yönelerek kendi JDK’sını OpenJDK gibi dağıtması pek çok projenin AWS JDK’ya adapte edilmesine de sebep oldu.

Belki en çok sorun yaşatan konu JDK’ların birbirinden farklılık göstermesi denilebilir. Çünkü Oracle JDK’ya ek olarak OpenJDK, AdoptOpenJDK, Azul, OpenJ9 gibi farklı JDK’lar ortada dolaşmakta. Bu aşamada kafa karışıklığını gidermek adına kimsenin “E hepsi aynı özellikleri sağlıyor” dememesi pek çok yeni programcının Java’dan uzak durmasına sebep olarak gösterilebilir.

Burada yeni programcı perspektifinden bakınca hemencecik programlama geçmek isteyen birisine tabi ki bunu anlatamazsınız. Üniversiteler perspektifinde ise (Türkiye için) halihazırda düzgün bir programlama dersi verilmediği için pek çok programcı dil değiştirmeyi, beceriksiz olduğunu kabul edememenin bir yolu olarak görüyor.

Ancak yurtdışına bakıldığı zaman, Türkiye’deki gibi bilgisiz elemanların her konuda konuşması yaşanmadığı için durum biraz farklı. Java’dan göçler elbet var. Ancak Java’daki kodlarını taşıyanlar bizdeki gibi platform bağımlı olan C#’a değil, Python’a kendilerini adapte ediyorlar. Veya projelerinde ufak değişimler yaparak OpenJDK kullanıyorlar.

Yurtdışı perspektifinde Java sadece (Türkiye’de olduğu gibi) stok takip sistemleri ile otomatlarda kullanılan bir programa dili değil. Özellikle uçuş kontrol sistemlerinde (planörlerden büyük yük uçaklarına kadar) gömülü olarak Java kullanılmakta. Pek çok bankacılık (RestAPI) ve bulut sisteminde de (Apache alt projeleri) Java ile yazılmış ve geliştirilmesi devam etmekte. AWT (Abstract Windowing Toolkit) yapısı sayesinde pek çok son kullanıcı odaklı program yine Java ile yazılmış olup hala popüler olarak dağıtılmakta ( örneğin Adobe Acrobat). Ayrıca size ilginç gelecek ama MATLAB programlama dilinin arayüzünün tamamı, ve hesaplama konusunda kullanılan core modüllerinin bir kısmı da yine Java ile yazılmıştır. Oracle Corporation’a göre, “Blu-ray Disk Oynatıcıların %100’ü ve 125 milyon TV cihazı Java kullanıyor”.[2]

Hepsinden daha önemlisi . Hadoop, Spark, Kafka, ElasticSearch ve Cassandra tamamiyle Java ile yazılan ve dünyada en çok kullanılan frameworkler. Yani Java sadece teknolojiyi takip etmiyor, ayrıca teknoloji de yaratıyor.

Neden Yine Öldürdüler?

Bunu tamamiyle eski kafa ile düşünen insanların söylediğini belirtmeliyim. Hala Java 8 kullanılmakta. Kullanılan Java 8 için ise Oracle JDK’nın Java 8 desteğinin bitmesiyle beraber güncellenmiyor oluşu pek çok sistemde kritik açığa sebep verdi. Bu açığı kapatabilmek için iki çözüm var: ya daha az kararlı sayılabilecek OpenJDK’yı kullanmak veya Oracle’dan son sürüm bir Java için lisans almak. Java’da Java 8’den Java 9’a Java 11’e veya daha yüksek bir sürüme geçmek sanıldığı kadar sorun teşkil eden bir süreç değil (en azından Python 2’den Python 3’e olan bir göç gibi değil.). Kritik sistemler ve değiştirilmesi ARGE sürecinin uzun olacağı için zor olacak (daha önceki söylediğim uçuş simulasyon ve kontrol yazılımları gibi) sistemlerde çoktan bu iki seçenekten birisi yapıldı.

Ancak Java’nın bir durumu sektörde şöyle bir şey de yarattı. Java her alanda kullanılan genel bir dil iken lisans değişimi ile ya açık kaynak destek verip kendi JDK’mızı kendimiz build etmemiz lazım veya Oracle’ye para kazandırmamız lazım diye düşünen (Google gibi) büyük şirketler kendi dillerini geliştirmeye koyuldular. Bu lisans değişiminin ardından geliştirmesine ağırlık verilen Golang bir backend dili olarak gelişerek backendde Java’nın yerini aldı, Dart ise mobilde bunu yapmaya aday.

Bir diğer tarafta C ve C++’a ek olarak Microsoft kendi dillerini olabildiğine temizlemeye ve diğer işletim sistemlerine destek vermeye uğraştı. 2018 öncesinde de C# geliştirmiş olan geliştiriciler rahatlıkla söylebilir ki Microsoft AWT tarafında Java’yı kırmak için Win Forms yapısını düzgünce dokümanlayarak düzenledi. Ayrıca yine benzeri bir çıkış yolu ile dotNet’in core sistemini tamamen açık kaynak olarak Github üzerinden yayınladı.[3]

Bir başka nokta ise yine Java’nın yükselmesini sağlayan bir şey. Hatırlarsanız Java’nın yükseldiği dönemlerde yetersiz donanımlar sebebiyle programlama yapan insanlar olabildiğince build süresi ve kaynak kullanımı olarak optimize bir dil ararlarken, Java gelip JVM aracılığı ile bu aralığa oturmuştu. Şu anki teknolojide, özellikle büyük veri modellemesi gibi alanlarda, betik bazlı diller (Python ve Ruby gibi) kullanımı daha kolay olan diller yükselişte.

Sonuç

Java’nın yazılım geliştirmenin her alanına dokunan “mavi yakalı” bir dil olduğunu kolaylıkla görebiliriz. Java farklı iş ihtiyaçlarına göre kullanılabilir. Bu uygulamalarla gerçek dünyada Java’ya olan ihtiyacı bir dil değişimi ile gerçekleştirilemeyeceği de aşikar.

Güvenli ve ölçeklenebilir bir uygulama geliştirmemiz gerektiğinde, baskın güvenlik özelliklerine sahip olduğu için Java’yı tercih etmek ticari kuruluşlar için daha mantıklı gelmekte. Bu nedenle, çok sayıda güvenlik kaygısı gerektiren birçok bankacılık uygulamasının tercihen Java’da geliştirilmesinin nedeni budur.

Birçok teknoloji ve programlama dili gelişiyor. Java’nın popülaritesinin bu gelişim içerisinde düşmesi gayet normal gelebilir ancak Java’nın popülaritesi özellikle Java’nın yeni özelliklerini kullanabilen kuruluşlar ve projeler için hala aynı.