Dr. Volkan Tunalı

Bilgisayar Yüksek Mühendisi

Archive for the ‘Yazılım Geliştirme’ Category

Hangi Programlama Dili Daha Popüler?

leave a comment

Programlama dillerinin dünya çapında popülerliklerini değerlendiren birkaç site var. Bu sitelerde 2010 itibariyle genel duruma grafiklerle bir bakalım.

www.langpop.com

Bu sitede popülerite için çeşitli kaynaklardan veriler derlenmiş. Bu kaynaklardan bazıları şöyle: Yahoo, Craigslist, Powell’s Books, Freshmeat, Google Code, Del.icio.us ve Ohloh. Her bir kaynaktaki popülerite ayrı ayrı görülebileceği gibi, aşağıdaki grafikte tüm kaynaklar eşit ağırlıklı kabul edilerek elde edilmiş genel durum görülmekte. Bu sonuçlara göre Java, C ve C++ oldukça popüler görünüyor. C# ise VB ve Delphi’ye göre epeyce popüler.

Popüler programlama dilleri

www.ohloh.net

Ohloh.net, açık kaynak yazılımlar ve yazılımcılar için bir dizin ve topluluk. Burada istediğiniz programlama dillerini seçerek birbiriyle karşılaştırmasını yapabiliyorsunuz. Aşağıdaki grafikteki değerler, buraya kayıtlı yazılımcılar tarafından “commit”lerin sayısından toplanmış (sitede, güncellenen kod satırı sayısı, proje sayısı vb. çeşitli kriterlere göre de değerlendirme yapılabiliyor ancak en makul yaklaşım “commit”lerin sayısı gibi görünüyor bana da). Bu grafiğe göre son 10 yıldır C++’ın popülerliği düşerken Java’nınki yükseliyor. C#, PHP ve Python’da da yükseliş görülürken, VB’nin çok değişmediği görülüyor.

Popüler programlama dilleri

www.tiobe.com

Tiobe’deki veriler de çeşitli kaynaklardan derlenerek oluşturuluyor. Aşağıdaki grafikte yaklaşık 10 yıllık bir karşılaştırma görülmekte. Bu grafikte öncekilerle paralel sonuçlar içeriyor.

Popüler programlama dilleri

Dünyada durum bu şekilde. Acaba Türkiye’de nasıl? Benzer çalışmaları Türkiye için de yapmak lazım aslında. Ya da en azından yazılım sektöründe çalışanlar arasında belirli periyotlarla anketler yapılsa ve bunlar yayınlansa çok güzel olur. Belki de yapılıyordur, benim haberim olmamıştır. Bu konuda bilgisi olan varsa yorumlarıyla katılırsa çok memnun olurum. Kariyer sitelerindeki ve gazetelerin İK sayfalarındaki iş ilanları, piyasadaki programcılık/yazılımcılık kursları ve kitapları da popülerlik bakımından belli bir fikir verebilir sanıyorum.

Benim kişisel gözlemlerim ve tahminlerim Türkiye’de son yıllarda C# dilinin yaygınlaştığı, Delphi’nin eski popülerliğini .Net desteğine rağmen büyük ölçüde kaybettiği, Java’nın da en popüler diller arasında olduğu yönünde. Siz ne dersiniz?


29.10.2010 tarihli ek: Bu konuyla ilgili şu makale gözüme çarptı 7 programming languages on the rise. Makalede özetle Python, Ruby, MATLAB, JavaScript, R, Erlang, Cobol ve CUDA dillerinin de yükselişte olduğundan bahsediliyor. Diğerleri tamam da Cobol’u bu listede görmek çok ilginç.

Written by vtunali

Ekim 23rd, 2010 at 12:41 pm

Yıllara Göre Veri Depolama Maliyeti

leave a comment

Masaüstü ya da dizüstü farketmeksizin ne zaman yeni bir bilgisayar alsam, bilgisayarın fiyatı aşağı yukarı aynı iken sabit disk kapasitesi bir öncekinden çok daha fazla oluyor. Bu durum ana bellek ve işlemci gücü için de geçerli ama sabit disk kapasitesinin durumu çok farklı.

Matthew Komorowski sabit disk kapasitesi/fiyat verisi toplayıp aşağıdaki grafiği elde etmiş:

Yıllara Göre Veri Depolama Maliyeti
Kaynak: http://www.mkomo.com/cost-per-gigabyte

Komorowski ayrıca kapasite/maliyet trendi için de şu sonuca varmış:

Over the last 30 years, space per unit cost has doubled roughly every 14 months (increasing by an order of magnitude every 48 months)

Son 30 yıl boyunca, birim maliyet başına disk kapasitesi kabaca 14 ayda bir iki katına çıkıyor (48 ayda bir ise ciddi bir artış gösteriyor)

Ayrıca maliyet için bir formül de çıkartmış:

maliyet = 10-0.2502(yıl-1980)+6.304

Aşağıdaki iki resim 80′lerin bilgisayar dergilerinden alınma. İnanılmaz!

Written by vtunali

Eylül 18th, 2010 at 1:41 pm

Test! Test! Test!

leave a comment

Programdaki bir hatanın farkedildiği zamana göre geliştirici şirkete hem maddi olarak hem de prestij olarak verdiği zararın boyutu değişiklik gösterir.

  1. Programcının kendi testleri sırasında: Hatanın en zararsız olduğu, en çabuk ortadan kaldırıldığı aşamadır. Keşke bütün hatalar bu aşamada farkedilse.
  2. (Varsa) Test ekibinin testleri sırasında: Müşteriye ulaşmadan önce programınızı bir veya daha fazla aşamada test eden ve kalite kontrolünden geçiren bir ekip varsa kendinizi şanslı sayabilirsiniz. Bu aşamada farkedilen hatalar genelde rutin çalışma programınızda aksamalara neden olmak ve tekrar o konuya dönüş yapmanızı gerektirmek dışında zararsız sayılabilirler. Yine de can sıkıcı; keşke en başında farkedilseydi bu hata.
  3. Takım arkadaşları tarafından başka bir çalışmanın testleri sırasında: Bunu da 2. maddeye benzetebiliriz.
  4. Müşteriye yükleme ve eğitimler sırasında operasyon ekibi tarafından: Müşteride henüz ciddi boyutta veri girişi yapılmadığı ve dolayısıyla hata nedeniyle veri bozulması, işlerin aksaması gibi bir soruna neden olmadığı için çok ciddi boyutta bir zararı olmamakla birlikte operasyon ekibini zor durumda bırakan bir hata sinir bozucu olabilir.
  5. Müşteri tarafından erken bir zamanda: Farkedilen bir hatayı kodda arayıp bulmak ve düzeltmek işin en kolay tarafı. İşin zor tarafı ise müşterinin işine bir an önce devam edebilmesini sağlamak ve varsa bozuk verilerin düzeltilerek sorunlu iş süreçlerinin düzene sokulmasıdır. Operasyon ve müşteri destek ekibine yardımcı olmakla geçen saatler ve belki de günler programcının normal çalışma programının bir hayli aksamasına neden olur.
  6. Müşteri tarafından uzun bir kullanım süresinden sonra: Bu aşamada genellikle tonlarca hatalı veri oluşmuş ve kimsenin de dikkatini çekmemiştir. Bu hatalı veriler üzerinden hatalı raporlamalar yapılmış ve hatta resmî kayıtlara bu haliyle geçmiştir. Sorunlu verileri düzeltmek gerekir ama eskiye dönük tutarsızlık yaratacağı için düzeltmemek bazen yapılacak en iyi şey olabilir. Hatanın müşteriye maliyeti yanında geliştirici şirkete prestij ve güven kaybı olarak da ciddi yansımaları olabilir.

Son birkaç maddede yer alanlara benzer senaryolar deneyim sahibi her yazılımcının başından mutlaka geçmiştir. Deneyimli yazılımcılar bu nedenle hatalardan ders alırlar, hataya düşülecek noktaları çok iyi bilirler, yılların deneyimine ve sahip oldukları derin yazılımcılık bilgisine güvenmek hatasına düşmeyip, yazdıkları programları ayrıntılı ve düzenli bir şekilde test ederler. Gerçek şu ki herkes hata yapabilir, herkesin gözünden kaçan şeyler olabilir; bunları yakalamanın yolu test etmekten geçer.

Programcılığın yarısı programı yazmak/kodlamak ise yarısı da ortaya çıkan programı sağlıklı bir şekilde test etmektir. Yani, tasarlamaya ve kodlamaya zaman ayrıldığı kadar programın testine de zaman ayrılmalıdır. Yazılımcılar genelde testi sıkıcı bulurlar, işlerinin programlamak olduğunu, test etmek olmadığını düşünürler ve teste sıra geldiğinde üstünkörü bir çalışmayla işlerini sonlandırırlar. “Test ekibi ne güne duruyor, bir sorun varsa test ekibi nasıl olsa geri dönüş yapar.” düşüncesinden hareketle ve bazen de projenin zaman baskısı nedeniyle test sürecine hakettiği zamanı ve eforu ayırmazlar. Oysa ki sonradan farkedilen bir hatanın düzeltilmesi için normalden çok daha fazla zaman ve efor gerekir.

Yazılımcının görevi fonksiyonellik ve kullanışlılık bakımından gereksinimleri sağlayan bir yazılımı planlanan sürede oluşturmak olduğu kadar bu yazılımı en az kusurlu şekilde oluşturmaktır. Başarılı yazılımcılar çabuk ve çok iş çıkaran değil, en az hatayla dönüş olan işler çıkaran yazılımcılardır.

Written by vtunali

Nisan 20th, 2010 at 10:46 pm

Bilgisayar Bölümlerinde Hangi Programlama Dili?

one comment

Bilgisayar ve Yazılım Mühendisliği bölümlerinde öğretim programı hazırlayan bazı hocalarım ve akademisyen arkadaşlarımla birinci sınıftan itibaren öğrencilere hangi programlama dilinin öğretilmesinin uygun olacağı konusunda çeşitli zamanlarda görüş alışverişlerimiz oldu. Programı hazırlarken ve dil seçimini yaparken genellikle aşağıdakiler gibi bir takım kriterler üzerinde durduklarını gördüm:

  • Bu bölümden mezun olan kişi piyasada yaygın olarak kullanılan bir programlama dilini doğrudan uygulamaya yönelik olarak iyi derecede biliyor olsun, piyasaya çıktığında bu dili kullanarak gerçek hayat uygulamaları geliştirebilecek düzeyde olsun
  • Bu dil mutlaka tam anlamıyla Object Oriented bir dil olsun, öğrenciler OOD (Object Oriented Design) ve OOP (Object Oriented Programlama) kavramlarına tam anlamıyla hakim olsunlar
  • Web uygulamaları geliştirilmesi konusunda da dilin desteği ve kolaylıkları olsun

Bu kriterler göz önüne alındığında ve bölümlerin Bilgisayar Bilimleri’nden ziyade Yazılım Mühendisliği ağırlıklı olmasının istenmesi de hesaba katıldığında genellikle en iyi tercihin MS.Net tabanlı C türevi bir dil olan C# (C Sharp) olduğunu düşünüyoruz. Her ne kadar Microsoft çatısı altında geliştirilen ticari bir ürün olsa da C#, C’ye ve Java’ya benzerliklerinin yanı sıra son derece olgunlaşmış, gelişmiş ve güçlü bir genel amaçlı programlama dili durumunda. Aslında Java da bu kriterlere uygun bir dil gibi görünüyor ancak C#’ın Türkiye’deki artan popülerliğini ve yaygınlığını da dikkate aldığımızda Java ikinci planda kalıyor.

Açıkçası ben kendi adıma, bitirdiğim Bilgisayar Mühendisliği bölümünün öğretim programını düşündüğümde Bilgisayar Bilimleri alanındaki konulara verilen ağırlığın çok yerinde ve dengeli olduğunu düşünüyorum ve Pascal ile başlayıp C ile devam eden programlama derslerinin iyi ve sağlam bir temel oluşturduğuna inanıyorum. Bence Bilgisayar Bilimleri’nin ağırlığının yüksek olduğu bölümlerde Pascal ve C gibi bir dilin mutlaka ders programında yer alması gerekir. İlk öğretilen programlama dili olarak Java veya C# gibi nispeten daha yüksek seviyeli bir dil olsa bile devamında Veri Yapıları ve Algoritmalar derslerinin uygulamaları için Pascal ya da C gibi prosedürel bir dilin kullanılması yararlı olur. Sonrasında zaten ihtiyaca ve bireysel tercihlere göre yeni dillerin öğrenilmesi ve bu dillerde uzmanlaşılması çok büyük bir sorun olmayacaktır. Elbette ki öğretim programı içerisinde hangi dil kullanılırsa kullanılsın OOD ve OOP ağırlıklı en az bir dersin bulunması gerekir. Bunun yanı sıra bir süre öncesine kadar sadece akademik olduğu düşünülen ancak artık yazılım sektöründe oldukça ciddi bir yer edinmeye başlayan fonksiyonel dillerden birine de (mesela bir Lisp türevi olan Scheme) öğretim programında yer verilmesi çok yerinde olacaktır.

Yurtdışında da akademik dünyada uzun süredir bu konuda çok çeşitli, benzer görüşler ve tartışmalar var. Hatta ilk yıl programlama ile ilgili bir ders konulmasının Bilgisayar Bilimleri bölümünü zorlaştırdığını, programlama dersinin ileriki yıllarda görülmesi gerektiğini savunan görüşlere bile rastlamak mümkün.

Konuyu daha fazla dağıtmadan bitireyim. Uzun lafın kısası, Bilgisayar bölümlerinde hangi programlama diliyle başlanmalı, nasıl devam edilmeli, bir dil ile temelleri öğretip sonra başka bir dile mi geçilmeli, yoksa başından sonuna kadar bir dil üzerinde uzmanlaşılacak bir program mı hazırlanmalı? Emirsel/komutsal (Imperative) bir dil yerine günümüzde epeyce popüler hale gelen fonksiyonel dillerden biriyle mi başlanmalı? Bu konudaki düşünceleri duymak isterim, lütfen yorumlarınızla katılın.

Written by vtunali

Nisan 12th, 2010 at 9:17 pm

Yedek Hayat Kurtarır!

leave a comment

Hiç kimse veri ya da program kodu kaybetmeyi istemez. Ama istenmeyen şeyler her an başımıza gelebilir. Veri ve kodlarımızı emanet ettiğimiz cihazlar her an bozulabilir. Belgelerimizin/kodlarımızın bulunduğu dizüstü bilgisayarımız çalınabilir. Kritik bir dosyanın yanlışlıkla silindiğini farkettiğimizde kurtarmak için çok geç kalmış olabiliriz. Dosyalarımızın birkaç gün önceki haline bakmamız gerekebilir. Bütün bunlar ve benzeri durumlar az da olsa olasılık dahilindedir. Gerçekleştiklerinde zaman ve emek gibi maddi kayıpların yanı sıra prestij kaybına da neden olabilirler. Bu nedenle bu tür durumlara hazırlıklı olmak gerekir.

Hazırlıklı olmak iyi bir yedekleme planıyla mümkün olabilir. İyi bir yedekleme planı en son teknolojik cihaz ve yazılımlarla yapılan değil, pratik bir şekilde sürekli uygulanabilen, geri dönüşü kolay, güvenilir olan plandır. Önemli olan planın nasıl işlediği değil ihtiyaç duyulduğu an işe yarayacak olmasıdır. Bir günden daha geriye dönülmesi kabul edilemez bir sistemde haftalık alınan yedeğin hiç bir anlamı olmaz. Ya da dosyaların aynı diskte bulunan bir klasörde yedeklenmesi de kısa vadede çözüm gibi görünse de uzun vadede aynı riskleri barındırmaya devam eder. Dolayısıyla ihtiyaçlara ve risklere göre bir yedekleme stratejisi belirlenmelidir.

Program kodları için ise hem yedekleme hem de sürüm yönetimi için Subversion vb. bir konfigürasyon yönetim aracı yararlı olabilir. Bir ekip çalışması değil tek bir kişinin geliştirdiği bir proje bile olsa bu tür bir araç ile her aşamanın otomatik bir yedeği de alınmış olur. Kod deposu (repository) başka bir sistemde saklanacağı için kayıp riski de belli ölçüde azaltılmış olur.

Yedekleme genelde önemsenmeyen, ihmal edilen, zaman ve bütçe ayrılmayan, önemi ise maalesef felaket yaşandıktan sonra anlaşılan bir operasyon. Yazılım geliştiriciler olarak kendi kodlarımızın, dokümanlarımızın ve verilerimizin yedeklenmesini önemsediğimiz gibi müşterilerimizi de yedeklemenin önemi hakkında bilgilendirmeli, onlara uygun bir yedekleme stratejisi oluşturmaları konusunda yardımcı olmalıyız. Yedek hayat kurtarır!

Written by vtunali

Ocak 21st, 2010 at 11:47 am