7 Nisan 2009 safkan

Programlama Dilleri – Hangisi Daha İyi?


Sürüp giden bir tartışmadır bu. Hangi programlama dili daha iyi?
İnsanlara tek tek sorarsanız, genel olarak alacağınız cevap, tek bir dil olacaktır. Her biri de bu seçimini hiddet ve şiddetle şu andan sonsuza kadar savunacaktır. Neden mi? Çünkü her biri kendi problemi için doğru olan programlama dilini seçmiştir. Bunu seçerken bir-iki başka dil de denemiştir, onların işe yaramadığını da görmüştür. Yani, söylediği doğrudur. Kendi problemi için.
Şöyle bir laf var: Eğer elinizdeki tek alet çekiç ise, her şey gözünüze çivi gibi görünmeye başlar…
Ama her şey çivi değildir… Vida vardır, cıvata vardır, perçin vardır…
Peki, hangi dili öğrenmeli, hangisini kullanmalı? C var, C++ var, Java var, C# var, Perl var, Python var, Javascript var…
Şöyle bir üzerinden geçelim durumların, bakalım bir yere varabiliyor muyuz…
C:
Hey baba torikler… C, yaşça benden büyüktür, 1970 doğumlu olarak kırk yaşına yakındır. Seviye olarak, assembly seviyesine çok yakındır. Programcıya maksimum esnekliği sağlar — inanılmaz yanlış şeyler yapmak dahil, her şeye izin verir; genel olarak “programcının ne yaptığını bildiğini” varsayar. Bir CPU’dan olabilecek en yüksek performansı çıkartmak için ideal dildir — ancak çok kısıtlı durumlarda (gerçekten çok kısıtlı) C yerine assembly diline dönme gereği duyulur. Mesela, device driver veya “number crunching” (yani sırf matematiksel hesaplama) işi yapacaksanız, ideal programala dilir, pek eline su dökecek dil de bulamazsınız. Ancak öte yandan, hafıza yönetimi tamamen programcıya bırakılmıştır. Thread desteği kütüphane aracılığıyla vardır. Network desteği de keza. Bol miktarda “boilerplate” kod gerektirir. (Boilerplate kod dediğimiz şey, yani aslında iş yapmayan, ancak o dilin yazım kurallarına uymak için yazılması gereken kod kısımları…) Dolayısyla, web programcılığı, database işleme veya daha genel olarak bilgi sistemleri işleri için pek uygun bir seçim olmayacaktır. Yazmaya yazılır da, uzun zaman alır ve zor olur. Özetle, “RAD” denilen, “rapid development” işi için çok iyi bir seçim değildir. C’yi severiz, saygımız vardır.
C++:
İşte size çıfıt çarşısı misali bir dil. İçinde o kadar çok şeyi barındırır ki, ne idüğü belirsizdir aslında. Yani içinde o kadar çok çeşit programlama şekli içerir ve o kadar hiç birini zorlamaz ki, neredeyse “amorf” bir programlama dilidir. Dili icad eden Stroustroup (adını doğru yazmışızdır umarım) dilin popüler olması için, herkesin her istediğini dile koymuştur. Object-oriented programlamayı destekler, yani “class” meselesi. Template programlama vardır. İsteyen düz C gibi de kullanabilir. Function ve operator overloading’e müsaade eder ki, bunlar beter şeylere dönüşebilir. Çok iyi kod yazmak (iyi = anlaşılır) mümkün olduğu gibi, iğrenç kod yazmak da mümkündür. C’de eksik olan şeyler bunda da eksiktir öte yandan. Hafıza yönetimi yine programcının eline kalır. Rapid development veya web development için çok güzel bir seçim değildir. Performans olarak C’ye yakın performans verse de, bir takım overhead’ler dolayısıyla, performansta C kudretine erişemez. (Vırtual tables vs. gibi. Limit olarak C’ye yaklaşır, ancak prensipte geçemez diyelim. Aman kör nokta bulup gelmeyin bana.) Öte yandan, object-oriented yazılacak, performans gerektiren büyük çaplı uygulama projelerinde, güzel bir seçenektir. Yalnız, dilin afedersiniz her bokunu bir arada kullanmaya kalkışmamak gerekir. Anlaşılır kod yazmak için kaçınılması gereken yerler vardır. (Operator overload etmeyin, exception kullanmayın, dayak istemeyin falan gibi.) Ha, bu arada, söylemeden geçmeyelim, Google’daki üç “resmi” dilden biridir; ortamın ağır topudur.
Java:
Nispeten genç bir dil. 1995′de icad edildi. Sun tarafından. (Sene 1999′da “on yıl tecrübeli Java programcısı” arayan adamlar vardı, onu da söylemeden geçmeyelim.) İlk önce browser’ın içine applet yazmak için bir dil olarak çıktı ortaya. Zaman içinde applet’ler gözden düştü, bunlar doğru dürüst çalışmadı çünkü. Server-side Java başta pek hesapta yokken, sonradan işin “esas” tarafı haline geldi. İcad eden onlar değildir muhtemelen ama, yarı-derlenme olayını ilk popüler yapan dil Java’dır. Yani, derleme, Java’yı “bytecode” denen şeye çevirir. Bu daha sonra çalışma esnasında JVM denen “Java Virtual Machine” tarafından interpret edilerek çalışır. İlk zamanlarda, Java’nın yavaşlığı meşhurdu, pek çok derdi vardı. Ama zaman geçtikçe pişti Java. Başlarda 1:10 olan hız oranı (Java C’ye karşı mesela) tamamen nümerik olan uygulamalar hariç, 1:2 falan civarına geldi. Arada JIT compilation denen şey icad edildi ki, “Just In Time Compilation” demek, çalışma anında Java bytecode’dan makina koduna derlenir oldu. Java’nın avantajları, C++’daki problemli şeylerin çoğunu atması, “garbage collected” hafıza modeliyle birinci seviye hafıza yönetmini programcının elinden alması, “pointer aritmetiği” kullandırmaması, “multiple inheritance”a izin vermemesi, “operator overloading” yaptırmaması oldu. Bunlara ek olarak, Java network ve database programlama için gerekli şeyleri, programlama için gerekli veri yapılarını standart kütüphanelerinde barındıran bir dil olarak, bunlarda daha hızlı development’a imkan tanıdı. Dil, yapısı itibariyle, alabildiğine büyük projeler gelişirmeye uygun bir dildir. Information systems şeklindeki sistemler için de idealdir. Bu şekliyle, server-side web programlamanın kuvvetli silahıdır. Ama, “number crunching” işinde nihai olarak C veya C++ ile yarışamaz. Ha, yine kaçırmayalım, Java Google’daki üç resmi dilden ikincisidir.
Python:
Python. Java’dan yaşlı, ama popüler olması Java’dan sonra bir dil. Script dili. Performans olarak yukarıdakilerin hiç biriyle cirit atamaz. Object oriented programlama destekler. En büyük kuvveti şu: Acayip hızlı kod yazılır. Neredeyse sıfır “boilerplate” kod içerir. Direkt konuya girersiniz. Development time, Python ile yukarıdakilerin hepsinden hızlı olur. Bu da önce bytecode’a derlenir, ama ondan öte geçmez. Perfomansın dert olmadığı durumlarda, ya da hızlı prototip üretmek gerektiğinde, çok şahanedir. Tüm kütüphaneleri Java kadar olgun olmasa da, oldukça geniştir. Standart kütüphanelerini kullanmak çok kolaydır. Pek çok durumda, diğer programları çalıştırmak ve aralarında köprü görevi görmek için de idealdir. Hafif bir silahtır, bıçak gibidir, çok fazla hasar vermek gerekince işe yaramaz, ama kullanması çok hızlıdır. Diğer dillerde daha “çı” diyemeden Python’da kod yazılmış bitmiş olur. Bu da Google’daki resmi dillerin üçüncüsü.
Javascript:
Yine bir script dili. Java’yla isim dışında ve biraz format dışında zerre kadar alakası yoktur. Biraz object-oriented’a benzetilmeye çalışılmışsa da, aslında bir “prototype” dilidir. Browserlar üzerindeki mecburi, de facto programlama dilidir. AJAX onsuz olmaz. Genel olarak büyük projelere soyunmaya kalkışılacak bir dil değildir. Server side Javascript kısa bir müddetten sonra tedavülden kalkmıştır zaten. Gerçekten anlayanı pek azdır, genelde oradan buradan afırma program parçalarıyla kullanır onu herkes. Aslında bir grup “kötü” yönü çıkartılırsa, fena bir dil değildir.
Şimdi diyeceksiniz ki hoca, gerisi ne oldu? Annem bana, bilmediğin konularda fazla atıp tutma dedi, o oldu. C# Java sülalesinden, Perl ve PHP Python sülalesinden (PHP daha garip bir arkadaş ya neyse). Bunların arasında hangisi daha iyi derdi beni aşar.
Şimdi esas mesele şu: Hangisini kullanalım? Hangisini öğrenelim?
Cevap basit değil. Hepsini öğrenin, doğru sırayla. İlgili iş için doğru olanı kullanın. Doğru sıra, size en çok lazım olanı ilk öğrenmektir. Yani alet çantanıza ilk neye ihtiyacınız varsa onu koyun. Ama bir tek çekiçle kalmayın. Tornavida, pense, alyen anahatarı (bunun da İngilizcesi Allen key imiş, Allen icad eden adamın adı iyi mi) hepsi olsun. Yani, performans çıkartacak, bilgi sistemini büyük çaplı programlayacak ve hızlı programlama yapılabilecek dillerden birer tane bilmek, programcının şanındandır. Duruma göre aleti çıkartır kullanırsınız.
Proje yaparken de, maliyetleri iyi hesaplamak gerekir. Mesela, Python başlangıçta düşük performansıyla saçmalık gibi durabilir. Ama kod geliştirme süresini hesaba katarsanız, öyle olmadığı ortaya çıkar, Bir server’ın aylık kirası, bir programcının aylık giderinin üçte veya dörtte biri kadardır. Kodun her yerinin aynı dilde olması da gerekmez. Performans gerektiren yerleri C++ ile, bilgi işleyen yerleri Java ile yazarsınız, araları da Python ile doldurursunuz, şahane hayatınız olur. Örnek mi? Bkz: Google… Keza Facebook’da da ön taraf PHP, ancak arkada Java ve C++ da koşuyor gereken yerde rivayete göre.
Vidalara çekiçle vurmayın yani… Tornavidada çekiç kuvveti yoktur ama, vidanın o incecik oluğuna tam oturur, gerekli olan yerde gerekli olan kuvveti uygular. Programlamada tek bir problem olmadığı gibi, tek bir çözüm de yoktur, aramayın, bulamazsınız.
Source: safkan.org/blog/  

Yorum bırakın