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

Bilgisayar, Teknoloji, Bilim, Sanat

Archive for the ‘programlama’ tag

Özyinelemeli Lambda İfadesi Yazmak

leave a comment

C#’ta özyinelemeli (recursive) bir lambda ifadesi yazılabilir mi? Programcılık mantığıyla zor olmaz gibi geliyor ilk bakışta:

Func<int, int> fac = null;
fac = x => x == 0 ? 1 : x * fac(x - 1);
int f5= fac(5);

Ne kadar kolay değil mi? Ama yanılgıya düşülen nokta şu: örnekte özyinelemeli bir lambda ifadesi değil özyinelemeli bir fonksiyon yapmış olduk. Harici bir Func tanımı olmaksızın, sadece tek bir ifade (expression) ile istediğimizi yapabilir miydik? Daha doğrusu matematiksel anlamda gerçek bir lambda ifadesini özyinelemeli olarak oluşturabilir miyiz ve bunu C# ile yapabilir miyiz?

Nasıl olabileceğiyle ilgili msdn’de The Mellow Musings of Dr.T adlı günlükte bu konuda güzel bir makale var, meraklılarına tavsiye ederim.

Written by vtunali

Şubat 20th, 2009 at 7:58 pm

Kritik Kütle

leave a comment

Kritik kütle, yazılımın kaynak kodunun komple yeni baştan yazılmadıkça etkin bir şekilde yönetilemeyecek kadar aşırı büyük boyutlara ulaştığı Yazılım Yaşam Döngüsü aşamasını tanımlayan bir Yazılım Mühendisliği terimidir. Bir tanımlama da şu şekilde yapılabilir: mevcut bir hatayı (bug) gidermek yeni ve daha büyük bir hataya yol açıyorsa, yazılım artık kritik kütleye ulaşmış demektir. Genellike kritik kütle aşamasındaki bir yazılım iyileştirilmeye çalışılmaz; yazılıma son verilir ve yeni baştan geliştirilir.

Hatalı planlama, yazılımcı sirkülasyonu nedeniyle sürekli yeni yazılımcıların projeyi ele alması, yetersiz dokümantasyon, kopyala-yapıştır tarzı kötü programlama alışkanlıkları gibi temel nedenler bir yazılım projesinin Kritik Kütle aşamasına gelmesine neden olmaktadır.

Genelde masum ve düzgün planlanmış gibi başlayan bir yazılım projesi zaman içerisinde özensizce eklenen yeni özellikler nedeniyle kontrolsüz bir şekilde büyür ve bu büyüme farkedilmeyen hataları ve çözülemeyen sıkıntıları da beraberinde getirir. Ya da bazen bir an önce çalışan bir ürün çıkartma derdiyle çabucak bir geliştirme yapılır, bütün eksik ve özensiz tasarımına rağmen sistem çalışıyor ve müşteriyi memnun ediyordur. Eksikleri giderilmeden ve iyileştirilmeden yeni özelliklerin bu baştan sorunlu tasarım üzerine eklenmesinin sonucunda kritik kütle yine kaçınılmazdır.

Çoğunlukla yine aceleci, özensiz ve düzensiz geliştirme süreçleri nedeniyle dokümantasyon eksikliğinin koddan giderilmeye çalışılması, revize edilecek kodu yazanın artık projede bulunmaması sonucunda yeni programcıların eksik bilgiyle yaptığı eklenti ve revizyonlar da zaman içerisinde mevcut kodu iyice içinden çıkılmaz hale getirebilir. Bir de buna suya sabuna dokunmadan sorunları bir an önce çözmek için kopyala-yapıştır programcılık yapılması eklenince yazılım sistemi artık devam ettirilebilir, desteklenebilir, kolay revize edilebilir (maintainable) bir sistem olmaktan çıkmaktadır.

Written by vtunali

Ocak 29th, 2009 at 8:55 am

Beautiful Code

leave a comment

Beautiful CodeÖğrendiğim her programlama dili, incelediğim her program örneği, analiz ettiğim her algoritma uzun yıllara ve deneyime dayalı programcılık bilgime ve kodlama becerime çok şey katmıştır, yazılım geliştirme konusundaki vizyonumu genişletmeme katkıda bulunmuştur. Programlama üzerine yazılmış makale ve kitapları da kendimi geliştirmek adına son derece kıymetli fırsatlar olarak görmüşümdür.

O’Reilly yayınlarından çıkan Beautiful Code, yazılım dünyasının hatırı sayılır isimlerinin basit, zarif ve güçlü programlar geliştirme konusunda kendi öykülerini anlattıkları özel bir kitap.

Programlamayı teknik bir iş olmanın yanısıra sanat olarak da algılayan, daha iyi programlar yazabilmek konusunda kendini geliştirmeye açık herkesin bu kitabı okumasını öneririm.

Kitaptan ufak bir alıntı yapmak istiyorum:

A designer knows he has achieved perfection not when there is nothing left to add, but
when there is nothing left to take away. (Saint-Exupéry)


Bu kitabı okurken aklıma hep değerli hocam Prof. M. Akif Eyler geldi. Derslerindeki ve sınavlarındaki o büyüleyici güzellikteki program parçacıklarını herhalde hiçbir zaman unutmayacağım. Ve tabii ki Java ve OOP içerikli derslerinde sıklıkla kullandığı S.S.S. (Small Simple Safe) ile aslında bize ne öğretmek istediğini…

Written by vtunali

Kasım 7th, 2008 at 1:00 am

The Great Code Inspires

leave a comment

IEEE Software dergisinin Temmuz/Ağustos 2008 sayısında, Diomidis Spinellis tarafından yazılmış The Way We Program başlıklı makalenin sonundaki özdeyiş çok hoşuma gitti.

The mediocre code compiles. The good code runs. The superior code passes tests and inspections. The great code inspires.

Written by vtunali

Kasım 6th, 2008 at 10:24 am

Carpal Tunnel Sendromu’nu Önleme Egzersizleri

leave a comment

Mesleğim gereği ve de kişisel kullanım nedeniyle günün büyük bir bölümünü klavye ve fare kullanarak geçiriyorum. Yoğun bilgisayar kullanımından kaynaklı olarak zaman zaman bileklerimde ve parmaklarımda rahatsızlık veren ağrılar oluşuyordu. Böyle dönemlerde bu ağrıları azaltmak için öğrendiğim ve uygulamaya devam ettiğim bazı yöntemler var. Bu yöntemler sayesinde uzunca bir süredir bu ağrı ve rahatsızlık hissinden kurtulmuş durumdayım. Benzer durumda olanlara kesinlikle öneririm.

1. Fare çift tıklamalarını azaltmak için Windows ayarlarımda öğeleri tek tık ile açma seçeneğini etkinleştiriyorum. Bu şekilde kullanım zaman zaman sıkıcı olsa da parmak ağrılarımın azalmasında son derece etkili olduğunu gördüm.

2. Sağ elimde rahatsızlık hissettiğim zaman fareyi sol elimle kullanıyorum. El değiştirmek garip ya da zor görünebilir ama benim için büyük rahatlık sağlayan bir yöntem. (Hatta bilgisayarla birlikte kalem-kağıt kullanmak zorunda olduğum zamanlarda sağladığı kullanım rahatlığını da belirtmeden geçemeyeceğim).

3. Sık sık bilgisayar başından kalkıp hareket ediyorum ve tabi ki parmaklarımı ve bileklerimi de rahatlatıcı hareketler yapıyorum. Bu amaçla bilgisayarımda 30 dakikada bir ara vermem gerektiğini hatırlatan bir program da kullanıyorum.

4. Aşağıda resimlerle anlatılan egzersizleri yapmaya çalışıyorum.

Özellikle yoğun ve aralıksız bilgisayar kullanımı gerektiren mesleklerde (ve tabi ki yoğun parmak ve bilek kullanımı gerektiren diğer mesleklerde de, örneğin, enstrüman çalanlarda, tenis oyuncularında vs.) görülen Carpal Tunnel Sendromu‘nu önlemeye yarayan bazı egzersizlerden bahsetmek istiyorum. Bu egzersizlerin CTS’yi engellemede, hafif düzeyde CTS olanlarda iyileştirmede diğer bilinen egzersizlere göre çok daha etkili olduğu görülmüş. Ancak bu egzersizler CTS’nin ilerlemiş safhalarında önerilmiyor. Egzersizleri birkaç sene önce http://ortho-ok.com/orrf/ORRF_CARPAL_TUNNEL_PREVENTION.htm adresinden almıştım.

A. Bileklerinizi ve parmaklarınızı uzatıp gergin duruma getirin, avuçiçleriniz karşıya bakacak şekilde 5′e kadar sayın.
B. Bileklerinizi düzleştirin ve parmaklarınızı rahat bırakın.
C. Yumruklarınızı sıkın.
D. Yumruklarınız sıkılıyken bileğinizi aşağı doğru bükün ve 5′e kadar sayın.
E. Bileklerinizi düzleştirin ve parmaklarınızı rahat bırakın. 5′e kadar sayın.
F. Buraya kadarki egzersizler toplam 10 kere yapılmalı. Ardından, kollarınızı yanlara serbestçe bırakın ve birkaç saniye rahat biçimde sallayın.



Tabi ki klişe bir uyarıyı yapmadan geçmek olmaz: Bu yazıda anlatılan ve önerilen yöntem ve tekniklerin hiç biri tıbbi bir müdahalenin ve tedavinin yerine geçmez. Uygulamaların tüm sorumluluğu size aittir.

Written by vtunali

Kasım 4th, 2008 at 12:43 pm