Kodlama

Öğrenmek İstiyorum

Son Güncelleme: 25 Haziran 2020

Kodlamaya Başlamak için Bir Yol Haritası

Kodlama öğrenmek istiyorum ama kodlama konusunda “kod” kelimesi dışında hiçbir fikrim yok diyen arkadaşım! Yalnız değilsin!

Ortak Derdimiz

Kodlama, yazılım, programlama. Günümüz dünyasında çeşitli varyasyonlarını duyduğumuz kavramlar. Gelecekte bunların öneminin daha da artacağı söyleniyor. Benim gözlemlediğim kadarıyla nerede bir kişisel gelişim konusu açılsa kodlama bir şekilde o konuya dahil oluyor. Doğruyu söylemek gerekirse, kodlamanın öneminden bahseden yazılar ya da konuşmaların istatistiksel olarak ne kadar doğru olduğunu bilmiyorum. Kendim de araştırmadım ama bu kadar konuşulması üzerine bu kavramın en azından ne olduğuna bakmak mantıksız gelmiyor. Bunun üzerine bu kişisel gelişim konuşmasının/yazısının alıcıları olarak aklımızda bir soru oluşuyor. Genelde bu soru “internette bir sürü bedava kaynak var” diye cevaplandırılıyor. Bu cevabı bir sürü kez duyduktan sonra tutarlı olan bir çıkarım yaptım.

Bu cevabı verenlerin kendileri de internete bakmamış ve ,”internette bir sürü bedava kaynak” olduğunu başkasından duymuş insanlar. Eğer baksalardı bu cevabın aslında ne kadar az yardımcı olduğunu anlarlardı. İnterneteki kaynaklar gerçekten fazla ve hepsi kendi içinde kaliteli, ancak sadece ne yapmak istediğini bilen biri için işe yarıyorlar. Maalesef internete “Abi kodlama lafı bir konuşmada geçti, çok da önemli bir şeymiş, ben buna bir bakayım dedim, ne yapabilirim, nerden başlayayım?” diye gittiğimizde pek bir şey bulamıyoruz ve kodlama fikrinden bir anda soğuyoruz. Oysa benim de dahil aklımızda bu soru var. Bu soruyla geldiğimizde karşımıza “hangi dilde öğrenmek istiyorsun?” sorusu çıktığında da aklımıza gelen cevaplar “Türkçe” veya “İngilizce” oluyor. Hiçbir şey bilmezken programlamanın dili olduğunu nerden bilelim.

Bu yazıyı “kodlama” kavramını sadece kelime olarak duymuş ve başlamak için yapacak net bir adım arayan herkes için yazıyorum. Burda önereceğim adımların ve kaynak kalitesinin objektif olarak ne kadar iyi olduğunu bilmiyorum. Eğer bildiğiniz daha iyi kaynaklar veya başlangıç noktası varsa lütfen bunu paylaşın. Ben bu yazıyla kendi tecrübeme nesnel bakmaya çalıştığımda çıkardığım bir yolu paylaşmak istiyorum. Derdimi umarım bu üç paragrafta az çok anlatabilmişimdir, şimdi asıl konu olan kodlama öğrenmeye geçeyim.

Giriş

Kodlamayı hepimiz genel olarak (belki de filmlerden) “siyah ekrana bir şeyler yazıp enter tuşuna bastığımızda bilgisayarın bir şey yapması” olarak görmüş veya duymuşuzdur. Bu ne kadar alaycı bir ton gibi gelse de gerçeklikten çok da uzak bir düşünce değil. Kodlama esasen bilgisayara bir şeyler yapması için komutlar yazmak. Bunu yapma sebebimiz de bilgisayarların bir sürü işi insanlardan daha hızlı ve verimli şekilde başarabilmesi. Peki bilgisayarlara bir şey yapmasını yazarak nasıl söylüyoruz? Normalde “Google Chrome’u aç” deme şeklim logoya tıklayarak. Harika soru! Bilgisayarlar ne kadar yetenekli olsalar da en basite indirgendiğinde 0’lar ve 1’ lerle çalışıyorlar. Yani o kadar akıllı değiller. Bu 0 ve 1’ler sinyal var ya da yok demek. Bilgisayarlar sadece sinyal var ya da yoktan anlıyorlar. Sinyal orta diye bir seçenek bile yok. “Zor olmaz mı öyle ya, bilgisayar neler neler yapıyor?”. Bu soru aklınıza geldi mi bilmiyorum, ben bunu ilk duyduğumda kafamda yankılanan soru oydu. Bu soru çok doğru bir soru, ve cevabı evet. Evet çok zor olur. Eğer bilgisayarlara bir şey yaptırmak için sadece 0 ve 1’leri kullanabilseydik bir şey oluşturmak imkansıza yakın olurdu. Bir milyon 1 ve 0’dan oluşan bir komutun bir yerinde fazladan bir sıfır koyduğumuzu düşünün… “Herhalde bilgisayarlara komut bu şekilde verilmiyordur, filmlerdeki hackerları da 1 ve 0 yazarken hiç görmedim.” Bu soruları görüp “ne kadar salak sorular, ne alaka” diye düşünüyorsanız, bu soruların yukardaki bilgileri öğrendikten sonra aklıma gelenler olduklarını gururla kabul ediyorum. Konuya yine kendi sorumun ne kadar güzel olduğunu belirterek dönüyorum.

Programlama dili kavramı işin içine tam bu soruyla giriyor. Programlama dilleri bilgisayara insanın anlayabileceği bir şekilde verdiğimiz komutları bilgisayarın anlayacağı dile çevirerek bilgisayarla daha kolay anlaşmamızı sağlıyor. Bazı programlama dilleri makine diline daha yakın (ingilizcesi low level programming language) ve o dilde yazılan komutlar makine diline daha rahat çevriliyor. Bu da bilgisayarların istenilen işlemi yapma hızını arttırıyor. Bazı diller ise insan diline daha yakın, okuyup biraz düşündüğümüzde kodun ne yaptığını anlayabileceğimiz diller. Bunlarla yazılan komutlar ise bilgisayar diline daha zor çevriliyor ve hızları daha düşük oluyor. Hangi tip bir programlama diliyle kodlama öğrenmeye başlamak önemli bir soru. Her dersin farklı bir stili ve düşüncesi var.

Bana göre amaca bağlı. Amaç dediğim “hızlı programlar yazmak istiyorum” gibi amaçlar değil. Öyle olsaydı zaten yukarıdaki açıklamadan sonra okumanıza gerek yok. Maalesef biz başlarken ne tip programlar yazmak istediğimizi bilmiyoruz, ama biraz düşündüğümüzde cevabını bulabileceğimiz sorulara göre yol haritaları hazırladım: “İngilizce biliyorum ve ciddi bir şekilde kod yazmak istiyorum”, “İngilizce biliyorum ama çok ciddi bir niyetim yok neymiş bir bakayım diyorum”, “İngilizce bilmiyorum ama ciddi bir şekilde kodlama öğrenmek istiyorum”, “İngilizce bilmiyorum ve çok da ciddi düşünmüyorum”. Bu yol haritalarını anlatmadan ve İngilizce bilmenin ne alaka olduğunu açıklamadan önce bu düşünce stillerinin hiçbirinin bir diğerinden üstün olmadığını belirtmek istiyorum. Herkesin farklı seviyede ilgisi ve zamanı olabilir. Bu bir sorun değil. Ayrıca ciddi düşünüp vazgeçmek ya da ciddi olmadan başlayıp sonradan bağımlı olmak gayet sık yaşanan olaylar. Konuyu dağıtmadan İngilizce ve kodlamanın ilişkisini anlatacağım. Böylece fazla zamanı olmayanlar ya da üslubumdan sıkılmış okuyucular bütün yol haritalarını okumaya mecbur kalmayacak.

İngilizce ve Kodlama Ne Alaka?

Buna verilebilecek bir sürü cevap var. İngilizce kodlama öğreten kaynak sayısının daha fazla olması aslında çok da önemli değil. Bir “Amerikancı” olarak da kodlamayı İngilizce öğreten platformlara daha çok saygım yok. Bu soruya verilen tipik cevaplar bu eksen üzerinde. Benim daha samimi ve orijinal düşüncelerim olduğunu düşünüyorum. Öncelikle programlama dilleri İngilizceye benzer bir dille çalışıyor. Bana göre programlama aşırı soyut bir iş. Yazılan şeylerin bilgisayara ne yaptırdığını anlamak zor. Ancak programlama öğrenmeye başladığınızda göreceğiniz İngilizce “if, else, for, while” gibi sözcükler anahtar bir rol oynuyor. Bu tip kelimeler anlaşıldığında verilen komutlar çok daha anlaşılır oluyor. Hata yaptığımızda (ve hepimiz yapıyoruz) bilgisayarın verdiği uyarılar ve hata mesajları İngilizce. Bu mesajları anlamadan sorunu çözmek (özellikle amatörken) çok zor. Yukarıdaki durum İngilizcenin çok basit bir seviyesi olmasına rağmen önemli. Ancak bana göre İngilizce bilmenin faydasının en çok görüldüğü yer değil. Tekrar söylüyorum, bu zor bir iş. Kimse tamamen tek başına kod yazmıyor. Kodlamanın yarısından fazlası yapmak istediğin işlemi google’a sormak, sonra da neden kendi yaptığın işlemin çalışmadığını google’a sormak. İnternetten yardım almadan kodlama yapmak neredeyse mümkün değil. Harvard’ın CS50 bilgisayara giriş dersinde bile ilk öğrettikleri şey google’ın kodlama için nasıl kullanıldığı. Kendimden örnek verirsem, şu an kozmolojik simülasyon analizi yapıyorum. Aşağıdaki internet geçmişimin genel hali :)

Gördüğünüz gibi hepsi kırık İngilizceyle yazılmış google aramaları ya da çok çok spesifik sorular. Hala soruyorum. Bilgisayar okuyan kişi de soruyor, profesör de, NASA’da çalışan da. Bu tip kodlama sorularının saatler harcanarak düşünülmüş iyi cevapları var. Hatta bu cevaplar bakımından en yaygın siteler https://stackoverflow.com/, https://www.quora.com/, https:// www.reddit.com/, https://www.geeksforgeeks.org/. Fark ettiyseniz bu sitelerin hepsi ingilizce ve kodlamanın önemli bir parçası. Ayrıca linkleri buraya yapıştırırken bu sitelerin hiçbirinin ana sayfasına daha önce girmediğimi fark ettim. İnternete sorumu yazdığımda bu sitelerden birinin spesifik makaleleri çıkıyor. Kısacası, bu siteleri anlayabilmek herhangi bir yeni programcıya saatler kazandırır. İngilizce bilmeden sorunları çözmeye çalışarak harcayacağınız vakitle İngilizce öğrenebilirsiniz. Nasıl mı İngilizce öğrenilecek? Dersimiz Dünya bunun için ideal bir platform!

İngilizce Biliyorum ve Kodlama Konusunda Ciddiyim

Eğer bu başlık altındaysanız işiniz göreceli olarak kolay. Benim de aldığım, yukarıda da bahsettiğim Harvard’ın CS50 dersi programlamaya giriş için mükemmel bir ders. O kadar iyi ki Harvard’ın rakibi Yale Üniversitesi kendi programlama giriş derslerini yapmak yerine öğrencilerine Harvard CS50 dersini online olarak veriyor. Dersin giriş videosunda ve açıklamasında daha heyecanlandırıcı ifadeler var. Kısaca bu dersi aldıktan sonra her programlama dilini öğrenebilecek ve profesyonel olmayacak şekilde bilgisayarla yapılabilecek şeyleri yapabilecek ya da yapmayı öğrenebilecek hale geliyorsunuz. Ayrıca Google’lama yeteneğiniz baya gelişiyor. Ders Harvard ve MIT’ın kurduğu online ders platformu edx’ te bedava. Linkini paylaşıyorum.

Ana dersin linki: https://www.edx.org/course/cs50s-introduction-to-computer-science Ders ana dersten sonra dallara ayrılıyor. Dallar web, apple mobil, android mobil ve oyun tasarımı. Şimdiden bunları söylemek kafa karıştabilir. Ana dersi aldıktan sonra kalanını düşünürsünüz.

İngilizce Bilmiyorum Ama Kodlama Konusunda Ciddiyim

Bu durumda çok sevinmeyeceğiniz bir cevap vereceğim: İngilizce öğrenin. Yukarıda bahsettiğim İngilizce bölümünün üzerine bunu deme sebebim Harvard CS50’nin ne kadar iyi bir kodlamaya giriş dersi olduğu. Ciddi bir şekilde kodlamaya başlamak isteyenler için daha iyi bir ders düşünemiyorum. Bu dersi yavaş bir şekilde takip edebilmek için B1 İngilizce yeterli olur. Tabii ki ne kadar yüksek o kadar iyi. Ekrana bir şey yazdırabilmek için İngilizce öğrenmek çok uzun bir iş gibi geliyorsa kodluyoruz.org Harvard CS50 dersine Türkçe dublaj yapmış. Yine bedava. Dersi 2020 Ağustostan itibaren sertifikası da dahil olmak üzere herkes alabiliyor. Bu dersi almak için İngilizce gerekmese de dersin problem setlerinde yardım almak ve internette sorabilmek için yine de B1 seviye ya da daha üstü çok çok çok faydalı olur.

Türkçe dersinin link: https://www.kodluyoruz.org/cs50/

Ana dersin linki: https://www.edx.org/course/cs50s-introduction-to-computer-science

İngilizce Biliyorum ama Ciddi Değilim

Ciddi değilseniz yukarıda gördüğünüz Harvard CS50 dersi sizin için çok fazla zaman gerektirir. İnternette bir sürü bedava İngilizce kodlama kursu var. Muhtemelen bunların hepsi ciddi değilseniz benzer kalitede. Bu yolun yukarıdakiyle farkı önereceğim başlama programlama dilinin Python olması. Python insan diline daha yakın ve öğrenmesi kolay bir dil. Eğer apple bilgisayarınız varsa bilgisayarınızda python kodu yazabilmeniz için herhangi bir şey kurmanıza ya da indirmenize gerek yok. Mac’de ⌘-space tuşlarıyla (command-space) bilgisayarınız içinde bir şeyler arayabiliyorsunuz. Bu aramaya “terminal” yazdığınızda karşınıza bir ekran çıkacak. Bu ekrana “python” komutunu yazarak python kodu yazmaya başlayabilirsiniz. Linux kullanıyorsanız da sanırım aynı şey geçerli. Windows için de kolay bir yolu var internete yazıp bulabilirsiniz.

Mac OS içinde "terminal" uygulamasını açmak

Terminali açtıktan sonra python kodu yazmak. Bu örnekte bile başta hata yaptım :)

Kodu yazdıktan sonra kntrl d tuş ikilisiyle terminale dönebilirsiniz. Hiç kod yazmasanız bile bilgisayarda böyle bir şey açabilmek etkileyici. Pythona çok kolay bir şekilde ulaşılıyor. Python için önereceğim ders ise codecaedmy websitesindeki “Learn Python 3” dersi. Merak etmeyin bir dersin üçünüsü değil python’ın üçüncü versiyonu. Pro hesapla dersin daha çok noktasına ulaşabilirsiniz. İlk hafta bedava üyelik var. Dersi dişinizi sıkıp bir haftada bitirirseniz bedavaya pro hesabı kapmış olursunuz.

Ders linki: https://www.codecademy.com/learn/learn-python-3

Ayrıca microsoft ve python bir aramadan fazla olmadığına inanmayanlar için:

İngilizce Bilmiyorum ve çok da Ciddi Değilim

Hiç sorun değil. Önereceğim başlangıç programlama dili yine aynı, python. Python’ı çeşitli bilgisayar sistemlerinde (Windows, Mac OS, Linux) çalıştırmanın ve neden python’nun ciddi olmayan bir başlangıç için iyi bir dil olduğuna yukarıdan bakabilirsiniz. Size önereceğim bir türkçe Python dersi var.

Ders: https://www.cizgi-tagem.org/e%C4%9Fitim/python-programlama-ve-gomulu-sistemler-uygulamalar/

Bonus

CS50 dersinde kodlamaya başlatmak için kullanılan ve ciddi olsanız da olmasınız da keşfetmek için güzel bir kodlama platformu https://scratch.mit.edu/ . Bu platformda kendi basit oyununuzu yaratarak kodlama dünyasına giriş yapabilirsiniz. Neler yapılabileceği ana menüdeki keşfet kısmında mevcut. Site türkçe de dahil olmak üzere bir sürü dilde kullanılabiliyor.

Bu da zamanında benim yaptığım oyun: https://scratch.mit.edu/projects/327271193/