Java Berbattır

August 1, 2010

Arama motorlarında “XXX Sucks” diye arattığınızda bir sürü şey bulursunuz. C# Sucks, PHP Sucks, Java Sucks, Windows Sucks, Linux Sucks, Obama Sucks şeklinde bu liste uzayıp gider… Her dille ilgili bu kalıpta yazılar bulabilirsiniz. Aslında bu yazı benim neden Web üzerinde Java’yı tercih ettiğimin hikayesi ve çevremde birçok insanın söylediği “Java Berbattır” ifadesinin bir cevap niteliğindedir. Java ile ilgili şehir efsanalerine bir tarafsız bir bakış olmasını hedeflemekteyim.

Çevremdeki insanlardan duyduğum şehir efsaneleri;

  1. Java yavaştır.
  2. Java karmaşıktır.
  3. Java ticaridir.
  4. Uygulama geliştirmek zordur.
  5. Java çevik değildir.
  6. Java web için uygun değildir.
  7. Java platformunda proje geliştirmek uzun sürer.

Avantajları;

  1. Açık kaynaktır.
  2. Kurumsal destek.
  3. Yazılım mimarisi çözümleri
  4. Geniş ekosistem
  5. Güçlü araç ve teknolojiler
  6. Her platformda sorunsuz çalışma.
  7. Saygınlık
  8. Dolgun maaş.
  9. Performans ve Güvenlik
  10. Dökümantasyon ve Standartlar
  11. Ekonomik kaynak tüketimi
  12. Nesne yönelimli bir dildir.
  13. Sanal makine mimarisi

Dezavantajları;

  1. Terminoloji karmaşası.
  2. Çok tanrılı dinler gibi her kafadan ses çıktığı için gelişimi yavaştır!
  3. Öğrenmesi zordur!

Java Yavaştır Efsanesi: Java yavaştır algısı çıktığı yıllarda C++ ile kıyaslanmasından ve Swing GUI çatısından kaynaklanmaktadır. Web dünyası için en performanslı dillerden biridir. Şuradan Java’nın PHP ve diğer dillerle olan benchmark testlerini inceleyebilirsiniz.

Java Karmaşıktır Efsanesi: Java aslında karmaşık değil esnek bir mimarisi bulunmaktadır. Bu PHP gibi bir alana yönelik bir dil değilde birçok alanda kullanılmasından kaynaklanmaktadır. Doğru bir web çatısına sahip değilseniz Ruby’de karmaşık bir Web dili olabilmektedir. Fakat Rails ile bu sorun aşıldığı gözlenmiş ve Ruby son yılların popüler dillerinden biri haline gelmiştir. Böyle bir algı oluşmasının diğer bir sebebide Java üzerinden çok fazla terminoloji ve alternatif teknoloji olmasından kaynaklanmaktadır. Her bir alternatifin kendine has config tanımlarının olması yeni öğrenenleri zorlamaktadır. İşin sırası doğru yapıldığında Java’nın çalışma mantığı kolaylıkla yerli yerine oturacaktır.

Java Ticaridir Efsanesi: Açık kaynak camiadan birçok arkadaşım Java’yı kapalı kaynak olduğu için sevmiyordu. Sun firması Java’nın kaynak kodlarını açmadan önce bile Java diliyle birçok açık kaynak proje yazılmış ve bu araçların bir çoğu diğer dillere örnek oluşturmuştur. Sun Java’nın kaynak kodlarını açtıktan sonra ise JVM üzerinde çalışan bir sürü dil ortaya çıkmıştır. (Scala, Groovy, Clojure, vb..)

Java Web için uygun değildir Efsanesi: Bu algının sebebi de sanırım betik diller gibi yaz çalıştır şeklinde ilerlenememesidir. Java’da kaynak kod ara koda çevrilmeden web sunucusu üzerinde bir betik dili gibi çalışmaz. Bunun production sunucu üzerinde geliştirme yapılabilme durumunu göz önünde bulundurursak iyi birşeydir ama geliştirme süresini uzatır. Bunun için Java üzerinde çeşitli araçlar bulunmaktadır. Bunlardan en çok bilineni ise JRebel‘dir.

Java üzerinde uygulama geliştirmek uzun sürer Efsanesi: Java üzerinde proje başlatmak bazı konfigürasyonları en başında sağlamak gerektiği için uzun sürdüğü doğrudur. Bu sorun dille değil, doğru bir web çatısı ve IDE seçmekle çözüme kavuşabilir. Java platformunda koşan ve Scala diliyle yazılan Lift web çatısı ile Groovy diliyle yazılan Grails web çatısı güzel örnek teşkil eder. (Not: Maalesef Java IDE’leri halen istenilen şartlarda değildir.)

Avantajları;

  1. Açık Kaynaktır: Java'nın kaynak kodları açıktır. Apache, Jboss gibi kar amacı yazılım toplulukları pahalı olan yazılım geliştirme araçlarını ücretsiz sunmaktadır.
  2. Kurumsal Destek: Java'nın arkasında dünyanın en büyük şirketlerinin olduğu bir konsorsiyum bulunmaktadır. IBM, Oracle, SAP ilk aklıma gelen şirketlerden.
  3. Yazılım Mimarisi Çözümleri: Java mimarların aracıdır. Yazılım mimarisi kitaplarında genelde örnek kodlar javadır. Birçok yazılım mimarisi tasarımları Java mimarlarına aittir. Diğer hiçbir dilde bu konular bu derece dikkate alınmaz.
  4. Geniş Ekosistem: Java'da Apache, Jboss, Eclipse, SpringSource, CodeHaus gibi çok büyük topluluklar bulunmaktadır. Ve bu topluluklar her gün yeni java projelerini bünyelerine katmaktadır.
  5. Güçlü Araç ve Teknolojiler: Java üzerinde her türlü ihtiyaç için uygulama geliştirilmiştir. Aynı ihtiyaç ile ilgili olarak birden fazla alternatif olması, rekabeti beraberinde getirir. Rekabette kaliteyi doğurur. Java ile ilgili uygulamaları Java-Source sitesinden inceleyebilirsiniz.
  6. Her Platformda Sorunsuz Çalışma: Java'nın en güzel yanlarından biride istediğim işletim sistemi üzerinde sorunsuz çalışabilmesidir. Windows yada MacOS üzerinde yazdığınız uygulamanız, düşük maliyetli yüksek performanslı ve güvenlikli Linux sunucularında barındırmanız mümkündür. Aynı zamanda geniş bir kullanım alanı olduğu için ERP veya Web uygulaması geliştirmekten tutunda Robotik konusunda bile etkilidir.
  7. Saygınlık: Java ile uygulama geliştirmek biraz daha zahmetli göründüğünden diğer developerlar tarafından saygı görür. Java teknolojilerini kullanan şirketler genelde büyük kuruluşlardır.
  8. Dolgun Maaş: Java developerları diğer developerlardan daha fazla ücret alırlar.

  9. Performans ve Güvenlik: Java web üzerinde bir çok dilden daha performanslı çalışır. Bu sebeple birçok betik dilin Java sanal makinesinde çalışan sürümleri yazılmıştır. (jRuby, JPython gibi)
  10. Dökümantasyon ve Standartlar: Java diğer dillere nazaran en iyi standartları oluşturulmıuş ve dökümante edilmiş dilidir. Çok sayıda kaynak kitap bulabilirsiniz.
  11. Ekonomik Kaynak Tüketimi: Java ile sunucu maliyetleriniz ve lisans giderleriniz minimuma düşer. Çünkü pahalı ticari çözümleri kadar iyi sonuçları alabileceğiniz, açık kaynak çözümler kullanabilirsiniz.
  12. Nesne yönelimli bir dildir: Her ne kadar "Pure OOPL" yani herşeyiyle nesne yönelimli bir dil olmasada, java nesne yönelimli bir dildir. Ve özellikle JDK5'ten sonra çok güçlü bir hale gelmiştir.
  13. Sanal makine mimarisi: Kodun taşınabilirliğini düşünmeden yani platform bağımsız kod yazmanızı sağladığı gibi, performans sorunu yaşayanan ama çevik uygulama geliştiren diller içinde bir çözüm oluşturmaktadır. Bu dillerin derleyicileri JVM üzerinden çalışacak şekilde yeniden yazılmıştır.

Dezavantajları;

  1. Terminoloji karmaşası: Java'nın alana özel değilde genel ve kurumsal bir dil olması nedeniyle birçok probleme çözümler geliştirmiş ve bunları Java EE çatısı altında toplamıştır. Bunların öğrenilme süreci yeni başlayanlar için sorun olabilmektedir.
  2. Çok tanrılı dinler gibi her kafadan ses çıktığı için gelişimi yavaştır! Java'nın arkasında Oracle, IBM gibi devlerden oluşan bir topluluk olduğunu söylemiştik. Çok fazla sahibi olduğu için hızlı bir şekilde dile yeni özellikler dahil edilememektedir.
  3. Öğrenmesi zordur! Maalesef diğer dillere kıyasla Java'nın öğrenme süreci biraz daha uzun sürer. Bana sorarsanız bunun sebebi dilin kendisinden ziyade alternatif  IDE ve araçların fazla olması ve hepsine uyumlu çalışması için bu araçların esnek olması ve yeni başlayan geliştiricinin bu araçlar için konfigürasyon ayarlarını kendi yapmak zorunda olması.