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, Java’ya 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ürkiye’de kalıp Android programcılığı ile mi devam etmeliyim?“…
Ben bunları nasıl algıladığımı Java kodundan bir örnek vererek açıklamak istiyorum.
[sourcecode language=”java”]
public static final String kullandigimDil ="Java";
[/sourcecode]
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:
[sourcecode language=”java”]
// Java
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
List<Integer> ints = new ArrayList<Integer>();
for (String s : list) {
ints.add(Integer.parseInt(s));
}
[/sourcecode]
Ayni kodu Scala dilinde bu sekilde yazabiliriz:
[sourcecode language=”java”]
// Scala
val list = List("1", "2", "3")
val ints = list.map(s => s.toInt)
[/sourcecode]
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.
EOF (End Of Fun)
Özcan Acar
Yorumlar
“Hangi Programlama Dilini Öğrenmeliyim?” için 18 yanıt
Peki iki dilin paralel olarak öğrenilmesinde sakıncalar var mıdır sizce? Yani Java’ya genel anlamda hakim olmadan ayni anda Python öğrenmeye çalışmak doğru bir seçim olabilir mi? Bu konu hakkında fikirleriniz nelerdir?
Iki dili paralel ögrenmeye calismak icin baska bir dilde temellerinizin cok iyi olmasi, yeni dilleri ögrenmenizi kolaylastiracaktir.
Güzel bir yazıydı hocam ellerinize sağlık. Eğitimlerinizi bekliyoruz 🙂
Önerdiğiniz dillerde niçin C++ yok ? Bakış açınızı merak ediyorum.Alt seviye ve gerektiğinde bir o kadar üst seviye olabilin bir dilde bile neredeyse daha az kod yazdığım zamanlar oluyor.Mesela java’da çoğu zaman basit bir kopyalama işleminde bile methodlara bağımlı kalabiliyor peki java çevresinde bu duruma nasıl bakıyorlar niçin hala radikal çözüm arayışında değiller mi 1.8 çıktı artık bir değişim düşünülmüyor mu ?
Java bilmek C++ ögrenmemek icin yeterli bir sebep. C++ ile C arasindaki en büyük farklilik, C++ dilinin C özellikleri yani sira nesneye yönelik programlamayi destekliyor olmasi. Bu özellik zaten en güzel haliyle Java dilinde mevcut. Bunun yani sira Apache Commons projelerinde bahsettiginiz islemleri birkac satirlik kodla cözmek icin bircok sinif var. Örnegin FileUtils sinifi ile bircok islemi bir statik metodu kosturarak, yapabiliyorsunuz.
Çok güzel bir yazı hocam elinize sağlık.
Hocam çok güzel bir yazı olmuş teşekkürler. Java’nın yanında diğerlerinide öğrenmeliyim diye düşünüyorum. C#’ı görünce “acaba Özcan hocam sonunda C#’a da giriş yaptı mı?” Diye düşünmeden edemedim 🙂
Zaman bulursam C# ögrenmek istiyorum 🙂
Hocam yazılarınızla ufkumuzu genişletiyorsunuz. Ben orta derecede Delphi bilen amatör bir programcıyım. Delphi bilmem sebebiyle C# ve Java’ya az da olsa aşina olduğumu düşünüyorum. Malumunuz Delphi eskisi kadar popüler değil. Size sorum programcı sürekli dil değiştirmeli mi yoksa iyi bildiği dilde ısrar mı etmeli?
Saygılarımla
Israr etme lüksü olmadigini düsünüyorum. Piyasa ne istiyorsa, programci onu verebilmeli.
Hocam merhabalar.Sürekli bu JVM üzerinde çalışan Clojure,Groovy gibi dillerden bahsediyorsunuz.Bunlarla ilgilide en azından bunların ne olduğunu gösterecek bir makale yazma şansınız var mı acaba?
Merhaba. Bu konuda yakinda javadilleri.com adresinde blog paylasimlarim olacak.
[…] Hangi Programlama Dilini Öğrenmeliyim? […]
Ben tabiki Hocama Kattılıyorum. Fakat Türkiyede Tüm yazılımcıları genellersem %50 C# kullanıyor. Java Bilen %30
Bence Bu iki dil çok önemli. Fakat Javacıların maaşları biraz daha yüksek. Yanılıyorsam Yorumlarınıza açığım.
Ben Hergün Bir Blog Okur ve Düşünürüm.
Özcan Bey yazdıklarınıza yüzde bir milyon katilmakla birlikte Türkiyede yazdığınız gibi insanlarin azimlerini uzun süre korumalarinin çok zor olduğunu ifade etmek istiyorum. Türkiye’de sektörumuzde gerçekten çok yetenekli, öğrenme kabiliyeti yüksek, azimli, kendini yenilemek icin çok okuyan ve de çok gezen ama gezerken de umduğunu bulamayan birçok muhendis var malesef. Bu gezmeler sonucunda tek başına dünyayı degistiremeyen genç mühendis ya mühendisliği bırakır ya da boyun eyip önündeki rutin isi yapar. Yorumumda biraz daha ileri giderek sektorde bir Hindistanlasma olduğunu düşünüyorum. Soyle, sirketler oyle kodlara yöneliyorlar ki bu mühendisler sirketin iç dünyasına kapanıp bırakın başka bir dil öğrenmeyi aynı dil içerisinde şirketin kod kutuphanesi kadarıyla is yapar hale geliyorlar. mesela java dilinin çok basit bir alt kümesi ile çalışır hale geliyorlar. Bu kutuphane yaklaşımı kodlamayi kolaylastirip şirkete zaman ve butce kazandırırken uretmeyen ama kullanan mühendis yaratiyor mühendis kalitesinin düşmesine yol açıyor. En nihayetinde bu durum ülkemizin kaybıdır. Üreten tasarlayan bir sektör degiliz, kullanan ithal eden fason ureten bir durumdayiz. Hindistanlasma benzetmem bundan dolayidir umarım aciklayabilmisimdir. Saygılarımla.
Öncelikle bu Blog’u şimdi keşfettim ve içerik güzel tartışmalar güzel. “Programlama Dili” konusuna, Clojure Programlama Dilinin tasarımcısı Rich Hickey şu gönderisi ile oldukça radikal bir açıklama getiriyor ki ona tamamen katılıyorum:
http://prakhar.me/articles/a-better-developer
Rich kısaca diyor ki, programlamada ustalaşmak için programlama dillerinin önemi yoktur. Bu durumda Java,PHP, C, Ruby, Python… bir programı oluşturmak için tasarlanan araçlar oluyor, gelecekte karşılaşacağımız programlama ihtiyacını karşılama garantileri yok.
Peki Rich nasılböyle iddiada bulunabildi? Onu anlamak için Lisp ve Clojure’ı öğrenmek ve onlarla çeşitli bazı kodlar yazıp, library kodlarını kullanıp uygulamalar çalıştırmanız gerek.
c# ile uğraşan biri olarak microsoft yıllar önce mac’i nasıl taklit ettiyse şimdi javayı taklit ediyor. c# ve java kodları birbirine çok benzer hatta teknolojilerde aynıdır aradaki tek fark javacılar 5 bin tl maaş alırken c# cılar 2 bin tl maaş alır. seçim sizin.
Güzel yazı ve yorumlarınız için teşekkür ederim. Bence başka programlama dilleri öğrenmektense, başka teknolojileri ve konuları öğrenmeye zaman harcamak daha mantıklı. Örneğin Big data, mobil programlama, nosql teknolojiler, cloud sistemler gibi. Yakın gelecekte bu tip konularda uzman olmuş kişiler çok aranacak. Ülkemizde de bu konularda yetişmiş insan kaynağı çok yok. Dünya’nın en çok kullanılan dili Java. Arkasında çok büyük bir topluluk var. IDE, döküman, tutorial, kitap internette binlerce var. Takıldığınız bir sorunun yanıtını anında Stackoverflow da var. Yeni ve popüler olmayan bir dilde bunların çoğunu bulamazsınız. Benim başıma geldi. Bu nedenle vaktimi programlama dili yerine başka konulara ayırıyorum. Java bana yetiyor şimdilik.