Hangi Programlama Dilini Seçmeliyim?

Acaba hangi programlama dilini öğrensem diye benim gibi İnternet’te gezenlerden seniz, bulduğum bu güzel yazı belki size tercih konusunda bir fikir verebilir.

Çünkü giriş seviyesindeki tüm meraklılar, genelde en yakınındaki kişinin bildiği programlama dilini öğrenerek sektöre adım atmakta. Hangimiz öğrendiğimiz ilk dilin genel özelliklerine hakimdik? İlk amacımız; tıklayınca açılan, yazdığımız bir şeyi görüntülemek veya ekrana verdiğimiz karakterler dahilinde bir karakter kümesi çıkartmak(mesela sayısal loto tahmini gibi). Şimdi biraz daha bilinçlenip, gerçekten yazılım dillerinin temel mantık ve amaçlarını görelim.

Teknik Açıdan Programlama Dili Seçimi

Bu yazida diller arasindaki farklari anlatmaya calisacagim. Maalesef her dil ile her sey yapilabilirmis gibi yanlis bir kani var. Populer dillerden örnek vermeye calistim.

Programlama dilleri 3 özellige göre farklilik gösterirler: üretkenlik (productivity), hataya duyarlilik (safety), calisma hizi (performance).
Bu 3 özelligin ücünü de en üst düzeyde bulunduran maalesef bir dil yok. Her dil belli seviyelerde ücünün karisimindan olusuyor.
Bunun sebebi de bu 3 özelligin birbirleriyle ciddi sekilde celisiyor olmasi.

Bu 3 kavrami biraz ayrintili ele alalim.
Üretkenlik özellikle dynamic typed, yorumlanan (interpreted) dillerde buldugumuz bir özellik. Bu diller derlenmedikleri icin programcilar gelistirme esnasinda derleme ile vakit kaybetmiyor. Bu diller dinamik türlü (dynamic typed) oldugu icin ve fonksiyonlarin/metodlarin parametreleri ve dönüs türleri belli olmadigi icin kod yazimini kolaylastiriyor. Derlenmemeleri hiz kaybina neden oluyor, fonksiyonlarin/metodlarin parametrelerinin ve geri dönüs degerlerinin belli olmamasi cok büyük bir uygulama gelistirmeyi neredeyse imkansiz hale getiriyor. Kritik uygulamalarda bu yüzden tercih edilemiyorlar. Hafiza yönetimi (memory management) ile programci ugrasmadigi icin cok daha üretken oluyor ama uygulamalarin performansi bu yüzden düsüyor. Python, Ruby, Php, Javascript, Perl bu gruptaki diller. Cok üretken bir sekilde uygulama gelistirmenizi sagliyorlar, projeniz büyüdügü zaman hatalari engellemeniz cok zorlasiyor. Bu dillerin özellikle kritik olmayan uygulamalarin gelistirilmesi icin tercih etmek gerekli. Finans, havacilik, telekom, nükleer santral, uzay arastirmalari gibi kritiklik düzeyi yüksek alanlarda bu yüzden bu dillerin kullaniminin olmadigini görüyoruz. Fakat kritik olmayan web projeleri icin cok üretken bir zemin sagliyorlar.

Hataya duyarliliktan (safety) bahsederken aslinda 2 önemli noktadan bahsediyoruz. Türlerin net olmasi (static typing) fonksiyonlarin/metodlarin sadece bir türde parametre almalari ve bir türde veri geri dönmeleri. Ikinci önemli nokta ise hafiza yönetimi (memory management). Tüm derlenen (compiled) diller static typed dillerdir, bu yüzden derlenen diller hataya duyarliligin yarisini halletmis olarak yola cikiyorlar. Hafiza yönetimi tüm derlenen dillerin sagladigi bir özellik degil, bu biraz bazi dillerin cok eski olmasindan (C, C++) dolayi biraz da performansa önem vermelerinden kaynaklaniyor. Bu yüzden cok dikkatli kod yazilmazsa memory leak olusturarak uygulamalarin cökmesine neden olabiliyorlar. Java ve C# gibi görece daha yeni derlenen diller hem static typed olduklari icin hem de hafiza yönetimi sagladiklari icin en üst düzeyde hataya duyarlilik sagliyorlar. Bu yüzden Nasa mars’a gönderdigi aracini Java ile programlarken, web sitesini php ile yapiyor. Eger yapmak istediginiz uygulamanizin kritiklik seviyesi finans yazilimlari, telekom yazilimlari, yüksek hacimli e-ticaret siteleri gibi cok yüksek ise sececeginiz dilin static typed ve memory management yapan bir dil olmasi gerekiyor.

Performans konusuna geldigimizde ise derlendikleri ve memory management yapmadiklari icin C++ ve C ön plana cikiyor. Eger performans uygulamanizdaki vazgecilemeyecek bir özellik ise bu dillerin secilmesi gerekiyor. Tabi bu durumda olasi memory leak’leri engellemek icin cok ciddi bir yazilim gelistirme süreci sürdürmelisiniz. Alt seviye telekom programlari, isletim sistemleri, veritabanlari ve oyunlarin bu yüzden memory management yapilmayan derlenen dillerle gelistirilmesi tercih edilir. C++ ile C arasinda da C++’in nesne yönelimli programlamayi desteklemesi dolayisiyla bir performans farki olusuyor. C biraz daha yüksek hizda calisiyor bu yüzden. Google bile yüksek hiza ihtiyac duymasina ragmen C kullanmamayi tercih ediyor saydigimiz nedenlerden ötürü.

Eger cok kritik islerle ugrasiyorsaniz ve hatayi minimize etmek istiyorsaniz: Java, C#
Üretkenlik en önemli kriterinizse ve kritik bir uygulama ile ugrasmiyorsaniz: Php, Python, Ruby, Javascript
Yüksek performans gerektiren bir is yapiyorsaniz ve uygulama gelistirme hizinizin yavas olmasi sorun degilse: C++ ya da C (tekrar düsünün!)
Bu yaziyi yazmamdaki etken dil seciminin cok kritik bir konu oldugunu ve yapilacak projenin dogasina göre karar verilmesi gerektigini vurgulamakti.
Python ile nükleer santral kodu yazmak inanilmaz riskli olacagi gibi Java ile web projesi yapan bir startup kurmak da cok yavaslamanizi saglayabilir. Her dilin kullanilmasi gereken yerler ayri.

Yazıyı yazan ‘Ne Garip Şeyler Var Ya‘ blogu sahibine, bu yazısı için çok teşekkür ederim.

Bir cevap yazın