Memik Yanık - Kişisel Web Sitesi Ana Sayfa | Hakkımda | Kitap Önerileri | Fotoğraflarım | RSS RSS | İletişim

Nisan 2009

Hangisi Döver? Procedure mi yoksa Fonksiyon mu?


Visual Basic ve Pascal’da işlem yapmak üzere bir araya getirilen kod bloklarına fonksiyon veya Procedure adı verilmektedir. Hazırlanmak istenen kod bloğu işletildiği zaman geriye değer gönderiyorsa Function anahtar kelimesinden, geriye değer göndermiyorsa Procedure(Visual Basic’te Sub) anahtar kelimesinden yararlanılıyor. Bu arada yakın bir zamanda piyasaya verilen Delphi Prism’de Function Procedure ayrımının kaldırıldığını belirtelim. C’de ise fonksiyon procedure ayrımı yoktur. Belli bir işlem yapmak için hazırlanan kod bloklarına fonksiyon adı verilmektedir. Fonksiyon geriye bilgi göndermiyorsa başına void yazılır. Buraya kadar her şey normal ve bilinmedik bir şey yok.

Sonra nesneye yönelik programcılıkta ve .NET Framework uyumlu programla dillerinde işlem yapan kod bloklarına metot denilmeye başlandı. C ve C++ geleneğine dayanan C# için bu bir anlam kargaşasına zaten neden olmazdı. Fonksiyonlara metot demek zor değildir. Ancak geçmişte Pascal veya Visual Basic ile az çok uğraşmış olanlar alışkanlıklarından dolayı geriye değer göndermeyen metotlardan bazen Procedure ve geriye değer gönderenlere fonksiyon demeleri sık rastlanan bir durumdur.

.NET uyumlu Visual Basic’te geriye doğru uyumluluğu sağlamak için geriye değer gönderen metotlar yine Function anahtar kelimesi tanımlanırken değer göndermeyenler ise Sub anahtar kelimesi ile hazırlanıyorlar. Yani garip bir durum var gibi.. Kod bloğunu Function anahtar kelimesi ile tanımlıyorsunuz sonra da bu metottur diyorsunuz. Bu nedenle kitaplarda, makalelerde ve forumlarda Sub anahtar kelimesi kullanılarak hazırlanan metotlardan Procedure(Türkçesi ile yordam) diye söz edilmesini hep normal karşılamak gerektiğini ifade ettim. Visual Basic 9.0 kitabımda ise hem Function hem Sub anahtar kelimesi ile hazırlanan kod bloklarından sürekli metot diye söz ettim. Gelelim bu metni asıl yazma nedenime: Bir süre önce bir kaynakta procedure’lerin fonksiyonlara göre daha gelişmiş bir yapıya sahip olduğu beyan edildiğini fark ettim. Sahi Procedure’ler gerçekten daha gelişmiş bir yapıya mı sahiptir? Yani C#’ta olmayan Procedure’ler olmayan Fonksiyonlardan daha mı gelişmiş oluyorlar. Yorumu size bırakıyorum. Tabi aklı tepelerde yani bir karış havada olanlar “hayır C#’ta procedureler daha gelişmiş bir yapıya sahiptir” demeyi sürdüreceklerdir.

Yazılım | Bu yazıya henüz yorum yapılmamış. | 12.04.2009 23:56:44

Microsoft Türkiye Yetkililerine Sorularım Var..


Yetkililere sorumu yöneltmeden önce biraz açıklama yapmak istiyorum. Son yıllarda programcılıkla az çok ilgilenmiş olanların bildiği gibi Microsoft firması 2002 yılından önce yani .NET kullanıma sunulmadan önce veritabanı işlemleri için programcılara ADO teknolojisini öneriyordu. Tabii Visual Basic 3.0 ve Visual Basic 4.0’ın kullanıldığı günlerde DAO ve RDO teknolojilerini unutmamak gerek. Sonra Microsoft firması .NET’i duyurunca daha önce ADO kullanan programcılar kısa sayılmayacak bir süre şaşkınlık yaşadılar. Çünkü .NET Framework ile gelen ve ADO.NET adı verilen sınıflarla veritabanı işlemlerinin neredeyse ADO ile hiçbir benzerliği yoktu. Programcılar üzerinde işlem yapmak istedikleri veritabanı Access ise OleDbConnection sınıfından yararlanıp veritabanına bağlanıyorlar. Tabii OleDbConnection sınıfı sayesinde bağlanılabilinen tek veritabanı Access değildir. Programcı SQL Server veritabanına bağlanmak istediğinde ise .NET Framework ile gelen SqlConnection sınıfından yararlanması gerekiyor. Bu konunun meraklıları için forma yerleştirilen SqlConnection nesnesinin ConnectionString özelliğinin nasıl ayarlanıp ilgili veritabanına nasıl bağlanıldığını aşağıda göstermeye çalıştım.

 
private void Baglan_Click(object sender, EventArgs e)
 {
     string Segment1, Segment2, Segment3, Segment4;
     Segment1 = "Data Source=SERVER;";
     Segment2 ="Initial Catalog=Galeri;";
     Segment3 = "User ID=*****;";
     Segment4 = "Password=******;";
     sqlConnection1.ConnectionString=Segment1+Segment2+Segment3+ Segment4;  
     sqlConnection1.Open();
 }

Tabii bu kodda bağlantı metni ile ilgili bütün ayrıntılara yer vermedim. SqlConnection nesnesinin ConnectionString özelliği bu şekilde ayarlanıp Open() metodu ile veritabanına bağlanıldıktan sonra sırada forma SqlDataAdapter nesnesini yerleştirip özelliklerini ayarlamak var. Konuya uzak olmayanların bildiği gibi forma SqlDataAdapter nesnesi yerleştirilip yerleştirilmez Data Adapter Configuration Wizard çalışmaya başlamaktadır. Wizard’ın programcıya birkaç soru sorduğunu biliyorsunuz. Buraya kadar her şey tamam. Benim sorum veya sorunum tam bu noktada başlıyor; 

Soru 1:

DataSet hazırlamak üzere Properties penceresindeki ilgili linki tıklar veya Visual Studio’nun Data menüsünden  Generate DataSet komutunu verirsem suç işlemiş olur muyum? Yani Microsoft firmasının sayın yöneticileri kitaplarda, makalelerde, forumlarda Generate DataSet komutu ile DataSet hazırlama, anlatma, bu konuda bilgi verme hakkını Türkiye sınırları içerisinde ihale yoluyla veya başka bir yöntemle herhangi bir kuruma veya kişilere verdiniz mi? Eğer Generate DataSet komutunu kullanma hakkını birilerine ücreti karşılığında vermediyseniz birileri sizin adınızı kullanıyor demektir.

Soru 2:

Dataset nesnesi bir şekilde hazırlandıktan sonra SqlDataAdapter sınıfının Fill() metodunu kullanabilecekler ve Fill() metodu hakkında açıklama yapabilecekler listesinde Memik Yanık var mı? 

Soru 3:

Malumunuz olduğu üzere sık kullanılan SQL kodları daha sonra kullanılmak üzere veritabanına Stored Procedure olarak kaydedilir. Yine her Strored Procedure yazmış kullanmış olanlar bilirki Stored procedure'ler dışarı ile(yani uygulamayla) parametreler aracılığı ile haberleşirler ve parametrelerin yönü ya Input ya da Output olur. Edindiğim bilgilere göre yönü OutPut olan parametreleri kullanmak suç teşkil ediyormuş? Microsoft'un sayın yetkilileri yönü Output olan parametreleri Stoed Procedure'lerde tanımlayıp kullanmak suç mudur değil midir? Lütfen resmi açıklama yapın.

Soru 4:

Yeni bildiğiniz gibi(elbette en iyi siz bileceksiniz Visual Studio'yu, .NET Framework ve C#'ı sizler hazırladınız) Properties penceresinde herhangi bir SqlDataAdapter nesnesinin özellikleri listelenirken Generate DataSet linki olmakta ve bu link tıklandığında Visual Studio bir DataSet hazırlamaktadır. Geri planda ise bir XSD uzantılı şema dosyası hazırlanıp projeye ait klasöre konulmaktadır. Eğer Dataset'te birden fazla DataTable varsa bu şema dosyasından yararlanarak hiç kod yazmadan DataTable'lar arasında ilişki kurulabilmektedir. Size sorum şu:Anlatılan şekilde DataTable'lar arasında ilişki kurabilme hakkını Türkiye'de bir grubu ihale yoluyla devredip sonra da programcılar tembelliğe alışıyor açıklaması yaptınız mı? Umarım bilgi edinme yasası çerçevesinde bu işin doğrusunu öğrenebiliriz. Yok biz bu şekilde DataTable'lar arasında ilişki kurma tekniğinden herkes yararlanabilir diyorsanız bunu kamuoyuna duyurmanızı talep ediyorum. 

Bu soru ve konular benim için hayati öneme sahip olduğu için lütfen hemen cevaplayınız. Microsoft Türkiye’nin sayın yetkilileri size sormak istediğim birkaç soru daha olmasına rağmen şimdilik bu 4 soruyla yetiniyorum.

Genel | Bu yazıya henüz yorum yapılmamış. | 12.04.2009 23:53:12

Gençlere Yazarlık Önerileri


Bazen kitap yazmak isteyen arkadaşlar benden öneri isterler. Ben de kendilerine mevcut bilgilerimi aktarıyorum. Bilgisayar kitaplarının satışları son yıllarda iyice düşmüş olmasına rağmen birçok arkadaş kitap yazıp yayınlatmak istiyor. Bu arkadaşları düşünerek birkaç öneride bulunmak istiyorum.  

·      Forumları olan Türkçe programcılık sitelerinin hepsini tespit edip Browser programınızın Sık Kullanılanlar listesine mutlaka ekleyiniz.

·       Benzer çalışmayı kitap satış siteleri için de yapın.

·       Kendinize çok sayıda e-mail adresi alın ve bunları şifreleriyle bir yere not edin. Yoksa o kadar e-mail adresini nasıl aklınızda tutmanız zor olacaktır. Aynı şekilde kendiniz için kimsenin aklına gelmeyecek çok sayıda nick tespit edin.

·       Kitabınız henüz yayınlanmamış iken bile forumları ve kitap satış sitelerini sürekli dolaşıp rakip yazarları bir güzel karalayın.

·       Kitabınız yayınlandıktan sonra rakip yazarları karalamaktan öte kendi kitabınızı güzel bir şekilde övün. Tabii işi abartıp kimsenin şüphelenmemesine dikkat edin.

·      Olur ya birileri kitabınız hakkında ileri geri konuşursa, bir şeyler yazarsa hemen dava edin. Böylece kimse sizin kitabınız hakkında olumsuz sözler edemez. Yani kitap yayınlanmadan önce avukatınız hazır olsun.

·      İster programcılıktan anlasın ister anlamasın kitabınız için ünvanı olan bir kaç kişiden birkaç cümlelik önsöz alın. Bu önsöz yazan kişiler size mutlaka teşekkür etsin, bilişim alanındaki çabalarınızı taktir etsinler. Bu kişilerin kitabın içeriği hakkında bilgi sahibi olması şart değildir. Örneğin .NET'in internet kelimesinin üç harfi olduğunu sanan birisinden önsöz metni istenebilir.

·       Birden fazla kitap yayınlamayı düşünüyorsanız kendinizi bir takma isim bulun. Örneğin Ankara Boğaları, Everest'in Gediklileri, Super Beyinliler Ekibi, Hep 90'a Takanlar, All Star'lar vs olabilir.

·       Kitabınız yayınlandıktan sonra aynı konuda başka yazarlar tarafından(yerli yabancı fark etmez) yazılan kitapları didik didik edin, size ait değişken adlarını kullanmışlarsa affetmeyin. Sizin değişkenlerin adını kullanmışlarsa değişken adı kullanma kirası isteyin. Yok derlerse dava edin.

·      Genç şairleri taklit edip eski yazarlara saldırın, onlar hakkında orada burada konuşup puan kazanmaya bakın. Mesela eski yazarların çeviri yaptıkları dedikodusunu yayın, kitapları beş para etmez deyin. 

·       Kitabınızın düzeyi başlangıç olsa bile bunu kesinlikle ret edin ve ileri düzey olduğunu savunun. Kamuflaj için ileri düzey diye anılan birkaç konuyu üçer beşer sayfa ile geçiştirin. Bu ileri düzey diye bilinen konu adlarını mutlaka kitap kapağına yazın.

·       Cümlerinizin hatasız olmasına çalışıp zaman kaybetmeyin. Zamanınızı bir kısmını mutlaka başka yazarlara saldırarak geçirin.

Genel | Bu yazıya 2 yorum yapılmış. | 12.04.2009 23:44:33

Ağ Kartının Özelliklerini Öğrenmek - C#


Bu kısa makalede C# uygulaması dahilinde kullanılan bilgisayarın ağ özellikleri hakkında nasıl bilgi edinildiğinden söz edilmektedir.

Forumlardaki Sorular | Bu yazıya henüz yorum yapılmamış. | 12.04.2009 20:29:42

SQL Server Veritabanına Bağlanmak


Delphi | Bu yazıya henüz yorum yapılmamış. | 12.04.2009 19:47:48

Forumlardaki Soruları Cevaplamak


Forumlardaki Sorular | Bu yazıya henüz yorum yapılmamış. | 12.04.2009 05:41:06

Programcılar İçin Yazarlık Dersleri : 1


Konu ister programcılık ister edebiyat ister bilim ister siyaset olsun bazı yazarların yazdığı köşe yazısını, makaleyi, romanı veya incelemeyi kolay okursunuz. Yazıyı okuyup bitirdiğinizde harpten çıkmış gibi kendinizi yorgun hissetmezsiniz. Bazı yazarların yazdıklarını ise kendinizi zorlamanıza rağmen yazının sonunu getiremeyip yarıda kesersiniz. Kolay okunan, okuru yormayan yazılar yazmanın tek ve geçerli bir formülü olmasa bile en önemli nokta kurulan cümlelerin yapısıdır. Kurulan cümlede yazar birden fazla şeyi söylemeyi deniyorsa o cümle için okurun en az 2 kat çaba harcaması gerekir. Bazı yazarlar alışkanlıkları gereği kurdukları her cümle tek başına okunabilecek yalınlıktadır. Bazı yazarlar ise uzun ve karmaşık cümleler kurarlar ki cümlenin başında söyleneni cümlenin sonuna varmadan unutursunuz. Bu makale dizisinde kolay okunma konusunda örnek yazılar ve cümleler üzerinde durmak yerine kendi yazdıklarımı bu bağlamda değerlendireceğim. 

Madem bu incelemede birincil hedef okurlarımız programcılardır, yazılım üzerine bir şeyler yazanlardır o halde programcılar veya programcı adayları için birkaç cümleyi öncelikle yazalım. Bana sorarsanız en başta şunu bilmek gerekir: Programcılık ile programcılık üzerine yazmak birbirine sanıldığı kadar yakın faaliyetler değildir. Yani iyi programcı olmakla iyi makale veya programcılık konulu kitap yazmak arasında doğrudan bir ilişki yoktur. İyi yazar olabilmek veya programcılık üzerine iyi kitap, iyi makale yazabilmek için birinci şart; söz konusu programlama dilini iyi bilmek ve genel programcılık bilgisinin yeterli olmasıdır. İkinci önemli şart; yazma, hikâye etme becerisinin olmasıdır. Yazma, hikaye etme veya anlatma becerinizin olup olmadığını anlamanın en kestirme yolu akşam TV’de bir magazin programında İbo Tatlıses veya bir başkası ile ilgili haberi dikkatle izleyip sonra oturup sanki bir gazetenin magazin muhabiriymiş gibi haber yazmaktır. Ardından yazdığınız haberi ertesi gün ki gazetelerin magazin sayfalarındaki haberler ile karşılaştırıp yazdığınız haberin gazetede yayınlananlara benzeyip benzemediğini kontrol etmek gerekir. Eğer gazetelerdeki haber ile, sizin kaleme aldığınız metin benzerlik gösteriyorsa sizin yazma beceriniz vardır denilebilir. Yazdığınız haber metni gazetede yayınlanabilir gibi duruyorsa yazma beceriniz iyidir denilebilir.

Malumunuz olduğu üzere Hata Yakalamak ve Exception Sınıfları adını verdiğim uzunca makalemi bir süre önce sizlerle paylaşmıştım. Sözünü ettiğim makaleyi henüz okumamış olanlar şuradan okuyabilir veya şuradan PDF olarak indirebilirler. C# ve .NET programcılığına ilgi duymuyorsanız bile programcılık gibi teknik bir konunun nasıl anlatılabileceğini merak ediyorsanız yukarıda işaret ettiğim yazıyı baştan sona okuyacak zamanınız yoksa veya C#’a ilgi duymuyorsanız en azından şöyle bir göz gezdirebilirsiniz. Herhangi bir fakültede veya yüksek okulda fizik, matematik, istatistik gibi zor anlaşılan, ötesi takibi zor bir konuyu anlatıyorsanız sözünü ettiğim makaleyi ve “Yazarlık Dersleri” başlığını verdiğim bu metinleri incelemenizi öneririm.

Başka bir anlatımla bu uzunca makale dizisinde veya incelemede Hata Yakalama ve Exception Sınıfları adlı makalemden(bu makale programcılık dersleri boyunca örnek alacağım makalelerden yalnızca birisidir) yola çıkıp meraklılara teknik bir konunun nasıl anlatılacağını, anlatılanların nasıl kolay okunacağını, konu içinde tekrarlar yapılmasına rağmen okurun sıkılmaması için nelerin yapılması gerektiğini kendimce anlatacağım. 

Aslında bu konu üzerinde uzun süre çalışılması gereken bir konudur. Yukarıda sözünü ettiğim makaleyi kişisel web sitemde ilgilenen herkesle paylaştığım için bu çalışmayı öncelikle bu makale bağlamında yaptım. Nasıl ki DVD’si hazırlanan sinema filmlerinin kamera arkası görüntüleri izleyicilere sunuluyor bundan sonra yazacağım kitapların yazılma süreci ilgili açıklamaları okurlarla paylaşmayı düşünüyorum. Tabii böylesi bir paylaşma kitapların yazımı için gereken sürenin artmasına neden olacaktır. Ötesi böyle bir çalışmanın başka bir etkisi olacaktır: Yazımını tamamladığım herhangi bir bölüm üzerine konuşmaya, ek açıklamalar getirmeye başladığımda aklıma yeni soru ve çözümlerin gelmesi, geri dönüp üzerinde konuştuğum metni değiştirmeyi tercih etmem uzak bir ihtimal olmayacaktır. 

Benzer çalışmayı başka yazarların kitapları ve makaleleri için de yapmak mümkündür. Ne yazık ki okurlar başka bir yazarın(hem de rakip bir yazarın) kitabı veya makalesi üzerine konuşmamı yazmamı onaylamıyor. Takma isimlerle yazı yazmak, forumlarda takma isimle boy göstermek ise çölde kendini gizlemeye çalışmak gibi zordur. 

Tam bu noktada genç yazarlara veya yazar adaylarına bir öneride bulunmak istiyorum: Çok az yazar yazdığı cümleyi, makaleyi veya kitap metnini sonradan değiştirmez. Bu nedenle yazdıklarınızı en azından aradan birkaç saat geçtikten sonra tekrar gözden geçmelisiniz. Göreceksiniz ki birçok cümleyi değiştirmek isteyecekseniz. Hatasız, bozuk cümlesiz makaleler yazmak çok zordur ama yazım hatalarını belli bir sayıda tutmaya çalışmak gerekir. Okurlar yazım hataları ile sık karşılaşmadıkları sürece hoşgörülü davranıyorlar.
 

Bu metni gören bazı arkadaşlar uzun olduğu için tümünü okumayacaklardır. Madem incelemenin üst başlığı “Yazarlık Dersleri” ve yazarlık sabırla araştırma yapmayı gerektiren bir eylem olduğuna göre yazarların, yazar adaylarının bu metni ve ilgi alanlarına giren yazıları sabırla okumaları gerekir. Okumayı araştırmayı sürekli öğrenmeyi günlük yaşamlarının doğal eylemlerine katmayanların bırakın yazar olmayı uzun vadede programcı olarak kalmaları zordur.  

Şu aralar memleketimin on binlerce insanı kendine blog edinip yazarlığa kolay yoldan terfi ediyor. Üstelik programcılık konulu blogların sayısı hiç az değil. O zaman bu incelemeye ilgi duyacak on binlerce kişi olmalıdır. Meraktan bazen bu bloglara bakıyorum; bazen öyle kötü kaleme alınmış metinlerle karşılaşıyorum ki 2 cümlesini bile okumak mümkün olmuyor. Keşke bu arkadaşlar yazdıklarına dönüp baksalar. Sanılmasın ki bu söylediğim henüz yolun başında olup meraktan bloğunu doldurmak isteyen arkadaşlarla sınırlı. Hayır, koca koca kitaplara imza atan yazarların bile kitaplarındaki bozuk cümleleri okumak bazen işkence olabiliyor. 

Daha önce C# veya .NET Framework uyumlu başka bir programlama dili üzerine çalışıp hata yakalama ve Exception sınıflarından bi haber olmayanlar yukarıda sözünü ettiğim makaleyi okuduklarında tek kazançları olsa olsa anlatım tekniği üzerinde düşünmek olabilir. C# ve .NET’le gelen Exception sınıfları konusunda en azından ortalama bilgisi olanlara şunu söylemek isterim: Bu metni doktora öğrencilerini değil, programcı adaylarını düşünerek yazdım. Bazen çok iyi bildiğim konularda bile elimdeki mevcut kaynakları gözden geçiririm. Bu gözden geçirmelerin tek nedeni var: İyi bildiğim bu konuyu anlatırken okuduklarım bana belki yeni bakış açısı kazandırır. Yani demek istiyorum ki asıl önemli olan konuyu anlatma ve hikâye etme tarzıdır. Konu ‘programcılık’ anlatmak olduğunda bazı konular vardır ki önce sonucu gösterir sonra adım adım geriye gidip o sonucu nasıl aldığınızı anlatırsınız. 

Kısa bir özet geçmek gerekirse yukarıda sözünü ettiğim makaleyi sonradan gözden geçirmek zorunda kaldığım C# 3.0 kitabımdan almıştım. Kitabı gözden geçirme nedenimi merak edenlere şunu söylemek isterim: Kitapta bazı metotları, sınıfları veya işlemleri anlatmak için hazırladığım 3–5 satırlık kodlarda tanımladığım değişkenlere, hazırladığım metotlara verdiğim adları register(!) edilmemiş değişken adlarından seçme kaygım ağır bastı. Madem yasal nedenlerden dolayı kitapta değişken adı tadilatına(!) gittim, aydınger çıkışlarını aldığım, önsözünü yayınladığım kitabı yeni baştan ele alıp bazı konuları eklerken, bazı konularda yeni ayrıntılara yer verirken bazı konulara ayırdığım sayfa sayısını azalttım. Bu metni okuyan bazı öğretim üyeleri bana tepki gösterip tereciye tere sattığımı düşünebilirler. Bu işe yıllarını vermiş tecrübeli öğretim üyelerinin bu tepkisini normal karşılamak gerekebilir. Ancak bu memlekette programcılık kitaplarında verilen 3-5 satırlık kodlarda i’nin, j’nin, dosya’nın, sayi1’in, sayi2’nin değişken adı olarak kullanılmış olmasına suç gözüyle bakan prof unvanlı öğretim üyeleri olduğunu da unutmamak gerekir. 

Hedef Okur Grubu Seçmek

İşini ciddiye alan, yazma becerisine ve bilgisine güvenen yazar, yazmaya karar verdiği kitabının veya makalesinin üzerinde çalışmaya başlamadan önce kendine bir hedef okur grubu seçer. Ardından hedef okur grubunun beklentilerine, ihtiyaçlarına cevap vermeye çalışır. İşini ciddiye almasına rağmen hedef okur grubunu yanlış seçen veya seçtiği hedef okur grubuna uygun kitap yazamayan yazar uzun vadede başarısız olur. 

Tabii bazı yazarlar işin kolayına kaçıp daha önce yayınlanmış bir kitabın kapsamından(aynı yöntem bazen makale yazılırken ve üniversitelerde derslerin içeriği tespit edilirken kullanılıyor) yararlanıp bazı ekleme ve çıkarmalarla kitaplarının içeriklerini tespit ederler. Başka bir anlatımla, bazı yazarlar kitaplarında hangi konulara yer vereceklerini tespit ederken beğendikleri yazarların kitaplarını kendilerine rehber ederler. Örneğin Herbert Schildt’in C# kitabı yerli yabancı bir çok yazar tarafından rehber olarak kabul edilen bir kitaptır. Bu gruba giren yazarları, neyi nasıl yazacakları konusunda kafaları karışık yazarlar olarak değerlendirebilir. Hemen ekleyelim: Bu şekilde kitap yazan yazarların zaman zaman başarılı oldukları görülmektedir. Başka bir deyişle kitabının içeriğine karar verirken başka kitapları kendine rehber eden yazarlar başarılı kitaplar yazabilirler. 

Bir yazarın beğendiği başka bir yazarın kitabını kendine rehber etmesine günlük hayatta şöyle bir örnek verilebilir: Otomobille gitmek istediğiniz yere nasıl gidileceğini bilmiyorsunuz. Bu nedenle birisine soruyorsunuz. Danıştığınız kişi size “şu dolmuşu takip ederek oraya gidebilirsiniz” diyor. Henüz yolun başında olan yazarlar dolmuş takip edip istediklere yere gitmesinler diyecek değilim. Bu konuda sözü hemen kendime getireceğim: Kitaplarını yabancı yazarların kitaplarından gizlice çeviri yaparak yazmakla suçlanan Memik Yanık bırakın çeviri yapmayı şimdiye kadar beğendiği yazarların hiçbir kitabını kendisine rehber yapmadı. Alın size bir örnek Memik Yanık 1994 yılında yayınladığı Clipper adlı ilk kitabını yazarken elinde bir tek yabancı kitap vardı ve yazdığı Clipper 5.2 adlı kitabın elindeki yabancı kitapla en ufak benzerliği yoktu. 

Kitapların içeriklerinin ve konuların sıralanışı bakımından birbirine benzemelerini normal karşılamak gerek. Örneğin birçok programcılık kitabında ilk sayfalarda program geliştirme aracından söz edilir. Yazar program geliştirme aracından söz etmek istiyorsa doğal olan budur. Yine birçok yazar öncelikle değişkenlerden tiplerden blok kontrol deyimlerinden vs söz eder. 

Şimdi 2003 yılına gidip size birkaç cümle ile Memik Yanık’ın 2004 yılında yayınlanan C# kitabı bağlamında Herbert Schildt’in C# kitabı hakkında birkaç cümle yazacağım. Biraz gecikme ile olsa bile C#’la ilgilenmeye başlamıştım. Piyasadaki birkaç Türkçe kitaptan birisi Herbert Schildt tarafından yazılıp Alfa Yayıncılık tarafından Türkçeye çevrilen(çevirmen Selçuk Tüzel) Herkes İçin C# kitabıydı. Kitabı elime alıp biraz incelediğimde beğenmiştim. Bu durumda hemen akla şu soru gelir: Madem dünyaca ünlü bir yazarın kitabı Türkçeye çevrilmiş ve bu kitabı beğeniyorsun o halde neden kendin oturup C# kitabı yazdın? Bu soruya verilecek makul bir cevabım olmasaydı zaten kendim C# kitabı yazmazdım. Çünkü Herbert Schildt’in kitabı çok iyi kitap olmakla birlikte birçok okurun öncelikle gerek duyacağını sandığım konuları içermiyordu. Örneğin veritabanı yani ADO.NET konuları yok gibiydi. Ötesi Visual Studio’dan yararlanma konusunda neredeyse sıfır bilgi içeriyordu. Bu durumda yazmam gereken C# kitabı Herbert Schildt’in kitabının rakibi olmayıp bıraktığı boşluğu doldurmaya çalışmalıydı. Hatta o günlerde Herbert Schildt’in C# kitabı ile hemen hemen aynı konuları içeren, aynı anlayışla kaleme alınmış başka kitaplar yayınlanmışken Herbert Schildt’in kitabına benzeyen 3. 4. bir C# kitabı yazmam zaten anlamsız olurdu. 

Aynı konuda 2. veya 3. kitabı yazma konusuna bazen şöyle bakmak gerekebilir: Piyasada Türkçe yayınlanmış ve oldukça beğendiğiniz kitaplar olmasına rağmen bu kitapların hedef okur grupları ileri düzey bilgi edinmek isteyenler ise, kendiniz başlangıç düzeyi konuları içeren kitap yazabilirsiniz. Bazen bunun tersi de olur: Piyasada çok iyi başlangıç düzeyi kitaplar vardır ve size göre ileri düzey bilgi edinmek isteyen çok sayıda okur bulunmaktadır. Bu durumda ileri düzey bilgi ihtiyacı olan okurları hedefleyen kitap yazarsanız başarılı olursunuz. 

Bazı yazarlar vardır ki bunu(yani usta bir yazarın kitabını kendine rehber edinmeyi) bile yapmazlar, ellerinde ne malzeme varsa kitaplarına doldururlar. Değişik amaçlar için yazdıkları programları kırpıp kırpıp kitaplarında kullanırlar. Yabancı yazarlar genellikle aynı tablolara sahip ve herkes tarafından bilinen örnek veritabanlarını kullanırken bizim yerli yazarlar ilk bakışta okura karışık gelen veritabanları üzerinde örnekler hazırlarlar. Tabi böyle bir yaklaşımla yazılan kitaplar kafadan kötüdür vs denilmese bile böyle bir anlayışla yazılan kitaplarda “makale toplamı” havası koklanır. Örneğin C# veya Visual Basic.NET konulu bazı kitaplarda Object sınıfından doğru dürüst söz edilmeden ilk sayfadan itibaren Class’lar hakkında derinlemesine bilgi verilmeye başlanır. Tabi bu kitaplarda Object sınıfının bütün sınıfların atası olduğu mutlaka birkaç kez işaret edilir. Yazarımız kitabının hemen başında Object sınıfı hakkında bilgi verse anlaşılmayacak. Object sınıfını kitabının sonlarına bıraksa bu kez başka sorunlar çıkacak. Çözüm kitaba hakim olmaktadır, çözüm okura henüz anlatılmayan sınıflardan söz edilirken okurun konuyu henüz bilmediğini unutmamaktır. 

Hedef okur grubunu doğru seçmeyen yazar nasıl bir anlatım dili kullanacağı konusunda tereddütlere düşer. Örneğin yazarın birisi C# üzerine yazarken arada bir C++ veya C’ye göndermede bulunur. Bunun anlamı şudur: Yazarımız programcılığa ilk adımlarını C# ile atanları değil daha önce C++ veya başka bir programla dili ile 3-5 satır bile olsa kod yazmış olanları hedeflemektedir. Bu durumda yazarımızın bütün kitap boyunca anlatım şeklini programcılık konusunda az çok bilgisini olanlara yönelik yapması gerekir. Tabii konu üzerinde yeterince düşünmeyen ve elindeki malzemeyi kitap olarak değerlendirmek isteyen yazar arkadaşımız; bir sayfada okurunu yıllardır programcılık yapan birisi olarak görüp ona göre cümle kurarken, başka bir sayfada karşısında sanki hayatında tek satır kod yazmamış birisi varmış gibi konusunu anlatır. İşin özü şudur: Yazar iyi kitap yazmak istiyorsa önce hedef okur grubunu tercih edecek. Sonra da kitabını kaleme alırken kitabının her sayfasında hedef okur grubunun beklentilerini ve mevcut bilgi düzeyini gözetecek. 

Bundan yaklaşık 7-8 yıl önceydi. Yıllardır görmediğim arkadaşımı Anamur’da ziyaret etmiştim. Hemen bana Muz ve muzculuk üzerine yazdığı kitabı verdi. Kitabı 10-15 dakika kadar gözden geçirdikten sonra arkadaşa dedim ki(ki muz hakkındaki bilgim muzun Anamur’da yetiştirildiği ile sınırlıdır) “sen iki cami arasında bey namaz kalmışsın. Bir taraftan bu kitap muz üreticilerine yararsın, bir taraftan da üniversitedeki hocaların beğensin istemişsin. Kitabını ya hocaların için ya da Anamur’da muz üretenlerini hedefleyerek kaleme almalıydın. Tercihini baştan yaparsan daha iyi kitap yazarsın”. Tabi bu yorumuma arkadaş şaşırdı. Çünkü asıl sıkıntısına parmak basmıştım. Gelelim programcılık konulu kitaplara:Hedef okuru seçilmeden yazılan kitabın iyi olması tesadüflere bağlıdır.

Önce Kitabın Neyini Yazmak Gerekir?

İşini ciddiye alan yazar ilk olarak kitabının önsöz’ünü yazarak hedeflerini ortaya koyar. Kitabını bitirip kitabı üzerine yazacak bir şeyi olmayan hatta 1 sayfalık önsözü bile yazmakta zorlanan yazarın kitabı hakkında olumlu düşünmek bence zordur. Düşünsenize yazarımız oturup 1000 sayfalık kitap yazıyor ama iş kitabın önsözünü yazmaya gelince klasik bir iki cümle etmekten öteye gidemiyor. İyi programcılık kitabı yazmak veya usta yazar olmak isteyenlere bu konudaki önerim şudur: Önce kitabınızın önsözünü yazın, kitabınızla neyi hedeflediğinizi bir bir ortaya koyun. Sonra kitabın içeriğini doldurdukça mevcut önsöz metninde küçük değişiklikler yapın. Kitabı bitirdiğinizde ilk hedeflerinizin çok ötesinde(yani gerisinde) duruyorsanız tekrar düşünmeniz, hedeflerinizi ve kitabınızı tekrar değerlendirmeniz gerekir. Örnek olması için ilk C# kitabımın önsözünden bir paragrafı buraya aldım. Bu paragrafta ilk C# kitabım için kolay okunma ve okunanın hemen anlaşılması gibi bir hedefimin varlığını işaret ediyorum. 

Bu kitabı yazmaya başlamadan önce yerli-yabancı C# konulu birkaç kitabı inceledim. Bütün kitaplar değişkenler, döngüler, formlar ve diğer konular hakkında anlaşılır şekilde yeterli bilgi içeri­yordu. Ancak konu veritabanı olunca işin rengi değişiyordu; kimisi sanki karşılarında Microsoft’un SQL Server veya başka bir veritabanı programını geliştiren firmanın programcılarının olduğunu sanıyor, kimisinin ise ne anlattığı anlaşılmıyordu. Bu nedenle C#’ın veritabanı özelliklerinin bir okumada hemen anlaşılmasını sağlamak ve kimseyi çok sayıda kitaptan aynı konuyu tekrar tekrar okumak zorunda bırakmamak için bazen konuyu uzattığım oldu. Bu kitapta yazılanların basitliğine ve kolay anla­şılmasına tepki duyanlara “bir kitabı veya bir yazıyı 2. defa okumanın ne kadar sıkıcı olduğunu” hatırlatmak istiyorum. 

Tahmin edersiniz ki bu paragraf yukarıda yaptığım öneriye uygun olarak kitap üzerinde çalışmaya başlamadan önce yazılan hali değildir. Çünkü yazar bazen ilk hedeflerinden biraz uzaklaşır. Örneğin yazar der ki şu bölüm için şu kadar sayfa yeterlidir. Ancak yazarımız konu üzerinde çalışmaya başladıkça, aklına yeni sorunlar ve çözümler geldikçe söz konusu bölüme ayırmak istediği sayfaların sayısının iki katına çıktığını fark eder. Örnek vermek gerekirse şu günlerde tekrar gözden geçirdiğim C# 3.0 kitabıma sonradan Application Domain’ler hakkında birkaç sayfa eklemeye karar verdim. Ancak konu üzerinde çalışıp muhtemel sorulara cevaplar aramaya başlayınca Application Domain konusunu 3 sayfada anlatırsam yazılanların havada kalacağını ve kimseye bir faydasının olmayacağını fark ettim. Şu günlerde karar vermem gerekiyor:Ya C# 3.0 kitabımda Application Domain’lerden söz etmeyeceğim ya da en az 15 sayfa boyuncu konuyu enine boyuna anlatacağım. 

Bazen de bunun tersi olur, 15 sayfa boyunca anlatırım dediğiniz konu için bir bakarsınız ki 6-7 sayfa yeterli olmuş. Ötesi kitabın önsözünü yazarken dersiniz ki “bu kitap ileri düzey diye anılan şu şu konuları içerecek, dolayısıyla ileri düzey bir kitap olacak”. Ancak bazen evdeki hesap çarşıya uymaz. Örneğin değişkenler konusu bütün programcılık kitaplarında bulunur. Yazarın birisi değişkenlere 10 sayfa yer ayırırken bir başkası değişkenleri 20 sayfa boyunca anlatır. C# 2.0 kitabımda değişkenlere ayrılan sayfaların sayısı az değildi. C# 3.0 kitabımın üzerinde çalışmaya başlamadan değişkenlere daha az yer ayırmak gibi bir düşüncem vardı. Ne var ki değişkenler bölümü üzerinde çalışmaya başladıkça sayfaların sayısı artmaya başladı. Çünkü C# kitabımın anlatım düzeyini biraz yükselttiğim için değişkenlerle ilgili olarak zaman zaman teknik açıklamalar yapmaktan geri duramadım. Bu durumda ya kitabın sayfa sayısını arttırmam ya da bazı konuları kitaptan çıkarmam gerekecekti. Yani anlayacağınız kitabın ileri düzey olarak anılmasına neden olacak birkaç konuyu böylece tehlikeye atmış oldum. Kitabın düzeyini düşürmeye razı olmadığım için okurların her kitap veya kaynakta bulacağı bazı konuları kitaptan çıkarmayı tercih ettim. 

Tabi bazı yazarlar tanımladıkları değişkenlere ad verirken rahat davranıyorlar. Bütün programcılar tarafından değişken adı olarak kullanılması alışkanlık olmuş “i”, “j”, “sayi”, “dosya” vs gibi değişken adlarını kullanarak kabahat işlemiş oluyorlar(!) Madem makalenin veya incelemenin başlığı Yazarlık Dersleri, biz de yazar arkadaşları uyaralım ve diyelim ki “kitaplarınızda ve makalelerinizde verdiğiniz kodlarda kullandığınız değişken adları konusunda dikkatli olun, kullanmış olduğunuz değişken adlarını tıpkı alan adları(domain) gibi önceden birileri sahiplenmiş olabilir.” Sahibi olan değişkenleri makalelerinizde(tabii yazılan programlar derlendikten sonra değişkenlere verilen adların önemi kalmadığı için bu sözümüz yalnızca kitap ve makale yazanlaradır) kullanırsanız Memik Yanık gibi suçlu duruma düşebilirsiniz. 

Bu noktada ek açıklama yapmak istiyorum: Konu programcılık üzerine yazmak olduğunda bazı konularda ön bilgi niyetine kısaca anlatmak soruna neden olmaz. Örneğin .NET uyumlu projelerde serileştirme işleminin nasıl yapıldığını 3 sayfada anlatıp keserseniz bazı okurları tatmin etmesiniz de anlatılanlar anlaşılır. Başka bir deyişle serileştirme ile ilgili işlemlerin ve sınıfların ayrıntılarına girilmeden yazılanları anlamak mümkündür. Tabii serileştirme işleminden söz etmeden önce okuru stream sınıfları hakkında bilgilendirmiş olmanız gerekir.

Biraz da Editörler İçin Yazalım

Türkiye’de henüz tam kurumsallaşmamış olsa bile belli başlı yayınevlerinin editörleri vardır. Editörler programcılık ve bilgisayar üzerine kaleme alınmış kitapları yayınlamadan önce değerlendirip ya yayınlarlar ya da yayınlamama kararı alırlar. Editörlük kurumu özellikle yeni yazarlar için önemlidir. Bu başlıkta sizlere editörleri nasıl ikna edersiniz vs. bilgiler verecek değilim. Asıl üzerinde durmak istediğim konu şudur: Madem bir editör bir kitabı baştan sonra sayfa sayfa cümle cümle okuyamayacağına ve yazarın her yazdığının doğru olup olmadığını test edemeyeceğine göre kendisine gelen dosyayı(yani kitap olacak metinlerin hepsi) önce kuşbakışı inceler. Bazı cümleleri mercek altına alır, yazarın Türkçe bilgisi yeterli midir, cümleleri düzgün mü, yazım hataları kabul edilebilir miktarda mı sorularına cevap arar. Editörün incelediği dosya hakkındaki fikri olumlu ise yani yayınlayabiliriz görüşüne vardıysa, ya kendisi dosyayı daha kapsamlı bir incelemeden geçirir ya da dosyayı o konuda bilgisi olan birisine verir. 

Burada önemsediğim nokta şudur: Konumuz C# olsun. İşin web tarafı var, veritabanı kısmı var, genel programcılık kısmı, Windows’un sağladığı alt yapıyı bilmek var. Çoğunlukla yazarlar birbiri ile bağlantılı bütün konuların uzmanı değillerdir. Örneğin .NET dillerinden birisi üzerine kitap hazırlayan yazarımız .NET Framework ile gelen güvenlikle ilgili sınıfları uzmanlık düzeyinde bilmiyor olabilir. Hatta .NET Framework gelen bazı kontrolleri, sınıfları hiç kullanmamış bile olabilir. Bundan şuna sonuca varmak istiyorum: Yazar her konuyu bilmek zorunda değildir. Örneğin yalnızca Visual Studio’dan söz eden bir kitap yazmak istiyorsanız SQL Server hakkında ayrıntılı bilgiye sahip olmak zorunda değilsiniz. Tabii SQL Server konusunda uzmanlık düzeyinde bilgisi olan birisinin Visual Studio’nun Server Explorer penceresi hakkında bilgi verirken hata yapma ihtimali azalır ve yazdığı cümlelerin içi dolu olur. 

Editör öncelikle kendisine teslim edilen kitabın iç tutarlılığına bakar, yazarın hangi konuların uzmanı olup olmadığını sorgulamaz. Ancak işini ciddiye alan editör kendisine verilen kitapta keçi boynuzu gibi yemesi ve sindirmesi zaman alan cümlelere sık sık rastladığında işin rengi değişir. Bir yazarın kaleminden çıkan metinde cümleler zor anlaşılıyorsa, bir sonraki paragrafta benzer amaçlı 2. bir cümleye rastlıyorsa kitapla ilgili kafasındaki soru işaretleri çoğalır. Daha açık bir anlatımla ifade etmek gerekirse, editör yazarın sindirmediği, iyice öğrenmediği konuları da anlattığını düşünmeye başlar. Yazarlık için en büyük tehlike budur. 

Yazarımızın uzmanı olduğuna inandığı bir konuda kitap yazdığını düşünelim. Yazarımızın SQL Server hakkında yeterli bilgiye sahip olduğunu da varsayalım. Gel gelelim yazarımız kitabında Access veya MySQL hakkında da bilgi vermesinin iyi olacağını düşündü. Bu durumda yazarımız ne yapacak? Ya Access ve MySQL konusunda yeterli bilgiye sahip birisinden destek alacak ya da oturup sırf kitabında söz etmek üzere Access veya MySQL çalışacak. İşte tehlike buradadır. İşin uzmanı editörler yetersiz bilgi ile kurulan cümleleri hemen fark ederler. Bu cümleler “ham” olsa bile yanlış bilgi içermiyorlarsa sorun yok denilebilir. Zaten 700-800 sayfalık kitabın veya 50 bölüme sahip bir kitabın birkaç bölümünün zayıf olmasını okurlar normal karşılıyorlar. Bundan bir yıl kadar önce elime geçen bir C++ kitabını biraz incelemiş ve günlüğüme aşağıda verdiğim paragrafı yazmıştım. 

Geçen günlerde Türkçeye çevrilmiş bir C++ kitabını inceliyordum. Kitap iyi mi değil mi, dili nasıldır, kimlere hitap etmeye çalışıyor vs gibi sorular bir yana kitabın ilk sayfalarında yazar önce derleyicilerden devamında tümleşik program geliştirme araçlarından(IDE) söz ediyor. Tabii ki konu C++ olduğunda akla hemen 2 firmanın ürünleri gelmektedir: Microsoft ürünü Visual C++ yani Visual Studio ve Borland ürünü C++ Builder. Hemen eklemek gerekirse, Borland’ın geliştirdiği bütün C++ derleyicileri IDE şeklinde kullanıma sunulmuştur. Bu nedenledir ki Turbo C++ ve Windows uyumlu Borland C++ komple paket halinde pazarlandılar. Neyse uzatmayalım: Sözünü ettiğim C++ kitabında konu başlığı Borland C++ iken verilen ekran görüntüleri C++ Builder’a aittir. Açıkçası kitabı Türkçeye çevrilecek kadar ünlü yazarımız Borland C++ ile Borland C++ Builder’ı birbirine karıştırmıştı.

Eğer bu kitap ilk yazıldığı dilde yayınlanmadan önce editörü veya Türkçeye çevrilirken yerli yayınevinin editörü bu yanlışlığı fark etseydi bu hata kitapta yer almazdı. Tabii ki kitaplarda hatalar olabilir, yazar doğru bildiğine %100 inandığı bir konuda bile yanılabilir. Bazen bir Structure’den Class diye söz edebilir, dalgınlıktan kitabının birkaç yerinde nesne’den sınıf diye söz edebilir, bir işlemi hikaye etmek üzere çizdiği resimde bazı ayrıntıları atlamış olabilir. Benim yazar arkadaşlara asıl söylemek istediğim şudur: Kitaplarınızda hakim olmadığınız konulara mümkün mertebe yer vermeyin. Tabii hakim olmayıp kitabınızda yer vermediğiniz konuların sayısı fazlalaşıyorsa sorun var demektir. Peki ya diyelim ki yazarımız hakim olmadığı birkaç konuya kitabında yer verdi. Editör bunu nasıl anlayacak, okur nasıl anlayacak? Aslında bu zor değildir: Bunu o konu hakkında yazılan ilk cümlede değilse bile ilk paragraftan anlamak mümkündür. Çok az kişi iyi bilmediği teknik bir konuda akıcı cümleler kurabilir. Eğer yazarın iyi bilmeden kaleme aldığından şüphelendiğiniz konu hakkında kurduğu cümleler akıcı değilse soru işaretlerinizin sayısını arttırabilirsiniz. 

Gelin bu konuda bir örnek vereyim: Yakın bir zamana kadar(yani birkaç yıl öncesine kadar) Application Domain’ler hakkında ayrıntılı bilgim yoktu. Tabii ki kullanıcı .NET uyumlu bir EXE dosyayı çift tıkladığında geri planda nelerin olduğunu az çok biliyordum. Her uygulama için Application Domain nesnesinin hazırlandığını ve bu nesnenin kaynağının AppDomain sınıfı olduğunu da biliyordum. Baktım Application Domain’ler veya AppDomain sınıfı hakkında ayrıntılı bilgi sahibi olmadan bazı konuları anlatmakta zorlanıyorum, oturup Application Domain’ler üzerinde çalışmaya başladım. Konunun ayrıntılarına bakınca kafamda AppDomain sınıfı ilgili soru işaretleri azalacağına çoğaldı. Bunun üzerine öncelikle elimdeki Türkçe kitaplara baktım. İncelediğim kitapların bazılarında ikişer üçer sayfada AppDomain sınıfının özellikleri tablo halinde sıralanmakla yetinilmişti. Bazılarında ise AppDomain sınıfından hiç söz edilmemişti. Bunun üzerine Application Domain’ler hakkında daha önce birkaç makale yazan Levent Yıldız’a başvurdum. 

İşin özü şudur: Application Domain konusunu bütün ayrıntıları kavramadığım sürece kitabımda AppDomain sınıfından söz etmemem gerekir. Şimdi sırada yabancı kaynakları vs incelemek var. Tabii bazılarının sandığının aksine yabancı kaynaklardan bir tek cümle tek örnek almayacağım. Önemli olan konu hakkında ayrıntılı bilgiye sahip olmaktır. Zaten iyi yazar olmak istiyorsanız başka kitaplardan tek cümle, tek örnek kod almamanız gerekir. İncelediğiniz kaynaklar ister yerli ister yabancı olsun; o kaynaklar olsa olsa o konuyu öğrenmenize, bazı ayrıntıları fark etmenize katkı sağlamalıdır. 

Belki Application Domain’ler hakkında elimdeki mevcut kaynaklardan yararlanıp ayrıntılı bilgiye sahip olduktan çok sonra kitaba eklemek üzere bir şeyler yazarım. Aradan geçen zamanda okuyup incelediğim yabancı kaynakta verilen örneği vs. her şeyi zaten unuturum. Tabii yukarıdaki sayfalarda işaret edildiği gibi kitabınızda bir konuya yer vermek istiyorsanız konuya yeteri ağırlığı vermeniz gerekir. Örneğin API fonksiyonlarından söz ediyorsanız direk 5-10 API fonksiyonun nasıl kullanıldığını anlatmakla yetinmeyip bu fonksiyonların işletilme mekanizması hakkında yeterli bilgiyi okura vermeniz gerekir. 

Çeviri Yapılır mı, Başka Kaynaklardan Yararlanılır mı?

Her ne kadar yukarıdaki sayfalarda yabancı yazarlardan yararlanma konusuna az çok değinmiş olmakla birlikte çeviri yapma konusu önemli olduğu için üzerinde ayrıca durmak gerekiyor. Öncelikle tecrübe ile sabit bir konudan söz etmek istiyorum. Bundan 1 yıl kadar önce kısa bir yazı hazırlayıp kişisel sitemde yayınlamıştım. Yazıda bir metodun işlevinden bir cümle ile söz ediliyordu. Bu metot çok ender durumlarda gerek duyulan bir metot olduğu için üzerinde fazla durmamıştım. Metodun işlevini nasıl mı öğrenmiştim: Sözünü ettiğim yazıyı yazmadan çok önceleri yerli bir kaynakta bu metodun işlevinden net bir şekilde, yani metni kaleme alan blog yazarı kendinden emin bir şekilde metodun işlevinden söz ediyordu. Ben de kendi kendime dedim ki “hımm demek bu metot bu işi yapıyormuş” diye belleğime yazdım. Gel zaman git zaman yazıp kişisel sitemde yayınladığım yazıda bir cümle ile metodun doğru bildiğimi sandığım bu işlevinden söz ettim. Aradan biraz zaman geçip meraklı okurun birisi bana yazıp “hocam bu metodu yanlış biliyorsunuz” demesin mi? Metodu biraz inceleyince okurun haklı olduğunu, yani metodun işlevi konusunda yanlış bilgiye sahip olduğumu fark ettim. 

Bu örnekten kendim şu sonucu çıkardım: Hem yerli hem de yabancı yazarlar sizi bilmeden yanıltabilirler. Bu nedenle herhangi bir metot veya sınıf hakkında yazdıklarınızın doğruluğundan emin olmak istiyorsanız söz konusu programlama dilini geliştiren firmanın resmi dokümanlarına mutlaka bakmalısınız. Elbette daha önce hiç kullanmadığınız ve string bilgiler üzerinde işlem yapan bir metot için aynı şeyi yapmak zorunda değilsiniz. Bazılarınız merak edip soracaklardır: Yukarıda sözünü ettiğim metodu hiç denemeden mi onun hakkında bir cümle yazdım? Denemez olur muyum? Denedim de metodun bellekteki nesnelerin yok edilmesiyle ilgili olduğunu sanıyordum. Yani ayrıntılı inceleme yapmadan metodun o nesneyi bellekten silip silmediğini anlamak zordu.

Yıllar önce Windows 2000 Server üzerine yazılmış bir kitabı okuyordum. İlk başta her şey normaldi, yazarımız Windows 2000 Server işletim sisteminin temel özelliklerini bir güzel anlatıyordu. Hani bazen bir romanı dalgın dalgın okurken satırları karıştırıp aynı satırı tekrar okursanız ya, bir de baktım yazar bana daha önce anlattığı bazı konuları sanki başka sayfada tekrar anlatıyordu. Tabii ki işin gerçeğini hemen anlamıştım. Size önerim şudur: Yabancı yazarlardan yararlanın ancak bu yararlanma o bölümü o konuyu kaleme aldığınız sırada olmasın. Önce kitabını yazmak istediğiniz işletim sistemini, programlama dilini veya veritabanı programını ilgilendiğiniz yönleri ile iyice inceleyin, denemeler yapın, elinizdeki mevcut kaynakları gözden geçerin. Bilgi eksikliklerinizi tamamladıktan sonra yazmaya başlayın. Tabi unuttuğunuz küçük ayrıntılar olduğunda aynı kaynaklara tekrar bakarsınız. Bir taraftan öğrenip bir taraftan kitabınızı yazmaya kalkışırsanız hem hata yapma ihtimaliniz artar hem de başka kaynakları taklit eder duruma düşersiniz. Hele hele sosyal bilimlerle ilgili bir alanda yüksek lisans tezi hazırlayan öğrenciler gibi bir paragraf o kaynaktan, bir cümleyi bu kaynaktan olarak programcılık kitabı yazmaya kalkışırsanız kitabın kapağında sizin adınız olur ama o kitap sizin olmaz. 

Şimdi birileri diyecekler ki programcılık kitaplarında başka kitaplardan alıntı yapılmaz mı, yararlanılan kaynaklardan söz edilmez mi? Alıntı da yapılır yararlanılan kaynaklardan da söz edilir. Ne var ki bu çok önemli değildir. Çünkü C# programlama dili bağlamında konuşmak gerekirse: Microsoft firması C#’la ilgili hemen her özelliği her metodu herkesten çok önce zaten help metinlerinde, MSDN’de anlatıyor. Sizce C#’ın MSDN’de sözü edilmemiş, nasıl kullanılacağı işaret edilmemiş bir tek anahtar kelimesi var mıdır? Sanırım yoktur. O halde bir yazarın her hangi bir anahtar kelime veya operatör hakkında yazdıkları anlam bakımından MSDN’den farklı olur mu? Bence olmaz. Aradaki fark nedir, insanlar en kapsamlı kaynak durumundaki MSDN dururken neden gidip programcılık kitapları alıyorlar? Cevap basittir: Yazarlar konuları belli bir sıraya ve anlayışa göre dizip kendi cümleleriyle ek açıklamalar yaparak anlatıyorlar, farklı bakış açısı kazandıran örnekler hazırlıyorlar. Böylece söz konusu programlama dilini daha kısa zamanda kolayca öğrenmek mümkün hale geliyor. 

Madem yazar olmak istiyorsun, madem makale veya kitap yazmak istiyorsun neyi nasıl kimden hangi kaynaktan öğrendiğinin önemi yoktur. Önemli olan nasıl anlattığındır, önemli olan kurduğun cümlelerdir. Hiç kaygın olmasın bir konuyu, metodu veya sınıfı anlatmak için hazırladığın örnek birileri tarafından daha önceden büyük bir ihtimalle yapılmıştır, yayınlanmıştır. Yani programcılık üzerine yazan birisi olarak bilim yapma şansın yoktur, anlattığın her teknik, verdiğin her örnek birileri tarafından hem de sizden habersiz mutlaka yapılmıştır. O zaman programcılık kitabı yazarının farkı ne olabilir diye soranlara tek cümle ile cevap vermek isterim: Anlatım şekli, konuları sıralayışı, öncelik verdiği konular ve kurduğu cümleler. Yani kendine özel bir anlatım tarzın yoksa, yazmayı düşündüğün kitabın daha önce yayınlanmış yerli yabancı kitaplardan farklı değilse, gerek içerik gerek anlatım düzeyi bakımından rakip olmayı düşündüğün yazarların kitaplarını beğeniyorsan sorunlar var demektir. Örnek vermek gerekirse Memik YANIK, Herbert Schildt’in C# kitabını beğeniyor olsa bile Memik Yanık’ın C# kitabı hem anlatım şekli, kurduğu cümleler Herbert Schildt’ten farklıdır hem de yazdığı C# kitabı Herbert Schildt’in C# kitabının rakibi değildir. Bir sonraki derste kaldığımız yerden devam edeceğiz.

Genel | Bu yazıya 2 yorum yapılmış. | 11.04.2009 21:51:22

Tablolar Arası İlişkiler - DataRelation Sınıfı


Bu makalede DataSet'teki tablolar arası ilişkilerin DataRelation sınıfı sayesinde nasıl kurulduğundan söz edeceğim.

ADO.NET | Bu yazıya henüz yorum yapılmamış. | 11.04.2009 18:22:27

C# 3.0 Kitabımı Anlattım


Bu yazının amacı bu kitabın satışını arttırmak değildir. Bu yazının amacı olsa olsa böyle bir kitaba ihtiyacı olmayanların bu kitabı satın alıp para ve zaman kaybetmelerinin önüne geçmek olabilir. Her ne kadar bu kitap .NET 3.5 destekli C# 3.0’ı anlatmak kaygısı ile kaleme alınmış olsa bile C# 3.0 piyasaya verileli az olmadı. Bu bilgiyi şunun için yazdım: Mevcut bir işletim sisteminin veya bir programlama dilinin yeni sürümü çıktığında özellikle yurt dışında sıcağı sıcağında yeni sürümle gelen yeniliklere odaklanan kitaplar yazılıp yayınlanmaktadır. Böyle kitaplar eski sürüm hakkında bilgisi olup yeni sürümle gelen yeni özellikler hakkında hemen bilgi edinmek isteyenlere uygundur. En başta söylemeliyim ki bu kitap C# 3.0 ve .NET 3.5’la gelen yenilikleri anlatmak kaygısı ile kaleme alınan bir kitap değildir. Başka bir deyişle bu kitabın hedef okuru programcılık nedir az çok bilip C# ve nesneye yönelik programcılıkta uzman olmayı kafasına koyanlardır. Bu nedenledir ki bu kitapta konular temelden ele alınarak 1100 sayfa boyunca C# anlatıldı. C# anlatılırken .NET Framework 3.5 ile gelen C# 3.0 derleyicisi ve Visual Studio 2008 kullanıldı. Bu yazıda asıl bu kitapta C#’ı nasıl anlattım sorusuna cevap aramaya çalışacağım.



Elbette C# uygulamaları geliştirmek için kullanılan bilgisayara .NET Framework kurulup Not Defteri programı ile istenen programları yazmak mümkün olsa bile bu zahmetlidir. Bu nedenle C# veya .NET uyumlu başka bir programla diliyle uygulama geliştirmek isteyenler Visual Studio’yu veya C# için hazırlanmış Express Edition’ı kullanmayı tercih ediyorlar. Bu nedenledir ki bu kitabın başında 18 sayfa boyunca Visual Studio ile hazırlanan C# uygulamalarının temel özellikleri ve bu uygulamaların nasıl derlenip çalıştırıldığı ve nasıl debug edildiğinden kısaca söz edildi. İşte bu kitabın ilk bölümüyle ilgili olarak kitaptan alınmış bir paragraf : “Bu bölümde ileride işlenecek bazı konulara temel oluşturan birkaç ayrıntıdan söz edilmektedir. Aslında C# programlama dilinden bağımsız olarak Visual Studio hakkında yüzlerce sayfa yazılabilir. Ne ki bu kitabın böyle amacı yoktur.” Kitabın içindekiler sayfasına bakıp “bu kitabın 18 sayfası ekran görüntüleriyle doldurulmuş” diye eleştireceklere şunu söylemek isterim: İlk bölümde Visual Studio’nun yardımıyla uygulama geliştirilirken karşılaşılan en önemli kavramlardan birisi olan Debug ve Release modlarından söz edilmektedir.

Bu kitabın C# ile Programcılığa Giriş adlı 2. bölümünde C# ve nesneye yönelik programcılık hakkında kuşbakışı bilgi verilmektedir. Bu sayede okurun C# ve nesneye yönelik programcılık hakkında temel bilgilere sahip olması hedeflendi. Bu kitabı incelemeden eleştirmeyi kafalarına koymuş olanlara şunu söylemek isterim:Memik Yanık’ın C# 3.0 kitabının 36 sayfadan meydana gelen Programcılığa Giriş adlı 2. bölümünü okuyanlar metotlarla olayları karıştırmazlar, Application sınıfının işlevinden bi haber olmazlar, formların nasıl hazırlanıp ekrana getirildiğini bilirler. Aşağıda verdiğim paragrafı kitaptan olduğu gibi buraya aldım: “Daha önce az çok kod yazmış olanlar bir sonraki bölüme şöyle bir baktıklarında bütün yazılanların bildikleri konular oldukla­rını sanabilirler. Sanabilirler diyorum çünkü bir sonraki bölümde C# ile program yazılır­ken gerek duyulan pek çok kavram hakkında teknik açıkla­malar yapılmaktadır. Bu nedenle bu kitabı eline alan herkesin bir sonraki yani 2. bölümü dikkatli okumasını öneriyorum. Tabii bu öneri kitapçıda veya herhangi bir yerde bu kitabı satın almayacakları önceden belli olup ta meraktan bu kitabı şöyle bir gözden geçirenleri veya C# hakkında yeterince bilgisi olanları kapsamıyor. Böyle bir kitaba ihtiyaçları olmayanların bir sonraki bölümde yazılanlara yabancı olmamaları normaldir. Bir sonraki bölümün gerek içerik gerekse de konuların işleyişi bakımından bütün yerli yabancı kaynaklardan ayrıldığını söyleyebilirim.” Elbette bu kitabın 2. bölümünde yazılanların bir kısmının başka kaynaklarda bulunma ihtimali yüksektir. Programcılık kitaplarında bilim yapmadığımıza göre bu kitapta anlatılan her konunun başka kaynakları bulunması son derece normaldir. Kitapların arasındaki en önemli fark konuların anlatım biçimi ve hikâye edilme tarzıdır.

Gelelim bu kitabın Konsol Uygulamaları adlı 2. bölümüne. Bir sonraki bölüm bir bakıma Programcılığa Giriş adlı 2. bölümün devamı gibidir. Çünkü Konsol Uygulamaları adını verdiğim 3. bölümde C# kodu yazılmak istendiği zaman “ilk” gerek duyulacak kavramlar ve en çok kullanılan .NET sınıflarını anlatmaya çalıştım. Her ne kadar konsol uygulaması geliştirip başkasına verme ihtimaliniz düşük olsa bile bir sonraki bölümde C# ile program yazmanın geri planı üzerinde biraz durulmaktadır. Tabii bununla da yetinilmeyip Konsol Uygulamaları dahilinde Windows Formlarının nasıl ekrana getirilebileceği anlatılarak referans ve namespace kavramları hakkında ön bilgi verilmeye çalışılmaktadır. Yine bazı arkadaşlar “madem Windows formuna gerek duyuyorsun da neden konsol uygulaması hazırladın” diye sorabilirler. Bu soruyu soran arkadaşlara aşağıda verilen 2 Main() metodunu incelemelerini önermek isterim.

static void Main(string[] args)

  {

    Form1 F1 = new Form1();

    F1.ShowDialog();

    Console.ReadKey(); 

  }

static void Main(string[] args)

 {

   Form1 F1 = new Form1();

   F1.Show();

   Application.Run();

   Console.ReadKey();  

 }

Sizce Memik Yanık konsol uygulamasının Main() metodunu bu şekilde düzenlemekle neyi hedeflemektedir? Sizce hangi kaynakta(yerli yabancı fark etmez) Form nesnesi Application sınıfından yararlanılmadan Show() metodu ile ekrana getirilmeye çalışılmıştır? Hayır hayır Memik Yanık Amerika’yı yeniden keşfetmiyor; Memik Yanık’ın burada yaptığı okurun dikkatini Application sınıfının işlevine çekmektir. Sizce Application sınıfı hakkında yeterince bilgi edinmemiş birisi Windows mesajlarını hakkıyla anlayabilir mi?

Gelelim bu kitabın 4. bölümde anlatılan şu Namespace kavramına. Her ne kadar bu kitabın 2. ve 3. bölümlerinde referans ve namespace’lerden söz edilmiş olsa bile .NET programcılığında henüz yolun başında olan birisi için Namespace kavramı hakkıyla öğrenmesi gereken kavramlardan birisidir. Tabi henüz yolun başında olan birisine namespace kavramını en başta anlatacağım deyip kafasını karıştırmamak gerekir. Bu düşünce ile namespace’ler hakkında bilgi vermeye kısıtlı bir konsol uygulaması hazırlayarak başladım. Çünkü C# derleyicisinin derleme yaparken neyin sınıf neyin namespace olduğuna karar verirken nasıl bir yöntemi kullandığının bilinmesi gerekiyor. Bu nedenle Memik Yanık’ın kitabında derleme hakkında bilgi verirken “System.dll” ve “System.core.dll” adlı referanslardan söz etti. Namespace adlı bölümün ileri ki sayfalarında .NET Framework ile gelen Namespace’lerdeki sınıfları kullanmaktan öte programcıların kendi sınıflarını nasıl namespace olarak düzenleyebileceklerinden söz edildi. Tabii ki C# konulu kitapların hemen hepsinde nasıl namespace hazırlandığından söz edilmektedir.

Memik Yanık’ın C# kitabının 5. bölümünde 36 sayfa boyunca değişkenler hakkında bilgi verilmektedir. Bazı okurlara göre değişkenlere bu kadar sayfa ayırmanın gerekçesi nedir diye sorabilirler. Elbette daha önce C# hakkında az çok bilgi edinmiş olanları göz önüne alırsak değişkenlere daha az sayfa ayırmak gerekirdi. Örneğin daha önce C# konulu kaynakları okumuş olanlar değişkenlerin nasıl tanımlanıp nasıl ilk değer aktarıldığını bilirler. Her ne kadar bu bölümde Nullable tiplerden, Parse() metodundan, Convert sınıfından söz edilse bile bu kitabı bu bölüm bağlamında değerlendirecek olursam şunları söyleyebilirim: Bu kitabın bu bölüm bağlamında bir artısı varsa değişkenlerin bütün yönleri ile ele alınmış olmasıdır. Bu nedenle değişkenler konusunu bu kitaptan okuyan birisi değişkenlerle ilgili olarak başka kaynaklara bakma gereğini duymaz. Benzer şeyler bu kitabın 6. bölümü için de söylenebilir. Çünkü kitabın 6. bölümünde 18 sayfa boyunca dizi değişkenler ve Array sınıfı her yönüyle en ince ayrıntısına kadar anlatılmaktadır. Belki bu kitap Değişkenler adlı bölüm bağlamında şöyle eleştirilebilir: Bu metni biraz kesip, bazı metot ve işlemlerden söz etmeyip birkaç sayfa tasarruf edebilirdiniz. Ancak ben tercihimi dizi değişkenleri her yönüyle anlatmak yönünde yaptım. Yani istedim ki bu kitabı edinenler C#’la ilgili temel konuları öğrenirken başka kaynaklara başvurma gereğini duymasın.

Şimdi sırada bu kitapta toplam 8 sayfa yer tutan Operatörler adlı bölüm var. Tabi hemen bazı arkadaşlar 8 sayfa boyunca artı(+), eksi(-), bölme(/) vs.. operatörlerinden söz etmiş olduğumu düşünebilirler. Bu bölümde bu operatörlere kısaca değinilmiş olsa bile asıl ağırlık Kaydırma Operatörleri ile as ve is operatörlerine verildi. Çünkü as ve is operatörleri çok sık kullanılmaktadır. Devamında 3 sayfa boyunca bit düzeyinde işlem yapılırken kullanılan operatörlerden söz edildi. Matematiksel işlemlerde kullanılan operatörler hakkında bu kitapta yazılanlar çıkarılsa bile sayfa sayısı değişmiyordu. Bit düzeyinde işlem yapılırken kullanılan operatörlerden yararlanmak son derece teknik bir işlem olmasına rağmen konular öyle hikaye edildi ki ilk okumada mutlaka anlaşılacak yalınlıktadır.

Bu kitabın Blok Kontrol adlı bölümünde 10 sayfa boyunca if, while, for, foreach’ten söz edildi. Bu kitabın bu bölüm bağlamında diğer kitaplara bir artısı pek yoktur. Ancak başlangıçta zor anlaşılan foreach döngüsünü daha önce hiç duymamış olanlar bile bu kitabın ilgili sayfalarını okuduklarında foreach döngülerine hemen hakim olabilirler.

Bu kitabın 9. bölümünde 26 sayfa boyunca string işlemlerinden ve Math sınıfındaki metotlardan söz edilmektedir. Neden mi bu konuyu önemsedim? Çünkü kod yazılırken en çok yapılan işlemlerin başında string işlemleri gelmektedir. Elbette String ve Math sınıflarının bazı metotlarını göz ardı edip bu bölümün sayfa sayısını 22’ye düşürmek mümkündü. Bu durumda C# ile programcılıkta yeni olan okurların başka kaynaklara başvurma ihtiyacı olurdu. Açıkçası istedim ki bu kitabı her kim edinirse String ve Math sınıfının metotları konusunda eksiksiz bilgiye sahip olsun. Örneğin String sınıfının Splip metodunu ayrıntılı bir şekilde anlattım. Bu kitabın 14 sayfalık 10. bölümü bir bakıma String İşlemleri adlı 9. bölümün devamı gibidir. Çünkü 10. bölümde StringBuilder sınıfından ve Düzenli İfadelerden söz edilmektedir. Tam bu noktada bu kitabın boyutlarından kısaca söz etmek istiyorum. Bu kitabın yazı alanın genişliği tam tamına 13 cm’dir. İsim vermeye gerek yok aynı genişliğe sahip(16 cm) birçok kitapta yazı alanı genişliği en fazla 11.5 cm’dir. Asıl demek istediğim şudur: Toplam 1074 sayfa olan bu kitap başka yayınevlerinin ölçüleri ile basılsaydı sayfa sayısı en az 1200 olurdu. Yani anlayacağınız bu kitabın sayfa sayısını azaltmak sürekli çaba harcadım.

11. bölümde 16 sayfa boyunca tarih ve zaman bilgileri bütün ayrıntıları ile anlatılmaktadır. Başka bir deyişle bu kitabı okuyan birisi için tarih ve zaman bilgileri üzerinde yapılan işlemler bağlamında bilmediği hiçbir ayrıntı kalmaz. Ayrıca bu bölümü okuyanlar Ticks özelliği ve TimeSpan yapısı hakkında bilgi sahibi olurlar. Bazı arkadaşlar yine itiraz edip Tarih ve zaman bilgileri üzerinde yapılan işlemleri anlatmak için 16 sayfa fazla değil mi? Bir görüşe göre evet. Şartları zorlayıp bu bölümün sayfa sayısını 12 veya 14’e indirmek mümkündü. Ötesi birçok kitapta bu konuya ayrılan sayfa sayısı üç beştir. Buna rağmen neden mi bu konuyu bütün ayrıntıları ile anlattım. Çünkü izlediğim forumlarda zaman ve tarihsel bilgiler üzerinde yapılan işlemlerle ilgili çok sayıda soru sorulmaktadır. Başka bir deyişle her C# programcısının bu işlemlere ihtiyacı olduğundan herkesin bu işlemler hakkında bilgi sahibi olması gerekiyor.

Bu kitabın 12. bölümünde toplam 12 sayfa boyunca Pointer değişkenlerden söz edilmektedir. Son derece teknik bir konu olan Pointer değişkenler hakkında bu kitapta yazılanlar ilk okumada anlaşılacak yalınlıktadır. Ötesi bu bölümde IntPtr tipi değişkenlerden söz edilmektedir. Türkiye’de IntPtr tipi Pointer değişkenlerden ilk söz edenin Memik Yanık olduğunu dikkatinize sunmak isterim. IntPtr tipi Pointer değişkenler çok mu önemlidir? Windows’un API adı verilen fonksiyonlarını kullanmayı düşünüyorsanız IntPtr tipi Pointer değişkenler hakkında az da olsa bilgi sahibi olmak durumundasınız.

Her ne kadar bu kitabın Programcılığa Giriş ve Konsol Uygulamaları adlı 2. ve 3. bölümlerinde Class kavramından az çok söz edilmiş olsa bile konunun ayrıntıları 13. bölümden itibaren anlatılmaktadır. Birçok yerli yabancı kitapta Class’lardan söz edilirken memeli hayvanlardan, arabalardan vs. söz edilir. Başka bir deyişle Class kavramının zor anlaşılması için herkes görüş birliğine varmış gibi. Memik Yanık nesneye yönelik programcılık şudur, şu ilkeleri vardır vs demeden direk kod üzerinde Class kavramından söz eder. Örneğin Memik Yanık bu kitabın ta ilk sayfalarında şöyle bir cümle kurdu: “C# programlarını Class olarak düzenlemek zorunluluğu vardır. Bu nedenle aşağıdaki gibi bir Class bloğu hazırladım”. Bu kadar basit. Henüz yolun başında olan ve programcılıkla ilgili temel kavramlardan bile bi haber olan birisine memelilerden, arabalardan vs söz etmek kafaları karıştırmaktan öte bir işe yaramaz. Ötesi C#’la ilgili kaynaklarda değişken-alan ayrımından hiç söz edilmez. Tamam kitabın başında eski alışkanlıklara uyup alanlara değişken denilmesi belki anlatım kolaylığı sağlıyor ama Class’lar ve nesneye yönelik programcılık anlatılırken değişkenlerin gerçekte alan olduğundan hiç söz edilmez.

Daha önce az çok program yazmış ve nesne nedir Class nedir sorularına verecek cevabı olan birisi Memik Yanık’ın kitabındaki “Class’lar ve Nesneye Yönelik Programcılık” adlı 38 sayfalık bölüme şöyle baktığına kesin burun kıvıracaktır. Sanki Memik Yanık bu bölümü C# uzmanları için yazmış ta uzmanların bu metinden öğreneceği yeni bir şey yokmuş. Sanki Memik Yanık bu bölümü herkesin işine yarayacak Class örnekleri hazırlamak için kaleme almış. Bu bölümün amacı Class’lar ve Class’ların üyelerinden söz etmektir, yapıcı ve yok edici metotların nasıl hazırlandığını okura göstermektir, statik yapıcı metotların işlevinden söz etmektir. Eğer okurun birisi bu bölümü okuyup Class’lar hakkında genel bilgiye sahip oluyorsa bu bölüm işlevini yerine getirmiştir. Her ne kadar bu kitabın “Class’lar ve Nesneye Yönelik Programcılık” adlı bölümde Class’ların en önemli üyesi metotlardan söz edilmiş olsa bile metotlar ayrı bir bölümde ayrıntılı bir şekilde incelendi. Başka bir deyişle Memik Yanık’ın C# 3.0 kitabının 16 sayfalık 14. bölümünü okuyanlar metotlarla ilgili her tür bilgiye sahip olurlar.

Bu kitabın 15. ve 16. bölümlerinde İndeksleyiciler ve Interface’lerden söz edildi. Nesneye yönelik programcılıkta indeksleyiciler zor anlaşılan konulardan birisidir. Memik Yanık 10 sayfalık bu bölümü öyle bir kaleme aldı ki hayatında daha önce indeksleyici kavramını hiç duymamış olanlar bile ilk okumada yazılan her şeyi anlayabilirler. Benzer şeyler 12 sayfa boyunca Interface’ler hakkında bilgi verilen bölüm için de söylenebilir. Gelelim nesneye yönelik programcılığın hem önemli hem de zor anlaşılan 2 konusuna: Delegate ve Olaylar. Sizce Delegate’ler ve Olaylar neden zor ve genellikle yanlış anlaşılan 2 konudur. Tabi bazı arkadaşlar şöyle bir yorum getirecekler: Forma bir Button nesnesi yerleştirirsin sonra tasarım anında bu button nesnesini çift tıklarsın vs.. Zaten Delegate ve Olayların zor ve yanlış anlaşılmasının temelleri Button nesnesinden ve tasarım anında Button nesnesi çift tıklandığında hazırlanan kodun anlatılış şeklinde yapılmaktadır. Hal bu ki gerçek başkadır: Tasarım anında formdaki Button nesnesi çift tıklandığında Visual Studio programcının söz konusu Button nesnesinin Click olayını temsil edecek bir metot hazırlamak istediğini varsayıp Click olayının yapısına uygun bir metodu hazırlayıp Click olayıyla ilişkilendirmektedir. Tabii kullanıcı çalışma anında button nesnesini tıkladığında Button nesnesiyle ilgili olarak Click olayının nasıl tetiklendiğinden söz edilmediği için konu havada kalıyor. Memik Yanık bu düşünceyle 20 sayfa boyunca delegate ve olaylardan söz etti.

Bu kitabın 16 sayfalık Stuct ve Enum Tipleri adlı bölümünü okuyanlar Struct’ların ne olduğu, hangi amaçlarla kullanıldığı, sınıflarla struct’lar arasında ne gibi farkların olduğunu kısa sürede öğrenirler. Devamında Enum tipleri hakkında ayrıntılı bilgiye sahip olduğu gibi Enum’larla ilgili olarak başka kaynaklara başvurma ihtiyacı kalmaz. Gelelim bu kitabın 12 sayfalık Object Sınıfı adlı bölümüne. Bütün C# kitaplarında dakka 1 gol 1 misali daha ilk sayfadan Object sınıfından söz edilir. Okur kitabın sonuna kadar gelir ama hala Object sınıfı hakkında derli toplu bilgiye rastlamaz. Object sınıfı hakkında yeterli bilgiye sahip olmayan okur ToString() metoduyla ilgili olarak anlatılanları kavramakta zorlanır. Memik Yanık ne mi yaptı? Kitabının ortalarına bile gelmeden Object sınıfının önemli gördüğü özelliklerini ve metotlarını anlaşılır bir dille anlattı.

Bu kitabın mevcut yerli yabancı C# kitaplarına fark atılan bölümlerden bir diğeri Koleksiyon Sınıfları adlı 20. bölümdür. Bu bölümde 48 sayfa boyunca .NET Framework ile koleksiyon sınıfları ve bu sınıflarla ilgili bütün Interface’ler ayrıntılı bir şekilde anlatılmaktadır. Bu bölümün tümünü okuyan birisi kendisini koleksiyon uzmanı olarak ilan edebilir. Koleksiyonlar konusu oldukça kapsamlı olduğu için BitArray, BitConverter, Buffer, StringCollection ve StringDictionary sınıflarını ayrı bir bölüm olarak düzenledim. Tabi hemen aklınıza Generic koleksiyonları ne yaptınız Sorusu gelmiş olabilir. Bu kitabın 22. bölümünde 26 sayfa boyunca önce .NET Framework ile gelen Generic koleksiyon sınıflarından, devamında Generic sınıflarından söz ettim. Yurt dışında yalnızca Generic sınıflardan söz edilen bağımsız kitaplar yazıldığına göre bu kitabımda Generic koleksiyonları ve sınıfları bütün yönleriyle anlatmadığımı tahmin etmiş olmalısınız.

Şimdi sözünü edeceğim 3 bölüm gerek içerik gerekse de anlatım şekli bakımından mevcut(tabi bu değerlendirme benim görebildiğim kitaplarla sınırlıdır) kitaplara fark atmaktadır. Her ne kadar Hata Ayıklamak ve Debug İşlemleri adlı 18 sayfalık bölümün ilk 7 sayfasında anlatılan konuları hemen her kaynakta bulmak mümkün olsa bile bu bölümün diğer sayfalarında Debug, Trace, TextWriterTraceListener ve EventLogTraceListener sınıfları hakkında ayrıntılı bilgi verilmektedir. 27. bölümde ise hata yakalanırken kullanılan Exception sınıfları anlatılmaktadır. Tabii ki başka kaynaklarda da Exception sınıfları hakkında bilgi bulabilirsiniz. Gelelim şu Application sınıfına. Diğer kaynaklarda Application sınıfının bazı özellikleri ve metotları hakkında bilgi veriliyor olsa bile hiçbir kaynakta 14 sayfa boyunca yalnızca Application sınıfından söz edilmemektedir.

Bu kitabın içindekiler sayfasına bakan birisi Form Sınıfının Özellikleri, Olayları ve Metotları adlı bölümde 18 sayfa boyunca klasik olarak formların herkes tarafından bilinen özelliklerinden söz edildiğini sanabilir. İşte size bu bölümden alınma 3 satırlık kod.

protected override voidOnCreateControl()

 {

   base.OnCreateControl();

 }

Tabii ki burada bu 3 satırlık kodun işlevinden söz etmeyeceğim, demek istediğim şudur: Bu koda başka basılı kaynaklarda rastlama ihtimaliniz son derece düşüktür. Başka bir deyişle bölümün adı Form Sınıfının Özellikleri olsa bile son derece teknik bilgiler içermektedir.

Bu kitabın diğer basılı kaynaklar bağlamında en sıradan bölümü “Sık Kullanılan Kontroller” adlı bölümüdür. Bu bölümde sık kullanılan 20’ye yakın kontrol 36 sayfa boyunca anlatılmaktadır. Bu kontroller anlatılırken daha önce az çok kod yazmış herkesin ilk bakışta tahmin edeceği özellik ve metotlardan söz edilmedi.

Bu kitabın Dosya ve Klasör İşlemleri adlı 36. bölümünde 28 sayfa boyunca C# kodu yazan birisinin gerek duyması muhtemel bütün bilgiler verilmektedir. Başka bir deyişle bu bölümü okuyanlar dosya ve klasör işlemleri bağlamında başka kaynaklara başvurma ihtiyacını duymazlar. Kapsam bir yana Memik Yanık’ın kitabının bu bölümünü okuyanlar yorulmazlar, anlatılanları izlemekte zorluk çekmezler.

Şimdi bu kitabın mevcut basılı kitaplar bağlamında bence açık ara önde olduğu 3 bölümden kısaca söz edeceğim. Birçok kaynakta C# uygulamaları dahilinde Word ve Excel’den nasıl yararlanıldığı kısaca anlatılırken Memik Yanık’ın kitabında bu konu 32 sayfa boyunca ayrıntılı bir şekilde anlatılmıştır. Ayrıca bu anlatma öyle bir anlatmadır ki ilk okumada anlaşılmayacak bir tek cümle bile yoktur. Benzer şekilde Api Fonksiyonları adlı bölümde Memik Yanık programcıların en çok gerek duyduğunu sandığı API fonksiyonlarını 32 sayfa boyunca anlatmıştır. Windows Mesajları adlı bölümde ise Memik Yanık 32 sayfa boyunca son derece teknik bir konuyu ilk okumada anlaşılacak yalınlıkta anlatmıştır. Bu kitabın hepsi ileri düzey konular olan diğer bölümlerinden söz etmeye gerek duymadım. Çünkü ileri düzey konulara gerek duyanlar zaten neyi aradıklarını biliyorlar.

Buraya kadar C# kitabımım yarısından biraz fazlasından söz ettim. Kitabın diğer bölümlerini de anlatıp bu yazının sayfa sayısını iki katına çıkarırsam tamamını okuyanların oranı düşüreceği için bu kitabım üzerine konuşmayı burada kesiyorum.

Kitaplarım | Bu yazıya henüz yorum yapılmamış. | 11.04.2009 11:51:39

Boxing Ne Değildir?


C#.NET | Bu yazıya henüz yorum yapılmamış. | 10.04.2009 09:12:23

1 2 3
Ana Sayfa | Hakkımda | Kitap Önerileri | Fotoğraflarım | RSS | İletişim
Memik Yanık 2004-2009 © Tüm Hakları Saklıdır.
Hazırlayan www.semgoksu.com