Sanırım nesne yönelimli programlama meselesine fazlaca yer ayırdık (elbette daha da derine inilebilirdi ama konumuz tam olarak bu değil). Artık Java’ya geri dönelim. Yazının başlarında da belirttiğimiz üzere Java’nın gelişimi Web devrimi ile aynı döneme denk geldiği için Java, internet gibi bir ağ yapısı gözetilerek geliştirildi. Java ile bilgisayarlardan daha çok ağ üzerinde çalışacak yazılımlar geliştirmek için tasarlanmıştır. Bu elbette tek bir bilgisayarda çalışacak yazılımlar geliştiremeyeceğiniz anlamına gelmez. Java ile http, https yordamlarını kullanabilir, web hizmetleri (web service) oluşturabilir, uzak nesneler geliştirebilir ve telnet, ftp vs. gibi çok kullanılan yordamlardan yararlanabilirsiniz.
Java’nın platform bağımsız olabilmesinin nedeni doğrudan makine diline derlenmemesidir. Fakat bu Java’nın derlenmediği anlamına gelmez. Java kaynak kodları sadece Java Sanal Makinesinin-JSM (Java Virtual Machine-JVM) yorumlayabileceği bitkodlarına (bytecode) derlenirler. Bitkodları işlemci seçmezler. Her platform için bir ya da birden fazla yorumlayıcı olduğundan siz Java ile yazılım geliştirirken hangi platformda ya da işlemcide çalışacağınızı önceden bilmeniz gerekmez. Kaynak kodunuzu o platforma özel yorumlayıcıya göre derlemeniz yeterli olur. Böylece her ortamda rahatça çalışabilen bir yazılım edinmiş olursunuz. Java, yazılımcıya verdiği bu kolaylığı “Bir Kez Yaz, Her Yerde Çalıştır” (Write Once, Run Anywhere –WORA) olarak isimlendirir. Türkçesinin kısaltması WORA kadar havalı olmuyor J. Elbette bunun için yazılımda o platforma özel herhangi bir işlem olmaması gerekir ki zaten böylesi işlem içeren bir yazılım geliştiriliyorsa başka bir platformda çalışması düşünülmüyor demektir.
Java, sağlamlık ve dayanıklılık üzerine kurulmuş bir dildir. Sağlamlığını çalışma ortamının (runtime) güvenirliğinden alırken dayanıklılığını ise tip uyumunu sürekli kontrol etmesinden, beklenmedik durumları başarıyla idare edebilmesinden (exception handling), hafıza kontrolünü kendisinin üstlenmesinden ve daha bunun gibi birçok hata engelleyici sistemden alır. Bunun yanında güvenliği ön planda tutan bir dildir, daha önceden de bahsedildiği gibi Java ağ ortamı göz önüne alınarak tasarlanmıştır. Bu yüzden doğasında, ağ ortamındaki tehlikelere karşı bir nevi bağışıklık yaratan güvenlik önlemleri barındırmaktadır. Tanınmayan makinelerden, yerel makinelere gelen erişim istekleri kontrol altında tutulur. Bu yüzden Java sayısal imza uygulamalarından şifrelemeye kadar birçok alanda tercih edilmektedir.
Bahsettiğimiz tüm bu güzel özelliklerinin eksi getirisi Java’nın çalışma ortamının diğerlerine göre daha yavaş olmasıdır. Java, zaman içinde bu konu üzerine eğilmiş, çalışmayı hızlandırmak için derleyicisini daha iyi bir duruma getirmiş, bunun yanında JSM, JIT ve HotSpot gibi teknolojilerini iyileştirmiştir. Fakat tüm bunların yanında Java’nın yazılımcılar açısından bir diğer gerçeği daha fazla bilgi gerektirmesidir. Yazılımcılar Java’yla yazılım geliştirirken hız ve bellek tüketimi konusunda diğerlerine oranla daha fazla bilgi sahibi olmak durumundadırlar. Bu bir zorluk olarak görülse de, Java’yla geliştirilen yazılımların daha sağlam olmasının bir başka nedenidir.
Günümüzde işlemcilerin hemen hepsi çoklu işlem desteğiyle gelmekte (multi thread), elbette bu özelliğin kullanıcı açısından işe yaraması yazılımların çoklu işlem desteğinin olmasıyla mümkün. Java çoklu kanal desteğiyle git gide artan işlemci güçlerini tam olarak kullanabilme yetisine sahip bir dildir. Çoklu kanal adı verilen kavram bir işlem içinde birden fazla hafif işlem çalıştırabilme yetisini ifade eder. Aynı işlem içinde çalışan kanallar isteklere daha hızlı yanıt verebilir, böylece yazılım başarımı üst düzeye çıkar.
JSM tarafından yorumlanmaya hazır dosyalar olan .class dosyalarındaki Java tipleri yazılım çalışırken hazır tutulmak zorunda değildirler. Yazılım çalışırken herhangi biri, herhangi bir anda yüklenebilir. Bu özellik java yazılımları derlenirken sabit bağlantı kurma (static linking) gerekliliğini ortadan kaldırmakta ve elbette daha dinamik bir çalışma ortamı yaratmaktadır. Bu sayede derlemede ulaşılması mümkün olmayan nesnelere çalışma ortamında erişilip dinamik olarak JSM’ye yüklenebilir.
Makalenin kısa bir özetini yapmak gerekirse Java, çok güçlü ve ağ üzerinde çalışacak yazılımlar geliştirmek için iyileştirilmiş bir sistemdir. Bu dil, doğasından gelen birçok özellik sayesinde sağlamlık ve dayanıklılık gibi tercih edilesi özelliklere sahiptir ve bu yüzden özellikle güvenliğin ön planda olduğu işlerde sıklıkla tercih edilir. Java’yla yazılım geliştirmeyi öğrenmek ataları C ve C++’a göre daha kolay olsa da güncel birçok yazılım dilinden kolay değildir. Bunun en önemli sebebi Java’nın bir standartlar bütünü olmasından dolayı iyi yazılım için bu standartlara hakim olmanın gerekmesi ve diğer yazılım dillerine göre daha bilgili geliştiricilere ihtiyaç duymasıdır. Java kimsenin tekelinde değildir. Bu yüzden de özgür yazılım geliştiricilerinin tercihleri arasında üst sıralarda yer alır. Yine bu yüzden java ile yazılım geliştirmek daha şeffaf bir platformda yazılım yapmak anlamına gelir ki bu kullanıcı açısından da önemli bir ölçüttür. Java, platform bağımsız olması dolayısıyla bir KIOSK’tan bir POS cihazına kadar türlü platformlarda çalışabilir bir yapıdadır.
Bu kadar övdüğümüz Java hakkında bilginizi kanıtlamak için birçok sertifika var. Öncelikle almanız gereken sertifika OCP (Oracle Certified Associate), Java Programmer sertifikasıdır. Bu sertifikayı almadan diğerlerini almanız mümkün değil. Bu sertifikayı almaya hak kazandıktan sonra diğer birçok sertifika programında eğitim alabilir ve kendinizi geliştirebilirsiniz. Ayrıntılı bilgi şuradan alınabilir. Elbette OCP, Java Programmer sertifikasını Bilginç bünyesindeki yetkin eğiticilerimizin yardımıyla alabilirsiniz.