Kitap incelemesi : Unix Programlama Sanatı (The Art of UNIX Programming)

ArticleCategory: [Choose a category, translators: do not translate this, see list below for available categories]

SoftwareDevelopment

AuthorImage:

[Edgar]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in es Edgar Hernández Zúñiga 

es to en Edgar Hernández Zúñiga 

en to tr Tankut Çığır 

AboutTheAuthor:

Benim özgeçmişim yok, kısa olanı bile...

Abstract:

Bu yazıda, sözğ edilen kitabın içerdiği önemli konu başlıklarına odaklanılmaya çalışılmıştır. Sizler bu yazıyı okuduğunuzda kitap, kitapçılardaki yerini almış olacak. Bu yazı, kitabın basımından önce okuyucuların değerlendirebilmesi için ön baskısı yapılan 0.87 sürümü göz önünde bulundurularak hazırlanmıştır. Kitap hakkındaki bu yazıyı hazırlarken, kitabın konusunun ne kadar önemli olduğunu fark ettim. "Unix Programlama Sanatı" başlığı bile üzerine bir yazı yazılmayı hak ediyor. Kitabın gerçekten iyi hazırlandığını ve yazarın konusuna hakim olduğunu, neden bahsettiğini çok iyi bildiğini söyleyebilirim.

İncelenen Kitap: UNIX Programlama Sanatı (The Art of UNIX Programming)
Yazarı: Eric S. Raymond.
Katkıda Bulunanlar: Thompson, Kernighan, McIlroy, Arnold, Bellovin, Korn, Gettys, Packard, Lesk, Feldman, McKusick, Spencer.
Sayfa Sayısı: 550(bu sürüm için)
Yayıncı: Addison Wesley ( http://www.awprofessional.com )

ArticleIllustration:

[Illustration]

ArticleBody:

Giriş

"Katedral ve Pazar" (The Cathedral and the Bazaar) isimli çalışmasıyla tanınan yazar Eric S.Raymond olağanüstü bir kitapla karşımıza çıkıyor. Bu kitap Unix işletim sistemi teknolojileri ve elemanlarının iç yüzünü kavramamız konusunda bize yardımcı olmak amacıyla yazılmış.

Eric S. Raymond'ın çalışması Unix dünyasının birçok ünlü ismi tarafından desteklenmiş, katkıda bulunanlar arasında Ken Thompson, Brian Kernighan and Dennis Ritchie de bulunuyor.

Kitap dört ana bölümden oluşmakta:


Bu dört bölümde de UNIX felsefesinin temellerinden, Açık Kod Geliştiriciler için en iyi uygulamalara kadar pek çok farklı konu üzerinde durulmuş. Kitapta ayrıca Birimsellik (Modularity), Uygulamalar için protokol tasarımı,şeffaflık, mini diller ve karmaşıklık gibi pek çok konu ele alınmış. Kitabın uygulama bölümünde Diller ve Araçlar vb. konulara ek olarak okuyucunun konuyu daha iyi anlayabilmesi için birçok örnek de verilmiş durumda.

Aşağıda kitabın içeriğini ve her bölümün konu başlıklarını bulabilirsiniz. Bu bölüm, kitabın konularını gözden geçirmek ve kitapta anlatılanlar hakkında bir fikir sahibi olmak açısından sizlere yardımcı olacaktır.

İçindekiler

I. BAĞLAM.


1. Felsefe.

    Kültür? Hangi Kültür?
    Unix'in devamlılığı
    Unix kültürünü öğrenmeğe engel durumlar
    Unix'in kötü yaptıkları
    Unix'in iyi yaptıkları
    Unix felsefesinin temelleri

Tek derste Unix Felsefesi
    Unix felsefesini uygulamak.
    Tavırlar da önemlidir.

2. Tarih.

    Unix'in kökenleri ve tarihi, 1969-1995.
    Bilgisayar korsanlarının kökeni ve tarihi, 1961-1995.
    Açık kod (open-source) hareketi: 1998 ve sonrası.
    Unix tarihinden alınacak dersler.

3. Zıtlıklar.

    İşletim Sistemi çizgisinin parçaları.
    İşletim sistemi karşılaştırmaları.
    Neler gidip geliyor?.

II. TASARIM.

4. Birimsellik (Modularity).

    Sarma (Encapsulation) ve en iyi birim (module) büyüklüğü.
    Özlülük ve ortogonellik.
    Kitaplıklar.
    Unix ve nesneye dayalı diller.
    Birimsellik için kod oluşturma yöntemleri.

5. Metinsellik (Textuality).

    Metinsel olmanın önemi.
    Veri dosyası meta-biçimleri.
    Uygulama Protokol Tasarımı    
    Uygulama Protokol meta-biçimleri

6. Şeffaflık (Transparency).

    Durum analizi örnekleri.
    Şeffaflık ve keşfedilebilirlik için tasarlama teknikleri.
    Düzeltilebilirlik için tasarlama teknikleri.

7. Çoklu programlama.

    Karmaşıklık kontrolünü performans ayarlamadan ayırmak
    Unix IPC yöntemlerinin sınıflandırılması
    Problemler ve çözerken kaçınılacak yöntemler
    Tasarım aşamasında süreç bölümlendirme

8. Mini Diller.

    Dillerin sınıflandırılması.
    Mini dillerin uygulanması.
    Mini dillerin tasarlanması.

9. Dönüştürme (Transformation).

    Veriye dayalı programlama.
    Ad-hoc kodu üretimi.

10. Yapılandırma (Configuration).

    Neler Yapılandırılmalı?
    Yapılandırmalar nerede bulunmalı?.
    Çalışma denetim dosyaları.
    Çevre değişkenleri.
    Komut satırı seçenekleri.
    Yapılandırma seçeneklerinden hangilerini seçmeli?.
    Bu kuralları yıkarken...

11. Arabirimler.

    "En az sürpriz" kuralını uygulamak.
    Unix'te arabirim tasarımının geçmişi.
    Arabirim tasarımlarının değerlendirilmesi.
    CLI(Komut satırı arabirimi) ile görsel arabirimlerin karşılaştırılması.
    Şeffaflık, anlamlılık ve yapılandırılabilirlik.
    Unix arabirim tasarım şablonları.
    Unix arabirim tasarım şablonlarının uygulanması.
    Ağ tarayıcıyla dünyaya ulaşmak.
    Sükut altındır.

12. Eniyileme (Optimization).

    Orada öylece bir iey yapmayınö ayakta durun!
    Eniyilemeden önce ölçüm yapın.
    Yöresel olmamak zararlıdır.
    Üretilen(Throughput) iş ile durgunluk (latency).

13. Karmaşıklık (Complexity).

    Karmaşıklıktan söz etmek.
    Beş düzenleyicinin hikayesi.
    Bir düzenleyici için doğru boyut(size) nedir?.
    Bir yazılım için doğru boyut nedir?.

III. UYGULAMA.

14. Diller.

    Unix'in diller üzerindeki etkisi.
    Niye C kullanmıyoruz?
    Çevrilmiş diller ve karışık stratejiler    
    Dillerin değerlendirilmesi.
    Gelecekteki karşılaşılabilecek akımlar.
    X araç takımı (toolkit) seçimi.

15. Araçlar.

    Tasarımcı dostu işletim sistemi.
    Düzenleyici seçimi.
    Özel amaçlı kod yaratıcılar.
    C/C++ harici geliştirme teknikleri.
    Sürüm kontrol sistemleri.
    Çalıştırma sırasında hata ayıklamak.
    Kullanıcı tanımları.(Profiling)
    Evrensel düzenleyici olarak Emacs.

16. Yeniden Kullanım.

    J. Random Newbie'nin hikayesi.
    Şeffaflık yeniden kullanımın anhatarıdır.
    Yeniden kullanımdan açık kod hareketine.
    Hayattaki en iyi şeyler açıktır.
    Aradıklarımı nereden bulabilirim?
    Açık kaynak yazılımlarını kullanırken karşılaşılabilecek durumlar nelerdir?
    Lisans meselesi.

IV. TOPLULUK.

17. Taşınırlık (Portability).

    C'nin evrimi.
    Unix standartları.
    Özellikler DNA gibi, kod RNA gibi olmalı.
    Taşınırlık için programlama teknikleri.
    Dünyaca ulaşılır hale getirme.
    Taşınırlık, Açık standartlar ve açık kod.

18. Belgelendirme.

    Belgelendirme Kavramları.
    Unix çizgisi.
    Unix belge biçimlerinin karmaşıklığı.
    Var olan kaos ve olası çıkış yolu.
    DocBook belgelendirme araç zinciri.
    Unix belgeleri nasıl hazırlanmalı.

19. Açık Kod.

    Unix ve Açık Kod.
    Açık kod geliştiricilerle çalışmak için en iyi uygulamalar    
    Lisansların mantığı : hangisini seçmeli?
    Niye standart bir lisans kullanmalı?
    Açık Kod Lisanslarındaki çeşitlilik

20. Gelecek.

    Unix geleneğinin özü ve olası farklılıklar
    Unix'in tasarımındaki problemler
    Unix'in çevre değişkenlerindeki problemler
    Unix kültüründeki problemler
    İnanma nedenleri.

A. Kısaltmalar sözlüğü

B. Kaynaklar.

C. Katkıda Bulunanlar.

Kültür ve Unix Felsefesi

Unix veya Unix'ten türetilen herhangi bir işletim sistemine aşina olanlar için " Felsefe " kelimesini duymak çok şaşırtıcı olmayacaktır. Unix bir felsefedir, kültürünün yanısıra bir yaşam biçimi; bir oluşturma, yapılandırma ve programlama biçimidir.

Unix doğum yılı olan 1969'dan beri bir çok farklı yapıda ve büyüklükte işletim sisteminin oluşmasına ön ayak olan çok güçlü bir felsefe üzerine kurulmuştur.

Unix Felsefesinin Temelleri

Unix felsefesi hiç kuşkusuz Ken Thompson küçük ama çok yetenekli bir işletim sistemi tasarlamaya karar verdiğinde ortaya çıktı. Daha sonraları birçok insan katkıda bulundular ve Unix şu anki kaynak çeşitliliğine ulaştı.

Bahsi geçen kitap, üzerinde çalışılabilecek birçok önemli konuyu içinde barındırıyor. Özellikle kullanışlı bulduğum bir bölüm, okuyucuyu programlamaya başlamadan önce tasarımı özetlemeye teşvik eden ve Unix felsefesinin aşağıdaki temel unsurları üzerinde düşünmesini sağlayan bölüm oldu:

Sonuç ve Öneriler

Rahatlıkla söyleyebilirim ki bu mükemmel bir kitap. Eric Steven Raymond bizlere nasıl iyi bir yazılım geliştirebileceğimizi ve tasarım kavramları üzerinde işe koyulmadan önce nasıl düşünmemiz gerektiğini öğretiyor. Bu kitap C, C++, Java vb. dillerde yazılım geliştirmeyi bilen tüm programcılar için ilgi çekici olacağı gibi, Unix işletim sistemine yabancı olan programcılar için de çok faydalı bir kaynaktır.

Çok geniş bir kaynakçaya sahip olan bu kitap, sizlere ufkunuzu genişletmekte de yardımcı olacak. Kendi adıma şunu söyleyebilirim, kitapta Sürüm Denetim Sistemleri hakkındaki belgelere ulaşmayı sağlayacak kaynakları da bulmaktan çok memnun oldum.

Umarım bu kitap hakkında daha detaylı bir yazı yazabilirim ve umarım kısa giriş niteliğindeki yazıdan memnun kalmışsınızdır.