• bir programlama dilinin ne kadar iyi oldugu su sekilde belirlenir:

    - dili hic bilmiyorken bilir hale gelme suresi (ogrenme kolayligi)
    - problemden cozume ulasma suresi (kodlama/uygulama kolayligi)
    - uretilen cozumu sekillendirme suresi (guncelleme kolayligi)

    bu ucunden hangisine agirlik verdiginize gore ya gelistirici, ya patron ya da musteri mutlu olur.

    bunun haricinde performans aslen programlama dillerinin kiyaslanabilecegi bir olcut degildir. bir dilin gerceklendigi platform ve model performansi yakindan etkiler. yani boktan bir c derleyicisi iyi bir visual basic derleyicisinden daha yavas kod uretebilir. o acidan performans konusuna platform secerken bakmak gerekir, dil degil.

    buradan anlasilmasi gereken de bir projeye baslarken "hangi dille yazalim?" diye tek bir soruyla degil, "hangi platformla yazalim?" gibi birden fazla ve proje ihtiyaclarina htap eden kriterlerle tercihlerin sekillendirilmesi gerektigidir.

    o yuzden bana "programciliga hangi programlama diliyle baslayayim?" diye soranlara "hangisi kolay geliyorsa onunla" diyorum. o konuda hiçbir fikriniz yoksa da hem modern hem basit dillere örnek: python, go, swift.
  • çoğu kişinin yanlış bildiği gerçekte olmayan bir özelliği varmış: platformdan bağımsızlık. hangi dil olursa olsun o dile ait kod yazmak her zaman platformdan bağımsızdır. sonuçta bir programlama dili notepad gibi basit bir metin editörü ile de yazılabilir. bir uygulama her zaman platforma bağımlıdır. burada uygulama denilen programlama dili ile yazılan dilin makinin anladığı dile getirilmiş halidir. her bilgisayar aynı makine değildir. işlemci farklıdır. işlemciye bağlanan entegre kontrollerin adresleri farklıdır. bellek düzeni farklıdır. o yüzden bir uygulama her platformda çalışmaz. o yüzden intel mimarisinde hazırlanan bir kod power pc mimarisinde çalışmaz. günümüzde direk bir uygulama gidip işlemcide çalışmaz bir işletim sistemi vardır uygulama o işletim sistemi üzerinde çalışır. o yüzden bir uygulamanın işletim sistemi ile uyumlu olması gerekir. yani linux'teki bir uygulama windows'ta çalışmaz. programlama dili için en başta platformdan bağımsız dedim. aksini söylemeye başladığımı düşünebilirsiniz. programlama dili platformdan bağımsızdır ama siz onu çalışacağı mimariye ve işletim sistemine göre derlersiniz. burada o zaman önemli olan şey derlemektir anlayacağınız ve derleme işlemi platformdan bağımsız olan programlama dilini platforma bağımlı olan uygulamaya çevirir. siz eğer her platformda çalışan bir uygulama isterseniz öncelikle bilin ki bu imkansızdır. çünkü platformlar farklıdır. yapabileceğiniz o zaman bir uygulamanın öncesi olan o uygulamanın programlama dili ile yazılmış halini dağıtmaktan geçer. ayrıca her platform için bir derleyici yazarsınız ve bu derleyici ile ilgili platformda çalışacak uygulamayı oluşturursunuz. böylece her yerde çalışan bir çözümünüz olur.
    buraya kadar teorik bilgi verdim. anlamayanlar buradan sonrasını okumasın geriye dönüp tekrar okusun. yok yapmam diyorsa dedim ya okumasın.
    şimdi gelelim pratiğe. pratikte olaylar şöyle oluyor. bir şirket bir kuruluş ya da bir kaç adam bir dil tasarlıyorlar ve ardından o dil için kendi kullandıkları platforma özgü bir derleyici hazırlıyorlar. diğer platformları önemsemiyorlar. hatta aynı dile ait birden fazla derleyici de olabilir. örneğin c için microsoft'un cl derleyicisi, linux için gcc olabilir. eğer ansi c ile yazılmış bir programlama dili çıktınız varsa her ikisi ile de derlenir ve çalıştığı platformda aynı işi yapar. ama eğer standart dili kullanmayıp kendilerine özgü özellikleri ya da platforma özgü özellikleri kullanıldıysa programlama dili çıktılarında bu sefer derlenmez. çünkü cl linux'den anlamaz, gcc ise windows'tan. bu da beklenen bir şeydir. bir linux geliştirici windows özellikleri ile ilgilenmez bir windows geliştiricisi de linuxle. diğer dillerde de böyledir.
    yukarıda pratik olayı da anlattım. kısa bir anlatma oldu ama umarım anladınız.

    son olarak java dan bahsedeceğim. bir çoğu için java her yerde çalışıyor, platformdan bağımsız işte diyorsunuz. java iki aşamalı bir derleme sunar ilki java dan java byte code denilen ara koda. ardından siz bu kodu dağıtırsınız. sonra bu kodun çalışacağı ortama java byte kodu derleyicisi yüklersiniz. bu da java runtime dedikleri oluyor. bu da java byte kodu platforma özgü makine koduna çeviriyor. bu olay en başta teorikte anlattığım her platform için bir derleyici yazmaları ile alakalıdır. ama siz java runtime çalışmayacak bir platforma sahipseniz - ki olabilir dünya da sadece windows unix ve mac yok - java sizin platformda çalışmayacaktır. yani bu savunduğunuz ama daha tam olarak bilmediğiniz platformdan bağımsızlık ile terstir.

    umarım yanlış bildiğiniz şeyleri birazcık da olsun düzeltebilmişsem ne mutlu.

    zamanın ötelerinden: (bkz: #19424239)
  • henuz insanlara "nolur beni yaz" diyen turu gelistirilmedi.
  • yava$ı var, hızlısı var, görselliği iyi olanı var, api'lerde süründüreni var, matematiksel olarak güçlü olan var, yerlerde sürüneni var.

    lakin ben programcıyım diyen adam en azından orta düzeyde c/c++ bilmelidir. hayatı boyunca java kullanacak, asp ile uğra$acak olsa bile.
  • "popüler olmak her zaman güçlü/nitelikli/kolay anlamına gelmese de" son 5 senedir en popüler olanı java imiş.
    ancak java'daki düşüşle beraber c'nin popülaritesi artmış.

    tiobe.com'un oylamasına göre mayıs 2010'da popülarite şu şekilde imiş:
    1 java 17.994%
    2 c 17.866%
    3 c++ 9.658%
    4 php 9.180%
    5 (visual) basic 5.413%
    6 c# 4.986%
    7 python 4.223%
    8 perl 3.427%

    nisan 2010'da şöyle:
    1 c 18.058%
    2 java 18.051%
    3 c++ 9.707%
    4 php 9.662%

    mayıs 2007'de ise şöyle:
    1. java – 19.1%
    2. c – 15.2%
    3. c++ – 10.1%
    4. php – 8.7%
    5. visual basic – 8.4%
    6. perl – 6.2%
    7. python – 3.8%
    8. c# – 3.7%
    9. javascript – 3.1%
    10. ruby – 2.6%
    11. delphi – 2.1%

    güncel tiobe index için:
    http://www.tiobe.com/…ent/paperinfo/tpci/index.html

    langpop'un da ilginç verileri var:
    http://langpop.com/

    diğer:
    http://en.wikipedia.org/…n_of_programming_languages
  • ilk bilgisayarların çıktığı dönemde bilgisayar kullanımı için öğrenilmesi gereken komutlar topluluğu.
  • üniversite programlama bölümlerinde pascal, visual basic, delphi, c# şeklinde giderken c#'ı bitirmeden okul biter. web programlama dillerinden de asp'ye takılıp kalınır.
  • günümüzde programlama dillerinin sayısı oldukça fazla. hepsinin birbirinden farklı yazım kuralları, özellikleri ve yetenekleri bulunuyor. yazılımcılar ise bu dillerden hangisine ihtiyaçları varsa onu kullanıyorlar. ancak bu diller birden ortaya çıkmadı. bütün teknolojik ilerlemeler gibi gün geçtikçe özellikleri ve yetenekleri arttı, farklı alanlarda kullanılmak üzere yeni diller geliştirildi. geçmişten günümüze kadar nasıl gelindiğini merak edenler için ;

    günümüzde ilk programlama dili olarak kabul edilen 1883 yılında ada lovelace'ın oluşturduğu bir algoritmadır. ancak o dönemlerde elektronik bilgisayarlar yoktu.

    ikinci dünya savaşı sıralarında almanlar her gün cepheye mesaj göndermekteydi ancak bu mesajlar şifreli olarak gidiyordu. ingilizler bu mesajları ele geçirse de şifrelerini çözmeleri uzun sürüyordu ve çözdüklerinde de mesaj önemini yitirmiş oluyordu çünkü ertesi gün yeni mesaj geliyordu. bu mesajlardaki şifrelerin kırılması için alan turing elektronik bir bilgisayar geliştirdi ve bu sayede ingilizler şifreleri otomatik olarak çözebiliyordu.

    1940'lı yıllarda ilk elektronik bilgisayarlar ortaya çıkmaya başladı ancak bu bilgisayarların hızları ve hafızaları limitliydi. bu limitlerden dolayı yazılımcılar programları makine dilinde yazmak zorunda kalıyordu. makine dili düşük seviyeli bir dil olduğu için kodlaması oldukça zordu ve uzun zaman alıyordu. bu sebeple yazılımcılar yüksek seviye dillere ihtiyaç olduğunu anladılar.

    konrad zuse 1943 - 1945 yılları arasında plankalkül'ü geliştirdi ve bu dilin ilk yüksek seviye programlama dili olması amaçlıyordu ancak istediği gibi olmadı.

    1949 yılında jogn mauchly ilk yüksek seviye programlama dili olan short code'u önerdi. bu dil matematik formülü şeklinde yazılıyordu ve böylece insanların okuyabileceği bir yapısı vardı. ancak bir sorunu vardı, yazılan kodlar çalıştırıldığında her seferinde önce makine diline çevrimesi gerekiyordu. bu da işlemin yavaş olmasına yol açıyor ve amaçlanan hız sorununu çözmüyordu. 1952 yılında alick glennie, autocode'u geliştirdi. autocode derlendiği zaman otomatik olarak makine diline kendiliğinden çevriliyordu. bu dilin adı 2 sene sonra mark 1 olarak değiştirildi.

    autocode kendinden önceki dillerden daha iyi konumda olsa da yeterince ilgi görmemişti. 1954 yılında ıbm'de çalışan bir ekip fortran'ı geliştirdi. bu dil ilk yazılım dillerinden birisi olmasına rağmen günümüzde hâlâ kullanılmaktadır.

    java, c, c++ gibi dillerin ortaya çıkmasına daha uzun zamanlar olsa da bu dillerin temelleri 1958 yılındaki bir komitede atıldı. bu komitede algol dili geliştirildi.

    1959 yılında cobol geliştirildi ve birçok alanda kullanıldı. ilk etapta atm'lerde kullanılan bu dil günümüzde hâlâ kendine yer bulmaktadır. terminatör filminde terminatör'ün görüşünde bu dilin görsel arayüzü kullanılmaktadır. aynı yıl içerisinde yapay zekada kullanılmak üzere lisp dili geliştirildi.

    zaman geçtikçe programlama dilleri daha anlaşılabilir ve yazımı kolay hale gelmiş olsa da yine de yazılım alanında uğraşmak oldukça zor bir görevdi. bu sebeple john kemeny ve thomas kurtz yazılımda ve matematikte iyi olmayan öğrenciler için yeni bir dil geliştirmeye karar verdiler ve basıc dilini ortaya çıkardılar. yıllar sonra bill gates ve paul allen bu dili geliştirdi ve geliştirilen sürüm microsoft'un ilk ürünü olarak ortaya çıktı.

    1972 yılında dennis ritchie c dilini geliştirdi. c ise ilerleyen yıllarda en çok talep gören dillerden birisi haline geldi ve ardından gelen birçok dili etkiledi. bugün java, c++, go, ruby, javascript, perl ve python gibi dillerin temeli c'ye dayanmaktadır.

    yine 1972 yılında donald chamberlin ve raymond boyce sql'i tasarladı. sql, veri tabanıyla çalışmak için tasarlanmıştı ve günümüzde hâlâ veri tabanı kısmında en çok kullanılan dildir.

    1960'ların sonlarından 1970'lerin sonlarına kadar birçok yazılım metodu geliştirildi. 1960'larda geliştirilen simular ilk nesne tabanlı yazılım diliydi. c ilk sistem yazılım dili ve prolog ise ilk mantıksal yazılım dili olarak yerini aldı.

    1980'li yıllarda yeni metodlar geliştirmek yerine önceki dönemlerde ortaya çıkan dillere geliştirmeler yapıldı. bu geliştirmelerden birisi c++ olarak karşımızdadır. c++ 1983 yılında bjarne stroustrup tarafından geliştirildi. c'ye ek olarak nesne tabanlı programlamayı destekliyordu. bu sayede sistem yazılımı ve nesneye yönelik yazılım tek bir dille mümkün hale gelmişti. günümüzde c++ en çok kullanılan yazılım dillerinden birisidir ve birçok program c++ ile yazılmıştır.

    bu dönemlerde ortaya çıkan önemli gelişmelerden birisi de modüllerdi. gelecek zamanlarda modüller yazılım dünyası için önemli bir yere sahip olacaktı. ayrıca nesne tabanlı programlamanın özelliği olan polymorphism de bu dönemde ortaya çıktı.

    apple'ın işletim sisteminde kullandığı dil objective-c 1983 yılında geliştirilmeye başlandı. 1987 yılında ise larry wall tarafından perl geliştirilmeye başlandı.

    1980'lerin sonlarında internet ortaya çıkmaya başladı. hızlıca yayılmaya başlayan internet yazılım dünyası için önemli bir kilit noktasıdır. brendan eich tarafından sadece 10 günde tasarlanan livescript, insanların ilgisini çekebilmek için o dönemlerde gözde olan bir dil ile isim benzerliği yapmaya karar verdi ve adını javasciprt olarak değiştirdi. ortaya çıktığı 1995 yılında kimse javascript'in bu kadar büyüyeceğini düşünmezdi ancak günümüzde en çok kullanılan dillerden birisidir. bugün internetteki sitelerin neredeyse tamamında javascript kullanılır. ancak javascript'i tamamlayan diğer iki teknolojiye de ihtiyacı vardır, bunlar html ve css.

    1990'lı yıllarda ortaya çıkan diğer yüksek seviye dillerden birisi de java'dır. aslen el cihazları ve kablo kutuları için tasarlanan bu dil zaman içerisinde gelişerek günümüzde her yerde karşımıza çıkmaktadır. bugün en çok kullanılan programlama dillerinden birisi java'dır.

    1991 yılına kadar programlama dilleri gelişmeye devam etti. c birçok yönden ihtiyaçları karşılayan bir dildi ancak bazen bu dillerle yazmak zor olabiliyordu. tecrübeli yazılımcılar bile yazım hatalarıyla karşılaşabiliyordu. 1991 yılında guido van rossum kullanıcı dostu bir yazılım dili geliştirdi ve adını python koydu. bu dilin ismi monty python and holy grail isimli diziden gelmektedir. zaman geçtikçe python daha çok kişi tarafından kullanılmaya başlandı ve günümüzde en çok kullanılan dillerden birisi haline geldi.

    bu dönemde ortaya çıkan diğer diller visual basic, lua, r, ruby, php, rebol ve haskell olarak söylenebilir. haskell fonksiyonel yazılım dili olarak ortaya çıkmış ve tamamen fonksiyonlara yönelik çalışmaktadır. bu sebeple karmaşık matematiksel denklemlerde kullanılmaktadır. microsoft'un geliştirdiği visual basic'de oldukça popüler hale gelmişti. veri analizinde r, web tasarımında ise php ve ruby sıkça kullanılmaktadır.

    2000'li yıllara gelindiğinde yazılım dilleri gelişmeye devam etmekteydi. microsoft 2001 yılında visual basic, c++ ve java'nın karışımı olan c# dilini ortaya çıkardı. c# günümüzde microsoft'un ürünlerinde kullanılmaktadır. 2003 yılında martin odersky, android ortamdaki uygulamaların geliştirilmesi için scala dilini tasarladı. 2003 yılında google, büyük yazılım sistemlerindeki hataları tespit etmek için go dilini tasarladı. google daha sonra çapraz platformda uygulama geliştirmek için dart dilini geliştirdi. apple, 2014 yılında swift dilini geliştirdi ve uygulamaları için bu dili kullanmaya başladı.

    bu dillerin bugün nerelerde kullanıldığına bakacak olursak ;

    fortran : nasa, kredi kartları, atm'ler
    pascal : programlama eğitimleri, skype
    c : işletim sistemleri, çapraz platform uygulamalar, unıx
    c++ : adobe ürünleri, google chrome, mozilla firefox, ınternet explorer
    objective-c : apple bilgisayar ve mobil işletim sistemleri
    perl : ımdb, amazon
    python : google, yahoo, spotify
    ruby : twitter, hulu, groupon
    java : android işletim sistemleri ve uygulamaları
    php : facebook, digg, wordpress
    javascript : gmail, mozilla, birçok web sitesi
    swift : apple cihazlarındaki uygulamalar
  • en azından 2020-2021 yılı için kullanım alanlarına göre en mantıklı diller ve framework'ler hakkında bir liste yapmak istedim.

    frontend web geliştirme: javascript ve typescript.
    basitten karmaşığa sırayla vue.js, angularjs ve react.js gibi en ünlü framework'ler doğal olarak javascript ve dolaylı olarak typescript kullanıyor.

    backend web geliştirme: javascript* ve python.
    javascript olarak node.js/express.js çok ünlense de python, django ile çok sağlam. ben şahsen web projemde makine öğrenimi algoritmaları kullanmayacaksam node.js kullanıyorum. sadece makine öğrenimi kullanmam gerektiğinde python'a bakıyorum ama bunlardan biriyle yanlış yapma olasılığınız pek yok.
    yeni olduğundan daha pek kullanılmıyor ama eğer python yolundan ilerlemeye karar verirseniz fast api'ı gözden geçirmenizi tavsiye ederim. kodlaması çok kolay ve hızlı.
    köklü şirketler hala java* ve c# kullanıyorlar. bu gereksizce çok declarative kodlama tarzının zamanla bitip tükeneceğini düşünüyorum.

    mobil app geliştirme: java, kotlin, swift ve javascript*.
    java çok boilerplate'i olan bir dil. kodlaması bence çok sıkıcı. kotlin, java'nın biraz daha sade hali gibi. swift de sadece ios için kullanılıyor. açıkçası sevemedim bunların hiçbirini. bunlar yerine size react native önereyim. react.js gibi. neredeyse aynısı. javascript. çok hoş. android, ios, macos, windows. hepsine tek aplikasyon ve mis gibi framework.

    oyun geliştirme: c++, c# ve javascript.
    unreal engine c++ kullanıyor. c++ çok hızlı bir dil ama diğer diller gibi garbage collection, otomatik deallocation falan yok. pointer'lar, memory allocation ve acı var. ama çok hızlı, çok optimize. her şeyi sizden bekler c++. biraz zordur.
    unity c# ve javascript kullanıyor. unity ile ilgili bir sorununuz olursa c# kaynaklar daha fazla. o yüzden bence c# ile gidin ama şimdiden söylemiş olayım, unity ile yapılan oyunlar genelde cpu'ya çok yükleniyor. tamamen dilden kaynaklanan bir sorun.

    data analizi & yapay zeka & makine öğrenimi: python.
    eskiden prolog, clips gibi diller vardı. rezillikti. şimdi python ile bu işler çok kolay. basit işler için pandas, numpy, scikit-learn gibi library'ler ile 10 dakikada mis gibi yapay zeka veya data analizi çıkarmak mümkün. işler deep learning'e doğru gidince de keras ve tensorflow da python ile yazılıyor zaten.
    makine öğrenimi için dataset oluşturacağınızda, web scraping yapmanız gerektiğinde yine python ile scrapy kullanıyorsunuz, 10 dakikaya binlerce girdili dataset'iniz hazır.

    robotik & gömülü sistemler: c++ ve python.
    okulda direkt assembly kodluyorduk. assembly'den önce c++ işkence gibi gelirdi, assembly'den sonra dünya varmış dedim c++'a geçince. assembly şansa öldü. arduino c++ kullanıyor. arduino'nun kullandığı avr işlemcilerin olayı c++. python kullanan mikro denetleyiciler pek kullanılmasa da yapay zeka algoritmaları içeren robotik projeler genelde python ve c++'ı aynı anda kullanıyor. bu pandemi meselesi çıkmasaydı bunlardan bir tane dizayn edecektik. obje tanıyan ve ona göre hareket eden dev gibi bir robot. edemedik.
hesabın var mı? giriş yap