-
Kitap tanıtımı
- Bir öğrenciye yaz boyunca okuması için ödünç verilen bir kitap var
- Bu kitap, bilgisayar bilimindeki en önemli eserlerden biri ve kişinin kariyeri ile araştırmaları üzerinde büyük etki bıraktı
- Kitabın adı Hal Abelson ve Jerry Sussman'ın Structure and Interpretation of Computer Programs (SICP)
-
Kitabın önemi
- Bu kitap, bilgisayar bilimiyle ilk kez karşılaşıldığında büyük etki yaratıyor
- Programlamanın temel unsurlarını tanıtıyor ve çeşitli konuları inceliyor
- Bu konular arasında lambda soyutlaması, yüksek dereceli hesaplama, karmaşık veri yapıları, modülerlik, stream'ler, tembel değerlendirme, yorumlayıcı ve derleyici oluşturma, bellek yönetimi yer alıyor
-
Dil tasarımı yaklaşımı
- Hal ve Jerry, her şeyi dil tasarımı alıştırması olarak görüyor
- Karmaşık sistemleri katmanlı tasarımla yapılandırma kavramını tanıtıyor
- Her katman, o katmanda ilkel kabul edilen parçaların birleştirilmesiyle kuruluyor
-
Bilgisayar biliminin özü
- Bilgisayar devrimi, düşünme biçimi ve ifade etme biçiminin devrimidir
- Prosedürel epistemoloji kavramını tanıtıyor; bu, bilginin yapısını buyurucu bir bakış açısından incelemek anlamına geliyor
- Bilgisayar bilimi, "nasıl" sorusuna yönelik bir çerçeve sunuyor
-
Kitabın kalıcı güncelliği
- 1988'de satın alınan bu kitap hâlâ güncelliğini koruyor
- Bilgisayar biliminde zaman geçse de değerini koruyan az sayıdaki kitaptan biri
- Feynman'ın Lectures on Physics eseri gibi, bilgisayar biliminin özünü çok iyi yansıtıyor
-
Güncelleme
- 27 Ocak 2024'te güncellendi
- Bu kitap, açıklamalı Lisp kaynakçasında da yer alıyor
1 yorum
Hacker News görüşleri
Abelson ve Sussman'ın 1986 ders videolarından kitabın içeriği öğrenilebilir. Soyutlama katmanlarını açıklama biçimleri hem kişisel olarak hem de bir mentor olarak bana faydalı geliyor
SICP gibi klasik metinler program tasarımından bahsediyor, ancak bugünlerde sistem tasarımının daha önemli olduğunu düşünüyorum. Dağıtık sistemlerin bilgisayar biliminin bir parçası olup olmadığını bilmiyorum, ama çözülmesi gereken daha genel bir problem. Sistemi mümkün olduğunca basit yazıp gözlemlenebilirlik araçlarıyla tasarımdaki kusurları tespit ettikten sonra, veri yapıları ya da diğer bilgisayar bilimi yöntemleriyle sorunu çözüyorum. Çoğu durumda Big O gösterimi ve çalışma zamanı karmaşıklığı önemli değil; diziler ve hızlı CPU'larla sorunların çoğu çözülebiliyor. Çalışma zamanı sorunu olduğunda programın profilini çıkarıp hotspot'ları bulmak gerekiyor. Bilgisayar bilimi, CPU'nun bellek önbelleklemesinin nasıl çalıştığını öğretmiyor. Havali bir grafik algoritması iyi bir çalışma zamanı karmaşıklığına sahip olabilir ama CPU cache'ini tamamen mahvedebilir; oysa diziler kullanılarak daha hızlı çözülebilirdi. Daha genel problemler hata toleransı, dağıtık kilitlerin ve kuyrukların doğruluğu ve sistemin ölçeklenebilirliği. Bilgisayar/elektrik mühendisliği geçmişim olduğu için önyargılı olabilirim
Ücretsiz kopya bağlantısı bozuk. 2001 civarında yalnızca HTML sürümü ücretsizdi ve biri bunu TeXinfo'ya dönüştürmüş. Bugün SICP çalışmak istiyorsanız kodu MIT Scheme ya da DrRacket üzerinde çalıştırabilirsiniz
"The Elements of Programming Style" üç kez okunmaya değer; ben daha da fazla kez okuyup çok fayda gördüm. 2010 incelemesine bakabilirsiniz
SICP'yi sevmek istiyordum ama Lisp bana zor geldi. Haskell ve Standard ML'i seviyorum. Başkalarının da benzer bir deneyimi olup olmadığını merak ediyorum. SICP'ye benzer ruha sahip bir kitabı başka bir dilde okumak ilginç olabilir. SICP'yi JavaScript ile yapmak istemem
"Software Design for Flexibility: How to Avoid Programming Yourself into a Corner" hakkında görüşleri merak ediyorum
SICP, farklı programlama modelleri olduğunu anlamama yardımcı oldu. Bu kitap, dillerin, kütüphanelerin ve framework'lerin dokümantasyonunu okuyup yön bulmama yardım ediyor
25 yıldır programlama yapıyorum ve kitabı yaklaşık 10 yıldır elimde bulunduruyorum. Kısa süre önce DrRacket ile başladım. DrRacket'in güzel yanı, bir değişkenin üzerine fareyle geldiğinizde kodun başka yerleriyle olan bağlantılarını görsel olarak gösterebilmesi. Ama VS Code olmaması biraz canımı sıkıyordu. Bu yüzden alıştırmaları VS Code'da (aslında Cursor'da) çözebileceğim bir ortam kurdum. LLM entegrasyonu hoş; kodu ve yazdığım anlatıyı verip geri bildirim isteyebiliyorum. Alıştırmalarda biraz ilerledim ve dönüştürdüğüm kodu, yazdığım yanıtları ve LLM'den aldığım geri bildirimleri statik bir siteye dönüştürdüm. Zaman geçirmek için eğlenceli bir yoldu. LLM yardımı olmadan SICP'yi tamamen kavrayabildiğimi söyleyemem ama LLM'leri alıştırmalara nasıl entegre edebileceğimi görmek ilginç
İkinci okuyuşumda dipnotları ve kaynakçayı keşfetmeye başladım ve orada çok güzel bir dünya olduğunu fark ettim. Sussman ve ekibinin gök cisimlerinin özelliklerini hesaplamak için özel programlanabilir işlemciler tasarladığı bir makale var. Her zaman şaşırtıcı
Orijinal sürüme ve JavaScript sürümüne bağlantılar veriyor