Yazılım geliştirmede üretkenlik tek yazıda incelenemeyecek kadar geniş bir konu. Çünkü üretkenliği etkileyen çok sayıda etken var. Yazılım dilleri, yazılım geliştirme metodolojileri, yazılım framework’leri, zamanla edinilmiş tecrübeler vs. Bu ilk giriş incelemesi, daha sonra diğer etkenlerin incelemesi ile devam edecek.
En çok kullanılan yazılım dillerine baktığımızda aşağıdaki gibi bir sıralama çıkıyor karşımıza: (Kaynak langpop.com)

Bu sıralama arama motorlarından yazılım dillerinin daha çok aranmasıyla elde edilmiş bir sıralama. Her ne kadar kesin bir sonuç vermesede fikir verebilir. Tabloya baktığımızda C, Java, C++ gibi static typed ve performansı yüksek dillerin ilk sıralarda yer aldığını görüyoruz. Daha alt sıralarda Perl, Python, Ruby gibi dynamic typed dillerinde azınsanmayacak derece kullanıldığını görebiliyoruz. Bu alt sıradaki dillerin performans olarak üst sıradakilerle yarışamamalarına karşın toplamda Java kullanımına yakın bir kullanım elde etmelerinin sebebi nedir.
Neal Ford, productive programmer kitabında yakın geleceğin yazılım dilleri katmanlarını aşağıdaki gibi göstermiş

Bu şekle göre en alt katmanda, ana fonksiyonalitenin yazıldığı güçlü ve sağlam (büyük ihtimalle static typed bir dil) bir dil, orta katmanda günlük işlerin ve çevre birimlerin hızlı geliştirilmesine olanak sağlayan üretken bir dil (büyük ihtimalle dynamic typed bir dil), en üst katmanda da IT-business alignment’a olanak sağlayan iş analistleri ile yazılımcıların aynı dili konuşmasına zemin hazırlayan domain spesific bir dil.
En alt katmanda C, Java gibi dilleri görüyoruz. En üst katmana genel olarak yazılımın geliştirildiği alana spesifik uygulamaları koyabiliriz. Örnek vermek gerekirse, iş akışlarının çizildiği ve akışının sağlandığı BPEL formatını veya BPM (Business Process Management) sistemlerini sayabiliriz. Veya son zamanlarda populerliği artan VHLL (Very High Level Programming Language) dilleri de bu katmana koyabiliriz. VHLL tipi diller konuşma diline çok yakın, güçlü semantic analiz yeteneği olan diller. Yazılımı bir yazılımcı tarafından değilde iş mimarları tarafından geliştirilmesine olanak sağlayan bu diller henüz işin çok başında.
Orta seviyeye Python, Perl, Ruby gibi dilleri koyabiliriz. Gerçekten Python’un kullanım alanlarına baktığımızda benzeri amaçda kullanımlara rastlıyoruz. Her ne kadar bir projeyi tamamen bu dillerde geliştirmek mümkün ve bunun çok sayıda örneği olsada çevre birimlerinin geliştirilmesinde de çok sayıda örnek verebiliriz:
- Türkçe işletim sistemi Pardus; Python’u yönetim birimlerinin ve sistem boot modullerinin yazılımında kullanmış.
- Gentoo Linux; paket yönetimi modullerini Python’da geliştirmiş.
- Red Hat Linux ise kurulum programlarını için Python’u kullanmış.
- Linux, Mac OS X, Open BSD gibi pek çok işletim sistemi ise script ortamı için Python’u tercih etmiş.
Orta seviyede üretkenliğe yönelik diller olduğunu söyledik. Peki üretkenliğin tanımı nedir. Capers Jones, 1996 yılında 500’e yakın yazılım dilini üretkenlik açısından karşılaştırmış. Bu işi yaparken ortak algoritmalar belirlemiş ve bu algoritmaları her dilde en optimum şekilde kodlamış. Aynı algoritmaların dillerdeki kaç satırda kodlanmasından da dil seviyeleri elde etmiş. Dil seviyesinin daha yüksek olması o dilin daha üretken dil olduğunu gösteriyor. Tüm sonuçlar bu linkde: blog.csdn.net Özet sonuçlar şöyle: (Çalışma yapıldığında Python, Ruby dilleri değerlendirilmemiş, çalışmayı devam ettirenler tarafından sonradan eklenmiş.)
Yazılım Dilleri Üretkenlik Karşılaştırma Tablosu

Satır sayısının azalması dilin daha üretken olduğunun bir göstergesi midir?. Daha az satır daha az test, daha az hata ihtimali ve daha kısa sürede kodlama anlamına geldiğinden bir bakıma göstergesi. Ancak daha üretken dillerin genelde dynamic typed diller olması başka bir olumsuz kriteri beraberinde getiriyor. Static typed diller pekçok kontrolu derlenme aşamasında yaptığı için daha az hata bulundurma potansiyeline sahipler. Dynamic diller ise çalışma esnasında bu hataları alıyorlar. Tabiki güçlü birim test kodlarıyla bunun üstesinden gelinebilir.
Aşağıdaki örnekde aynı algoritma (bir text dosya içindeki # karakterinin silinmesi) java ve Python da ayrı ayrı geliştirilmiş. Python’da 3 satıra Javada 20’nin üstündeki satır ile aynı algoritma sağlanmış.
Python
import fileinput, re
for s in fileinput.input(inplace = 1):
print re.sub("#.*", "", s),
Java
import java.io.*;
public class uncomment {
public static void main(String[] args) {
try {
FileReader fr = new FileReader(args[0]);
BufferedReader br = new BufferedReader(fr);
File f = new File(args[0] + ".tmp");
FileWriter fw = new FileWriter(f);
String line = "";
while ((line = br.readLine()) != null) {
int pos = line.indexOf('#');
if (pos > -1) line = line.substring(0,pos);
fw.write(line + '\n');
}
fr.close();
fw.close();
f.renameTo(new File(args[0]));
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
Kod satırı sayısı olarak 2 dili karşılaştırdık. Birde performans değerlerine bakalım. Aşağıdaki örnekde 15 algoritma her 2 dilde kodlanmış. 1’den büyük değerler Javanın, küçük değerlerde Python’un üstünlüğünü gösteriyor. (Kaynak: shootout.alioth.debian.org ) Grafiğe göre Java açık ara performansda önde. Memory kullanımı ve beklenildiği üzere kaynak kod kısalığında ise Python önde.
Bir yazılım dilinde üretkenliği artıran tek etken satır sayısının az olması değil elbette. Bunun yanında sayabileceğimiz başka kriterler de var. Sonraki bölümde Python’u daha detaylı inceleyip üretkenliğe katkı sağlayan diğer özelliklerini inceleyeceğiz. Bu arada Python’un Java ile karşılaştırıldığındaki düşük performansı üstesinden gelinemez bir konu değil. Bu konu da sonraki bölümde ele alınacak konulardan birisi.
