4 puan yazan GN⁺ 2024-11-17 | 1 yorum | WhatsApp'ta paylaş
  • Simon Dobson, bir öğrenciye yazın okuması için ödünç verdiği kitap vesilesiyle SICP’nin kariyerini ve araştırma ilgi alanlarını en çok etkileyen bilgisayar bilimi kitabı olduğunu yeniden fark ediyor
  • Pascal merkezli giriş eğitiminden farklı olarak bu kitap, değerler, adlar, bağlama ve kontrolden başlayıp programlamanın ne olabileceğini gösteriyor
  • lambda soyutlaması, üst düzey hesaplama, akışlar, tembel değerlendirme, yorumlayıcılar ve derleyiciler, çöp toplama, sanal bellek, makine dili ve alana özgü dillere kadar her şeyi Scheme içinde birbirine bağlıyor
  • En büyük etkisi, karmaşık sistemleri birden fazla dil katmanı olarak kuran katmanlı tasarım yaklaşımında ve bilgisayar bilimini “ne olduğu”ndan çok “nasıl yapıldığı”nı inceleyen bir alan olarak gören bakışta yatıyor
  • 1988’de satın aldığı kitap 2010’da da pratik olarak yeniden okunmaya değerdi; SICP, bilgisayar biliminde kalıcı bir temel eser olmaya devam ediyor

SICP ile İlk Karşılaşma

  • Simon Dobson, bir öğrenciye yaz boyunca okuması için Structure and Interpretation of Computer Programs kitabını ödünç verdikten sonra, bu kitabın kendisi için tüm bilgisayar bilimindeki en temel eser olmaya en yakın kitap olduğunu hatırlıyor
  • Kitabın tam adı Hal Abelson ve Jerry Sussman’ın Structure and Interpretation of Computer Programs adlı eseri; MIT Press tarafından 1984’te yayımlandı ve SICP olarak da biliniyor
  • Kitap hâlâ basılıyor ve tamamı çevrimiçi olarak sunuluyor
  • Dobson, Newcastle upon Tyne’da ilk lisans derecesinin ikinci yılında ilk programlama dersini tamamladıktan sonra bu kitapla önerilen ders kitabı olarak tanıştı
  • O dönemde bilgisayar biliminde yolunu bulmaya çalışan Dobson için SICP, Pascal ile temsil edilen “o dönemin programlamasını” değil, programlamanın alabileceği olası biçimleri gösteren kitaptı

Scheme İçinde İnşa Edilen Kavramlar

  • SICP, programlamanın temel öğeleri olan değerler, adlar, bağlama ve kontrolden başlayarak geniş bir konu yelpazesine uzanır
    • lambda soyutlaması ve üst düzey hesaplama
    • hesaplama içeriği barındıran karmaşık veri yapıları
    • modülerlik, değiştirilebilirlik
    • akışlar
    • tembel değerlendirme
    • yorumlayıcı ve derleyici yapımı
    • depolama yönetimi, çöp toplama, sanal bellek
    • makine dili
    • alana özgü diller
  • Ele aldığı kapsam şaşırtıcı derecede geniştir, ancak yazarların anlatımı ve kurgusu sayesinde tutarlılığını korur
  • Özellikle tüm kavramları Scheme adlı tek bir dil çerçevesi içinde ele alır ve önce öğrenilenlerin üzerine sonraki kavramları inşa eder

Dil Tasarımı Olarak Program Tasarımı

  • SICP’nin büyük etki yaratan ikinci özelliği, Hal Abelson ve Jerry Sussman’ın her şeyi dil tasarımı alıştırması olarak görmesidir
  • Kitap, karmaşık sistemleri birden fazla dil düzeyi olarak kuran katmanlı tasarımı vurgular
    • Her düzey, o düzeyde ilkel kabul edilen parçaların birleştirilmesiyle kurulur
    • Bir düzeyde oluşturulan parçalar, bir sonraki düzeyin ilkel öğeleri olarak kullanılır
    • Her düzeyin dili, ilgili ayrıntı düzeyine uygun ilkel öğelere, birleştirme araçlarına ve soyutlama araçlarına sahiptir
  • Hiyerarşik soyutlama bilgisayar bilimciler için tanıdıktır; ancak buradaki kritik fark, her katmanın programlanabilir olması gerektiği bakışıdır
  • Bu açıdan katmanlar yalnızca bilgiyi gizleyen araçlar değil, hesaplama ve dönüşümü ele alan araçlardır
  • Ana akım programlama dillerinde bu tür katmanlaşmanın dilin kendisinin genişletilmesine dönüşmesi zordur
    • Java yukarıdan aşağıya Java’dır; sınıflar ve kütüphaneler vardır ama yeni kontrol yapıları yoktur
    • Belirli bir alana özgü dil yapıları yararlı olsa bile bunları dilin içinde kolayca eklemek zordur
    • Tersine, bir alanda belirli yapıları kullandırmamak isteseniz bile bunları dilin içinden kaldıramazsınız
    • Java-ME, küçük cihazlarda çalışmak için bazı özellikleri çıkarmıştı; ancak bu, derleyiciyi yeniden yazmadan yapılabilecek bir yöntem değildir

“Ne Olduğu”ndan Çok “Nasıl Yapıldığı”

  • Üçüncü önemli etki, SICP’nin bilgisayar biliminin gerçekte neyle ilgilendiğine dair bakışıdır
  • SICP, bilgisayar devrimini düşünme biçiminde ve düşünceleri ifade etme biçiminde bir devrim olarak görür
  • Kitap bunu prosedürel epistemoloji (procedural epistemology) ile açıklar
    • Klasik matematik “ne olduğunu” kesin biçimde ele alan bir çerçeve sağlıyorsa
    • hesaplama da “nasıl yapıldığını” kesin biçimde ele alan bir çerçeve sağlar
  • Dobson, bilgisayarın yeni bir mikroskop gibi mevcut yaklaşımlara yardımcı olurken aynı zamanda yeni bir bilimin kapısını açtığı görüşünü benimsemişti
  • Bilgisayar biliminin “nasıl yapıldığı” yönü birçok alanda yeniden ortaya çıkar
    • konuşlandırıldıkları olguları sürekli yansıtarak uyum sağlayabilen sensör ağlarının davranışını açıklamak
    • web genelinde çıkarılıp birleştirilen büyük ölçekli verileri yorumlamak
    • bilimsel yöntemleri ve süreçleri otomatikleştirmek için yakalayıp temsil etmek
  • Bu alanların zenginliği, paket yazılımdan çok programlama dilleri üzerinden entegrasyonu teşvik eder ve R gibi dillerle arayüzlerin ve yapıların esnek ve deney yapılabilir kalmasını sağlar

Eski Bir Kitabın Hâlâ Okunmasının Nedeni

  • Dobson’ın kitabının iç kapağında Eylül 1988 satın alma tarihi yazılıydı; 2010 itibarıyla neredeyse 22 yaşındaki kitap hâlâ güncelliğini koruyordu
  • Ona göre SICP, yalnızca tarihsel ilgi nedeniyle değil, yararlı biçimde yeniden okunabilecek yaştaki neredeyse tek bilgisayar bilimi kitabıydı
  • Matematik kitaplarında uzun süre geçerli kalan içerik nadir değildir; ancak fikirlerin hızlı hareket ettiği ve geçici konuların çok olduğu bilgisayar biliminde bu zor rastlanan bir durumdur
  • SICP’nin içeriğinin neredeyse eskimemiş olması, kitabın bilgisayar biliminin çekirdek kavramlarını iyi yakaladığını gösterir
  • Bu nedenle SICP, iki veya daha fazla kez okunmaya değer az sayıdaki bilgisayar bilimi kitabından biridir; fizikte Feynman’ın Lectures on Physics eseri gibi, alanın özünü erişilebilir biçimde damıtıp zamanın sınavına dayanmış bir kitap olarak değerlendirilir
  • 27 Ocak 2024 güncellemesinde bu kitabın Structure and interpretation of computer programs maddesiyle annotated Lisp bibliography içinde de yer aldığı belirtiliyor

1 yorum

 
GN⁺ 2024-11-17
Hacker News görüşleri
  • SICP gibi “klasikler” program tasarımından bahsediyor, ama bugünlerde sistem tasarımı çok daha önemli bir yetkinlik gibi görünüyor
    Dağıtık sistemlerin “bilgisayar bilimi”ne dahil olup olmadığından emin değilim, ama pratikte daha sık çözülmesi gereken sorun bu
    Ben sistemleri mümkün olduğunca basit kurup, gözlemlenebilirlik araçlarıyla tasarımın yetersiz kaldığı noktaları bulduktan sonra gerektiğinde veri yapıları ya da “bilgisayar bilimi usulü” çözümlere başvuruyorum
    Çoğu durumda Big-O gösterimi ve çalışma zamanı karmaşıklığı önemli olmuyor; diziler ve hızlı CPU’larla birçok sorun çözülebiliyor
    Performans sorunu çıksa bile önce profiling ile darboğazı bulmak gerekir
    Bilgisayar bilimi, CPU’nun bellek önbelleğinin nasıl çalıştığını pek iyi öğretmiyor
    Şık bir grafik algoritması, çalışma zamanı karmaşıklığı iyi olsa bile CPU cache’ini bozduğu için, cache kullanımı iyi olan bir diziden daha yavaş olabilir
    Gerçekte daha yaygın sorunlar hata toleransı, dağıtık kilitler ve kuyrukların doğruluğu, sistem ölçeklenebilirliği gibi konular
    Bilgisayar/elektrik mühendisliği geçmişim olduğu için önyargılı olabilirim

    • Sistem tasarlamak için uygulama bakış açısına sahip olmak gerekir; değer zincirinde yukarı çıkıp tasarım yapıyor olsanız bile alttaki deneyim katmanlarını atlayamazsınız
      CPU bellek cache’i konusunu 30 yıl önce CS lisansının ilk döneminde Hennessy ve Patterson kitabından öğrenmiştim, bildiğim kadarıyla hâlâ da kullanılıyor
      Hata toleransı, dağıtık kilitler ve kuyrukların doğruluğu, sistem ölçeklenebilirliği de lisans CS eğitiminde işleniyordu; özel bir bilgisayar mühendisliği/elektrik mühendisliği geçmişim yoktu
    • CS ile sahadaki yazılım geliştirme biraz ayrıştı
      Hâlâ framework, veritabanı motoru ve sürüm kontrol araçları geliştiren işler var; bu tür işler derin CS bilgisini, örneğin algoritmalar ve veri yapıları bilgisini, her gün gerektiriyor
      Ama bu işler eskisine göre daha azaldı ve uygulamalar için kendi DB motorunuzu yazmak yerine çoğu zaman Postgres kullanılıyor
      İşlerin büyük kısmı iş mantığını hayata geçirmek; veritabanının içeride nasıl çalıştığını bilmek daha iyi sonuç verir ama indekslerin diskte nasıl saklandığını bilmeden de çalışan çok yazılım yapılabilir
      Birçok CS mezunu işinin framework yazmak olduğunu sanıyor, ama gerçekte mevcut framework’leri kullanıp iş mantığını geliştirirken CS geçmişi sayesinde o framework’leri derinlemesine anlaması gerekiyor
    • Geleneksel olarak veritabanı alanı, belleğe bütünüyle sığmayan çok daha büyük verilerle uğraşırken ortaya çıkan algoritmik problemleri çözmeye odaklanır
      Veri diskte “page”ler halinde bulunur ve RAM’de sabit sayıda “page slot” vardır
      Disk ile RAM arasında page taşımak yavaş olduğu için bunu mümkün olduğunca azaltmak gerekir
      Bu yüzden önemsiz görünen problemler bile ilginçleşir. Klasik bilgisayar biliminde “join” diye ayrı bir kavram yoktur, çünkü isim verilecek kadar karmaşık sayılmaz
      Algoritma araştırmasını saf öz gibi görmek kolaydır, ama algoritma verimliliğinin yalnızca belirli veri ve donanım bağlamında anlam taşıdığını da söyleyebilirsiniz
      Bu da işi ilginç kılar; her yere sadece kütüphane ya da yemek tarifi gibi çözümler uygulayamadığınız için algoritma uzmanlığı hâlâ faydalıdır
    • Doğru, ama bence yalnızca junior’lar değil, deneyimli programcılar da taktik düzeyde kodlama konusunda sık sık zorlanıyor
      Şu anda küçük bir değişiklik yapmam gereken bir bileşen yüzünden uğraşıyorum; gereksiz yere çok fazla durum var ve aynı anda iki soyutlamayı ele alıyor
      Dosya işlerken hem dosya sistemi hem de veritabanını durum saklamak için kullanıyor, tasarımın ne kadar kötü olduğuna şaşırdım
      Eskisi gibi üstüne ekleyip daha da anlaşılmaz hale getirmekten kaçınmak için günler harcadım
      Pull request kültürü, insanları gerçek kod üzerine derinlemesine düşünmeye vakit bulamadan her türlü çöpü onaylamaya itmiş gibi görünüyor
      Yüz yüze kod incelemelerinin geri gelmesini isterdim
    • Chris Hanson ve Gerald Jay Sussman’ın Software Design for Flexibility: How to Avoid Programming Yourself into a Corner kitabına bakıp bakmadığını merak ediyorum
      2021’de yayımlanan, sorumluluk
  • Yazının ücretsiz kopyasına giden bağlantı bozuk
    https://mitp-content-server.mit.edu/books/content/sectbyfn/b...
    https://web.mit.edu/6.001/6.037/sicp.pdf
    Bugüne kadar resmi bir PDF sürümünü hiç görmemiştim
    2001 civarında yalnızca HTML sürümü ücretsizdi ve birisi bunu TeXinfo'ya dönüştürmüştü: https://www.neilvandyke.org/sicp-texi/
    SICP'yi şimdi takip etmek istiyorsanız kodu MIT Scheme veya DrRacket'ta çalıştırabilirsiniz: https://www.neilvandyke.org/racket/sicp/

    • MIT Scheme'i denemek isteyenler için, mevcut bakımcılar artık .dmg sunmuyor ama x86_64 sürümü MIT Scheme indirip derlenebiliyor
      Mevcut sürüm (v12.1), Intel CPU'lu Sequoia çalıştıran Mac'lerde ya da Rosetta üzerinden Apple silicon'da çalışıyor
      Ancak yerel kod derleyicisi biraz bozuk ve SICP için muhtemelen gerekli değil
      Monterey öncesi macOS'ta çalışıyor gibiydi, dolayısıyla Apple tarafından sağlanan bağımlılıklar değişmiş olabilir ama bunun izini sürmedim
      MIT Scheme şart değilse ve derlemeyle uğraşmak istemiyorsanız Racket daha iyi bir seçenek olabilir
    • Bir not olarak, Racket ile ilerlemeyi tavsiye ederim
      Bildiğim kadarıyla açık bir SICP modu var
      GNU Guile ile denedim ama Guile ile MIT Scheme arasında küçük sözdizimi farkları var ve bu epey can sıkıcıydı
    • Tarayıcıda okumak istiyorsanız TeXinfo sürümünün güzel görünen HTML5 sürümünün kaynağı olduğunu hatırlıyorum
      MIT'nin orijinalinden daha iyi biçimlendirilmiş: https://sarabander.github.io/sicp/
      1. bölümdeki “resim dili”nin 2024'teki MIT Scheme'de desteklenmediğini bilmekte fayda var
        Eskiden bir paket vardı ama neredeyse 20 yıldır bakımı yapılmıyor
        Buna karşılık DrRacket'ta bu problemleri çözmek için özel bir paket var
    • DrRacket'ta SICP ve HTDP eğitim paketi olarak yer alıyor
  • Abelson ve Sussman'ın bu kitabın içeriğini anlattığı 1986 tarihli kaydedilmiş dersleri izleyebilirsiniz
    Soyutlamayı birden çok katmanda oluşturup bir araya getirme açıklamaları bugün bile hem kişisel olarak hem de mentorluk yaparken bana faydalı geliyor
    Videoda lesson 3A, 1:07:55 kısmı
    https://m.youtube.com/playlist?list=PLE18841CABEA24090

    • Kabbalah şakası her seferinde güldürüyor
    • Böyle videoları izleyince bu insanların gelecekte nelerin geleceğini hiç bilmemiş olması şaşırtıcı geliyor
  • The Elements of Programming Style üç kez okunmaya değer ve ben ondan çok daha fazla kez okuyup faydasını gördüm
    İlgilenirseniz, 2010'da yazdığım bir inceleme var: https://reprog.wordpress.com/2010/03/06/programming-books-pa...

    • Ben bunun Stepanov ve McJones'un Elements of Programming kitabı olduğunu sanmıştım ve dürüst olmak gerekirse aynı tavsiye ve değerlendirme o kitap için de yapılabilir
      https://elementsofprogramming.com/
  • SICP'te en sevdiğim ve yıllardır aklımda kalan kısım arzusal programlama fikri
    Bu, alt düzey yordamlar zaten varmış gibi dileyerek yukarıdan aşağıya bir şey inşa etme yaklaşımı
    Sonra gerçekten o alt düzey yordamları yaparak en alta kadar iniyorsunuz
    Bence bu düşünme biçimi test güdümlü geliştirmeyle çok iyi örtüşüyor
    Önce var olmasını istediğiniz işlev için testi yazıyor, sonra gidip o arzuyu gerçekleştiriyorsunuz
    Çoğu geliştirici aşağıdan yukarıya inşa ediyor gibi görünüyor ve sonunda kimsenin istemediği bir şey ortaya çıkıyor

    • İnsanlar bunu performans ve doğallık istedikleri için yapıyor
      Henüz gerçek doğasını bilmediğiniz bir şeyi yanlışlıkla dileyebilirsiniz ve bu da altta kırılgan bir karmaşa yaratır
      Genellikle olan da budur, çünkü şeylerin algoritmik doğası nadiren sezgiseldir
      Aşağıdan başlamak “keşke sihir olsaydı” demek yerine fiilen sahip olduğunuz kuarklardan başlamak gibidir
      Sihir yoktur; en alta indiğinizde sihir parçacıkları yerine kuarklar bulursunuz ve süreç içinde iki fizik arasındaki dönüşüme yardımcı olacak bağlamsal ipuçlarını da kaybedersiniz
      İki yaklaşımın da faydası var. Derin problemleri çözmek için bazen cesurca dilekte bulunmak gerekir
      Yine de kişisel olarak sihri en üst katmanın hemen altına koymayı tercih ediyorum
      Aşağıdan yukarıya inşa edip sonra iş mantığından hemen önce iş diliyle karşılıklı dönüşüm yapan bir kolaylık sağlayan sihir katmanı kurmak gibi
      Böylece ayarlanabilir olur ve en alta kadar dolanan bir karmaşa yaratmaz
    • Dr. Donald Knuth da TeX üzerinde çalışırken neredeyse böyle bir yaklaşım kullanmıştı
      Önce uygun görünen biçimlendirme/etiketleme yöntemini yazdı, sonra işaretlemeye uygun programlama yöntemini—yani makroları—tasarlayıp uygulamaya geçti
      Ben de OpenSCAD içinde G-code modelleyen bir kütüphane oluşturma çalışmamda benzer bir yaklaşım deniyorum
      Bunu yakın zamanda “saf” OpenPythonSCAD ile yeniden yazdım, umarım kullanılabilir hâle gelir
    • Smalltalk dünyası, hata ayıklayıcının içinde kod yazarak bu yaklaşımı iyi destekliyor
      Pharo'yu denemekte fayda var
  • SICP, bilgisayar bilimini çalışırken ilk kitap olarak okunabilecek en iyi kitap
    Yıllarca hobi olarak programlama yaptıktan, yapısal programlama kitapları ve Pascal'dan Common LISP'e kadar çeşitli dillerle tanıştıktan sonra lisans bilgisayar bilimi programında Abelson & Sussman'ı kullandım ve ufkum açıldı
    Scheme'in sadeliğini, güzelliğini ve etkileşimliliğini gösterirken bilgisayar biliminin farklı türde soyutlamaları katman katman inşa etme işi olduğunu öğretiyor
    Prosedürel soyutlama ve veri soyutlamasıyla başlayıp, doğrudan alan özel dilleri tanımlamaya, onların derleyicilerini gerçekleştirmeye ve yazılım içinde yeni donanım tanımlamaya kadar gidiyor
    Her şey o kadar doğal görünüyor ki, bunu ancak gerçek bir usta böyle gösterebilir
    Yalnızca 1. baskıyı ya da daha yeni baskıyı değil, 2. baskıyı almalısınız
    Daha yeni baskı Scheme yerine Python kullanıyor ve pek iyi değil

  • SICP'yi gerçekten sevmek istedim ama Lisp buna engel oldu
    Haskell ve Standard ML'i seviyorum
    Benzer bir deneyim yaşayan başka biri olup olmadığını merak ediyorum
    SICP ile ruhen benzer ama başka bir dili araç olarak kullanan bir kitap varsa ilginç olabilir
    SICP'yi JavaScript ile yapmak istediğim söylenemez

    • 1987 tarihli A Critique of Abelson and Sussman or Why Calculating is Better than Scheming yazısı ilginizi çekebilir: https://dl.acm.org/doi/10.1145/24697.24706
      Yazar, Scheme'e alternatif olarak KRC ya da Miranda kullanılmasını öneriyor
      KRC'yi pek bilmiyorum ama Miranda, Haskell'i etkilemiş statik tipli fonksiyonel bir programlama diliydi
    • SICP Lisp hakkında bir kitap değil, ama başka dillerde kolayca yeniden üretilemeyen önemli kavramları göstermek için Lisp'in kendine özgü niteliklerini kullanıyor
      Scheme ya da Lisp kullanmadan SICP'ye benzeyen bir kitap, ya SICP'den tamamen farklı olur ya da en azından aynı şeyleri öğretemez
      Benim deneyimimde Haskell ve ML, Scheme'den çok daha zor anlaşılırdı; bu yüzden tam olarak hangi kısmın zor geldiğini merak ediyorum
    • SICP'yi gerçekten sevmek istedim; 15 yıl önce okusaydım muhtemelen severdim
      Geçen ay okumaya başladım ama bana fazla geniş kapsamlı geldi
      Çok sayıda ilginç matematiksel ilkeyi hızla geçiyor ve tam eğlenceli olmaya başlarken bir sonraki konuya geçiyor
      Başka bir deyişle, fazla yüzeysel
      Geriye dönüp bakınca, SICP'den türemiş pek çok ders ve belgeyi zaten görmüş olmam da yardımcı olmadı; her konu tanıtıldığında aklımdan “yine mi bu” düşüncesi geçiyordu
    • O hissi anlıyorum. Lisp beni de uzaklaştırdı ve bunun nedeni yeterince zeki olmamamdı
      Yine de kendimi zorlayıp sonuna kadar gittim ve Lisp'i ele alacak kadar zeki olmadığım için aslında inanılmaz derecede çok şey öğrendim
      Kodu okumaya çok fazla zaman harcadığım için, bana öyle geliyor ki alışık olduğum bir dil olsaydı öğreneceğimden daha fazlasını öğrendim
      SICP'nin bir Python sürümü de var
      Bizzat baştan sona tamamlamadım, yalnızca göz gezdirdim; bu yüzden tavsiye etmiyorum ama var olduğuna kanıt olarak bağlantıyı bırakıyorum
      https://wizardforcel.gitbooks.io/sicp-in-python/content/0.ht...
    • Functional Programming in Scala, namıdiğer Red Book of Scala, tipli bir dil kullanmasına rağmen SICP ile aynı şekilde düşünmeyi öğreten bir kitap gibi görünüyor
      Benim kitaplığımda da bu iki kitap yan yana duruyor ve kesinlikle okumaya değer
  • İkinci okuyuşumda dipnotlara ve kaynakçaya daldım; orada da güzel, büyük bir dünya vardı
    Doğru hatırlıyorsam Sussman ve ekibinin gök cisimlerinin özelliklerini, yani yörüngelerini hesaplamak için özel amaçlı programlanabilir işlemci tasarladığı bir makale var
    Her zamanki gibi insanın aklını başından alan türden bir içerik

  • SICP, lisans eğitimimde yalnızca sınırlı sayıda model öğrenmiş biri olarak bana birden fazla programlama modeli olduğunu erken dönemde kavrattı
    Hangi dilin, kütüphanenin ya da framework'ün belgelerini okursam okuyayım yönümü bulabileceğim hissini veren kitaplardan biriydi

    • Üniversitede aldığım en iyi programlama derslerinden biri, çeşitli dilleri ikişer hafta kadar işleyen karşılaştırmalı programlama dilleri dersiydi
  • SICP'nin yanına, iki kereden fazla okunmaya değer kaynaklar olarak The Little * serisinin tamamını da koyarım
    Types and Programming Languages de iyidir
    Yaptığım iş açısından bunlar uygulanabilir bilgisayar bilimi ama sadece okumak yetmez, uygulamak da gerekir
    Tekrar etmezseniz bir kısmını unutursunuz
    Kişisel olarak, o kişiyi tanıyıp saygı duyduğum için de olabilir ama Dijkstra'nın kitaplarını ve makalelerini epey sık yeniden okurum
    Artık doğrudan uygulamak zor olsa da zihne iyi geliyor ve bence kişisel olarak mükemmel bir yazar