The language of this post is Turkish and the translation of the title is: Which programming language should I learn?


Son güncelleme: Ekim 2020

Bir soru. Çevremde bir çok insan tarafından mütemadiyen sorulan bir soru. Soruyu soran şahıs farkında olmasa da, aslında bu soruyu sorarkenki asıl amacı spesifik olarak bir programlama dilini öğrenmek değil. Asıl öğrenmek istediği;

Ben bu işi öğrenmek ve bu alanda çalışmak istiyorum. Nereden başlamalıyım?

sorusunun cevabı. Evet;

Bu işe başlamak isteyenler ya da yeni başlamış olanlar için bir roadmap niteliğinde olmasını umut ettiğim satırlarıma başlamadan önce fon müziği olarak arkada çalabilecek bir parça hazır bulunsun:

2006 yılında, lisede, sınıftaki sevdiğim bir kız arkadaşımın doğum günü vardı. Hediye alacak param olmadığından mütevellit, o zamanlar yeni yeni merak duymaya başladığım programlama ile ilgili bi` şeyler yapmaya karar verdim. Kafamdaki plan, kızın doğum gününü kutlayan bir bilgisayar programı yazmaktı. ADSL bile olmayan internet bağlantım üzerinden, doğru düzgün ingilizce bilmediğim için, türkçe sitelerden bu işi nasıl yaparım diye araştırmaya başladım. Sonuç olarak Visual Basic 6.0 diye bir programlama dili buldum. 1–2 hafta inceledikten sonra programı yazmaya başladım. Bitirdiğimde; pembe bir arkaplana sahip, ortasında uzun bir doğum günü mesajı olan, sağda solda üzerine basıldığında sempatik (ya da ergence) kutlama mesajları gösteren butonların olduğu bir Windows programı ortaya çıkmıştı.En son o arkadaşımla konuştuğumda (3–4 yıl önce), hala saklıyordu cdyi. Bu, ciddi (!) anlamda yaşadığım ilk programlama tecrübesiydi.

Eğer ingilizce bilseydim ve beni doğru kaynaklara yönlendirebilecek bir tanıdığım olsaydı, Visual Basic 6.0 nın, son sürümü 1998 yılında yayınlanmış ve artık neredeyse kullanılmayan bir dil olduğunu bilirdim; onun yerine çok daha yeni bir teknoloji olan .NET teknolojisinde yazabilir ya da masaüstü programı yerine bir web uygulaması yazabilirdim.

Konudan bağımsız olarak;

Ya da hiç bunlarla uğraşmayıp; babamdan 50 lira alıp adam gibi bir doğum günü hediyesi de alabilirdim. İlk bölümden çıkarılacak ders;

İngilizce Öğrenin ( Ya da ailenizden para istemeyi öğrenin )

Yazının bundan sonraki kısmına ingilizce bildiğinizi varsayarak devam ediyorum. Aşağıdaki paragrafı anlamakta zorluk çekiyorsanız ingilizce eksiğiniz olabilir. Yine de merak ediyorsanız devam edebilirsiniz tabii ki.

MIT — Introduction to Computer Science and Programming:

Now, this course is primarily aimed at students who have little or no prior programming experience. As a consequence, we believe that no student here is under-qualified for this course: you’re all MIT students, you’re all qualified to be here. But we also hope that there aren’t any students here who are over-qualified for this course. And what do I mean by that? If you’ve done a lot prior programming, this is probably not the best course for you, and if you’re in that category, I would please encourage you to talk to John or I after class about what your goals are, what kind of experience you have, and how we might find you a course that better meets your goals.

Peki hangi programlama dili ?

Bu sorunun cevabını net olarak veren uluslararsı bir komite ya da otorite yok. Herkes farklı bir cevap verebilir. Ya da herkes kendi başladığı programlama dilini önerebilir. O yüzden, biraz olsun objektif bir sonuca ulaşmak için bu alandaki büyük okulların müfredatlarına bakabiliriz.

M.I.T (massachusetts institute of technology), uzun yıllardır, programlamaya giriş ve algoritma derslerini Python üzerinden vermektedir.

Ülkemizde de Koç Üniversitesi bu dersleri Python üzerinden vermekteymiş. (Askerdeyken oradan mezun bir arkadaşım söylemişti. Onun yalancısıyım)

Eğitim kurumlarının yanı sıra, internette de kısa bir araştırma yaparsanız, bir çok web sitesinden bir çok programcı ve blogger ın Python ve Javascript gibi yüksek seviyeli dilleri işaret ettiğini görürsünüz. Bu dillerin en büyük avantajı , gerçekten yüksek seviyeli diller oldukları için, sizi Memory Management, Garbage Collection, Thread, Stack, Pointer gibi nispeten low level kavramlarla mümkün olduğunca az muhattap etmesidir.

Mesela aşağıda neden Python’un başlangıç olarak muazzam olduğunu anlatan güzel bir blog yazısı var:

Why Python is a Great First Language - Trinket Blog

print("Hello, World")

Yukaridaki, en basit ve en kısa python programlarından birisidir. Ekrana Hello World yazdırır. Aynı işi yapan kodu Java’da yazmak istediğinizde ise;

public class HelloWorld {
  public static void main(String[] args) {
   System.out.println(Hello, World);
  }
}

Şimdi, yeni başlayan birisi bu kodu yazdıktan sonra sırasıyla şunları soracak:

  • public ne?
  • class ne?
  • static ne işe yarar?
  • void ne demek?
  • neden main yazdık ?

Daha da uzar bu liste. Ama Python’da yazdığımız kodu açıklaması çok daha kısa sürer. Özellikle öğrenme aşamasındayken; yazdığımız kodun tam olarak ne işe yaradığını , ne iş yaptığını bilmezsek ileride daha büyük sıkıntılara yol açabilir. O yüzden ilk öğrenme aşamasında mümkün olduğunca basit ve yüksek seviyeli bir dil seçerek, programlamanın temellerini kavramak daha mantıklı olacaktır. Bu, aynı zamanda süreci de hızlandıracaktır.

2020 Notu: Son cümlemi artık destekleyemiyorum. Bazı insanlar hala doğru bulabilir ama: Yüzeysel de olsa bilgisayarın ve programlama dillerinin nasıl çalıştığına dair bilgi edinmek faydalı olabilir. Tam olarak anlamasanız bile sonrasında öğreneceğiniz Python gibi yüksek seviyeli dillerde bazı özelliklerin bize nasıl bu kadar kolay ve basit olarak sunulduğuna dair fikir sahibi olmanızı sağlayacaktır. O yüzden bir sonraki kısımda değindiğim CS50 kursu bu noktada daha çok önem kazanıyor.

CS50: Introduction to Computer Science and Art of Programming

Eğer:

Ben öğrenme aşamasında nispeten düşük seviyeli kavramları es geçmek istemiyorum. Kolay bir dile ile başlarsam sonrasında bu kavramlara dönmek benim için daha zor olabilir. O yüzden en başından öğrenmem gereken her şeyi öğrenmeyi tercih ederim.

diyorsanız, bunun için de gerçekten çok kaliteli bir kaynak var:

CS50x : Introduction to the intellectual enterprises of computer science and the art of programming.

CS50, Harvard Üniversitesi’nde öğretilen bilgisayar bilimleri dersidir. Online olarak bulunur. Her dersi ve her ödevi dünyanın her yerinden her insana açıktır. Hatta dönem sonunda sertifika bile alabilirsiniz. Bu kursun müfredatı içinde de Python var. Ama Python öğretmeden önce ilk 4–5 hafta size C programlama dili üzerinden bilgisayar nedir, nasıl çalışır, memory nedir, veri yapıları ve algoritmalar nelerdir gibi kavramları açıklıyor.

Not: Başlangıç olarak bu kursu atlayıp direkt olarak python ile başlasanız bile sonrasında bu kursu tamamlamayı kesinlikle tavsiye ediyorum. Dersi anlatan David J. Malan karışık konuları çok güzel açıklayabiliyor. Çok güzel bir anlatım tekniği var. Kafanızda neredeyse hiç soru işareti kalmıyor.

Sektöre Hazırlanmak

Profesyonel olarak bir firmada çalışamaya başlamadan önce, öğrenme sürecinde bazı küçük projeler geliştirebilirsiniz. Bu sayede başvurduğunuz firmalara gösterebileceğiniz bir tecrübeniz olur.

Yukarıda bahsettiğim CS50 kursunu bitirdiğinizde, sadece kursun ödevlerinden oluşan projeleriniz olacaktır. C, Python, Javascript, HTML, CSS, SQL gibi teknolojilerin hepsine ucundan da olsa dokunup ortaya bir şeyler çıkarmış olacaksınız.

Onun dışında, Python, Ruby ve Javascript gibi diller, kolaylıkla, hem masaüstü hem de web tabanlı uygulamalar hazırlamanıza olanak sağlar. Özellikle Web Programlama, öğrenme sürecini daha eğlenceli bir hale getirecektir.

  • Flask [Python]
  • Django [Python]
  • Rails [Ruby]
  • Node.js [Javascript]

Yukarıdaki listede bu 3 ayrı dil ile Web uygulamaları hazırlamanızı sağlayan teknolojiler listelenmiştir. İlgili kelimeleri google da aratarak kendinize bir başlangıç noktası sağlayabilirsiniz. [Unutmayın, ingilizce kaynaklar.]

Bundan sonra ne olacak ?

Asıl olay şimdi başlıyor. Beğendiğiniz dil ile 2–3 ay vakit geçirdikten sonra artık programlamanın temel mantığına neredeyse hakimsiniz. Artık kendinize ilerisi için yol seçmeniz gerekmekte. Bu yolu seçmeye de aşağıdaki soruyla başlayabilirsiniz:

Ben ne programcısı olacağım ?

Envai çeşit programlama alanı var. Bazıları:

  • System Programming
  • Mobile Programming
  • Web Programming
  • Game Programming
  • Desktop Programming

En az 10 gününüzü ayırıp bu başlıkların her birisini tek tek araştırın. Nedir, ne değildir, ne iş yaparlar, örnek projeler, örnek kodlar, programlama dilleri nelerdir, o alan için bi ön gereksinim var mı (Mesela Oyun Programlama için ortalamanın üzerinde bir fizik bilginizin olması büyük avantaj sağlar) vs.

İstediğiniz alana karar verdikten sonra direkt olarak bu alanda araştırmaları arttırın. Örnek projelere ve kodlara daha çok bakın. Bu alandaki başarılı adamların kitaplarını ve bloglarını okuyun.

Alanınızda çalışmaya ve öğrenmeye başladıktan 1–2 sene sonra kendinize Junior Developer diyebilirsiniz. Junior, IT dünyasında Bilgisi var ama tecrübesi yok anlamına gelen, şirin bir sıfattır.

Tam bu noktada sizi, yetiştirmek üzere işe alma cesaretini ve büyüklüğünü gösteren bir yazılım firması bulabilirseniz hayırlı uğurlu olsun. Bu şansı iyi değerlendirin ve profesyonelliğe ilk adımınızı atın.

Bir kaç maddeyle toparlayıp bitirelim:

  • Herhangi bir şeyi öğrenmenin en kolay ve etkili yollarından birisi örnek yapmaktır. Mobil programlamaya karar verdiyseniz, elinizdeki Android / iOS telefonunuza kurup çalıştırabileceğiniz bir uygulama yazın. Ekranda sadece merhaba bile yazsa o sizin ilk uygulamanız olacak. Saklayın onu. Web Programlamaya merak duyduysanız, bir blog sitesi yazabilirsiniz.
  • Yukarıda bahsettiğimiz yüksek seviyeli nispeten basit diller ile bir kere olayın mantığını kavradığınızda hepsi gözünüze aynı gelecek. Bir noktadan sonra daha önce hiç kod yazmadığınız bir dilde kod yazmanız gerekse bile, bir kaç saatlik döküman incelemesinden sonra, yavaş da olsa, ortaya bir şeyler çıkartabilirsiniz.
  • Copy / Paste programcısı olmayın. İnternetten işinize yarayacak bir kod parçası aldıysanız bile ( ki alabilirsiniz bunda sorun yok ) aldığınız kodun ne iş yaptığını ve nasıl çalıştığını anlayın. Sonraki kullanımlarda bu kodu kendiniz yazmaya çalışın.
  • Piyasadaki binlerce lira para isteyen kurslara gitmeyin. Oralara vereceğiniz para ve zamanla kendinizi, doğru kaynaklarla, çok daha iyi yetiştirirsiniz.
  • Dünyada sadece c# ve java yok.
  • Üniversitelerimizin çoğunun c# ve java öğretiyor olması bu gerçeği değiştirmez.
  • Ülkemizdeki iş ilanlarının çoğunda c# ve java bilen adam aranması da iki yukarıdaki gerçeği değiştirmez.
  • c# ve java kötü programlama dilleri DEĞİLDİR. Sadece başlangıç için ideal değiller. Olayın temelini kavradıktan sonra pekala kariyerinizi bu dillerden birisinin üzerine kurabilirsiniz.

Git ve Github Hesabı

Gerek aldığınız kurslar dahilinde, gerekse de kendi araşatırmalarınız sonucunda bu noktaya kadar irili ufaklı bir sürü uygulama yapmış olmanız gerekiyor. Bu uygulamalar bilgisayarınızda durduğu sürece kimseye bir faydası yok. Dünyaya açmak, insanlarla paylaşmak gerekir.

Hala üye olmadıysanız Github’a üye olun. Kendinize bir hesap açın:

GitHub: Where the world builds software

Github, git teknolojisi üzerine kurulu, insanların ve firmaların kodlarını depoladığı, diğer insanlarla paylaştığı, geri bildirim verdiği ve aldığı bir platformdur. Buraya girmeden önce kısaca git nedir, ne işe yarar, nasıl kullanılır diye araştırmanızda fayda var. Burada Emrullah Lüleci nin konuya dair güzel bir anlatımı var:

Git ve GitHub nasıl kullanılır

Daha detaylı ve teknik bilgiler için ingilizce kaynaklara bakmanızda fayda var.

Yazdığınız her kodu ve her programı, hatasıyla, günahıyla sevabıyla buraya yükleyin. Sadece yazdığınız kodları değil aldığınız dersler sırasında aldığınız notları içeren bir repository bile açabilirsiniz. Kısacası programlamayı öğrenme sürecinize dair her detayı buraya yükleyebilirsiniz.

Kapanış

Son olarak; bu, zorlu ama bir o kadar da eğlenceli, yolculuk süresince sık sık bakmanızı tavsiye ettiğim bir kaç web sitesi:

  • Stackoverflow → Kod yazarken takıldığınız bir nokta %99 ihtimalle bu sitede daha önce sorulmuştur ve cevabı verilmiştir. Sorunuz olmasa bile düzenli olarak girip postları inceleyin. Çok faydalı.
  • /r/programming → Güncel haberler, makaleler, sorular ve blog yazıları.
  • /r/python/ → Python diliyle ilgili gelişmeler, duyurular, sorular vs.
  • Hacker News → Yukaridaki gibi ama sadece programlamaya ozel değil. Genel olarak neredeyse bütün IT dunyasının haberleri buraya düşer.
  • https://cs50.harvard.edu/x/ → Harvard Computer Science Dersleri. Sadece videolar değil aynı zamanda ders notları, ödevler ve yardımcı videolar gibi birçok kaynak var.