Programlama öğrenmeye karar verdiğim zaman ilk işim İstihza diye şeker gibi bir siteden Python öğrenmeye çalışmak olmuştu. Bu benim için cidden uzun bir süreçti. Çok çok basit şeyleri dahi anlayamamış, sonra “Aman başlarım böyle işe” diye isyan edip programlamaya bütün hevesimi kaybetmiştim.

Epey uzun bir süre sonra tekrar hevesimi toplayınca bir ay boyuna her gün Fırat Özgül’ün insanlığa armağanı İstihza’yı günde yaklaşık bir on saat okudum. Bu esnada önce kız arkadaşım beni terk etti, sonra babam beni evden attı, sokaklarda para dilendim ve en nihayetinde torbacılığa başladım ancak ertesi gün şafak operasyonuyla uyandım. Tabii inanıp inanmamak size kalmış ama kendimi öylesine bu işe kaptırmıştım ki pek çok şeyi ihmal etmiştim. O zaman kadar üstten ders alacak kadar başarılı bir öğrenci olan ben Python sevdası yüzünden üç ders bırakmıştım.

Bu sizin gözünüzü korkutmuş olabilir. Valla yazarken benim de gözüm korktu, ne diyeyim. Ama bir de hikayenin devamını dinleyin; aylar sonra Ruby öğrenmem gerektiği zaman sizce ne kadar vakit harcadım? İki gün! İki gün sonra çatır çatır “Matz heika banzai!” diye bağırarak Ruby yazıyordum.

Ruby ile Python’un birbirine yakın diller olduğunu düşünüyorsanız, bu yüzden Python bilenin Ruby bileceğini düşünüyorsanız gayet doğru düşünüyorsunuz. Aynı şey Ruby’den Python’a geçerken de geçerli. Ama ki ben eğer programlamaya Python ile değil de Ruby ile başlasaydım, belki iki ayda zor öğrenmiş olabilirdim.

Buradan ne çıkarabilirsiniz? Metrobüs’ün insanlık haklarına aykırı bir işkence aleti olduğunu mu? Tabii ki değil, zaten bu nereden girdi ki araya? Şunu diyecektim; programlama belli bir dili öğrenmekten ziyade “genel programlama mantığını” kavramakla ilişkilidir. Siz bir dilin mantığını kavrayınca, aslında pek çok dilin de mantığını anlamış olacaksınız.

Bu yüzden “Programlamaya neyle başlayayım abi?” diye bana gelip soracak olursanız eğer, ben size derim ki ne ilginizi çekiyorsa onunla başlayın. Kolay ya da zor, seçin birisini gitsin. Yanlış bir tercih yok, sonra nasıl olsa başka diller de öğreneceksiniz.

Çoğu kişi benim çok fazla dil değiştirmemi eleştirir. Sahiden de öyledir, iki ayda iki dil öğrendiğim olmuştu. Ama şöyle bir şeyin farkındayım, bir dili öğrendiğim zaman başka bir dilde de kendimi geliştirmiş oluyorum. Mesela Rust isminde bir ömür törpüsünün kitabını okuyunca genel programlama becerilerimin geliştiğini hissetmiştim. En sonunda “Ben hiçbir şey bilmiyormuşum meğer!” diye ani bir aydınlanma yaşamış, bundan dolayı beni kötü hissettirdiği için Rust’ı uzun süreliğine bırakmıştım.

Derler ki, iyi bir yazılımcı her yıl yeni bir dil öğrenmelidir. İki şeyden dolayı;

  • Birincisi yukarıdaki paragrafta bahsettiğim gibi her yeni programlama dili kişinin ufkunu açar, onu genişletir. Üstelik programlama dilleri sık sık birbirinden özellik alıp verir. Mesela pek çok C++ özelliği, ilk Java özelliği olarak ortaya çıkmıştı. Bu yüzden ana dilinize bir şey eklendiği zaman “Ne bu? Niye koymuşlar ki bunu?” diye yabancı kalmazsınız.

  • İkincisi ise yarın bir gün “Elixir” diye bir dilin bütün piyasayı ele almayacağından emin olamazsınız. Sizin Elixir hakkında bir öngörünüz olursa hızlıca öğrenir ve insanlar öğrenme aşamasındayken bu dilden ilk faydalananlar arasına girebilirsiniz. Gidin Elixir öğrenin demiyorum, ama Elixir hakkında size öngörüyü verecek olan şey bizzat Ruby’dir. Mesela yarın bir gün Ruby’den esinlenerek başka bir dil daha tasarlanabilir, enteresan değil mi?

Ama diyelim ki yazıyı buraya kadar okuyan adam geldi yakama yapıştı; “Yahu kardeşim, hiçbir şey bilmiyorum ben. Valla bilmiyorum. Bana bir dil seç oradan gidelim!”. Ne derdim? Ne derdimden önce bir 155’i arardım sanırım, kimsenin yakama yapışmasından hoşnutluk duymam elbette. Ama insan gibi gelseydi şunu sorardım_:_ “Sana ne lazım?”.

Bana kalırsa programlamaya başlayan kişilere verilen tavsiyelerin genel sorunu şu, motive edecek bir şey yok. Hani bir dipsiz kuyunun içine atıyoruz insanları, salt öğrenme hevesiyle oradan çıkmasını bekliyoruz. Mesela, yeni başlayan kişilerin C ile başlamasını ben epey yanlış bulurum. C evet güzel bir temel verir, donanım ile yazılım arasındaki bağlantıyı anlamasını sağlar şu bu. Ancak C verimli değildir, C üzerinde uzmanlaşmak için vereceğiniz vakti başka dillere verirseniz o dillerde gayet iddialı projeler hazırlamaya başlayabilirsiniz.

C’yi bir kenara fırlatmalı mı? Birkaç paragraf önce dediğim şeye geri dönüyoruz. Programlama nedir hiç bilmeyen bir adamın C öğrenmesi ise, programlamanın pek çok konseptinden haberdar kişinin C öğrenmesi arasında fark vardır. Bu dil birisine “Galiba ben yapamayacağım. Bilgisayarımı camdan aşağı atmam en doğrusu olur.” dedirtebilirken diğerinin ufkunu birkaç misline katlayabilir.

Yeni başlayan bir kişiye gösterilen dilin özellikle ne olmalı? Bana kalırsa böyle bir dil;

  • Az emekle çok proje hazırlayabilmeli (Ama tembelliğe alıştırmamalı)
  • Yaygın olarak kullanılmalı (Çünkü sorunlarınızı İnternette sık sık araştıracaksınız.)
  • Kuvvetli bir belgelendirmesi bulunmalı (Türkçe belgelendirme de ayrıca önemlidir)
  • Kütüphaneleri kaliteli olmalı (Sayıca çok olması kaliteli olduğu anlamına gelmez)

Bunun dışında şu iki şeye takılmayın:

  • İlgili dilin piyasada ne kadar kullanıldığı ve para getirdiği (Bu açıdan iyi bir dili ileride nasıl olsa öğreneceksiniz)
  • Öğrenildiği zaman diğer dillere geçişin ne kadar kolay olacağı (C++ yeni öğrenmiş birisi C#’ı da Java’yı da anlar, doğru. Ama neticede Haskell görünce oturur ağlar.

Şimdi, söyleyeceklerimi söylediğime göre size birkaç seçenek sunabilirim (Liste en çok tavsiye edilenden en aza doğru gider)

Html/CSS ve JavaScript

Burada size üç ayrı dil gibi görünebilir ancak bu üç dilin hepsi birbiriyle yakından ilişkilidir. Bu üçlünün size kazandıracağı en basit şey, yazacağınız üç satır kodla gayet şekilli şukullu İnternet sayfaları oluşturmaktır. Üstelik öğreneceğiniz JavaScript ve CSS kütüphaneleriyle çok kolay şekilde çok iyi tasarımlar oluşturabilirsiniz.

HTML/CSS olmadan JavaScript’in bizzat kendisi başlı başına gelişmiş bir programlama dili olduğundan ötürü yalnızca web sayfaları yaratmak için de kullanılmaz sadece. Gerekirse mobil veyahut masaüstü uygulamalarını da JavaScript aracılığıyla yazabilirsiniz.

Önemli not: Java ve JavaScript iki apayrı dildir ve sadece talihsiz bir isim seçimi durumu vardır.

Üç dilden kısaca “Frontend dilleri (Önplan dilleri)” olarak olarak da bahsedilir. “Frontend” olarak anılan diller doğrudan sonuca yönelik iken buradan sonraki diller daha arka planda kalan, ön planda kullanılması için fazladan öğrenme gerektiren dillerdir.

Python

Python, oldukça popüler ve para getiren alanlarda da kullanılan oldukça yetenekli dildir. Her nasıl ki Ruby, Perl, Lua gibi muadillerinin yanında oldukça hızlı ve yetenekli olsa da betik dilini C++ gibi her şeyi hız olan başka bir dille kıyaslayarak “Python hantal, çöp” diyen bazı tuhaf tiplere de denk gelebilirsiniz. (Pistol tabanca ile makineli tüfek farkı gibi düşünün)

Python bir endüstri standardı olduğu için Qt gibi oldukça yetenekli kütüphanelerin desteğini alır, yarı yolda bırakmaz. “Her şeyin tek bir yolla yapılması” gibi bir felsefeye sahip olduğundan dolayı öğrenmek/anlamak için birden çok yolu araştırmaya gerek bırakmaz. Hem kaynakların oldukça çeşitli olması, hem şirketlerde yaygın olarak kullanılması hem de kolay öğrenme eğrisiyle yeni başlayan bir kişiye şiddetle tavsiye ettiğim bir programlama dilidir.

C#

Programlamadaki bu isim karmaşasının nedeni ne bilmiyorum ama, bu dilin ne C ile ne de C++ ile alakası vardır. Rivayet odur ki Java’yı rekabet durumundan dolayı Microsoft geliştiricileri hiç sevmez, adını bile anmak istemezler. Bu yüzden Java’ya benzer ancak Java’dan daha iyi bir dil hazırlamak isterler, bu da C# olur. Peki niye bu ismi seçmişler? Sanırım bir dönem yazılım dillerinin lüzumsuz yere isim kopyalama hastalığı varmış, hani şöyle bir andırsa da hiç alakası yok.

Şimdi ciddi olalım. C#, bir masaüstü uygulaması geliştirmenin oldukça kolay olduğu ve sonuca yönelik bir dildir. Öğrenmesi kolaydır ancak ustalaşması oldukça zordur. Gayet hızlı bir şekilde proje üretebildiği için Türkiye içerisinde oldukça yaygın bir şekilde kullanılır, üniversitelerde de yaygın bir biçimde öğretilir.

PHP

Türkiye’de oldukça yaygın kullanılan bir diğer dil de PHP’dir. Bu dil, İnternet sitelerinin arkaplanda çalışan sunucular üzerinde forum, blog gibi karmaşık ve dinamik içerikler sunan siteler yapılandırırken sıkça kullanılır. Aslında bu konuda tek alternatif değildir, ancak “Web Hosting” olarak anılan yapılar sadece PHP ile beraber çalışmaktadır. (Bazı web hostingler JavaScript ile yazılan Node.js desteği vermeye henüz yeni yeni başlamıştır.) Yapı olarak serbest sayılabilecek bir dildir, öğrenme süreci biraz detaylıdır ancak yine de yeni başlayan bir dili olmak için kötü bir tercih değildir.

Ruby

Hiçbir şey bilmemenizin daha faydalı olacağı tek programlama dilidir. Çünkü, hiçbir şey bilmeyen bir adam Ruby koduna bakınca ne döndüğünü hemen anlarken abuk subuk kısaltmalar ve neye göre konulduğunu ancak tasarlayanın bildiği işaretlerin konulduğu programlama dillerine aşina insanlar tarafından “karmaşık” olarak nitelendirilmektedir. Çünkü adamlar düz konuşmayı unutmuş.

Ruby yazılımcının verimliliğine dayalı, güzel bir felsefeye sahip, başlangıçta kolay öğrenilen ancak zaman geçtikçe oldukça karmaşık yapılara üretebilen enteresan bir dildir. Bugün yanlış bilmiyorsam Netflix’ten Airbnb’e kadar çok büyük firmalar Ruby on Rails isminde oldukça popüler bir kütüphane ile İnternet servislerini hazırlar. Ancak bu dilin yavaş diye bilinen Python’dan bile daha yavaş olması gibi sebepler nedeniyle popülerliği düşmektedir. Yine de kendisi temel alınarak geliştirilen pek çok dil vardır ki Crystal, Elixir, Puppet gibi diller doğrudan Ruby’den esinlenmiştir. Bunun dışında yazılımların kontrolü ve yönetimiyle ilgilenen DevOps alandaki en önemli dil diyebiliriz. (Go ve C/C++ ile beraber)

Swift

“Mac bilgisayarım var, iPhone’un hastasıyım, evime Steve Jobs posteri astım, elmayı ısırıp masaya bırakıyorum” diyecek kadar Apple’a düşkün birisiyseniz bu dil tam size göre. Piyasanın asi ve kibirli çocuğu Apple, kendi ürünlerini geliştirmek için daha önceleri Objective C isimli bir dili kullanıyordu. Objective C nasıl bir şey derseniz, bilmeyin daha iyi.

Daha sonra Objective C yazmaktan kafayı yakmış Apple yazılımcıları “Abi tamam, milletin kullandığı programlama dillerini kullanmıyoruz ama bu ne yahu” diye isyan edince yeni bir dil yapmanın gerekliliği Apple’ın yüzüne çarpmış ve “Yapacaksak en iyisini yaparız!” diyerek Swift üzerine çalışmaya başladılar. Sonuç iyi oldu. Swift, bu listede şahsen benim en beğendiğim programlama dilidir.

Swift yazılımcılarını hatasız kod yazmaya yönlendirir ve hıza odaklanır. Ancak hem kolaylığı hem hızı hem de hatasızlığı Swift’i “Rüya dil” yapabilecekken Apple ekosistemi dışında aman aman bir geçerliliğinin olmaması, üstelik hakkıyla geliştirmek için de “Xcode” isimli yalnızca Mac üzerinde çalışan bir yazılıma ihtiyaç duyması gibi yönleri bizi üzmekte. Ancak, yeni yeni dilin Linux, Windows ve Android desteği alması Apple’ın Swift’i daha geniş alanlara açmak istediğini belli ediyor. Belki ileride güzel bir yere geçer, kim bilir?

Bash

Bash, Linux kullanıcılarının oldukça yakından tanıdığı ve işletim sistemine en yakın yoldan erişebilen bir betik dilidir. İşin özü niye bunu listeye aldım bilmiyorum, ama programlamadan bihaber adamların kendi işini görmek için Bash dosyaları yazdığını görünce “Harbi ha… Bash ile programlamaya başlanabilir” diye kendi içimden geçirmiştim. Yani içiniz dışınız Unix ise, IT departmanlarında yatıp kalkacak kadar kendinizi kaptırdıysanız, işletim sisteminde pek çok şeyi elle tek tek yapmak da artık içinizi baydıysa Bash sizin için ciddi kolaylık olur. Dünyaya bakışınız değişir, o derece.

C++

“İşten kovuldum, depresyondayım, unutuldum, aldatıldım” diye ortalıklarda dolaşıyorsanız sizi tamamen hayattan koparabilecek bir dil. Kimi ülkelerde ilk başlayanlara öğretilmesi insan haklarına aykırı olduğu gerekçesiyle yasaklanmış olduğu söylentileri dolaşsa da, gözü kara yiğitler programlamayı öğrenmeye bu dille başlayabilir. Dileyen olursa C++ yerine çok daha ilkel olan C’yi de deneyebilir, o da güzel bir tercihtir.

Şimdi, listeyi bitirdik. Seçin beğenin ve birisini alın. Bence hepsi (C++ ve C de dahil) başlangıç için gayet iyi tercihlerdir. Sizin kişiliğinize ve ilgi alanına hangisi gerekiyorsa onu düşünebilirsiniz.

Bunun dışında size öğrenme sırasındaki tavsiyelerim şu şekilde olacaktır:

  • Programlama öğrenirken öğrendiğiniz dille cebelleşmeyin, kolayını araştırın. Ne yapıyorsanız, en genel hatlarıyla nasıl yapılacağını araştırın ve işinizi kolaylaştıran fonksiyonları, sınıfları muhakkak not edin. Hazır çözümlerden kaçınmayın, hazır çözümler sizin yerine bir başkası tarafından mükemmelleştirilmiş çözümlerdir. Ama kullandığınız hazır çözümlerin de teorisine hakim olduğunuza emin olun.

  • Her dilin kendisine hedef aldığı bir alan olduğunu unutmayın. Yani bir dilin sözdizimsel yapısı ile başka bir dilin sözdizimsel yapısı benzer olmadığından kendinizi programlamayı yeniden öğreniyormuş gibi hissedebilirsiniz. Mesela Swift ile Ruby’nin ne kadar farklı alanlara hizmet ettiğini aklınıza getirin, bu iki dilin de kendisine doğurduğu ihtiyaçlar oldukça farklı ve buna göre kendi kendisini şekillendiriyor. Tek tip bir söz dizimi olsaydı, tek tip bir ihtiyaç olurdu. Farklı bir sözdizimini öğrenirken aslında farklı bir ihtiyacı nasıl gidereceğinizi öğrendiğinizi de unutmayın.

  • Programlama sürekli öğrenilen bir alandır. Her zaman yeni özellikler eklenir ve bu özellikler sizin daha önce ürettiğiniz çözümleri geçersiz kılabilir. Bu yüzden mümkün olduğu kadarıyla sürekli öğrenmeye açık olun, “Ben oldum tamam” demeyin. Ancak diğer yandan da mümkün olduğunca, kendi becerileriniz doğrultusunda da kod yazmaktan çekinmeyin.

  • Algoritma bilmenin oldukça önemli olduğunu bahseden, bu yüzden algoritmaya yönelik problemleri çözmeniz gerektiğini söyleyen kişiler karşınıza çıkacaktır. Gayet haklılardır ancak benim kişisel fikrim başlangıçta somut şeyler üzerine odaklanmanızdır. Çok iyi algoritma bilen ancak somut bir şeyler ortaya koyamayan adamın yanında algoritması zayıf ancak en azından kendi isteklerini halledebilen kişi daha üstündür. Ancak algoritma bilmek, programcılık becerilerinizi hiç olmadığı kadar geliştirir. Bu yüzden ihmal etmeyin.

  • Bir dile saplanıp kalmayın. “Java’nın dünyanın en iyi dili” olduğunu söyleyerek sadece Java yazan ancak onu da yarım yamalak yazan nice insan gördüm. (Bu cümledeki Java’yı C#, PHP ya da C++ yapın, cuk oturur.) Bir dil üzerinde uzmanlaşmaya özen gösterin ancak tek bildiğiniz şey o dil olmasın, programlamanın genel kültüründen uzak kalmayın.

Mümkün olduğunca kendi gözlemlerime dayalı, klişelerden arınmış bir tavsiye yazısı yazmaya çalıştım. Umarım ki bu yazı sizin için faydalı olur. Bunun dışında her şeyde olduğu gibi programlama konusunda da ılımlı ve şüpheci olmak fayda getirir, diğer yazılar gibi bu yazının da sorgulanabilir olduğunu aklınızdan çıkartmayın.