Thursday, October 11, 2012

Yeni Java'ciya Tavsiyeler

Geçenlerde otobüsde tanıştığım Adem isimli Bilgisayar Mühendisliği 3. sınıf üniversite öğrencisi bir arkadaşım Java'da kendini geliştirmek istediğini ancak nasıl ilerlemesi gerektiğini bilmediğini söyledi. Biraz sohbet ettikten sonra mail adresimi verip kafasına takılan soruları iletebileceğini söyledim. Bu sorunlar, kafa karışıklıkları bana hiç yabancı gelmedi. Üniversitedeyken Java'cı olacam diye karar verip biraz Java öğrendiğimi düşündükten sonra ne nasıl ilerlemem gerektiğini bilemiyordum. İş hayatına girince doğaçlama ilerledim. Ancak o zamanlar birinin çıkıp da bana akıl vermesi çok iyi olurdu.

Bugün bana yazdığı maile cevap verebildim. Uzun uzun yazmaya çalıştım. O maili paylaşacağım. Şu anda paylaşmazsan muhtemelen uzun bir zaman fırsat bulamayacağım için yazının üzerinden geçemedim. Bazı dil bilgisi hataları vs. olabilir.

Java'da belli bir aşamayı geçtiysen artık biraz daha genişletebilirsin bilgilerini.
Ama bence Java'da aşağıdaki konuları bilmiyorsan kesinlikle öğrenmelisin.
Ve en önemlisi OOP (Object Oriented Programming) prensiplerini öğrenmelisin, anlamalısın, yutmalısın.

1. Java Name Convention nedir? Java'da kod yazarken uyulması gereken kurallar. (Sınıf ismi büyük harfle başlamalıdır gibi)
2. Java Collections
- ArrayList, Vector farkı nedir?
- Map, Set, List, Tree interfaceleri ve bunları extend eden birkaç sınıfı öğrenmelisin)
3. Java Generics
- Generic metodlar, generic sınıflar yazabilmeli bu syntaxa alışmalısın
4. Servlet mantığını öğrenmelisin.
- Servlet nasıl çalışır, web.xml nedir web uygulamalarında ne işe yarar?
- Basit bir web uygulaması ile bir servlet'e istek yapıp cevap alacak bir uygulama yazabilirsin

Sanırım buraya kadar bilmediğin şeyler vardır. Bundan sonrası için bence aşağıdaki gruplardan her birisi için en az bir tanesini öğrenmelisin. Türkiye'de sadece java biliyorum diye sıradan bir işe girebilirsin. Ancak devamında senden aşağıda bahsettiğim teknolojileri de öğrenmeni beklerler. Bence de öğrenmelisin.
Ancak mezun olmadan bunları bilmen senin için çok büyük avantaj olur.
Ayrıca geliştirme için linux ortamını kullanmanı tavsiye ederim.
Windows'da her türlü yaparsın zaten :)

Öncelikle bir IDE'ye ihtiyacın olacak. Eclipse kullanmanı öneririm.

1. Application Server
Tomcat'de uygulama nasıl deploy edilir. Tomcat nasıl kurulur.
2. web 3.0 vs web 2.0 farkı nedir?
3. MVC nedir? Ne işe yarar? Ne avantajları vardır ki kullanıyoruz. MVC mantığını öğrenmen gerekir. (Mesela Struts mvc patternini uygulayan bir web frameworküdür.)
4. Sql bilgin iyi değilse sql syntax'ını öğrenmen gerekir. T-SQL standarttır tüm sql sunucularda çalışır (Oracle, MSSQL, Mysql vs.)
5. Mysql nasıl kurulur. Nasıl db açılır. Tablo eklenir. (Mysql ücretsiz olduğu için mysql diyorum.) SquirrelSqlClient kullanabilirsin arayüz için.
Ya da gözünü karartıp linux terminalden de işlemlerini yapabilirsin :)
6. Maven nedir? Ne işe yarar? Neden ihtiyaç duyulmuştur? Maven life cycle'lar nelerdir? Basit bir uygulamayı maven ile derlemen(compile) yeterli olur.
7. ORM nedir? Neden ihtiyaç duyulmuştur? Mimarisi, mantığı nedir?
8. ORM frameworkü olan hibernate nasıl kullanılır? Hibernate kullanarak basit bir uygulama ile bir java sınıfını hiç sql yazmadan! db'ye nasıl kaydedebilirsin mesela :)
9. Dependecy Injection ve Inversion of Control nedir? Bu kısım biraz karışık, tanımlara aşina olman biraz zaman alacaktır.
10. 9 nolu adımdan sonra Spring framework nedir? Ne işe yarar? Basit bir uygulama yazarak Spring ile bir sınıfı new keywordü kullanmadan nasıl çağırabilirsin!
11. Unit test nedir? Neden yazılmalıdır? Junit ile basit bir metoda test yazıp testi çalıştırabilirsin?
12. 11. adımdan sonra JMockit veya benzeri mock kütüphaneleri ne işe yarar? Test'deki yeri nedir? Bu noktada Dependency Injection'in testlere katkısını öğreneceksin.
13. Design Patterns'lara bakabilirsin. Basit birkaç tanesini öğrenebilirsin. Singleton, Strategy, Adapter mesela.

Bayağı birşey yazdım. Ama unutma ki bu uzun bir yol gözün korkmasın. Dikkat ettiysen çoğuna basit birşey yaz, mantığını anla geç dedim.
Birkaç ayda öğreneceğin şeyler de değil bunlar o yüzden telaşlanma zamana yay. 1 yıl, 2 yıl süre biç.
Ve hiçbir zaman soru sormaktan çekinme. Bilmediğimi düşünürlerse diye birşey asla düşünme. Öğrenmek bilmediğini kabul etmek ve sormak ile başlar.