Programcılar İçin Yazarlık Dersleri

Bu makalede programcılık konulu kitap veya makale yazanlara rehber olacak sorular sorup kendimce cevaplar veriyorum.

Bu makalede programcılık konulu kitap veya makale yazanlara rehber olacak sorular sorup kendimce cevaplar veriyorum.

Konu ister programcılık ister edebiyat ister bilim ister siyaset olsun bazı yazarların yazdıkları 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 getiremez ve yarıda kesersiniz. Kolay okunan, okuru yormayan yazılar yazmanın tek ve net bir formülü olmasa bile bence en önemli nokta kurulan cümlelerin şeklidir. 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ın ise alışkanlıkları gereği kurdukları her cümle tek başına okunabilecek yalınlıktadır. Bazı yazarlar öyle uzun 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 bilginizin yeterli olmasıdır. İkinci önemli şart; yazma, hikâye etme becerinizin 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 sanki bir gazetenin magazin muhabiriymiş gibi oturup 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 okumak yerine kısa bir süre içinde şö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 boy göstermek ise çölde kendini gizlemeye çalışmak gibi zordur.

Tam bu noktada genç yazar arkadaşlara 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çirin. Göreceksiniz ki birçok cümleyi değiştirmek isteyecekseniz. Hatasız, bozuk cümlesiz makaleler yazmak çok zordur ama bu yazım hatalarını belli bir sayıda tutmaya çalışmak gerekir.

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. Ş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; tabi öyle kötü metinler var ki 2 cümlesini bile okumak bazen 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 gibi 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 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 mevut kaynakları gözden geçiririm. Bu gözden geçirmelerin tek nedeni var: Belki iyi bildiğim bu konuyu anlatırken okuduklarım bana yeni bakış açısı kazandırır. Yani demek istiyorum ki asıl önemli konuyu anlatma ve hikâye etme şeklinizdir. 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 şu aralar gözden geçirdiğim 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 ayrıntılara yer verirken bazı konulara ayırdığım sayfa sayısını azalttım.

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 hemen olmasa bile uzun vadede başarısız olur.

Tabii bazı yazarlar işin kolayına kaçıp daha önce yayınlanmış ve beğendikleri bir kitabın kapsamından (aynı yöntem bazen makale yazılırken 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ğerlendirmek yanlış olmaz. Hemen ekleyelim: Bu şekilde kitap yazan yazarların başarılı oldukları ender rastlanan bir durum değildir. 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 yapıp kitap yazmasına 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ın hiç mi hiç 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ı kendine rehber bile 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ığı 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 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ı 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 oturup 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 Memik Yanık'ın Herbert Schildt'in kitabına benzeyen 3. 4. bir kitap yazması 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 oturur 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 başlanır Class'lar hakkında derinlemesine bilgi verilmeye. 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 dilini 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 dakika kadar gözden geçirdikten sonra arkadaşa dedim ki (ki muz hakkındaki bilgim Anamur'da yetiştirildiği ile sınırlıdır) "sen iki cami arasında beynamaz kalmışsın. Bir taraftan bu kitap muz üreticilerine yarası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 biraz uzattığım oldu. Bu kitapta yazılanların basitliğine ve kolay anla¬şılmasına tepki duyanlara "bir kitabı veya bir konuyu 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ı 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 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üzeyin 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ı 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 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 veya editör 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 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 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şılarlar. 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ır.

Eğer bu kitap ilk yazıldığı dilde yayınlanmadan önce editörü tarafından 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 sözünü ettiğiniz konuların sayısı fazlalaşınca 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 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 bir Application Domain nesnesinin hazırlandığını ve bu nesnenin kaynağının AppDomain sınıfı olduğunu biliyordum. Baktım Application Domain'ler veya AppDomain sınıfı hakkında bilgi sahibi olmadan bazı konuları anlatmakta zorlanıyorum. Ben de 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. 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ı hakkında bir şeye yer vermem. Şimdi sırada yabancı kaynakları vs incelemek var. Tabii bazılarının sandığı gibi yabancı kaynaklardan 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 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 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ğinmeme rağmen ç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ının için de 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 yazar kendinden emin bir şekilde 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 işlevinden söz ettim. Aradan biraz zaman geçip meraklı okurun birisi bana yazıp "hocam metodu yanlış biliyorsunuz" demesin mi? Metodu biraz inceleyince okurun haklı olduğunu, yani metodu yanlış bildiğimi 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 bir nesneyi yok etmekle 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ığı 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. Eğer bir taraftan öğrenip bir taraftan kitabınızı yazmaya kalkışırsanız hem hata yapma ihtimaliniz artar hem de başka kaynakları taklit etmeniz mümkün hale gelir. 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 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 yazı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 yazarı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 makalede kaldığımız yerden devam edeceğiz.

  • Etiketler;
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

• 11 yıl önce
Gerçek ten güzel bir yazı olmuş. benimde üzerinde çalıştığım bir makale vardı. fakat yaklaşık 1 aydır ilgilenmiyorum. yarım kalmış bir şekilde bu bilgiler ışığında yeniden kendisini kaleme (kalemmi klavyemi? cevap lütfen) almamı bekliyor. önümüzdeki 1 ay ders çalışmam gerekiyor. sınavlardan sonra bitirebilirsem bu sitede yayınlayabilirim. bu arada bu makale püf noktalar başlığı altında olsa daha iyi olmazmıydı.
• 11 yıl önce
Bahadır merhaba; Teşekkürler, aslında metni kaleme alırken makale kısmı benim de aklıma geldi ama yazının çıkış noktası kitap yazmak olduğu için makale tarafı eksik kaldı. Belki ileride bir makaleler için de böyle bir yazı yazarım. Hele bu dersler bitsin..

Yukarı Git