Java’ya Nasıl Başlarım? Java’yı Nasıl Öğrenirim? – II
Java’yı öğrenmeye bu yazıyla daha önce hızlı bir giriş yaptıktan sonra şimdi de daha detayda, Java SEyi öğrenmenin ne anlama geldiğinden bahsedelim.
Öncelikle, Java’nın, nesne-merkezli, standartlar üzerine kurulmuş, hem derlenen hem de yorumlanan ve sanal bir makina ile başarılan platformdan bağımsız yapısını, kavramsal olarak algılamak lazım. Ben bunu, Java Dersleri sayfasındaki ilk konu olan Java’ya Giriş ile vermeye çalışıyorum. Bu yapıları anlatırken, Java’nın hem nesne yapısı, hem derlenen ve yorumlanan yapısını, dolayısıyla platformdan bağımsız olmasını da sağlayan sanal makina yani JVM (Java Virtual Machine) yapısını ve bytecode kavramını, tamemen en basit araçları kullanarak anlatıyorum. Yani Selam.java ve SelamTest.java kodlarından oluşan ilk Java örneğini, hiç bir IDE kullanmadan, Windows makinada Notepad, CMD kullanarak, MacOS’da ise benzer şekilde TextEdit gibi basit bir editör ve terminal kullanarak ve pek tabi ki javac ve java komutlarıyla derleyip çalıştırıyorum. Bunları yapmadan tabi ki, Java ya da daha doğrusu JDK (Java Development Kit) nereden, makinaya nasıl hızlıca kurulur, kurulum dosyaları nerededir gibi basit konfigürasyon yapılarını da gösteriyorum. Tabi ki güçlü ve şık IDEler kullanarak daha rahat kod geliştireceğiz ama öncelikle, iyi bir Javacı adayının, basit bir editör ile kodunu yazıp, , javac derleyicisi ile derleyip, varsa hatalarını giderip, gerekli class dosyasını üretebilmek ve sonrasında onu da java yorumlayıcısı ile çalıştırabilmesi gereklidir.
Pek çok genç yazılımcının bana sorduğu sorularda çok sık bir şekilde “Eclipse’de kod yazıyorum” gibisinden cümleler geçiyor. Ve çok garip bir şekilde sorununun Eclipse’de nasıl çözüleceğini öğrenmeye çalışıyor. Halbuki sorun, bir Eclipse problemi değil 🙂 Soru, “Eclispe’de kod bloğunu açıp kapamayı nasıl yaparım” değil mesela. Sorunu bir Java problemi, hatta çoğu kez, yukarıda bahsettiğim en temel derleme ve çalıştırma problemi, ama genç arkadaşımız, Eclispe ya da Netbeans bağımlı bir Java algısı geliştirdiği için, elma ile armutu birbirine karıştırıyor ve soruyu yanlış soruyor. Sağlam Javacı ya da herhangi bir dildeki programcı, üzerinde çalıştığı işletim sistemi ne olursa olsun, kullandığı dilin en temel yapılarını, yani derleme ve çalıştırma zamanı yapılarını bilmeli, konfigürasyonunu en temel araçlarla, doğrudan işletim sistemi üzerinde yapabilmeli. Bu yetkinlikleri kendi kendine çalışarak kazanmak zor, dolayısıyla bunlar, ya çok açıklayıcı, kendi kendine öğren (yani tutorial) tarzında bir kitap ya da yayın ile öğrenilmeli ya da bizzat işi iyi bilenin yanına oturup, bir eğitimle öğrenilmelidir.
Sonrasında, İngilizce kitaplarda “nuts and bolts” adı altında geçen ve çoğu zaman yeni öğrenenlere kuru gelen, en temel bilgiler öğrenilmeli. Yani, anahtar kelimeler (keywords ve reserved words), yorumlar (comments), isimlendirme kuralları ve veri tipleri. Veri tipleri derken, Java’da ilkel veri tipleri (primitive data types) ve karmaşık ya da referans tiplerini (complex or reference types) kastediyorum. Bu noktada refenras veri tiplerini detayına girmeden ayırımdan bahsedilip, daha çok, 8 tane olan ilkel veri tipleri ve özellikleri öğrenilmeli. Sonrasında bu tiplerden değişken tanıtma ve tanımlama, aralarındaki tip çevrimleri (casting), Java kaynak kodunun yapısı, ifade (expression), cümle (statement), blok (block) ve kapsam (scope) gibi en temel noktalar da bu sırada ele alınmalıdır. Bu konular, Java Dersleri sayfasında 3. konu olan Java’nın Temelleri altında ele alınmaktadır.
Sonrasında, yukarıda başlanan “nuts and bolts”a operatörler, akış kontrolu ve diziler ile devam edilmelidir. Malum operatörleren kasıt, bir, iki ya da üç tane girdi alıp farklı iplerde sonuç üreten işlemcilerdir. Mantıksal operatörler boolean sonuç üretirler örneğin. Bu gibi konular da yeni öğrenenlere sıkıcı gelebilmektedir çoğu zaman. Bunu aşmanın yolu, sık örnek yapmaktır. Örnekler üzerinde oynayıp, orasını burasını kurcalayarak değiştirip, dilin davranışını görmek hem zevkli hem de öğreticidir. Bu gibi konular, basit ve önemsiz görülüp üstün körü geçilirse, ileride problem çıkarırlar. Örneğin, toplama, cıkarma, çarpma, bölme, ve kalan operatörlerini, zaten biliniyor diye bakmadan geçmek mümkündür. Lakin, böyle bir durumda, Java’da iki tane byte değerin toplamının bir başka byte etmediği, bir int ettiği şaşırtıcı gerçeğini öğrenemeyeceksiniz demektir 🙂
If, if-else, if-else if, while, do-while, switch, break ve continue gibi yapı ve anahtar kelimeleri içeren akış kontrolü de benzer şekilde hızlı da olsa, bol örnekle öğrenilmeli, varsa püf noktaları görülmelidir. Sonrasında ise diziler ele alınabilir. Önce standart , tek boyutlu diziler, sornasında iki ve üç boyutlu diziler öğrenilmelidir. Özellikle iki ve üç boyutlu dizileri, sağlam kafayla, örneğin sabahın erken saatlerinde ele almaktya fayda vardır, yoksa zihniniz su kaynatabilir 🙂
Operatörler, konrol yapıları ve dizileri öğrendikten sonra, bunların birlikte kullanılabileceği güzel uygulamaları yapmak, öğrenilenleri pekiştirir ve prosedürel yapıların sindirilmesini sağlar. Bu amaçla ben, önce en ilkel yolla, girilen bir sayının asal olup olmadığını ve girilen sayıya kadar hangi asalların olduğunu bulan uygulamalar yaptırıyorum. Sonra olayı biraz daha zevkli kılmak ve zekanın ne olduğunu ortaya koymak için mesela girilen bir sayıya kadar olan asal sayıları, Sieve of Eratosthenes algoritmasıyla nasıl bulunacağını açıklayıp, bunu yaptırıyorum katılımcılara. Benzer şekilde Monta Carlo yöntemiyle Pi sayısına nasıl yakınsayacağımızı gösteriyorum. Bu konuları içeren ve nispeten daha genişce bir uygulama olarak Conway’in “Hayat Oyunu” (Game of Life) düşünülebilir. Bu konular, tamamen algoritmik olduklarından, hem bu üç konuyu iyice pişirmeyi sağlıyor hem de nefis bir beyin jimnastiği yapmanıza vesile oluyorlar. İnsan kendini hakikatten programcı gibi hissediyor 🙂
Bu konular, Java Dersleri sayfasında, 4, 5 ve 6 nolu konular olarak ele alınmaktadırlar.
Buraya kadar olan kısımlar, günde 6 saat ders yapılan bir eğitimde, sınıfın seviyesine göre 2 ila 3 günde verilir rahatlıkla.
Sonrasında, Java’nın nesne yapılarına gelir sıra. Buradan sonrası çok daha zevklidir tabi ki. Ama bu kısmı bir sonraki yazı ile ele alalım.
Toplam görüntülenme sayısı: 16869
Kaan Atabey
01 Eylül 2012 @ 12:45
“Türkçe’ye nasıl başlarım? Türkçe’yi nasıl öğrenirim” konulu yazınızı bekliyoruz. En azından onu öğrenmeğe değil de öğrenmeye çalışın.. 🙂
Akin
01 Eylül 2012 @ 21:27
Esprili uyarınız için teşekkür ederim :), haklısınız. Yazılarımı yayınlamadan önce üç-beş defa okuyorum aslında. Buna rağmen gözden kaçıyor işte. Hemen düzelteyim…
Baran
23 Ocak 2013 @ 18:14
Merhaba öncelikle javayla ilgili bi arkadaşımın problemi var nereye yazacağımı bilemedim yanlış yere yazdıysam kusura bakmayın
arkadaşım bilgisayarında hangi .jar dosyasını açıcak olursak böyle bir hata geliyor
‘COULD NOT FİND THE MAİN CLASS
yardımınız bekliyorum lütfen
Akin
24 Ocak 2013 @ 00:16
Bu bir hata degil ki, bir durum bildirimi. Yani calistirmaya calistiginiz jar dosyasinda bir main metoda sahip bir sinif yok. Varsa bile bu manifest dosyasinda belirtilmemis. Durum budur.
Aybuke Buket
13 Mayıs 2014 @ 19:04
Bu konu, gerçekten sizin de üzerinde durduğunuz üzre biz genç yazılımcılar için önem teşkil eden problemlerdendir. Aslında sorun olan Java veya bir başka dilin öğrenilmesi değil o yola başlama ve dile uygun metodlarla ilerleme şeklimizdir. Ben de sık sık bu sorunla karşılaşıp ve yanlış şekilde başlayıp ilerlediğim yanlış yöntemlerden dolayı karşılaştığım en ufak problemi tanımadığım için bana çok büyük gelen ve geri dönen biriydim. Bu tip problemlerle karşılaştığımızda hemen birilerine danışmak yazılımcı kimliğine biraz aykırıdır. Yazılımcı sorunu farklı şekillerde sorgulayıp, en ufak araştırmayı gözden kaçırmayandır bence.
Ben de böyle uzun bir araştırmam ve elle tutulur hiçbir sonuca ulaşamadığım ve birçok kişinin kapısını çaldığım ama ikiden fazla cevap alamadığım bir dönemde sizinle tanıştım. Olumlu/olumsuz diye düşünmeden bana zaman ayırıp cevap verdiğiniz için size teşekkür ederim.
Yazılımcı bildiğini paylaşandır. Siz sorduğum konu hakkında çalışma yapmamış olduğunuz halde beni o kadar güzel yönlendirdiniz ki haftalardır uğraştığım problemi bir günde çözdüm. (biraz da size karşı mahçup olmamak için daha fazla uğraştım. 🙂 )
Uzman bir yazılımcı biz genç yazılımcıların elinden tutandır bence. Sadece isim duyurmak değil mühim olan tenezzül edip olumsuz da olsa bir mesaja zaman ayırıp geri dönebilendir. ( siz biliyorsunuz bu kişinin kim olduğunu 🙂 )
Akın abi’ yi, benim için sadece çok önemli olan bir projede sıkıştığım bir anda yardımıma koşan bir değil, düşünceleriyle de ÖRNEK bir insan ha yazılım konusunda da benim için 1. sırada tabi ki :)) Tekrar tekrar çok teşekkür ederim bana ayırdığınız her saniye için :)) ( size verdiğim sözü de unutmadım bu arada :)) )
Akin
13 Mayıs 2014 @ 22:33
Tesekkur ederim guzel sozlerin icin Aybuke. Insallah sen de senin yolundan gidenlere yardimci olacaksin.