Arşivler

Java’yı Nasıl Öğrendim?

blank

10312629_10152490043223938_6432979453490371210_n

Bu yazıya başlamadan önce Bir Yazılımcı Nereden Başlamalı adlı yazımı okumanızı öneririm. 

En çok sorulan soruya detaylıca cevap vermek için bu yazıyı yazma gereği duydum.

Java Programlama Dili’ni keşfetmek öğrenmek isteyenlere yol gösterici olması açısından, kendi deneyimlerimi aktararak yardımcı olmaya çalışacağım.

Java’ya Hazırlık

Öncelikle bilmeniz gereken Algoritma’dır. Algoritma biliyorsanız diğer başlıklara geçebilirsiniz. Algoritma sadece Java’nın değil tüm programlama dillerinin temelini oluşturmaktadır. Algoritma kurma yeteneği ne kadar gelişmişse problem çözme yeteneği ve bu poblemi ortadan kaldırıcı yazılımlar yapma işlemi kolaylaşır ve kaliteleşmeye başlar. Algoritmanın yanında matematik, analiz de önemlidir. Matematiğin önemi yazılama yeni adım atan ve “amatör” olarak adlandırılanlar için ilk başta bir şey ifade etmeyebilir ancak ileri seviye programlamalarda katkısı oldukça yüksektir.

Java’ya Merhaba

Java hakkında bilgi edinmem gerekiyordu. Bu bilgi Java’nın kullanım alanları, nasıl bir yapıda olduğu yani kısaca Java’nın ne olduğunu öğrendim. Öğrenmem gerekiyordu çünkü kendimi yenilemem gerekiyordu. O meşhur soruyu bende sordum. “Java öğreneceğim hangi kitabı tavsiye edersiniz?” herkes kendi kitabını söyledi, yorumlar yorum üstüne iyice kafam karıştı. Kendi öğrenme şeklime uygun bir kitap olmalıydı. Öğrenirken daha çok pratik yapabileceğim. Bir ünite hakkında temel bilgileri verdikten sonra detaylıca bol örnekli bir kitap olmasını istedim. Çeviri olmamasına dikkat ettim. Çeviri kitap istemememin sebebi başka kitaplarda yaşadığım talihsizlikler yüzünden. Öğrenme aşamasında eksik yanlış çeviri yüzünden hata yapmak istemezdim. Kendime göre en uygun kitap Kim Korkar Java‘dan oldu. Çok ama çok güzel şekilde anlatılmış ve bol örnek olması pratiğimin gelişmesine katkı sağladı.

Java’da Pratikleşmek

Mantığını ve temel Java’yı öğrendikten sonra bir proje yaparak deneyim sağlamaya başladım. Bir Swing projesi olacaktı. Bu Swing projesinde herhangi bir veriyi veritabanına kaydetmek, silmek güncelleme işlemlerini öğreneceğim gibi Swing uygulaması ile Desktop App’a adım atarak Java’nın derinlerine girmeye başladım. Bu aşamada herhangi bir kitap almadım. Swing gelip geçici bir hevesti Java’yı öğrenmek için basit bir adım. OOP ye  yönelmeden veritabanı işlemlerini kullanabileceğim fonksiyonlar oluşturarak pratiğimi tamamladığımı düşündüm.

Java OOP

Nesneye yönelimli programlama bilmek şart, profesyonel bir biçimde çalışmanın şartı. Bu mantığı anlamak adına Swing ile yaptığım uygulamayı OOP olarak yapmaya başladım. İnternetten bulduğum yerli ve yabancı kaynaklı yazıları buldum örnekleri inceledim. İncelediğim örnekleri kendi projeme nasıl uyarlayabilirim oldukça dikkatli davranarak yapmaya çalıştım. Bu arada bilmediğim takıldığım yerleri sorma ihtiyacında ise sosyal kanallardan dilediğim cevaplarıda aldım. Bu anlamda sosyal medya’da ki yeriniz de çok önemli yazılım camiasında az da olsa nazım geçtiği için sorularıma cevap bulabildim. Çok pratik yaptım bu aşamada özellikle birden fazla uygulama geliştirmeye çalıştım. Hala deneyim açısından aklıma geldikçe bazı kodlar yazmaya çalışırım. Bu noktayı iyi kavramak Java’da herşeyi kolaylaştırıyor.

 Java Denizi

Hatta okyanus demeyelim. Pratiğimi arttırdıkça neler yapabilirim diye düşünmeye Java Teknolojilerinde kendime en uygun dalın ne olduğunu araştırmaya başladım. Java’nın eşsiz dünyasında kendime yer kapmak oldukça zor oldu. Java Teknolojilerinin ne olduğunu anlamam neden bu kadar çok kavram olduğunu öğrenmem de çileli oldu.  JavaSE , J2ME, Java EE, JSF, JSP, JDBC gibi daha bir çok kavramı hazmetmem zaman aldı diyebilirim.  Java öyle bir dil ki her ihtiyaça bir çözümü var ve o yüzden bu kadar derya deniz. Ayrıca açık kaynak olması Java kullanan milyonlarca insanın Java Dünyasına katkı sağlama isteği oldukça büyüyen, büyüdükçe de durmayan bir dünya.

Bu dünyanın içine girdikçe Türkçe kaynak gitgide azaldı. İngilizce’nin önemi ortaya çıktı. Belli bir yere kadar Türkçe kaynak bulabildim ancak ilerisinde hep ingilizce kaynaklara yöneldim ve sorularımı ingilizce olarak yöneltmek durumunda kaldım.

Java Teknolojilerinde Web teknolojisini seçtim. Bir Türkçe kaynak aldım. Sadece bir sayfasına baktım ve o kitabı daha da açmadım. (Kitabın ismini sormayınız.) İnternetteki kaynaklardan yola çıkarak yine bir proje yaparak Java Web Teknolojilerine adımımı attım. Deneyim kazanmaya başladıkça daha çok kaynak ihtiyacı hissettim ve ingilizce bir kaynak aldım. Bu kaynağı yaladım yuttum diyebilirim. Örneklerini adım adım yaparak, bakmadan yaparak ve adım adım çalışmasını izleyerek öğrendim okudum.

Web teknolojisi derken nelerden bahsettiğimi biliyorsunuz zaten. Java Server Pages ve Java Server Faces ve Servlet’ten bahsediyorum hatta PrimeFaces’dan . İlk öğrenme sürecim JSP ile başladı. JSP’den sonra Servlet’ler ile çalıştım. Servlet’ler de çok oyalandım diyebilirim. Ardından JSF çalışmalarına başladım. Ve olmazsa olmaz Hibernate ile ilgilenmek durumunda kaldım.

Java Açık Kaynak Felsefesi

Java ya da herhangi bir programlama dili elbet öğrenilir ancak Java’nın bana en büyük katkısı paylaşma isteğimi daha çok artmasına katkı sağladı diyebilirim.

Java Dünyası’na girdikten sonra beni heyecanlandıran güzelliklere denk geldim. O da adını hep duyduğum ama tam olarak ne olduğu hakkında tam bir fikrim olmadığı “Açık Kaynak Felsefesi” oldu. Topluluklar ihtiyaçlarına göre kütüphanelerin geliştirildiği, ihtiyacın olduğu anda kendi projenize dahil edebildiğiniz gibi kullanım amacınıza yönelik değiştirebileceğiniz bir felsefe ile karşılaştım. Bu felsefe ile paylaşmanın önemini de gittikçe kavradım. Paylaşmak bilginin çığ gibi büyümesine bilgi havuzundan içtikçe doymanızı sağlayan bir şey olduğunu Java ile fark ettim diyebilirim.

Uzun Lafın Kısası

Uzun lafın kısası aslında çok çalışmak, bıkmadan hemde. Severek çalışmanında etkisi çok büyük. Programlama dili öğrenmek kolay iş. İlerisinde deneyim kazanmak ve kendini ispatlamak en zor olanı. Bu zor olanı başarmak için çok okumak, her bilgiyi öğrenme isteği yani merak etmekte çok büyük etken.  Algoritma yeteneğiniz varsa öğrenilmeyecek bir programlama dili yok. Kendinize asıl sormanız gereken soru aslında herhangi dili öğrenirken yeteri kadar sabrınız var mı? Takıldığınız konularda sabırla çözmeye çalışmak, sorularınıza cevap bulamadığınızda sinirlenmek yerine sabredip öğrenmeye çalışmak.

Java Teknolojilerinde  hala öğrenmeye, bu adımları tekrar ederek kendimi geliştirmeye devam etmekteyim/edeceğim. Öğrenmenin sonu yok hele yazılımcıysanız.