Java’ya Nasıl Başlarım? Java’yı Nasıl Öğrenirim? – I

Çok sıklıkla “Java’ya nasıl başlarım” ya da “Java’da nasıl uzmanlaşırım” gibi emailler alıyorum. Sanırım biraz daha derli toplu bir şekilde bu soruya cevap vermek gerekli. Bu ve takip eden bir kaç yazıda bunu ele almaya çalışacağım.

Öncelikle Java’da bilgilenmenin, yüzeysel olarak, sadece örneklere bakıp, onları çalıştırarak bir kanı edinmek şeklinde değil de, sistematik olarak, en temelinden başlayarak, sağlıklı bir anlama düzeyinde gitmesi gerekli ki öncesinde “öğrenmek” sonrasında da “uzman olmak”dan bahsedebilelim. Yoksa çok sık karşılaştığım gibi, EJB ya da JMS gibi detaylı uzmanlık gerektiren ileri konularla uğraşırken, temel konulardaki eksikliklerinizden dolayı sıkıntı çekersiniz.

Java’yı öğrenmekten derken, öncelikle Temel Java’yı yani Java SEyi (Standart Edition) öğrenmeyi kastediyoruz. Java SE ya da Temel Java, “C’yi biliyorum” derken kastettiğiniz en temel programlama diline karşı gelen Java sürümüdür (buradaki sürümden kasıt, “version”a karşılık gelen sürüm değildir, temel Java dili ve ilgili yapılarını içinde barındıran bir pakettir). Java’nın ayrıca, kurumsal uygulamalarda kullanılan örneğin dagıtık transaction yönetimi ya da web arayüzleriyle ilgili bileşenlerini içeren, EE (Enterprise Edition), bir de gömülü (embedded) uygulamalarda kullanılan ME (Micro Edition) isimli iki farklı sürümü daha vardır. Bu iki farklı sürümden hangisini kullanacaksanız kullanın, öncesinde muhakkak Java SEde yetkin hale gelmelisiniz. Dolayısıyla genel olarak “Java’yı bilmek” öncelikle Java SE’yi bilmek demektir.

Sadece Java SE’yi bilmek her zaman yeterli olmayabilir. Çünkü piyasada çalışan yazılımcılar açısından Java’da yetkin olmak genelde Java SE’yi bilmekten daha çok şey bilmek anlamına gelmektedir. Bunun sebebi, kurumsal uygulamaların çoğunlukla bir ya da daha çok Java EE yapısını içinde barındırmasıdır. Örneğin, kurumsal uygulamalar ezici bir oranda, kullanıcılarına Java SEnin parçası olan Swing ile değil de Java EE’nin parçası olan web teknolojileri ile kurgulanmış web arayüzleri üzerinden hizmet vermektedir ve bu yüzden Java EE’nin parçası olan örneğin servlet, JSP ya da JavaServer Faces (JSF) bilmeyi gerekli kılmaktadır.

Öte taraftan gerek SE ve ME gerek ise EE olsun, Java en geniş, açık kaynak kodlu olsun ya da olmasın, üçüncü el (“3rd party” böyle mi çevriliyordu?) bileşenlere ve ürünlere sahip bir dildir. Çünkü Java, standartlar üzerine kurgulanmış ve nesne-merkezli yapısı ile, bileşen tabanlı geliştirme için çok iyi bir eko sistem kurgulamıştır.  Özellikle Java EE’nin standart bileşenlerinden olan örneğin web bileşenlerinin (yani Servlet, JSP ve JSF’in) pek çok üçüncü el alternatifi vardır. Farklı amaçlara yönelik olarak tasarlanıp geliştirilmiş ve Java programcılarına sunulmuş olan bu web çerçeveleri (ya da çatıları, iskeletleri) (framework), farklı tipteki web ihtiyaçları için çözümler sunmaktadırlar. Örneğin, Struts, GWT, Vaadin ya da Spring MVC, üçüncü el web çatılarından sadece bir kaçıdır. Gerek ülkemizde gerek ise dünyada bu üçüncü el çözümler o kadar yoğun kullanılmaktadır ki bazıları alanında ilgili standart çözümden daha çok kullanılır hale gelmişdir. Örneğin 2000’li yıllarında başında Struts, web projelerini, önce MVC (Model-View-Controller) yapısında kurgulamak sonra da web yapılarında ciddi problem olan görsel bileşen (widget), sıra dışı durumlar, uluslararasılaştırma (I18N) vb. pek çok konuyu halletmek amacıyla ortaya çıkmıştı. Struts öyle ilgi gördü ve yaygınlaştı ki, Java EE’nin standart web bileşenlerinin en temeli olan servletlerin ihtiyacını ve kullanımını neredeyse ortadan kaldırdı. Benzer durum, Spring, Hibernate vb. diğer üçüncü el çerçeveler için de söz konusudur. Dolayısıyla Java’da yetkin olmak çoğu zaman Java SE’nin üzerine, bazen standart Java EE’nin bazen de bir takım üçüncü el çerçeveler ve bileşenlerin bilgi ve tecrübesini koymak anlamına gelmektedir.

Zaman zaman, Java’yı yani Java SE’yi bilmeden, doğrudan Java EE’ye giriş yapan kişileri duyuyorum. Böyle bir durum daha çok JSP için geçerli gibi görünüyor; çünkü JSP bir script yapısına sahip olmanın getirdiği özelliklerle, hızlıca öğrenilip ayağa kaldırılabilecek bir bileşen. Hiçbir şekilde sağlıklı olmayan bu doğrudan Java EEye giriş, genç arkadaşlara, Java EEnin diğer bileşenlerine de hızlıca girilebilir izlenimi veriyor. Java EE, yukarıda da ifade ettiğim gibi tamamen Java SE üzerine kurgulanmış bir katmandır, dolayısıyla ancak ciddi bir Java SE bilgisi üzerine bina edilebilir. Java EE, Java SE’den daha geniş ve daha karmaşıktır. Java EE yapılarını çalıştırmak, Java SE’dekiler kadar kolay da değildir; genelde özel yapılara ihtiyaç duyar ki bunlara kab (container), web kabı (web container) ya da EJB (EJB container) gibi, diyoruz.

İletişim protokolleri ya da daha aşağı seviyede, donanıma daha yakın yapıların öne çıktığı projelerde sadece Java SEnin kullanıldığına sık sık şahit oluyorum. Genelde kullanıcı arayüzlerine sahip olmayan bu gibi yapılarda Java EE pek de kullanılmıyor. Bu gibi projelerde yer alana kişiler, Java EE ile ilgili pek fazla bilgi ve tecrübe sahibi olmuyorlar ama Java SE’de çok yetkin oluyorlar ve yoğun olarak da kullanıyorlar. Yurt dışında çok daha fazla sayıda olsalar da ülkemizde de bu şekilde çalışan pek çok yazılım ya da teknoloji evleri mevcut. Dolayısıyla ancak bu gibi ortamlarda sadece Java SE ve ilgili 3. el yapılarda yetkin olmanız yeterlidir.

Bundan sonraki yazılarda, Java SE ve EE’yi öğrenmenin detaylarından bahsedeceğim.

Bol Javalı günleeeerrr 🙂

 

Toplam görüntülenme sayısı: 15740