Kod Yazmaya Başlayacaklara Tavsiyeler
Daha önce bir şekilde kod yazmakla haşır neşir olmuş Sözlük yazarlarından, kod yazmayı düşünenlere öneriler.
Kod Yazmaya Başlayacaklara Tavsiyeler

işletim sistemine de hakim olun. hangi işletim sisteminde çalışacaksanız, o sistem hakkında az buçuk bilginiz olsun. hele ki işletim sisteminiz bir linux dağıtımıysa ve çalıştığınız ortamda (php, python, r, ruby fark etmez) shell/stdio/subprocess erişiminiz varsa, standart gnu/linux komutlarının nimetlerinden faydalanın.

kullandığınız programlama dilinin, veya arkadaş grubunuzun, veya çalıştığınız alanın programming style'larını öğrenin ve elinizden geldiğince onlara uyum gösterin.

aşina olmanız için birkaç örnek:

python için pep-8
php için psr-2
c için nasa c-style guide
linux kernel coding style
gnu coding standards
code conventions for the java programming language

hatta pratik amaçlı kendi style guide'ınızı geliştirin.

text editör, ide vs. bolca deneyin. atom.io süpermiş deyip ilk denemede ona çakılı kalmayın. sublime deneyin, notepad++ deneyin, emacs deneyin, vi deneyin. birden fazla text editör kullanabilmek bazen işe yarıyor, özellikle server-side programlama yapıyorsanız.

çalıştığınız dil'in ya da framework'un standart kütüphanelerinin listesini arada bir açıp şöyle bir tarayın. bunun 2.5 tane faydası oluyor.

1) "lan zaten bunu yapan şey varmış, tekrar yazmayayım" diyorsunuz çokça. zaman kazandırıyor ve failsafe kod yazmanızı sağlıyor.

2) projenize fikir katabiliyor, uuid üreten fonksiyonun varlığını görünce bir anda aklınıza bir çözümü uuid üreterek çözmek gelebiliyor mesela.

3) open source dil veya framework'lerde standart kütüphanenin kodlarını okuyarak çok şey öğrenebiliyorsunuz. hatta 1. maddeyi gerçekleştirmemişseniz, yazdığınız fonksiyonla karşılaştırıp neleri atladığınızı ya da daha iyisini yaptığınızı görebiliyorsunuz.
(3'ün önşartı her durumda sağlanmadığı için 2.5 tane fayda var dedim)

iStock.com

regular expressions öğrenin. okuması zordur ama yazması o kadar zor değildir ve acayip eğlenceli, hayat kurtarıcıdır.

bir dili öğrenecekseniz, onu öğreten kitapları almayın, 15 sene önce bu gerekiyordu ama artık bütün dillerin online tutorialları var ve sizin internetiniz var. (yok mu? o zaman internet bağlantısı edinmeyi de listeye ekleyin)

alacağınız kitaplar şu kategorilerde olsun:

1) belli dilde uzmanlaşmayı sağlayan kitaplar. örneğin python için ilk aklıma gelen hacker's guide to python gibi...

2) belli bir alanda programlama yapacaksanız ona eğilen kitaplar. örneğin görüntü işleme çalışacaksanız, bunu anlatan kitapları alıp okuyun tabii. eğer görüntü işleme işini özellikle c# ile yapacaksanız onu anlatan kitapları da alabilirsiniz. veya dil analizi yapan bir web servis yazacaksanız natural language processing hakkındaki kitapları alıp okuyabilirsiniz. amazon'daki reviewları dikkate değer bulabilirsiniz, garip biçimde sağlam adamlar takılabiliyor amazon'a.

3) bible'lar.

her programcının kendine göre bible'ları vardır ama kesişim kümesi bir hayli geniştir bence. örneğin hayatınız boyunca c yazmayacak olsanız bile kernighan ve ritchie'nin c kitabını okuyun. polya'nın how to solve it mesela problem çözme ve probleme saldırma açısından ufkunuzu genişletecek kitaplardandır. knuth'un the art of computer programming serisi de çoktan bible kümesine girmiştir kuşkusuz. programcıların bible'larını alıp okumanın size bir zararı neredeyse hiç olmayacaktır, eğer kitabı beğenmeseniz bile yarın bir gün ortamlarda "ben o kitabı okudum yea çok dandik" artistliği yaparsınız olur biter.

github veya türevi bir oluşumda kodlarınızı barındırın. örneğin open source yaptığınız işler varsa github'a commit edin, ama özel sektöre, müşterinize yaptığınız işler varsa da (ve github'a para ödeyip private repo açacak paranız yoksa da) bitbucket gibi servisler kullanın. hem kodunuzu rahat takip edersiniz, hem de su çok güzel lan.

iStock.com

kendinize problem/ödev yaratın. bunu beceremiyorsanız coding challengelara girin. project euler en popüler ve eğlencelilerinden ama forumlarda, stackoverflow'da bazı problemler görüp onlara da dalabilirsiniz.

ortamları takip edin. slashdot'taki haberlerden çok yorumları okuyun, reddit'te ilgili subreddit'lere subscribe olun, hackaday gibi siteleri takip edin, denk geldiğiniz ortamlardaki programcı/hacker'ların twitter hesaplarını, bloglarını bulup onları takip edin. alakasız konularda bir şeyler okusanız ve anlamasanız da zamanla kulak aşinalığı edinirsiniz. anlamadığınız konuları öğrenmek için önce wikipedia sayfasını açıp mal mal 3 kere okuyun, sonra da uyuyun. uyumak öğrenmek için iyidir.

lisanslar hakkında bilgi edinin. cömert olun, kodunuzu beerware ile dağıtın.

c++ ilk kez programlamaya baslamak icin dogru bir dil degil. oncesinde computer science ile ilgili okumak, arkasindan ogrenilmesi ve pratik yapmasi nispeten daha kolay bir dil secilmesi gerekiyor.

software engineer olmanin iki yolu var. ilki, herhangi bir programlama dilini ogrenip, uygulamaya gecirmek.

ikinci yolu, oncelikle computer science'in ilgili fundamental (temel) bilgilerini okumak, ozumsemek, ancak ondan sonra bir programlama dilini ogrenip uygulamaya gecirmek.

ilk yolla hizli sonuc alirsin. 1 ayda program yazmaya baslarsin. fakat temelin eksiktir. saglam degildir. baska bir dili ogrenmek istediginde sikinti yasarsin. herhangi bir problemi cozmeye kalktiginda, problemin cozumu ile ilgili sikinti yasarsin (algoritma bilgisi eksikligi). data icin sectigin data tiplerinde sikinti yasarsin (data structrures), vs vs.

24 saatte falanca dili ogrenin, 10 gunde fismanca dilde usta olun, gibi kitaplar ya da kaynaklar ilk yolla ilgili. senin okumaya basladigin kitap ise ikinci yolla ilgili, fakat yolun sonlarina dogru okunmasi gereken bir kitap, basinda degil. o yuzden ne birinci yolu, ne ikinci yolu secmis gorunuyorsun. konfucyus demis ki, eger bir dagi yerinden oynatmak istiyorsan, once ufak taslari tasiyarak ise baslarsin. dagi oldugu gibi kaldirmayi denersen, problem gozunde cok buyur, demotive olursun. analatik dusunmen gerekiyor, onundeki problemi ufak parcalara ayirip, her parcayi ayri ayri incelemen gerekiyor.

iStock.com

ayni analojiden gidersek, onundeki dag software engineer olmak, iyi bir programci olmak. ufak taslari tasimak da computer science biliminin temel basamaklarini ogrenmek demek.

ornegin:

- information theory (bilginin kullanimi ile ilgili temel bilgi)

- computer hardware (bilgisayar donanimi -- hangi parcasi nedir, nasil isler, birbirleriyle nasil iletisim kurarlar)

- introduction to operating systems (bu donanimi kullaniciya sunabilmek icin arabirim nasil isler)

- unix/linux (bu arabirim icerisinde en yaygin ve hizli olan unix/linux hakkinda bilgi)

- introduction to programming languages (bu donanimi, isletim sisteminin sundugu ortamda nasil ve ne sekilde kullanabiliriz)

- introduction to data structures (elimdeki bir bilgiyi, hangi sekilde programlama dilinde kullanmaliyim ki hem programim daha hizli calissin, hem de daha islevsel olsun)

- introduction to algorithms (herhangi bir problemi en hizli ve verimli sekilde cozebilmek icin algoritmalari ogrenmek onemli. ornegin en basitinden, 52 kagitlik karistirilmis bir desteyi, en cabuk ve verimli sekilde nasil siralarsin -- kupa 1,2,3,4,.., maca 1,2,3,4.. vs)

unuttugum bir kac basamak daha vardir mutlaka.

bunlarin her biri vakit alacaktir. fakat bunlari yaptiktan sonra, herhangi bir dili ogrenmek sadece syntax'ini ogrenmek kadar kolay olacaktir. saglam program yazabilmek icin gerekli altyapi saglanmis olacaktir.

youtube'ta yukaridaki konularla ilgili videolar arayip izleyebilirsin. khan academy, coursera, ya da stanford gibi universitelerin online kurslarina bakabilirsin. ya da bu konularla ilgili kitap okuyabilirsin (sikici olabilir, video izlemek hem gorsel hem isitsel kortexi kullandigi icin akilda kalmasi daha kolay olur)