1. kodlama öğrenmek isteyenlere verilebilecek tavsiyelerdir.

    "bu dil en iyisiymiş, ben bunu kullanayım" diye bir mantıkla hareket etmemek gerekli. hepsinin kendine has kullanım alanları var. öncelikle amacınızı belirleyin. ne yapmak istiyorsunuz?

    * masaüstü uygulamalar mı? bu uygulamalar her platformda çalışsın mı?

    * android uygulamaları mı?

    * ios uygulamaları mı?

    * uygulamalarımda internet entegrasyonu olacak mı?

    * akademik kariyerinizde yardımcı olması için gelişmiş hesap makinelerinizi kendiniz mi kodlamak mı istiyorsunuz?

    * oyun mu yazacaksınız?

    gibi hedefleri belirleyin, ve ona göre öğreneceğiniz dili seçin. bu nokta önemli. çünkü bazıları ileriki kariyerinde oyun yazmak isteyip derin derin python öğrenmek istiyor. tabiki python ile oyun yazılır ama bu işin standardı c++ gibi alt seviye dillerdir. bir gün ea games gibi bir yerde ise başlayacaksınız c++ bilmek zorundasınız.

    veya akademik kariyer için kullanılacak hesapları yapmak üzre atıyorum javascript öğrenmeniz aşırı mantıksız bir hareket olacaktır.

    dünyada şu an en çok kullanılan 9 dili şöyle bir listeleyelim. bu liste önemli, çünkü bir dili ne kadar insan kullanıyorsa o kadar çok kaynak bulunur demek. (github'a 2015 yılında yüklenen repository sayısına göre)

    1. javascript:

    * web ortamında geliştirme yapmak için neredeyse alternatifsiz olduğundan birinci olması şaşırtıcı değil. web hariç kullanım alanı olmayan bir scripting dili.

    * web sitelerini daha dinamik hale getirmek için kullanılır. sitelerde menü butonuna tıkladığınızda yeni bir sayfaya gitmeden o menünün açılmasını sağlayan dil budur.

    * hayır, java ile bir alakası yok. isim benzerliği sadece

    * web geliştiricisi olmak istiyorsanız olmazsa olmazdır kesinlikle öğrenilmesi gerekli.

    2. java:

    * cross-platform bir dil. yazdığınız kodu her yerde çalıştırabilirsiniz.

    * c ailesinden dillere göre daha yavaş çalışır. ancak uygulama geliştirme olanakları daha fazladır. ayrıca dilin yapısı yüzünden geliştirici hatalarına pek izin vermez. hızlı uygulama geliştirmek için birebir olduğundan da çokça kullanılıyor.

    * windows ve mac uygulamalarının yanında android uygulamaları da geliştirmek istiyorsanız olmazsa olmazdır. java ile yazılan popüler bir de oyun var: minecraft. java ile oyun yaparsanız da böyle oluyor, bakın derim.

    3. ruby

    * yine bir web dili. web developerlar tarafından çokça tercih edilir(di). son yıllarda popülaritesini javascript yüzünden kaybediyor diye tahmin ediyorum.

    4. python

    * yazım stili(*:syntax) gayet basit ve anlaşılır olan bir scripting dili. genel bir algı vardır python'ın yavaş çalıştığıyla ilgili. kısmen doğrudur. c gibi diller dilin yapısı gereği hızlı çalışmak zorunda. python öğrendikçe bu hız açığını nasıl kapatabileceğinizi de öğreniyorsunuz. matris işlemleri için (genelde akademik ve işlem yükü ağır işlemler) numpy, scipy gibi, theano gibi kütüphaneler gpu kullanır mesela. gpu'lar matris işlemleri yapmakta diğer donanım birimlerine göre çok daha iyi çalıştıklarından. duruma göre cython eklentisi ile python kodlarını derleyebilirsiniz de. bu da hızı oldukça optimal düzeye çekiyor.

    * yeni başlayanlar için sıklıkla önerilir. programlama mantığını öğrenene kadar kullanılması uygun.

    * kütüphane desteği oldukça fazladır.

    * tek başınıza yazdığınız günlük projeler, faydalı minik scriptler için kullanılabilir. youtube, dropbox ve google'ın bazı kısımları gibi, önemli olan elemanın işlemci olmadığı (bu örnekler için hız kısıtlayıcı basamak dosya depolama birimleri) büyük projelerde kullanılabiliyor. yine de bir gta5 yapmak için uygun değil, olmayacak da muhtemelen.

    * final courtesy'nin mesajı üzerine hız ve kullanım alanları hakkındaki madde düzenlendi

    4. php

    * bir web dili. web geliştiriciler için tercih edilebilir.

    5. c

    * listede makine diline en yakın olan dil. oldukça hızlı çalışması gereken kodlar genelde c ile yazılıyor. öğrenmesi yeni başlayan birisi için zor, aşina olan birisi için kolay. ustalaşması ikisi için de çok zor.

    * bu dili öğrenmeniz demek, bir bilgisayarın nasıl çalıştığını %90 oranında anlamanız demek. (kalan %10 için assembly)

    * hesaplama, yapay zeka, donanım sürücüleri, işletim sistemleri gibi şeyler yazmak için kullanılabilir.

    6. c++

    * programlama dillerinin şahı, c'nin geliştirilmiş ve içine bir tutam nesne yönelimli programlama eklenmiş hali. c'den farkı class yapıları, template'ler vb. şeyler.

    * kendi deneyimime göre öğrenmesi de ustalaşması da zor. çünkü size yapabileceğiniz şeyler için bu kadar özgürlük tanıyan diller genelde her şeyi kod yazan kişiye bırakır. kodu yazarken ne yaptığınızı biliyor olmalısınız. yoksa tek bir dandik hatanın kaynağını gecelerce arar durursunuz.

    * oyunlar, profesyonel araçlar (adobe ürünleri, muhasebe programları) gibi akla gelebilecek karmaşık ama hızlı da çalışması gereken projeler bu dille yazılır.

    7. c#

    * c ailesinden bir dil. bu da c++'ın üzerine bir şeyler eklenmiş hali. microsoft tarafından geliştirildiği için genelde windows ortamında çalışacak uygulamalar için kullanılabilir.

    * java ile aşırı derecede birbirine benziyor. öyle ki iyi java bilen birisi c#'a şöyle bir 4 saat göz gezdirip olaya tümden hakim olabilir.  ve tabiki vice-versa geçerli.

    8. objective c

    * ios uygulamaları geliştirmek için kullanmanız gereken dil. bunun yeni bir alternatifi ise swift.

    * kullananların pek bir nefret ettiklerini biliyorum.

    * bu konu hakkında fazla bilgim yok, mesaj atarsanız eklemeler yapabilirim.

    9. sql

    *açılımı structured query language olan script dili gibi bir şey. evrensel bir dil, bunu daha çok başka dillerde veritabanı bağlantıları kurmak için kullanılan bir araç olarak düşünebilirsiniz.

    * veritabanı kullanılan hemen her uygulamada kullanılır. veriyi istenen biçimde sorgulamak, kaydetmek, silmek, düzene koymak, göstermek gibi olayları bu dille yaparsınız.

    bu noktadan gerisinde kullanılan niş dillere bakmak gerekli. özel amaçlar için kullanılan programlama dilleri yani. onlar da şöyle:

    1. matlab

    * adından anlaşılacağı üzre matematikçiler, fizikçiler, istatistikçiler vb. gibi hesap kitap işi yapan bilim insanlarının genelde kullandıkları dil. 3 boyutlu grafikler, korelasyon eğrileri, formulasyon işlerini otomatik yapan kütüphaneleri mevcut. (bunları c ile yapsanız haftalar sürecektir muhtemelen)

    2. r

    * veri bilimi (data science) ile uğraşan insanlar tarafından yoğun olarak kullanılıyor. istatistikçiler, medikal alanlar, sosyal medyaların dev sınıflandırma algoritmaları vb. gibi yerlerde kendine alan buluyor.

    * matlab ile benzerliği var. geliştirme ortamı çok hoş. ayrıca ücretsiz.

    3. haskell

    * şimdi... diğer diller bir yana, haskell öbür yana. tamamen ezber bozan bir dil. öğrenmek aşırı derecede eğlenceli ama bir o kadar da yorucu. (bkz: fonksiyonel programlama)

    * matematiksel işlemleri en verimli yoldan yapmak için kullanılıyor genelde. bu dille yazılan kodlar genelde çok açık ve hoş görünüyor. bir o kadar da hızlı ve verimli.

    4. assembly

    * bilgisayara doğrudan işlemci seviyesinden emirler yağdırmak içi kullanılan dil. oldukça zor, karmaşık, tamamen kavramak için ilgili bölümlerin bazılarının lisans diploması gerekebilir (veya güçlü bir irade).

    * bugün için çok kullanım alanı kalmadı. c ile yazılan projelerde çok çok hızlı çalışması gereken kısımlar varsa c kodunun içine assemby kodu gömebiliyorsunuz, en iyi verimi almak için.

    not: aklıma geldikçe eklemeler yapacağım. hatalı/eksik gördüğünüz bir kısım varsa mesaj atın lütfen
  2. *dil değil, algoritma öğrenin.
    *mümkünse c ile başlayın -gözünüzü korkutmasın-
    *takım tutar gibi tek dile bağlı kalmayın. demem o ki size ne gerekliyse onu verebilecek dili kullanın.

    ##eğer ilk adımı attiysaniz##
    *kodunuzu -duruma göre- olabildigince modüler yazın
    *bir de ileriye dönük olarak: rica ediyorum yorum satırlarını kullanmayı alışkanlık haline getirin.
  3. bir amac olarak degil de belli bir amac icin arac olarak kullanilirsa ögrenmesi cok daha verimli ve eglenceli oluyor.

    mesela image processing calisirken bir baktim c++ i da yaninda ögrenmisim.
  4. karşınıza çok büyük bir derya çıkıyor... java, c , c++ , c# , ansi c , python , go ve liste sürüp gidiyor.
    ilk bu işe girdiğinizde gözünüze çok ürkünç gelecektir çünkü o kadar çok öğrenecek şey var ki ve sizse o kadar az şey biliyorsunuz ki. lakin yine de gözünüzü bu korkutmasın.

    öncelikle şunu izlemenizi tavsiye ederim : buyrunuz

    bir de size cesaret ve heyecan vermesi açısından : işte buradan

    bir de ; eğer object oriented yani nesne tabanlı programlama diye bir şey duyduysanız ve bunun normal programlamadan ne farkı var diye merak ediyorsanız o da buradan

    yani kısacası kendi bilgileri ve eylemleri olan objeler yaratıp bir programı bunların birbiri ile iletişimleri ve etkileşimleri üzerine kurmaktır.

    bunu da öğrendikten sonra... hangi dil ile başlamalıyım diye soruyorsanız?
    rahatlıkla c'yi önereceğim size. bunun birkaç nedeni var;
    + birçok diğer yan dillerin kökenini oluşturduğundan. c'yi öğrendiğinizde diğerlerini de öğrenmeyi kolaylaştıracaktır.
    +makine diline çok da uzak olmadığı için kolay bir şekilde mantıksal ( logic ) kısmını aklınızda şekillendirebilirsiniz.
    +bir dil öğrenmek için o dile ait kaynaklar bulmanız gerek ve c bu konuda en yakın rakibi olan java ile başabaş gidiyor. internet üzerinden size c konusunda yardım edecek birçok kaynak bulabilirsiniz lakin önce birazcık ingilizce.
    bu kaynaklarla ilgili olarak ; kaynakların kendileri de ilk baktığınızda gözünüzü korkutacak lakin korkmayın. en geç 1 aya gözünüz aşina olur. en fazla 6 aya ise "nasıl okuma yapacağınızı" öğrenirsiniz; yani nasıl öğreneceğinizi.

    peki c'ye nereden mi başlayacaksınız?
    bir dile nasıl başlıyorsak tabi ki de oradan. mantıklı bir cümle kurabilmek için kelime ezberlemeden önce o dil nasıl şekillenir onu öğrenmeliyiz. yani gramerini.

    c dersleri veren bir youtuber : takdim ederim

    murat taşbaşı'nın kesinlikle tavsiye ettiğim c kitabı : ileri c programlama

    üniversitede ilk yılımda bilgisayar ve programlama 1 dersimi bu kitapla b2 getirebildim (80-85'e tekabül eder ).

    peki her şey teorik mi kalacak? tabi ki hayır !
    orwell dev-c++ -> bu uygulamayı tedarik edin. çok yaygın kullanılan bir c derleyicisi.

    derleyiciler yazdığımız c kodlarını makine diline yani 1 ve 0 lara çeviren ara elemanlardır. bilgisayar yalnızca "var" ve "yok"tan anlar. metinleri ve kodları anlamaz.

    şimdiye kadar belirttiğim her şeyi kesin öğrendim dedikten sonra ne yapabilirsiniz?
    sırada ise algoritma geliştirmek var. yani dili öğrendiniz ama şimdi onunla nasıl meramımı anlatırım. sıra buna geldi;

    rifat çölkesen - algoritma geliştirme ve veri yapıları
    yine şiddetle tavsiye ettiğim bir kitap. algoritma konularına güzelce sizi alıştırıyor.
    algoritma esasen şudur; mesela yukardaki kaynaklara biraz hakimseniz şöyle anlatacağım;
    struct, union, data types, pointer vs. her şeyde bilginiz var ve tekil olarak hepsini kullanabiliyorsunuz ama birçoğunu bir arada kullanmanız ve düzgün bir metodla yazmanız gerektiğinde, bunu nasıl yapacağınızı bilmezseniz sorun çözemezsiniz. programcılıkta amaç var olan bir sorunu çözmek yada kolaylaştırmaktır.

    mesela size türkiyede iller arası km bilgileri bulunan bir harita verdim. istanbuldan balıkesire kaç farklı yoldan gidilir ve en kısa ikinci yol hangisidir diye sorsam. temel bilgilere hakim olmak yetmez. onları kullanmayı da bilmeniz gerekir. burada devreye algoritmalar girer.
    "algoritma kelimesine aşina değilseniz ;
    algoritma, belli bir problemi çözmek veya belirli bir amaca ulaşmak için tasarlanan yol. matematikte ve bilgisayar biliminde bir işi yapmak için tanımlanan, bir başlangıç durumundan başladığında, açıkça belirlenmiş bir son durumunda sonlanan, sonlu işlemler kümesidir." diyor wikipedia dayı.

    eğer rubik küp ile uğraşmışsanız bu tanım aklınızda daha rahat bir şekilde yatar.

    velhasıl kelam şimdi algoritmalara güzel bir girişte yaptınız. peki artık sıra neye geldi?
    bundan sonra ve buraya kadar hep deneyim kazanmalısınz. her zaman elinizdeki bilgileri sınamalısınz. internet üzerinde yine google'dan rahatça bakabilirsiniz. c'de alıştırma yapacağınız birçok kaynak var.

    bu noktaya geldikten sonra. yani temeli biliyor, az çok onunla sorun nasıl çözülür biliyor ve neyi nereden öğreneceğinizi biliyorsanız artık sizi zevkinizle başbaşa bırakıyorum