Hatırlatma: YouTube Kanalıma abone olarak, her hafta eklenen yazılımcılar için programlama ve kariyer video eğitimlerime ulaşabilirsiniz.

Image for post
Image for post

Bu sorunun cevabını arama çabalarım yıllar öncesinde kaldı. Hatta üniversite zamanlarında bazılarının C# ve Java arasında yaptıkları ideolojik sözlü kavgalara bile şahit olmuşumdur. Herkes kendi kriterlerine göre güçlü olarak tanımladıkları programlama dilini överdi. 8 seneden fazladır profesyonel dünyada kod yazıyorum. Aynı zamanda üniversite yıllarımda da hem kendime hem de başkalarına çalıştım ve bolca kod yazdım. O zamanları da sayarsanız herhalde hatrı sayılır bir 10 sene karşılıyor beni. Dolayısıyla birazdan anlatacaklarım işte bu zamanlarda kazandığım tecrübelerden oluşuyor. Aklımdaki herşeyi anlatmayacağım çünkü bayağı uzun bir yazı dizisi çıkar. Onun için temel olarak üç farklı ortamı inceleyerek hangi programlama dilini tercih edebilirsiniz buna cevap arayacağım. Kendinizi aşağıda ki hangi kategoride duruma koyuyorsanız ona göre alacağınız cevap farklı olacaktır:

  1. Programlamayı yeni öğrenenler.
  2. Programlama bilip kişisel projeleri için alternatif programlama dili bakanlar.
  3. Profesyonel şirketlerde kurumsal uygulama yazanlar.

Programlamayı Yeni Öğrenenler İçin

Programlamayı yeni öğreniyorsanız size ilk tavsiyem bir kaç farklı dili deneyerek zevk aldığınız dil hangisi ise ona yönlenin. Kısacası eğer bu meslekten zevk almanın yöntemlerini bulamazsanız o zaman yakın zamanda öğrenmeniz gereken belkide yüzlerce şey altında boğulur ve bu mesleği kendinize zindan edersiniz. Dolayısıyla ilk başta zevk alarak ve heyecan ile kullanabileceğiniz teknolojilere ve dillere yönlenmenizi tavsiye ederim.

İkinci olarak programlamayı yeni öğrendiğiniz için daha sadece syntax’e sahip dilleri tercih edebilirsiniz. Bazı diller açık ve fazla anlaşılır olmayı daha çok tercih ettiklerinden daha fazla kod yazmaya neden olabilirler. Mesela Java da private ile bir methodu başka sınıflara görünmez yaparken bunu Go da method isminizi küçük harfle başlayarak yapabilirsiniz, örneğin func getFullName(). Ama bunu Javada yapmak isteseydiniz o zaman private void getFullName() demeniz gerekecekti.

Python yada Go gibi diller daha basit syntax ile çıkıyorlar karşımıza. Programlama konseptlerine daha çok zaman ayırmanız, programlamanın mantığını anlamanız, ve daha soyut kavramlar üzerine ilk zamanlar yoğunlaşmak isteyeceğinizden dil kendisini öğrenmeniz için çok zor olmamalı ve hatta sizin yolunuzdan çekilecek kadar basit olmalı. Tabi bu kişinde kişiye göre değişebilir. Onun için ilk tavsiyem zevk alacağınız bir dili tercih etmek oldu. Bazıları daha kompleks dilleri daha zevkli görebilir. Burada ki ifadelerim daha ortamlama insanlara hitap ediyor.

Ben genelde öğrenme aşamasında olan insanlara Python gibi dilleri tavsiye ediyorum. Bu o dilleri sevdiğimden dolayı değil, öğrenilmesi daha kolay olduğunu düşündüğümden dolayı. Birde yazdığınız programlamları hızlı bir şekilde test etme şansınız oluyor. Boilerplate dediğimiz kendi kodunuzu yazmak için daha önceden hazır etmeniz gereken kodlar zorunluluğu olmadığından dolayıda kullanıcılarına algoritmalarını hızlı bir şekilde test etme olanağı tanıyor. Buna benzer, hiç kullanmadım ama, Ruby isminde bir dil daha var. Ama şu da bir gerçekki son zamanlar Java ve benzeri diller de scripting tarzında hızlı bir şekilde yazıp çalıştırmanıza olanak tanıyan ortamlar geliştirmekteler. Merak edenler de bunlarıda kullanarak öğrenimlerine devam edebilirler.

Bu arada öğrenirken kafanızda şu şekilde bir sorun oluşmasın: Şimdi hangi dili kullanmaya başlarsam onunla hayatımı devam ettirmek zorunda kalacağım. Hayır. Böyle bir zorunluluk asla yok. Özellikle de bu aşamada bu sorun hemen hemen hiç olmuyor çünkü iş mülakatlarında size yardımcı olacak tecrübe için genelde profesyonel ortamlarda bu dili kullanmış olmanız gerekiyor. Dolayısıyla programlama mantığını öğrendikten sonra rahatlıkla başka dillere geçerek farklı tecrübe kazanabilir ve bunu özgeçmişinizde rahatlıkla kullanabilirsiniz.

Bu arada ileride de anlatacağım gibi, gerçek dünyada ki kıstaslar ile kendi dünyanızda ki yada okuldaki dil seçimi kıstasları farklı olacaktır. Bunlarıda ilerleyen kısımlarda görmeye devam edeceğiz.

Kişisel Projelerimde Kullanmak İçin

Her ne kadar bu durumda devreye başka gereksinimler girsede ilk dediğim şeyi tekrar etmek isterim: Zevk alacağınız bir programlama dili. Çünkü zevk alırsanız diğer kriterler olan dokümantasyon kalitesi, hazır yazılmış kütüphane sayısı, aranılan sorulara verilen cevaplar, aktif bir topluluk, kolay kurulum ve deploy edilmesi, IDE çeşitliliği ve kalitesi, satın alınmak istenilen farklı araçların miktarı, kalitesi, ve fiyatları gibi şeyler istenilen seviyede olmasa bile güzel işler başarabilmek için gereki motivasyonu kendinizde bulacaksınız. Aksi halde diğer kriterler ne kadar güzel olursa olsun, zamanla sıkılacak ve bitsede kurtulsam umudu ile stress yapacak ve belkide başka problemler ile karşılaşmaya başlayacaksınız.

Eğer zevk aldığınızı düşündüğünüz birden fazla dil varsa o zaman yukarıda saydığım diğer kriterlere devreye girecektir. Zevk alsanız bile bir zaman sonra zaman ve kaynak sorunu yaşama durumunuz olacağından aradığınız sorunlara hızlı cevaplar bulabileceğiniz oturmuş bir topluluk olmasını ve seçtiğiniz dilin aktif olarak açık kaynak kodlu yada para kazanmak için kapalı kaynak kodlu firmalar tarafından aktif olarak kullanmasını isteyebilirsiniz. Bunlar Amerika’yı yeniden keşfetmek zorunda kalmadan yaptığınız işten hem zevk almanıza hemde hızlı ve etkili bir şekilde zamanında bitirmek için yardımcı olacaktır. Şunu akılda tutmakta fayda var: Bitirilmiş en kötü iş bile bitmemiş en mükemmel işten daha kalitelidir. Dolayısıyla zaman her zaman bir programcının en önemli handikaplarından birisi olmuştur ve olmaya devam edecektir.

Eğer bir projede bir kaç arkadaş çalışacaksınız seçilecek olan dil kimin hangi dilde iyi olduğuna göre değişecektir. Genelde düz mantıkla düşünüldüğünde en mantıklı olan herkesin ortak bildiği bir dil üzerinden devam etmektir. Çünkü öğrenilen sadece dil değil aynı zamanda o dilin kullandığı framework ve diğer kütüphanelerdir. Eğer herkes sil baştan yeni bir şey öğrenmeye başlarsa o zaman yılladır oluşmuş birikim ve bilgi ve bunların getirdiği etkili ve hızlı kod yazma kabiliyetlerini büyük ölçüde çöpe atmak olacaktır. Onun için siz dili öğrenirken arkadaşlarınız hem sizin dili öğrenmeniz için gerekli yardımı verebilir hemde siz yetişene kadar projeyi kodlamaya başlayabilirler. Ama yeni öğreneceğiniz dil, uzun vadede size çok daha fazla verimlilik sunacak ve öğrenmek için kaybedilen zamanı hızlı ve kısa bir zamanda telafi ettirecek kadar güzelse, o zaman işler değişebilir. O noktada yukarıda daha önce saydığım kriterler devreye girecektir. Çünkü bir dilin hızlı öğrenilmesi için dokümantasyon, aktif bir topluluk, daha önceden sorulmuş soruların ve cevapların bolluğu, yazılmış hazır kodlar gibi kriterler olmazsa olmaz gibidir.

Kurumsal Ortamlarda Çalışanlar İçin

Bu ortamlarda çalışanlar genelde yeni bir dil seçimini ya yeni bir projeye başladıklarında yada farklı bir teknoloji ve dil kullanmak için başka bir şirkete geçmek istediklerinde yaşarlar. Kurumsal ortamlar daha az esnek olacaklarından ve sorumluluk ile beraber esneklikte ters orantılı olarak azalacağından seçimlerini genelde farklı açılardan değerlendirmek ve üstlerine kabul ettirmek zorunda kalırlar. Genelde buna nihai kararı verecek olanlar programlama olayından çok anlamadıklarıdan dolayı bekledikleri cevaplar zaman, para, ve kalite üçlüsü arasında dönüp dolaşır. Aslında haklılarda çünkü programlama herkesin yapabileceği bir iş olmadığından herkesin sizin gibi düşünerek yeni bir teknoloji karşısında sizin gibi heyecanlanacağını beklemek yanlış bir beklenti olacaktır. Hatta en yenisi ve en iyisi şeklinde tanımladığınız kavramlar bile o insanların gözünde farklı açılardan değerlendirilip aynı şekilde görülmeyebilir. Mesela, siz bir projeyi sil baştan daha güzel diye düşündüğünüz en son teknoloji ile yazmak isteyebilirsiniz, ama bu karar vericilerin gözünde zaman ve para israfı demek olabilir. Dolayısıyla çalıştığınız ortamda ki kültürel ve yazılı kısıtlamaları bilmeniz gerekebilir. Bu kısıtlamalar aşıldığında bu ortamlarda da yeni projeler için bir önceki kısımda anlattığım kriterler hala geçerlidir. Fark genelde yeni çalışan işe alma zamanında gerçekleşir. Örneğin seçtiğiniz dili bilen kaç kişi var, maaşları diğer dillere nazaran ne kadar oluyor, almak zorunda kalacağınız programlama araçları ne kadara mal olacak gibi. Ama benzer sorunlar sadece seçtiğiniz programlama dili değil, bu dil ile kullanmak istediğiniz başka araçlar içinde geçerli olacaktır. Mesela, hangi veritabanları bu dil ile gelen framework ile çalışıyor, kullanmak istediğimiz mimaride bulunacak diğer uygulamalar ile ne kadar uyumlu çalışacak, scale etmek istediğimizde ne kadar sorunsuz bir geçiş sağlayacağız, yüksek miktarda kullanımlarda memory ve CPU kullanımları ne seviyede olacak gibi pratikte farklı sorular ile karşılaşmanız çok muhtemel.

Şimdilik bu kadar da bırakalım. Aklıma yeni şeyler geldikçe bu yazıyı güncellemeye devam edeceğim. Mümkün mertebe farklı kesimden herkesin faydalanmasını istediğim bir yazı olmasını arzuladım. Umarım hedefime ulaşmışımdır. Şimdilik esen kalın…

Written by

Senior Manager in Software Engineering. Former Technical Lead. Author of the book: Hands-on with Go http://amzn.to/2QYFoaV YT: http://youtube.com/c/tarikguney

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store