Java Günlüğüm
Yazılım, Java, BT, azıcık felsefe, biraz mizah...
  • Udemy Eğitimleri
  • Temiz Kod
  • Tasarım Kalıpları
  • Hakkımda
  • Arşiv
RSS
29 Nisan 2015

Yeni Dönem Eğitimler

Akin Eğitim ve Seminer

Sevgili Java-severler,

JavaTürk’ün yeni dönem online eğitimleri Mayıs ayında başlayacaktır. Açılacak eğitimler şunlardır:   JavaImage

  • Öğrenciler İçin Java ile Nesne-Merkezli Programlamaya Giriş
  • Java ile Nesne-Merkezli Programlamaya Giriş (Introduction to Object-Oriented Programming with Java)
  • Java ile Nesne-Merkezli ve Fonksiyonel Programlama (Object-Oriented and Functional Programming with Java)
  • Tasarım Kalıpları (Design Patterns)

“Java EE Programlama”  eğitimi de yeni başladı. Hala kayıt olup ilk iki haftanın malzemelerine ulaşıp derse yetişme şansı var.

“Algoritmalar” eğitimiyle ilgili çalışmalar sürüyor, yoğunluktan dolayı biraz zaman aldı, detaylar belli olur olmaz sizinle paylaşacağım arkadaşlar.

Yukarıdaki eğitimlerden “Java ile Nesne-Merkezli ve Fonksiyonel Programlama” ve “Java EE Programlama“nın bitmesi ya da ciddi bir süre ilerlemesiyle bu eğitimlerin workshopları olan “Java SE Workshop” ve “Java EE Workshop” açılacaktır.

Eğitimlerle ilgili ayrıntılı bilgileri, linklerine tıklayarak gideceğiniz sayfalarda bulabilirsiniz. Ayrıca şu anda devam eden eğitimleri alanların değerlendirmelerine de buradan ulaşabilirsiniz.

İlgilenen arkadaşlar bana egitim@javaturk.org adresinden ulaşabilirler.

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

5 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
24 Nisan 2015

Tasarım Kalıpları: – Builder (Oluşturucu) Kalıbı – I

Akin Java, Tasarım Kalıpları, Yazılım Modelleme

Builder, GoF’un nesne yaratma kalıplarından bir diğeridir. Özellikle karmaşık olan nesnelerin oluşturulması için kullanılır. Dilimize “oluşturucu” (ya da daha yakın bir çeviriyle “binacı” ya da “bina eden”) olarak çevrilebilecek olan bu kalıbın amacıyla ilgili GoF’da şu bilgiler bulunmaktadır:

Intent: Separate the construction of a complex object from its representation so that the same construction process can create different representations.

Amaç: Karmaşık bir nesnenin oluşturulmasını, sunumundan ayırın öyle ki aynı oluşturma süreci farklı sunumlar yaratabilsin.

Bazen bir nesneyi yaratmak, basit bir yapılandırıcı çağrısından ziyade bir süreç içinde olur. Böyle durumlarda hem nesne karmaşıktır hem de nesneyi yaratma süreci karmaşıktır. Bu türden nesneleri oluşturmak için gerekli süreç Builder kalıbı olarak modellenebilir. 

Bir nesnenin karmaşık olduğunun en temel göstergesi, çok parametre alan kurucularıdır (constructor): Telescoping constructor anti-pattern. Kurucuya geçilen parametrelerin de oluşturulması gerektiği düşünüldüğünde bu sürecin soyutlanması gerektiği açık hale gelir. Factory Method ve Abstract Factory bu problemi çözmez.  Çünkü J. Bloch’un da Effective Java kitabında söylediği gibi bu iki kalıp ta kurucular gibi büyüme (scale) probemi olan yapılardır.

Aşağıdaki sınıf diyagramını ele alalım örneğin. Bu örnekteki Computer sınıfı, böyle bir örnek için uygun karmaşıklıkta bir sınıftır. Diyagramdan da görüldüğü gibi bu sınıfın 4 tane kurucusu vardır. Bu tipten karmaşık kuruculara sahip olan sınıfların nesnelerini oluşturmanın bir yolu argüman alan kuruculardan hangisini kullanacağınıza karar verip, sırayla, geçilecek argümanları oluşturup sonrasında ise kurucunun istediği sırayla oluşturulan argümanları geçmektir.

ClassDiagram1

Computer nesnesini bu şekilde oluşturan client kod örneği şöyle olabilir:

package org.javaturk.dp.pattern.gof.creational.builder.problem;

import org.javaturk.dp.pattern.gof.creational.builder.CPU;
import org.javaturk.dp.pattern.gof.creational.builder.Display;
import org.javaturk.dp.pattern.gof.creational.builder.GraphicCard;
import org.javaturk.dp.pattern.gof.creational.builder.HardDrive;
import org.javaturk.dp.pattern.gof.creational.builder.Keyboard;
import org.javaturk.dp.pattern.gof.creational.builder.Mouse;
import org.javaturk.dp.pattern.gof.creational.builder.RAM;

public class Test {

	public static void main(String[] args) {
		Test test = new Test();
		
		CPU cpu1 = test.produceCPU();
		RAM ram1 = test.produceRAM();
		HardDrive hd1 = test.produceHardDrive();
		GraphicCard graphicCard1 = test.produceGraphicCard();
		Computer computerWithoutDisplayKeyboardAndMouse = new Computer("computerWithoutDisplayKeyboardAndMouse", cpu1, ram1, hd1, graphicCard1);
		computerWithoutDisplayKeyboardAndMouse.start();
		
		
		CPU cpu2 = test.produceCPU();
		RAM ram2 = test.produceRAM();
		HardDrive hd2 = test.produceHardDrive();
		GraphicCard graphicCard2 = test.produceGraphicCard();
		Display display2 = test.produceDisplay();
		Keyboard keyboard2 = test.produceKeyboard();
		Mouse mouse2 = test.produceMouse();
		Computer computerFull1 = new Computer("computer full", cpu2, ram2, hd2, graphicCard2, display2, keyboard2, mouse2);
		computerFull1.start();
	}

	public CPU produceCPU(){
		return new CPU();
	}
	
	private RAM produceRAM() {
		return new RAM();
	}
	
	public HardDrive produceHardDrive(){
		return new HardDrive();
	}
	
	public GraphicCard produceGraphicCard(){
		return new GraphicCard();
	}
	
	private Display produceDisplay() {
		return new Display();
	}

	private Keyboard produceKeyboard() {
		return new Keyboard();
	}

	private Mouse produceMouse() {
		return new Mouse();
	}
}

Görüldüğü gibi yukarıdaki koddaki Computer nesnelerinin oluşturulması, pek çok parametre alan ve birbirine benzeyen, dolayısıyla ayırt edilmeleri pek de kolay olmayan kurucu çağrılarıyla yapılmaktadır. Bu tip kurucu çağrılarının hataya elverişli olması bu yaklaşımın bir diğer zorlu tarafını oluşturur.

Yukarıdaki yaklaşıma alternatif olarak J. Bloch, kitabında “JavaBean” yaklaşımından bahsetmektedir. JavaBean nesneleri bildiğimiz gibi, argüman almayan kurucu çağrısı ile bol miktarda “set” metodu çağrısıyla oluşturulur. Yani client kodu şöyledir:

...
		Computer computerFull2 = new Computer();
		computerFull2.setName("computer full2");
		CPU cpu3 = test.produceCPU();
		computerFull2.setCpu(cpu3);
		RAM ram3 = test.produceRAM();
		computerFull2.setRam(ram3);
		HardDrive hd3 = test.produceHardDrive();
		computerFull2.setHd(hd3);
		GraphicCard graphicCard3 = test.produceGraphicCard();
		computerFull2.setGraphicCard(graphicCard3);
		Display display3 = test.produceDisplay();
		computerFull2.setDisplay(display3);
		Keyboard keyboard3 = test.produceKeyboard();
		computerFull2.setKeyboard(keyboard3);
		Mouse mouse3 = test.produceMouse();
		computerFull2.setMouse(mouse3);
		computerFull2.start();
...

Yukarıdaki kod parçası, teleskopik kurucu problemini daha zor bir problemle değiştirmektedir: Çok sayıda set metodunun çağrılmasının zorluğu yanında, bu sırada yapılabilecek olan eksik çağrıların Computer nesnesinde sebep olacağı durum problemlerini çözmek ciddi zaman alacaktır. Bu türden nesne oluşturan kodların copy-paste yoluyla pek çok yere dağılacağı da düşünülürse, nasıl bir problemle karşı karşıya kalındığı ortaya çıkar. JavaBean yaklaşımı ayrıca nesnenin durumunu devamlı değiştirilebilir kılmaktadır.

Görüldüğü gibi karmaşık nesnelerin tekrar kullanılabilir şekilde oluşturulmasını sağlayacak bir yaklaşım, yukarıdaki problemleri ortadan kaldıracaktır. Böyle bir yaklaşım Builder kalıbıyla mümkün olabilir. Builder kalıbıyla böyle bir problemin nasıl çözülebileceğini bir sonraki yazıda ele alalım.

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

8 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
23 Nisan 2015

Tasarım Kalıpları: Façade (Ön Yüz) Kalıbı – I

Akin Java, Tasarım Kalıpları, Yazılım Modelleme

GoF’un yapısal kalıplarından bir diğeri de Façade’dır. Bu kelime pek çok yerde “c” ile “Facade” olarak yazılmasına rağmen aslen Fransızca’da “ç” ile “Façade” olarak yazılır ve binaların ön yüzü, ön cephesi anlamına gelir. Zaten kelime yapısı itibarıyla “face” yani “yüz” ile de akrabadır.

Bu kısa açıklamdan sonra GoF’un bu kalıp ile ilgili dediklerine bir bakalım:

Intent: Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher level interface that makes the subsystem easier to use.

Amaç: Bir alt sistemdeki arayüzlere, bir birleşik arayüz sağla. Façade, alt sistemi daha kolay kullanmak için daha yüksek seviyeli bir arayüz sağlar.

Evet bu amaç açıklamasından da anlaşıldığı gibi Façade, karmaşık iş süreçlerini saklamakta kullanılan bir kalıptır. Çoğunlukla kullandığımız algoritmalar veya iş mantığı, bir süreç oluşturacak şekilde, pek çok farklı nesneden hizmet alarak ilerler. Süreç, hangi nesneden hangi durumlarda hizmet alınacağı bilgisini detayıyla ifade eder. Süreç, aynı zamanda pek çok iş kuralı ile de yönlendirilir. Böyle durumlarda client nesnelerin, süreci tüm detayıyla bilmelerini istemeyiz. Bu sıkıntılı durumu aşağıdaki örnekte rahatlıkla görebiliriz:

ClassDiagram1

Yukarıdaki yapıda görüldüğü gibi Client, bir bilgisayarı çalıştırmak için onun parçalarına tek tek ulaşıp, bir süreç halinde hepsini başlatması gereklidir. Bu çalışma şekli aşağıdaki akış diyagramında verilmiştir:

SequenceDiagram1

Böyle bir çalışma şeklinin Client nesnesini ne kadar karmaşık yaptığı ortadadır. Client nesnesinin koduna bakarsak:

package org.javaturk.dp.pattern.gof.structural.facade.computer.problem;

import org.javaturk.dp.pattern.gof.structural.facade.computer.CPU;
import org.javaturk.dp.pattern.gof.structural.facade.computer.Display;
import org.javaturk.dp.pattern.gof.structural.facade.computer.HardDrive;
import org.javaturk.dp.pattern.gof.structural.facade.computer.RAM;

public class Client {
	
	private CPU cpu;
	private RAM ram;
	private HardDrive hd;
	private Display display;

	public Client() {
		cpu = new CPU();
		ram = new RAM();
		hd = new HardDrive();
		display = new Display();
	}
	
	public void start() {
		cpu.start();
		hd.start();
		boolean kernelLoaded = ram.loadOSKernelImage();
		while(!kernelLoaded){
			ram.fixIt();
			kernelLoaded = ram.loadOSKernelImage();
		}
		
		boolean osLoaded = ram.loadOS();
		while(!osLoaded){
			ram.fixIt();
			osLoaded = ram.loadOS();
		}
		
		ram.loadDrivers();
		ram.startServices();
		display.start();
		System.out.println("Computer has started.");
	}

	public static void main(String[] args) {
		new Client().start();

	}
}

Client nesnesinin start() metodunun yukarıdaki basit örnekte bile bilgisayarın parçaları olan nesnelerle pek çok mesajlaşma içermesi ve bu nesnenin bir bilgisayarın ayağa kalkmasıyla ilgili süreci detayıyla bilmesi, gerçek bir projede iş süreçlerinden haberdar olan nesnelerin ne kadar karmaşık olabileceğini göstermeye yeter sanırım. Öte taraftan, CPU ya da RAM gibi nesnelerde ya da bilgisayarı ayağa kaldırma sürecinde yapılacak bir  değişikliğin Client’da değişikliğe sebep olacağı da aşikardır. Bu sıkıntılardan kurtulmanın yolu, diğer mühendisliklerde başarıyla yaptığımız gibi burada da arka taraftaki karmaşık sistemi saklayıp, önüne koyulacak basit bir arayüz ile yönetimini sağlamaktır. Bu basit arayüz, Façade’dır.

Arka tarafta bulunup, süreci yerine getiren nesnelerle ön taraftaki client arasına konan Façade, algoritma ya da iş mantığındaki süreci tüm detaylarını bilir. Bu şekilde bir ara nesne olarak Facade, clientı, süreci yerine getiren nesnelerden yalıtmakta kullanılır. Façade, sürecin tüm detaylarını bilir ama bu detayların hepsini arayüzünde dışarıya sunmaz, muhtemelen arayüzünde bir seferde çok iş yapacak şekilde, coarse grained metotlar sağlar Client ise bu şekilde Façade nesnesinden hizmet alır. Client bu hizmeti alırken, sürecin detaylarından etkilenmez, sürecin işlemesi için gerekli bilgileri Façade’a sağlayarak, Façade’ın süreci çalıştırıp kendisine dönmesini bekler.

Façade gibi bir yalıtım nesnesinin kullanımı zaman zaman seçilen mimari ve teknolojilerden dolayı da faydalı hatta zorunlu olabilir. Örneğin uzak nesnelere (distributed objects) erişerek hizmet alma durumunda, bu nesnelere pek çok ufak-tefek iş yapan çağrı yapmaktansa, uzak nesnelerin önüne konulacak bir uzak Façade nesnesi ile, yapılacak uzak metot çağrılarının sayısı bir hayli azaltılabilir. Bu durumda ağ trafiği kullanımı da daha etkin hale gelir.

Bakın Façade nesnesinin kullanımıyla çözümümüz ne hale gelir:

ClassDiagram1

Bu durumda Client nesnesinin, Computer façade nesnesiyle haberleşmesi ise şöyle olur:

SequenceDiagram1

Client nesnesinin koduna bakarsak, artık son derece sade olduğunu farkederiz:

package org.javaturk.dp.pattern.gof.structural.facade.computer;

public class Client {

	public static void main(String[] args) {
		Computer computer = new Computer();
		computer.start();
	}
}


Çünkü tüm karmaşıklık ve bağımlılık Computer nesnesine kaymıştır:

package org.javaturk.dp.pattern.gof.structural.facade.computer;

public class Computer {
	private CPU cpu;
	private RAM ram;
	private HardDrive hd;
	private Display display;

	public Computer() {
		cpu = new CPU();
		ram = new RAM();
		hd = new HardDrive();
		display = new Display();
	}
	
	public void start() {
		cpu.start();
		hd.start();
		boolean kernelLoaded = ram.loadOSKernelImage();
		while(!kernelLoaded){
			ram.fixIt();
			kernelLoaded = ram.loadOSKernelImage();
		}
		
		boolean osLoaded = ram.loadOS();
		while(!osLoaded){
			ram.fixIt();
			osLoaded = ram.loadOS();
		}
		
		ram.loadDrivers();
		ram.startServices();
		display.start();
		System.out.println("Computer has started.");
	}
}

Façade ile ilgili tartışmamıza burada ara verelim. Bir sonraki yazıda biraz daha kurumsal yapılardaki kullanımından bahsedeceğiz.

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

10 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
22 Nisan 2015

Yanlış Sorular, Yanlış Olmayan Cevaplar – I

Akin Kültür, Bilgi ve Düşünce

Yok, çok sabrettim bu yazıyı yayınlamamak için ama olmadı. Şu mesajı alınca patladım artık:

“Selam …  bilgisayar mühendisliğindeyim, 1. sınıftayım, vaktiniz olursa bana yardımcı olursanız sevinirim. Kafam karışık, hangi tarafla ilgilenmem, nelere yoğunlaşmam konusunda sıkıntı yaşıyorum, mobil teknolojileri konusuna ilgi duyuyorum ama iyi para kazanabilir miyim, maaşı ne kadardır bilmiyorum. Mobilemi odaklansam yoksa web de çok iş var diyorlar, ne yapsam. Ne dersiniz? ”

Hani denir ya “bir kişinin niyeti ya da seviyesi sorduğu sorudan anlaşılır” diye, hepimiz karşılaşmışızdır bu sözü akla getiren durumlarla. Bana da çok sık geliyor bu cinsten sorular. İnsanların, beni fikrine itibar edilen birisi olarak görmeleri benim için çok güzel, onur verici bir şey. Ama açıkçası sorulanlar sıklıkla üzerine düşünülmemiş ve sorgulanmamış, basma kalıp sorular oldukları için çok da hoşlaşmadığım durum oluşuyor. Şunu da ekliyeyim ki, bu tür soruları çocuklarım bana sorduğunda nasıl cevap veriyorsam üşenmeden herkese öyle cevap vermeye çalışıyorum.

Bu soruları temelde iki gruba ayırmak mümkün. Birinci gruptakiler, sistemsiz ve düzensiz bilgilenmenin getirdiği cinsten sorular. Bilgilenme sistemsiz olunca, durum bilgilenmeden çıkıyor ve bir hazımsızlık haline geliyor. Bunu, soruyu soran kişinin sorarken dile getirdiği ve onun temellendirici olduğunu düşündüğü “malumat”tan, sorunun içindeki çelişkili mantıktan vs. anlıyorsunuz. Diğer türden olan sorular ise belki aslında yanlış değil ama benim çok da benimsemediğim açıdan ya da yanlış bulduğum bir duruş noktasından sorulduğu için, doğru düzgün cevap vermek istemiyorum, biraz da geyik vesilesi biliyorum. İşte o “yanlış” sorular ile onlara karşı ürettiğim “yanlış olmayan” cevaplardan oluşan liste:

Programcı olmak için üniversite okumaya gerek var mı?

Gerek yok, okuma‐yazma bilmek kafidir! Nihayetinde programcılık bir zanaattir ve insanların okumaya niyeti olmayan çocuklarını tamirciye, berbere ya da boyacıya verdikleri gibi, yakında da programcı olması için, örneğin etraflarındaki, tanıdıkları vasıtasıyla ulaştıkları, irili-ufaklı, yazılım geliştiren pardon programlama yapan esnafları bulur, çocuklarını emanet ederler. Muhtemelen bu gidişle şehirlerde program yazanlar için sanayi bölgeleri de oluşturulacak. Zaten bu ülkenin bu konudaki en bilinen sivil örgütlerinden birisinin ismi Yazılım Sanayicileri Derneği değil mi canım! Eğer size böyle yardımcı olacak bir aileniz yok ise siz de sosyal medya aracılığıyla bulur bir programlama ustası, yanında pişerek öğrenirsiniz. Üniversite okuyanların kaybettiği vakti siz iş başında öğrenerek kazanırsınız. Nasıl olsa Steve Jobs da Bill Gates de Larry Ellison da üniversite mezunu değiller! Ama üç gün sonra basit de olsa bir matematiksel düşünce kırıntısı olması gereken küçük bir algoritmada çuvallarsan ağlamak yok!

Anlamıyorum ki bu ülkeyi ben. Ama anlaşılmayacak bir şey yok, master-doktora yapanların olduğu bir sınıfta, dönemin daha ilk dersinde, hocaya sorulan ilk soru, “hocam klasik mi yapacaksınız test mi?” olduğu bir ülkede, okumuşlar ne durumda ki okumamışlar ne durumda olsunlar diye düşünmeden edemiyorum tabi.

Java ölüyor mu?

Ölmüyor tabi ki. Java daha 20’sine yeni girdi. Cobol 50’sini, C 40’ını devirmişken!

Amma çok meraklıyız ölümlere Allahı’m! Daha üniversiteye başlayalı 2 ay olmuş, soruyor “Java ölüyor mu?” Fesubhanallah! Nedir bizim bu “ikinci eli kaça gider” takıntımız yahu? Aynı şey. Al arabanı, keyfini çıkar! Soracaksan da ne bileyim tüketimi cüzdanına uygun mu, kırmızı ışıkta pati çektirme merakın varsa torku nasıldır, vs. sor, öğren. Daha içine oturmadan ikinci elinin kaça gideceğinden sana ne? Var mı garantin o kadar yaşayacağına? Allah korusun belki o arabayla birlikte sen de gideceksin öbür dünyaya, ikinci el olacaksın …

Daha üniversite ödevi dışında doğru düzgün kod yazmamışsın, bu dünyadaki teknolojilerin nasıl üretildiğinden, nasıl gelişip kök saldığından bir gram haberin yok, Java’nın ölmesinden bahsediyorsun.

Java’nın ölmesini soranların zaman zaman tekrarladıkları sebeplerden bazıları şunlar: “.NET artık açık kaynak kodlu oluyor.” ve “Android yazarken artık Java dışında başka diller de kullanılabilir.” Anlamadım ki, bunları söyleyenler, Java’nın nereye hitap ettiğinden, .NET’in nereye hitap ettiğinden, ya da Java’nın zaten çıktığından bu yana açık kaynak kod yaklaşımını desteklediğinden ya da Microsoft’un .NET’in neresini nasıl açık kaynak kodlu hale getirdiğinden, getirmeyi planladığından ve en temelde de açık kaynak kodlu olmanın ne anlama geldiğinden haberleri var mıdır acaba? Ya da Java bu popülerliğini Android ile mi kazandı da Android için Java dışında diller kullanıldığında Java ölsün!

Gıcık oluyorum çok, daha bırakın bilgiyi, malumat sahibi bile olmadan, kendini fikir sahibi sanıp, kelli felli sorular soranlara arkadaşlar. İnsan biraz düşünür ya, aklına gelen ilk cümleyi soru olarak sorar mı?

Öğrenciyim, neye odaklanayım?

Allah Allaaahhh, ben mi başka gezegenden geldim, bu ülke mi zıvanadan çıktı? Anlamadım ki? Cevabı sorunun içinde zaten arkadaşım: Öğrenciysen odaklanacağın şey belli: derslerin. Derslerine odaklanacaksın. Ne Androide, ne Java’ya, ne de başka bir teknolojiye odaklanmayacaksın, sadece ve sadece derslerine odaklanacaksın, bu kadar basit. İşletim Sistemleri, Algoritmalar, Networking, Veri Yapıları, AI, neyse okulunda öğretilen ona odaklanacaksın. Programlama Dilleri dersinden 78 mi aldın, “22 puanı nereden kaçırdım”a odaklanacaksın. Sanki adam Stanford’da doktora yapıyor da “hımm, neye odaklansam acaba?” diye soruyor.

Genç üniversiteye girmiş, önünde bir sürü öğrenmesi gereken ders var, onları bırakıyor, dershanecilik yapan yerlerden gidip kurs alıyor örneğin. Neymiş .NET öğreniyormuş, okulda ise .NET öğretilmiyormuş. Eğitimi veren de aynı bu öğrenci gibi, zamanında derslerini düzgün bir şekilde öğrenip, esaslı bir şekilde kendini yetiştirip ilerleyeceğine, işte “nereye odaklansam” diye diye sonunda dershanede eğitimciliğe odaklanan birisi. Eğitmenin kendine hayrı yok ki sana olsun!

Bizim bu gençlerin odaklanma sorusunun ardında yatan düşünce şu: Matematik, algoritma, vs. ıvır zıvır zaten, kimse bunlarla iş yapmıyor, piyasada çalışmak için bunları bilmeye gerek yok (ki tamamen doğru ve bu arada piyasamızı bu şekilde kurgulayan ve devam ettiren öncülerimizi ve yöneticilerimizi burada saygıyla anıyorum.).

Odaklanmak için bilmek lazım bir kere. Bilmeyen adam neye odaklanır ki? Kendi disiplinini anlamamış, kim ne demiş, tarihi olarak nereden gelip nereye gidiyor, temel akımlar nelerdir, kim neyi nasıl yapmışı anlamadan, temel tanımlar, aralarındaki ilişkileri nedir bilmeden, hakim olmadan, neye nasıl odaklanırsın ki? Geçtim her şeyi, IDEsiz “hello world” yazamayan neye odaklanabilir ki? Hiç bir şeye odaklanmasın bence. Bu şekilde odaklanmaya çalışanlar sadece serseri mayın gibi dolanır ortalıkta, hiç bir şeye de yar olmaz. Her şeyin bir yolu, yöntemi vardır çünkü. Her şeyin bir tabiatı vardır. İnsanların seneler boyu tecrübeyle keşfettikleri şeyleri yok sayıp, onlardan yararlanmadan yenisini keşfedemezler. Bizim gençlerimiz bu dünyada oksijenle beslenmeden hidrojenle beslenmenin yolunu arayan uzaylılar gibi. Bir de duyuyorlar gazete küpürlerinde, mor inekmiş, Steve Jobsmış vs., sanıyorlar ki gökten zembille iniyor bu şirketler, başarılar vs.

“Web programlamaya odaklanıcam”, “Androide odaklanıcam”, cümleler hep böyle. Odaklan bakalım web programlamaya. Sanırsın 20 senedir web geliştiriyor, çok ciddi bilgi ve tecrübe sahibi ve belli noktalardaki sıkıntıları çok iyi biliyor ve oralara odaklanıp çözüm getirecek tüm dünyaya. Odaklanmaktan anladığı da etrafta var olan zilyon tane teknolojiyi, yok JavaScritpmiş, Node.js miş,  gelişi güzel, Google örnekleriyle çalıştırmak vs.

Hiç bir öğrencinin 4.0’lık olmasını beklemiyorum, çocuklarımın da öyle olmalarını istemedim hiç bir zaman, hele bu ülkede asla! Merak ve tutku nedir çok iyi bilirim. Ama malumatfuruşluğun ya da Google abur cuburunun da insanın beynini ne hale getirdiğini çok iyi bilirim.

Ohhh, içimi döktüm, biraz rahatladım. Derdim kimsenin kalbini kırmak değil. Amacım, zamanında tüm bu soruları sormuş ama elinden tutup kendine yol göstermeye çalışan birisini bulamayıp, cevaplarını yaşayarak öğrenmiş birisi olarak yol göstermek.

 

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

24 Bunu beğendim 🙂
Tweet
Follow me
Tweet to @kaldiroglu
«< 15 16 17 18 19 >»

Günlüğüme Hoşgeldiniz

Bu günlükte, Yazılım Mühendisliği, Bilgi Teknolojileri, Java, kişisel gelişim ve zaman zaman da diğer konulardaki düşüncelerimi sizlerle paylaşacağım. Umarım beğenir ve hoşça vakit geçirirsiniz.

Her türlü düşüncenizi, yorum olsun, beğeni ya da eleştiri olsun, bana iletmenizi rica ediyorum sizden. Ayrıca bana akin@javaturk.org adresinden ya da Twitter'dan ulaşabilirsiniz. Videolarıma da buradan ulaşabilirsiniz.

Teşekkür ederim.

Akın Kaldıroğlu

Rahat Okumak İçin

A Decrease font size. A Reset font size. A Increase font size.

Sosyal Medya

  • Twitter
  • Facebook
  • LinkedIn
  • Youtube

Son Twitlerim

→ Takip Etmek İçin

Abone Olun

Emalinizi girerek yazılardan haberdar olun.
Loading

Son Yazılarım

  • Udemy Eğitimlerim Üzerine
  • (başlıksız)
  • Clean Code / Temiz Kod Eğitimi Udemy’de
  • Java ile Nesne-Merkezli Programlamaya Giriş Eğitimi Udemy’de
  • Selsoft Video Eğitimleri
  • Spring ile Kurumsal Yazılım Geliştirme
  • Corona Günlerinde Design Patterns
  • Corona Günlerinde Java
  • JDK 10 ve “var” Özelliği
  • Onur Özcan
  • Analist ve İş Bilgisi
  • Farklı Dillerin Bakış Açısıyla Nesne-Merkezli Programlama
  • Java Nedir?
  • Bilgi Teknolojilerinde Yetenek Yönetimi – II: Tanımlar ve Eleştiriler – I
  • Alelade Hikayeler – II: Bir Başka Performans Problemi

Popüler Yazılar ve Sayfalar

  • Java’ya Nasıl Başlarım? Java’yı Nasıl Öğrenirim? – I
  • Nasıl Yazılımcı Olalım? – II: Hangi Bölümü Okuyalım?
  • Oracle’ın Java SE Sertifikaları: OCA, OCP ve OCM
  • Java Kurulumu ve İlk Programımız
  • İş Analisti İş Tanımı
  • Java Tutorial ya da Kendi Kendine Java Öğren
  • Nasıl Yazılımcı Olalım? – I: Üniversiteli mi Alaylı mı?
  • Tasarım Kalıpları
  • Java’ya Nasıl Başlarım? Java’yı Nasıl Öğrenirim?
  • UML Nedir?

Yazı Kategorileri

Yazı Takvimi

Haziran 2025
P S Ç P C C P
 1
2345678
9101112131415
16171819202122
23242526272829
30  
« May    

Yazı Arşivi

Blogroll

  • Binnur Kurt'un Günlüğü
  • Ender'in Java Blogu
  • Erdem Seherler
  • Kızımın Günlüğü
  • Kurumsal Java
  • Levent Karagöl
  • Levent'in Java Blogu
  • Mert Can Akkan’s java tips,options, news…
  • Yaşar Safkan
  • Yasin Saygılı
  • Yazı Dünyası

Yazı Etiketleri

analiz Bilmek C Desen design pattern EJB Eğitim Fortran Hibernate Java Java'ya nasil baslarim Java dersleri Java EE Java Persistence API Java SE Java Sertifika Java Öğren Java öğreniyorum Java öğrenmek JPA Kalıp Kurumsal Java nesne nesne-merkezli No Silver Bullet object object-oriented Oracle Java Certifications pattern performans programlama programlama dilleri programlama nedir sertifika singleton tasarım tasarım deseni tasarım desenleri tasarım şablonu yazılım yazılım geliştirme Yazılım Mühendisliği yazılımın doğası yazılımın zorlukları Şablon

↑

© Java Günlüğüm 2025
Powered by WordPress • Themify WordPress Themes
 

Yorumlar Yükleniyor...