Teknik Acidan Programlama Dili Secimi

4 Haziran 2014 Çarşamba - Unknown
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.

Not: Programlama dili seciminde insan kaynaginin ve o dilin ekosisteminin de önemi var. Bu baska bir yazinin  konusu :)

No Silver Bullets

Hiç yorum yok: