22 Kasım 2009 Pazar

.NET'i Kavramamışlar Ne Yapar?

Bundan yaklaşık 5 yıl öncesi. Genç yazarın birisi programcılık konulu kitaplarını yayınlatmak üzere bir yayınevinin kapısını çalar. Yayınevinin yöneticisi programcılık uzmanı değildir. Yayınevi yöneticisi yazarımızın mevcut metinlerine şöyle bir bakınca yazım hatalarından geçilmediğini fark eder. Buna rağmen sağlıklı değerlendirme yapmak için Microsoft bağlantılı ve o günlerde Türkiye’nin sayılı .NET uzmanlarından birisinden fikir almak ister. .NET uzmanı yayıncıya şöyle der: Bunlar (yani .NET uyumlu programlama dili üzerine kitap yazan yazar) .NET’i henüz kavramış değiller. Bu değerlendirme üzerine yayınevi genç yazara olumsuz cevap verir. Bu yazar arkadaş sonra ne mi yaptı? Gitti, yazılan metinlerin nasıl olduklarına bakmadan yayınlayan bir yayınevi buldu. Sorunun cevabı belli oldu ama yinede yazalım: .NET'i kavramamışlar .NET'le ilgili kitap yazıp Türkiyenin en iyisi iddiası ile yayınlarlar.

21 Kasım 2009 Cumartesi

Mevcut Event’ları Oluşturmak(!)

Bugün nereden elime geçtiğini şimdi hatırlamadığım Olaylar ve Delegate’ler hakkında bilgi verilen bir video geçti. Bu video’yu çeken henüz mezun olmamış meraklı bir arkadaş olmayıp ekmeğini bilişim ve programcılık eğitimleri vererek kazanan tecrübeli birisi. Video’yu biraz inceleyince bu arkadaşın Event’ları anlatırken sürekli kavramları birbirleri ile karıştırdığını fark ettim. Tıpkı Her Gün Bir Yanlış yazı dizisinde değerlendirdiğimiz C# kitabında olduğu gibi mevcut Event’ları oluşturmaktan söz ediyordu bu eğitimci arkadaş. Hal bu ki bu tecrübeli arkadaş bırakın C# 3.0 kitabımı C#’a Başlangıç Kitabı adlı PDF’yi söyle bir gözden geçirmiş olsaydı Form sınıfının mevcut olaylarını anlatırken ikide bir Event oluşturmaktan söz etmezdi.

20 Kasım 2009 Cuma

Sinek Avlamak

Varsayalım ki bir tanıdığınızın büyük bir otobüs filosu var. Yolda bir dinlenme tesisi açıyorsunuz. Tanıdığınızın otobüsleri sizin tesiste mola veriyorlar. Yemekleriniz lezzetsiz ve pahalı, hizmetleriniz kalitesiz olsa bile insanlar size mahkûm oldukları için yaptığınız yemekler tüketiliyor, kalitesiz ürünleri istediğiniz fiyata satıyorsunuz. Sonra ne mi oluyor? Tanıdığınız kişi otobüs filosunu başkasına devrediyor. Yeni gelen yönetici “sen bu işi yapamıyorsun” deyip kapıyı gösteriyor.

Yemekleriniz ne kadar lezzetsiz, hizmetiniz ne kadar özensiz olduğunun farkına varmadan gidip başka yerde benzer tesisi açıyorsunuz. Tabi yeni yer dağ başı olmadığı ve yakınlarda yemek yenilebilecek başka yerler olduğu için insanlar daha iyisini tercih ettiğinden dolayı siz sinek avlıyorsunuz.

Bunu niye mi anlattım? Ankara’daki bir bilgisayar kursunun durumu tam da buna uyduğu için. Benden söylemesi: Sinek avlanan yerlerden uzak durun...

Her Gün Bir Yanlış(8. Yanlış): Constructor Metotlar Form Sınıfının Load Olayına Ne Kadar Benzer?

C#’la ilgili 3-5 satır kod yazmış olanların malumudur: Mevcut sınıfların örnekleri alınırken yani sınıftan yola çıkılıp nesne hazırlanırken new anahtar kelimesi kullanılmaktadır. Bir operatör olan new anahtar kelimesiyle nesne hazırlanırken söz konusu sınıfın yapıcı yani constructor metodu varsa otomatik olarak işletilmektedir.

Diğer yandan Windows Forms uygulamalarında projedeki Form sınıfının mirasçısı bir sınıfın örneği(nesne) ister Application sınıfının Run() metoduyla, isterse de Show() metoduyla ekrana getirilsin Form sınıfıyla ilgili olarak Load olayı meydana gelmektedir. Programcı daha önceden .NET Framework’le gelen Form sınıfının mirasçısı söz konusu class için Load olayını temsil edecek bir metot hazırladıysa form açılıp ekrana getirildiğinde bu metot işletilmektedir. Benzer şekilde programcı Form sınıfının mirasçısı sınıfta Click olayını temsil eden bir metot hazırladıylsa çalışma anında form tıklandığında Click olayı meydana gelmekte ve bu olayı temsil eden metot işletilmektedir. Başka bir deyişle .NET Framework ile gelen Form sınıfının Click olayı constructor metotlara ne kadar benziyorsa Load olayı da o kadar benziyordur.

Şimdi gelelim Türkiyenin 1. numaralı C# kitabı iddiası ile hazırlanan kitapta constructor metotlar için neler yazılmış bir bakalım.

Bir class new ile yaratıldığında işletilicek kod blokları varsa contructors hazırlanmalıdır. Örnek vermek gerekirse Windows Forms uygulamalarında form yüklenirken kullanıcı henüz müdahale etmeden “Load” yordamı işlediği gibi Constructor’s da aynen bu yordam...

Yani yazarımız ne diyor? Açıklayalım: Yazarımız diyor ki controctur metotlar Form sınıfının Load olayına benzer(!). C# programlama dilini bu şekilde öğrenenlere yukarıda verdiğim 2 paragrafı bir kez daha okumalarını öneriyorum.

Yazarlar, Editörler ve Yayınevleri

Varsayalım ki genç bir şairsiniz. Çevrenizce beğenilen şiirler yazıyorsunuz. Bu şiirleri kitap olarak yayınlamak üzere bir yayınevinin kapısını çaldığınızda size şuna benzer bir soru yöneltirler: “Hangi şiirleriniz hangi edebiyat dergisinde yayınlandı?”. Şiirlerinizin bir kısmı dergi editörlerinden geçer not alıp yayınlanmadıysa kimse yüzünüze bakmaz.

Varsayalım ki tıpkı Orhan Pamuk’un Cevdet Bey ve Oğulları romanını yazdığı yaştasınız ve çok iyi olduğuna inandığınız bir roman yazdınız. Bu romanı yayınlamak üzere bir yayınevinin kapısını çaldığınızda size şöyle bir soru yöneltirler: “Yerli romanlara verilen ödüllere bu romanınla daha önce katıldın mı?”. Cevabınız evetse tıpkı Orhan Pamuk gibi romanınızı yayınlatmak için kat etmeniz gereken yolun çoğunu almışsınız demektir. Orhan Pamuk henüz kimse tarafından bilinmez ve yayınlanmış tek yazısı yokken Cevdet Bey ve Oğulları romanıyla Orhan Kemal Roman Ödülüne katılmış ve jüri tarafından ödüle değer bulunmuştu.

“Daha önce romanlara verilen ödüllere bu romanınla katıldın mı?”sorusuna cevabınız hayırsa dosyanızı alıp incelerler. Bazen verdiğiniz metnin 5-10 sayfası okunup hemen olumsuz cevap verilir. Asıl söylemek istediğim şudur: Konu roman olduğunda kapısı çalınan yayınevinde romandan anlayan birileri mutlaka vardır. Ancak aynı şeyleri programcılık kitapları yayınlayan yayınevleri için söylemek mümkün değildir. Programcılık kitapları yayınlayan bazı yayınevlerinin editörleri olsa bile bir editörün çok farklı konularda önlerine gelen kitap metinlerini iyi değerlendirmeleri güç olmaktadır. Yani konu programcılık kitapları olduğunda henüz yolun başında olan yazar adayının işi zordur.

Varsayalım ki 25 yaşındasınız ve bir üniversitenin programcılıkla ilgili fakültesinden mezun oldunuz. Oturup bir programlama dili hakkında kitap yazdınız. Peşinen söyleyelim ki programcıların veya programcılık okuyanların edebiyatla, sanatla vs ilgileri çok sınırlıdır. Dolayısıyla kurdukları cümlelerin bazısı keçiboynuzu gibi sizi uğraştırırken bazıları ise yazım yönünden yanlıştır. Bu durumda söz konusu kitabın bir şeye benzemesi şansa kalmıştır.

Genç arkadaşları direk eleştirmek yerine 1994 yılında yayınlanan ilk kitabımın yazım süreci üzerine kısaca konuşma yapmak istiyorum. Clipper üzerine kitap yazmaya başlamadan o günlerin programcılık dergilerinde Clipper üzerine 40-50 sayfalık metin yazmıştım. Ayrıca o günlerin muhasebe programları üzerine her birisi 7-8 sayfalık ciddi incelemeler yapmıştım. Buna rağmen yazıp bitirdiğim Clipper 5.2 kitabını ikisi programcı üç kişinin incelemesini sağladım. Bununla da yetinmedim kitap metnini defalarca gözden geçirdim. Bütün bu çabalarıma rağmen kitabın 2. baskında birçok değişiklikler yaptım. Özellikler vurgulamak istediğim şudur: Kitabınızı yayıncıya vermeden imkanlarınızı zorlayın ve sıkı bir incelemeden geçirin.

Gelelim başka bir konuya. Kitabınıza konu ettiğiniz programlama dili hakkındaki bilginizin yeterli olmadığını bilmiyorsanız, Türkçe bilginizin yetersizliğini önemsemiyorsanız, kitaplarınızın baskısını yapan yayınevinde programcılık ve bilgisayar yayınları konusunda bilgi sahibi olan tek kişi yoksa, editör diye kitabınıza önsöz yazan kişi felsefe ve gazeteciliğin nesnel kavramını programcılıktaki nesneye yönelik kavramı ile karıştıracak kadar konunun uzağında ise yazacağınız kitabın iyi olması milli piyangonun yılbaşı çekilişinde büyük ikramiyeyi tutturmak kadar düşük ihtimaldir. Bu şartlarda yazdığınız kitabın eleştirilmesi, yanlışlıklarının orada burada seslendirilmesi kaçınılmaz olur. Yok, benim avukatım var ve kitabımı her kim eleştirirse dava ederim derseniz çekirge bir sıçrar iki sıçrar misali bakarsınız ki boğazından haram lokma geçmemiş kişilere denk gelmişsiniz.