Dr. Volkan Tunalı'nın Kişisel Blogu

Bilgisayar, Teknoloji, Bilim, Sanat

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

Linaks, Laynaks, Laynuks, Linüks!!!

leave a comment

Türkçe sözcükleri bile ımerikın ya da inglişş (*) aksanıyla söylemeye meraklı bir sürü insanın olduğu bir Türkiye’de bilişimciler arasında Linux’un da çeşitli şekillerde telaffuz edildiğini duymak çok şaşırtıcı değil. Öyle ki İngilizce’nin İ’sini bilmeyenler bu konuda daha bile ısrarcı; benden duydukları şekliyle söylemek ve hatalarını düzeltmek yerine kendi bildiklerinde o kadar inatçılar ki.

Çok önemli bir mesele değil ama yine de birşeyin doğrusunu bilmek her zaman daha iyidir. Ayrıca bu konu pek çok defa, pek çok sitede işlendi, ama yine de görmeyenler, bilmeyenler için bir kez de ben yazmış olayım.

YANLIŞ okunuşlara örnekler:
Linaks, Laynuks, Laynaks, Linüks!!!

DOĞRU okunuş:
Linuks ya da Linıks

(Yabancı dilde bir sözcüğü Türkçe harflerle yazmak çok doğru değil ama aşağı yukarı böyle. Ben dosdoğru Linuks diye okumayı tercih ediyorum.)

Bir de Linus Torvalds’ın sesinden duyalım bakalım nasıl okunmalıymış:
torvalds-says-linux.wav (82K)

Bu ses kaydında Linus şu cümleyi seslendiriyor:

Hello, this is Linus Torvalds, and I pronounce Linux as Linux!

Ses kaydı yetmez, görmem lazım diyenler, o zaman Google Video sitesindeki şu videoya bir gözatın:
http://video.google.com/videoplay?docid=1061159908534146317

Written by vtunali

Şubat 27th, 2010 at 1:59 am

Klasik Müzik, Aydınlık, Bilim

leave a comment

Dünyaca ünlü sanatçımız Fazıl Say‘ın Facebook’taki notlarından birinden alıntı yaparak başlamak istiyorum:

Biliyormusunuz, zaten klasik müzikte öyle pop müzik dünyası, ya da entertainment dünyasında olduğu gibi büyük paralar da dönmez.
Biz klasikçiler, aslı şu ki, bütün bir yüzyıl boyunca ne milyonlarca plak (CD) satar olduk, ne de en geniş kitlelerce tanındık. Klasik müzik camiası çok daha kısıtlıdır.
Elittir veya snoptur demek yanlış olur. Gerçekten yanlış olur.
Ama “aydındır” diyelim. Aydın insanların dinlediği müziktir klasik müzik. Çünkü, bilim ve teknoloji misali, bu müzikte de ilerleme, atılım gözetilmiştir.
Tüketim kültürü değildir. Üretim kültürüdür.

Kafamı nereye çevirsem bangır bangır pop, rap, hip-hop diye adlandırılan, sözleri saçma sapan ve anlamsız, melodisi iki cıstak bi tak tak, müzik ve hatta utanmadan sanat diye sunulan şeylerle karşılaşıyorum. Çocuklarda ve gençlerde de bu yönde acayip bir merak ve özenti var, bunu gördükçe de üzülüyorum, sinirleniyorum.

Fazıl Say’ın notlarından alıntıladığım bu bölümde Say klasik müziğin özelliğini çok güzel vurgulamış; bilim ve teknoloji misali ilerleme ve atılımın önde tutulduğu müzik türüdür klasik müzik. Say’ın ayrıca belirttiği gibi “üretim” kültürüdür. Bu da dinlemek, anlamak, icra etmek ve üretmek için büyük çaba gerekiyor demektir, çok çalışmak demektir. Ama maalesef basit, kolay anlaşılır, kolay yapılır, kolay üretilir ve çabucak, kolayca tüketilir şeyler bu kadar büyük boyutta pompalandıkça iyi birşey yapmak, üretmek ve ilerlemek isteyenlerin, bunun için çalışanların sayısı bir hayli az oluyor. Yine de klasik müziğe, evrensel müziğe gönül vermiş kişilerin olduğunu bilmek umut veriyor. Ve tabii Flütçü.Net’te sadece flütten bahsetmiyoruz; evrensel müzik ve sanat anlayışından bahsediyoruz, aydınlık Türkiye yolunda küçücük de olsa bir ışık yakmaya çalışıyoruz.

Written by vtunali

Şubat 18th, 2010 at 12:58 am

Cloud Computing’in Türkçe Karşılığı

2 comments

Son zamanların moda bilişim terimlerinden biri “Cloud Computing“. Kime sorsanız başka bir tanımlama yapıyor, başka bir kavramı/olayı anlatıyor. Yeni öğrenilen sözcükleri iyi öğrenmeleri için öğrencilere cümle içinde kullandırırlardı ya, onun gibi, Cloud Computing’i gerçekten anlamak için onunla ilgili bir çalışmada yer almak, bir projemizde Cloud Computing içeren birşeyler yapmak gerekiyor galiba.

Ne olduğunın tam anlaşılamamış ya da anlatılamamış olması kadar Cloud Computing’e Türkçe karşılık bulmakta da güçlük çekildiğini görüyorum. “Bulut Bilgisayar”, “Bulut Hesaplama”, “Bağımsız İşletim”, “Bağımsız İşlem”, “Bulut İşlem”, “Bulut Bilişim” gibi bir çok çevirisine rastlamak mümkün.

Ben bunlardan en çok “Bulut Bilişim”i sevdim.

Ekleme: 29.03.2010 21:40
————————————–
“Bulut Bilgi İşlem” çevirisine de sıkça rastlıyorum. Ama “Bilgi İşlem” biraz eski bir terim, yerini uzun yıllardır “Bilişim”e bırakmış durumda. Ayrıca “Bilişim” terimi bilgi ve iletişim teknolojilerini de kapsayan bir terim olarak görünüyor. Bu nedenle ben hâlâ “Bulut Bilişim” demeyi tercih ediyorum.

Written by vtunali

Şubat 15th, 2010 at 3:02 pm