Hangi Programlama Dilini Öğrenmeliyim?
Bana şu tarz mailler son zamanlarda çok gelir oldu:
C# biliyorum, kariyerime Java ile devam etmek istiyorum. Sizce iş bulabilir miyim?, PHP programcısıyım, Javaya geçmemi tavsiye eder misiniz?, Java öğrenirsem, iş bulma şansım artar mı?, Geleceği aydınlık olmayan ActionScript ile yurt dışında mı, yoksa Türkiyede kalıp Android programcılığı ile mi devam etmeliyim?
Ben bunları nasıl algıladığımı Java kodundan bir örnek vererek açıklamak istiyorum.
1
public static final String kullandigimDil ="Java";
Yukarıda yer alan örnekte kullandigimDil ismini taşıyan ve String veri tipinde olan bir değişken tanımladım. Final direktifi ile bu değişkene Java haricinde başka bir değer atanmasını engellemiş oldum. kullandigimDil her zaman Java değerine sahip olacak. Ben çoğu programcının da programlama dillerini seçerken, bu seçimin final olduğunu düşündüklerini düşünüyorum.
Her programlama dilinin güçlü ve zayıf olduğu alanlar bulunmaktadır. Örneğin Java dili her platformda çalışır olma özelliği ve zengin kütüphanesi sayesinde çok güçlü bir dil olarak görülebilir. Zayıf olduğu nokta ise bir problemi çözmek için gereğinden fazla kod yazmak zorunluluğudur. Bunun aşağıda bir örneğini görmekteyiz:
1.// Java
2.List<String> list = new ArrayList<String>();
3.list.add("1");
4.list.add("2");
5.list.add("3");
6.List<Integer> ints = new ArrayList<Integer>();
7.for (String s : list) {
8.ints.add(Integer.parseInt(s));
}
Ayni kodu Scala dilinde bu sekilde yazabiliriz:
1.// Scala
2.val list = List("1", "2", "3")
3.val ints = list.map(s => s.toInt)
Java 8 ile yeni gelen dil özellikleri sayesinde daha kısa kod yazmak mümkün. Lakin verdiğim örnekte de görüldüğü gibi Scala dilinde bazı şeyleri yapmak çok daha kolay. Bunun başlıca sebebi Scala dilinin hem fonksiyonel hem de nesneye yönelik programlama paradigmalarını destekliyor olmasıdır. Scala dilinin fonksiyonel programlamayı desteklemesi sayesinde daha az kod yazarak, çözüme daha kısa zamanda ulaşmak mümkün.
Bir aşçı ustası mutfağında değişik işlemler için değişik araçlar kullanır. Örneğin bir patatesi soyduğu bıçak ile eti kestiği bıçak aynı değildir. Kemikli eti kesebilen bir bıçak ile patates soymak mümkün olmakla birlikte, akıllıca bir seçim değildir. Bir patatesi soymak için kullanılan bıçak daha küçük ve ele sığacak şekildedir. O bıçak kullanılarak, büyük bir et bıçağına kıyasla patates çok daha az bir zamanda soyulabilir. Aynı şey programlama dilleri için de geçerlidir. Programlama dili yapılan işleme uygunluğuna göre seçilmelidir.
Duvara bir resmi asmak için kullanacağımız çivinin üzerine balyozla da vurabiliriz, ufak bir çekiçle de. Akılcı olan, elde edilmek istenen neticeyi en az eforla elde edebileceğimiz aracı kullanmaktır. Programlama dilleri de araçtırlar. Problem sahasına göre kullanılan programlama dili değişir/değişmelidir.
Buradan ben tek bir sonuç çıkarabiliyorum: Programcının takım taklavat çantasında birden fazla programlama dili olmalıdır. Birden fazla programlama diline hakim bir programcı hem programcılık konusundaki yetkinliğini ortaya koymaktadır, hem uygun aracı seçerek, kısa zamanda çözüm üretmektedir, hem de daha iyi programcı olmak için gerekli altyapıyı oluşturmaktadır.
Tek bir programlama dili ile bir ömür programcı olarak çalışmanın mümkün olmadığı bir devirde yaşıyoruz. Bilginin yarı ömrünün günlerle ölçüldüğü zamanımızda yeni programlama dilleri mantar gibi yerde bitiyorlar. Onları programcı olarak biz göz ardı etmeye çalışsak da, içinde bulunduğumuz sektör ve uygulama sahipleri sürekli daha az zamanda, daha çok işin nasıl yapılabileceği sorusunun cevabını arıyorlar. Hangi dilin kullanılacağını onlar belirliyorlar. Biz programcı olarak onları takip etmek zorundayız.
Çok Gezen mi Bilir, Çok Okuyan mı? başlıklı yazımda programcıların neden belli bir zaman sonra iş yerlerini değiştirmeleri gerektiği konusuna açıklık getirmeye çalıştım. Çok uzun bir zaman aynı firma için çalışmak programcının yeni bir şeyler öğrenmesinin önünde engeldir. Yeni bir şeyler öğrenmeyen programcının piyasa değeri sürekli düşer. Belli bir zaman sonra piyasa kullanılan yeni programlama dilleri ve araçlar nedeniyle çağ atlamıştır ve programcı bu gelişmelerden bihaberdir. Elektrik çağında elektrikle çalışan lokomotifler varken kimse su buharı ile çalışan lokomotifi kullanmak istemez.
Benim öğrenilmelerini tavsiye ettiğim diller şöyle:
Java, çünkü nesneye yönelik programlama özelliği, platform bağımsızlığı, zengin kütüphanesi ve kurumsal projelerin gözdesi olduğu için,
Clojure, çünkü LISP tarzı fonksiyonel programlamayı öğrettiği için,
Groovy, çünkü daha kısa Java kodu yazmayı mümkün kıldığı için,
Python, çünkü öğrenmesi çok kolay olduğu ve birçok iş için kullanılabildiği için,
C, çünkü donanıma yakın alt seviye (low level) programlamayı mümkün kıldığı için,
C#, çünkü .Net dünyasına girişi kolaylaştırdığı için,
Javascript, çünkü web bazlı uygulamaların gözdesi olduğu için.
Sonuçta hangi dili öğrendiğiniz önemli değil. Önemli olan yeni diller öğrenebilme kabiliyetine ve azmine sahip olmanız. Yeni programlama dilleri öğrenmeyi iki sebepten dolayı gerekli görüyorum. Bunlar:
Daha iyi bir programcı olabilmek için
Piyasadaki rekabete ve teknolojik dönüşümlere göğüs gerebilmek için
Daha iyi programcı olmayı bir kenara bırakalım. Ama piyasanın talebine programcı olarak cevap veremiyorsak, o zaman bittik demektir. Umarım şimdi bu konunun ne kadar önemli olduğunun altını çizebilmişimdir. Eğer iki lisan iki insan ise, iki programlama dili, iki programcıdır. Bir backup oluşturun derim.
Bana şu tarz mailler son zamanlarda çok gelir oldu:
C# biliyorum, kariyerime Java ile devam etmek istiyorum. Sizce iş bulabilir miyim?, PHP programcısıyım, Javaya geçmemi tavsiye eder misiniz?, Java öğrenirsem, iş bulma şansım artar mı?, Geleceği aydınlık olmayan ActionScript ile yurt dışında mı, yoksa Türkiyede kalıp Android programcılığı ile mi devam etmeliyim?
Ben bunları nasıl algıladığımı Java kodundan bir örnek vererek açıklamak istiyorum.
1
public static final String kullandigimDil ="Java";
Yukarıda yer alan örnekte kullandigimDil ismini taşıyan ve String veri tipinde olan bir değişken tanımladım. Final direktifi ile bu değişkene Java haricinde başka bir değer atanmasını engellemiş oldum. kullandigimDil her zaman Java değerine sahip olacak. Ben çoğu programcının da programlama dillerini seçerken, bu seçimin final olduğunu düşündüklerini düşünüyorum.
Her programlama dilinin güçlü ve zayıf olduğu alanlar bulunmaktadır. Örneğin Java dili her platformda çalışır olma özelliği ve zengin kütüphanesi sayesinde çok güçlü bir dil olarak görülebilir. Zayıf olduğu nokta ise bir problemi çözmek için gereğinden fazla kod yazmak zorunluluğudur. Bunun aşağıda bir örneğini görmekteyiz:
1.// Java
2.List<String> list = new ArrayList<String>();
3.list.add("1");
4.list.add("2");
5.list.add("3");
6.List<Integer> ints = new ArrayList<Integer>();
7.for (String s : list) {
8.ints.add(Integer.parseInt(s));
}
Ayni kodu Scala dilinde bu sekilde yazabiliriz:
1.// Scala
2.val list = List("1", "2", "3")
3.val ints = list.map(s => s.toInt)
Java 8 ile yeni gelen dil özellikleri sayesinde daha kısa kod yazmak mümkün. Lakin verdiğim örnekte de görüldüğü gibi Scala dilinde bazı şeyleri yapmak çok daha kolay. Bunun başlıca sebebi Scala dilinin hem fonksiyonel hem de nesneye yönelik programlama paradigmalarını destekliyor olmasıdır. Scala dilinin fonksiyonel programlamayı desteklemesi sayesinde daha az kod yazarak, çözüme daha kısa zamanda ulaşmak mümkün.
Bir aşçı ustası mutfağında değişik işlemler için değişik araçlar kullanır. Örneğin bir patatesi soyduğu bıçak ile eti kestiği bıçak aynı değildir. Kemikli eti kesebilen bir bıçak ile patates soymak mümkün olmakla birlikte, akıllıca bir seçim değildir. Bir patatesi soymak için kullanılan bıçak daha küçük ve ele sığacak şekildedir. O bıçak kullanılarak, büyük bir et bıçağına kıyasla patates çok daha az bir zamanda soyulabilir. Aynı şey programlama dilleri için de geçerlidir. Programlama dili yapılan işleme uygunluğuna göre seçilmelidir.
Duvara bir resmi asmak için kullanacağımız çivinin üzerine balyozla da vurabiliriz, ufak bir çekiçle de. Akılcı olan, elde edilmek istenen neticeyi en az eforla elde edebileceğimiz aracı kullanmaktır. Programlama dilleri de araçtırlar. Problem sahasına göre kullanılan programlama dili değişir/değişmelidir.
Buradan ben tek bir sonuç çıkarabiliyorum: Programcının takım taklavat çantasında birden fazla programlama dili olmalıdır. Birden fazla programlama diline hakim bir programcı hem programcılık konusundaki yetkinliğini ortaya koymaktadır, hem uygun aracı seçerek, kısa zamanda çözüm üretmektedir, hem de daha iyi programcı olmak için gerekli altyapıyı oluşturmaktadır.
Tek bir programlama dili ile bir ömür programcı olarak çalışmanın mümkün olmadığı bir devirde yaşıyoruz. Bilginin yarı ömrünün günlerle ölçüldüğü zamanımızda yeni programlama dilleri mantar gibi yerde bitiyorlar. Onları programcı olarak biz göz ardı etmeye çalışsak da, içinde bulunduğumuz sektör ve uygulama sahipleri sürekli daha az zamanda, daha çok işin nasıl yapılabileceği sorusunun cevabını arıyorlar. Hangi dilin kullanılacağını onlar belirliyorlar. Biz programcı olarak onları takip etmek zorundayız.
Çok Gezen mi Bilir, Çok Okuyan mı? başlıklı yazımda programcıların neden belli bir zaman sonra iş yerlerini değiştirmeleri gerektiği konusuna açıklık getirmeye çalıştım. Çok uzun bir zaman aynı firma için çalışmak programcının yeni bir şeyler öğrenmesinin önünde engeldir. Yeni bir şeyler öğrenmeyen programcının piyasa değeri sürekli düşer. Belli bir zaman sonra piyasa kullanılan yeni programlama dilleri ve araçlar nedeniyle çağ atlamıştır ve programcı bu gelişmelerden bihaberdir. Elektrik çağında elektrikle çalışan lokomotifler varken kimse su buharı ile çalışan lokomotifi kullanmak istemez.
Benim öğrenilmelerini tavsiye ettiğim diller şöyle:
Java, çünkü nesneye yönelik programlama özelliği, platform bağımsızlığı, zengin kütüphanesi ve kurumsal projelerin gözdesi olduğu için,
Clojure, çünkü LISP tarzı fonksiyonel programlamayı öğrettiği için,
Groovy, çünkü daha kısa Java kodu yazmayı mümkün kıldığı için,
Python, çünkü öğrenmesi çok kolay olduğu ve birçok iş için kullanılabildiği için,
C, çünkü donanıma yakın alt seviye (low level) programlamayı mümkün kıldığı için,
C#, çünkü .Net dünyasına girişi kolaylaştırdığı için,
Javascript, çünkü web bazlı uygulamaların gözdesi olduğu için.
Sonuçta hangi dili öğrendiğiniz önemli değil. Önemli olan yeni diller öğrenebilme kabiliyetine ve azmine sahip olmanız. Yeni programlama dilleri öğrenmeyi iki sebepten dolayı gerekli görüyorum. Bunlar:
Daha iyi bir programcı olabilmek için
Piyasadaki rekabete ve teknolojik dönüşümlere göğüs gerebilmek için
Daha iyi programcı olmayı bir kenara bırakalım. Ama piyasanın talebine programcı olarak cevap veremiyorsak, o zaman bittik demektir. Umarım şimdi bu konunun ne kadar önemli olduğunun altını çizebilmişimdir. Eğer iki lisan iki insan ise, iki programlama dili, iki programcıdır. Bir backup oluşturun derim.
Alintidir.



