Code and Coffee Book Club
The official book club of Code and Coffee Long Beach.
Hosted online on the Code and Coffee Discord server, livestreamed to twitch, and uploaded to YouTube.
Books
Structure and Interpretation of Computer Programs
Sessions
- Session Zero,
- Linked in Twitch Chat
- (linkencore.iii.com) Encore – Structure and interpretation of computer programs / Harold Abelson and Gerald Jay Sussman ; adapted to JavaScript by Martin Henz and Tobias Wrigstad with Julie Sussman.
- (sourceacademy.org) Source Academy
- (shaunlebron.github.io) Parinfer - simpler Lisp editing
- (linkencore.iii.com) Encore – An elementary introduction to the Wolfram language / Stephen Wolfram.
- (www.wolfram.com) An Elementary Introduction to the Wolfram Language by Stephen Wolfram
- (www.industriallogic.com) Knowledge Hydrant: A Pattern Language for Study Groups - khdraft.pdf
- (linkencore.iii.com) Encore – Structure and interpretation of computer programs / Harold Abelson and Gerald Jay Sussman, with Julie Sussman ; foreword by Alan J. Perlis.
- (journal.stuffwithstuff.com) JavaScript Isn’t Scheme – journal.stuffwithstuff.com
- (news.ycombinator.com) JavaScript Isn't Scheme | Hacker News
- (www.meetup.com) Code and Coffee Book Club, Sun, Feb 23, 2025, 3:00 PM | Meetup events website
ROAM_REFS: https://www.meetup.com/code-and-coffee-long-beach/events/306193274/
- Code and Coffee Book Club
Hosted By Ryan W.
** Details
The focus is on technical books, especially ones considered classical computer science texts.
Current book: Structure and Interpretation of Computer Programs, second edition.
This first session will be an introduction to the book club, an overview of the first book, covering the preface of the book, and deciding how much material to cover in the next session. The second session will dive into the body of the book.
The book club will be held online in the Code && Coffee Discord server in a voice channel and will be streamed online on the Code && Coffee Twitch channel. As always, every one is welcome to participate in their choice of text, voice, or video chat.
Tags: Book Club, Learning, Lisp, Programming Languages, Computer Programming
- Links from Comments
- (mitp-content-server.mit.edu) Welcome to the SICP Web Site
- (github.com) sarabander/sicp: HTML5/EPUB3 version of SICP
- (ocw.mit.edu) Structure and Interpretation of Computer Programs | Electrical Engineering and Computer Science | MIT OpenCourseWare
- (www.youtube.com) MIT 6.001 Structure and Interpretation, 1986 - YouTube
- (www.twitch.tv) CodeAndCoffeeLB - Twitch
- (www.racket-lang.org) Racket
- (mitpress.mit.edu) Structure and Interpretation of Computer Programs
- (sicpebook.wordpress.com) Structure and Interpretation of Computer Programs (SICP) by Abelson & Sussman – SICP
- (www.scheme.org) The Scheme Programming Language
- (try.scheme.org)
- (linkencore.iii.com) Encore – Structure and interpretation of computer programs / Harold Abelson and Gerald Jay Sussman, with Julie Sussman ; foreword by Alan J. Perlis.
- (journal.stuffwithstuff.com) JavaScript Isn’t Scheme – journal.stuffwithstuff.com
- (news.ycombinator.com) JavaScript Isn't Scheme | Hacker News
- (people.eecs.berkeley.edu) Simply Scheme: Introducing Computer Science
- (mitpress.mit.edu) The Little Schemer
- (mitpress.mit.edu) The Reasoned Schemer
- (htdp.org) How to Design Programs
- (webperso.info.ucl.ac.be) Concepts, Techniques, and Models of Computer Programming
- (mitpress.mit.edu) The Seasoned Schemer
- (beautifulracket.com) Beautiful Racket by Matthew Butterick
- (shaunlebron.github.io) Parinfer - simpler Lisp editing
- (paredit.org) paredit — parenthetical editing in Emacs
- Links from Discord
- (github.com) source-academy/sicp: XML sources of SICP and SICP JS, and support for generating Interactive SICP JS, PDF, e-book and comparison editions
- (sicp.sourceacademy.org) Structure and Interpretation of Computer Programs JavaScript Edition (sicpjs.pdf)
- (en.wikipedia.org) Higher-order function - Wikipedia
- (www.gnu.org) Symbols (GNU Emacs Lisp Reference Manual)
- (en.wikipedia.org) Curry–Howard correspondence - Wikipedia
- (writings.stephenwolfram.com) Combinators and the Story of Computation—Stephen Wolfram Writings
- (physbuzz.github.io) 02-23-2025.md
- Linked in Twitch Chat
- Session One,
- Session Two,
- Current section (sarabander.github.io) Structure and Interpretation of Computer Programs, 2e: 1.2
- (physbuzz.github.io) notes-ch1-2.md
- (en.wikipedia.org) Extended Euclidean algorithm - Wikipedia
- (en.wikipedia.org) Chinese remainder theorem - Wikipedia
- (en.wikipedia.org) Linear Diophantine equations - Diophantine equation - Wikipedia
- (en.wikipedia.org) Big O notation - Wikipedia
- (books.google.com) How to Prove It: A Structured Approach - Daniel J. Velleman - Google Books
- (nature-of-computation.org) The Nature Of Computation
- (www.cambridge.org) Computational Complexity
- (www.amazon.com) The Computational Beauty of Nature: Computer Explorations of Fractals, Chaos, Complex Systems, and Adaptation: Flake, Gary William: 9780262561273: Amazon.com: Books
- (mathstodon.xyz) Simone Conradi: "The absolute value of a soluti…" - Mathstodon
- (en.wikipedia.org) Lie algebra - Wikipedia
- (en.wikipedia.org) Quaternion - Wikipedia
- (lockywolf.wordpress.com) Solving SICP – Various Thoughts
- (news.ycombinator.com) Solving SICP | Hacker News
- (longformmath.com) Long(er)-Form Mathematics – LFM Textbooks
- (projecteuler.net) About - Project Euler
- (en.wikipedia.org) Cryptographic nonce - Wikipedia
- (tvtropes.org) Noodle Incident - TV Tropes
- (hn.algolia.com) "random number generator" All | Search powered by Algolia
- (www.valerionappi.it) Generating true random numbers from bananas - Valerio Nappi
- (en.wikipedia.org) Introduction to Algorithms - Wikipedia
- Session Three,
- Current section (sarabander.github.io) Structure and Interpretation of Computer Programs, 2e: 1.3
- Next: SICP Chapter 2 (intro) and SICP Section 2.1
- Java's usage of the word "body" was brought up
SICP does use "Body", in the same sense. In addition, according to Wikipedia, the book predates Java by around 11 years.
- Closures were discussed
The book sticks to the mathematical definition, see (sarabander.github.io) Structure and Interpretation of Computer Programs, 2e: 2.2, and not the definition commonly used by Lisp and JavaScript programmers.
- (pythontutor.com) Python Tutor - Python Online Compiler with Visual AI Help
Was mentioned in passing, in regard to the substitution model of execution. See also SICP2e 1.1.5: The Substitution Model for Procedure Application.
- (en.wikipedia.org) Wolfram Language - Wikipedia
Similarities to the Wolfram Language were brought up.
- A comparison was made between higher-order functions in C vs Lisp
An example of C using function-pointers was given of
qsort
. Higher-order functions are more powerful in Lisp due to the ability to programmatically define new functions at runtime based on program input. - (www.youtube.com) Mathematical Physics 01 - Carl Bender - YouTube
- (sarabander.github.io) SICP, 2e: 3.2 The Environment Model of Evaluation
A comparison was made between the substitution model of application (see SICP2e 1.1.5: The Substitution Model for Procedure Application) and the environment model of evaluation.
- LISP 1.5 Programmer's Manual
- (jmc.stanford.edu) History of Lisp
- Recursive functions of symbolic expressions and their computation by machine, Part I by John McCarthy
- (texdraft.github.io) Lisp Compiler
- (en.wikipedia.org) SHRDLU - Wikipedia
- Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp by Peter Norvig
- (en.wikipedia.org) Cyc - Wikipedia
- (www.wired.com) One Genius' Lonely Crusade to Teach a Computer Common Sense | WIRED
- (www.wired.com) CYC-O | WIRED
- IBM 704
- Session Four,
- Current chapter (sarabander.github.io) SICP, 2e: Chapter 2 Building Abstractions with Data
- Current section (sarabander.github.io) SICP, 2e: 2.1 Introduction to Data Abstraction
- (sarabander.github.io) SICP, 2e: References
- (en.wikipedia.org) Hindley–Milner type system - Wikipedia
- (en.wikipedia.org) Halting problem - Wikipedia
- (en.wikipedia.org) Rice's theorem - Wikipedia
- (en.wikipedia.org) Rice–Shapiro theorem - Wikipedia
- (en.wikipedia.org) Scott–Curry theorem - Wikipedia
- (en.wikipedia.org) Haskell Curry - Wikipedia
- (en.wikipedia.org) Curry–Howard correspondence - Wikipedia
- (nature-of-computation.org) The Nature Of Computation
- (en.wikipedia.org) Mizar system - Wikipedia
- (hbpms.blogspot.com) How to Become a Pure Mathematician (or Statistician)
- (en.wikipedia.org) Christos Papadimitriou - Publications - Wikipedia
- (guix.gnu.org) GNU Guix transactional package manager and distribution — GNU Guix
- (itch.io) Autumn Lisp Game Jam 2024 - itch.io
- (www.youtube.com) Lambda Calculus: Introduction, Visualization, and Philosophy - YouTube
- (computationbook.com) Understanding Computation
- (web.archive.org) Lambda Diagrams
- (en.wikipedia.org) To Mock a Mockingbird - Wikipedia
- Vimacs.app
- (www.youtube.com) Self-Correcting Messages (Hamming Codes) - YouTube
- (www.youtube.com) Hamming Codes Part 2: The One-Line Implementation - YouTube
- (press.stripe.com) Stripe Press — The Art of Doing Science and Engineering
- (hackernewsbooks.com) Hacker News Books
- (www.oreilly.com) Designing Data-Intensive Applications, 2nd Edition[Book]
- Next time, (sarabander.github.io) SICP, 2e: 2.2 Hierarchical Data and the Closure Property
- Session Five,
- Current section (sarabander.github.io) SICP, 2e: 2.2 Hierarchical Data and the Closure Property
- Examples of different Lisp structures using lists and cons cells
; Equivalent forms.
(cons (list 1 2) (list 3 4))
(cons (cons 1 (cons 2 nil)) (cons 3 (cons 4 nil)))
; Not equivalent to the former two forms.
(list (list 1 2) (list 3 4))
- (www.racket-lang.org) Racket
- (sdf.org) SDF Public Access UNIX System - Free Shell Account and Shell Access
- (physbuzz.github.io) notes-ch2-2.md
- (linkencore.iii.com) Encore – Functional design and architecture : examples in Haskell / Alexander Granin.
- (linkencore.iii.com) Encore – Data-oriented programming : reduce software complexity / Yehonathan Sharvit ; forewords by Michael T. Nygard and Ryan Singer.
- (www.amazon.com) Programming Algorithms in Lisp: Writing Efficient Programs with Examples in ANSI Common Lisp: Domkin, Vsevolod: 9781484264270: Amazon.com: Books
- (www.amazon.com) Purely Functional Data Structures: Okasaki, Chris: 9780521663502: Amazon.com: Books
- (en.wikipedia.org) Matthias Felleisen - Wikipedia
- (linkencore.iii.com) Encore – The recursive book of recursion : ace the coding interview with Python and JavaScript / by Al Sweigart.
- (www.manning.com) Data-Oriented Programming
- (en.wikipedia.org) Tower of Hanoi - Wikipedia
- (en.wikipedia.org) Eight queens puzzle - Wikipedia
- (mitpress.mit.edu) Structure and Interpretation of Classical Mechanics
- (www.amazon.com) Functional Differential Geometry (Mit Press): Sussman, Gerald Jay, Wisdom, Jack, Farr, Will: 9780262019347: Amazon.com: Books
- (nostarch.com) Learn Physics with Functional Programming | No Starch Press
- (nostarch.com) Hardcore Programming for Mechanical Engineers | No Starch Press
- (stevelosh.com) August 2016 Lisp Game Jam Postmortem / Steve Losh
- (rosettacode.org) Rosetta Code
- (rosettacode.org) Category:Scheme - Rosetta Code
- (www.manning.com) Grokking Functional Programming
- (lispcookbook.github.io) Data structures
- Study Session
Study session prior to §2.3 to allow more time to read and give extra time to discussing exercises. Not streamed or recorded. No host present.
- Session Six,
Session recorded by an attendee, but not streamed. No host present due to multiple schedule conflicts and last-minute obligations.
- Current section (sarabander.github.io) SICP, 2e: 2.3 Symbolic Data
- Session Seven,
- Current section (sarabander.github.io) SICP, 2e: 2.4 Multiple Representations for Abstract Data
- Property lists
- Association lists
- Association Lists (GNU Emacs Lisp Reference Manual)
- (www.cs.cmu.edu) 10.1. The Property List
- (www.cs.cmu.edu) 15.6. Association Lists
- (en.wikipedia.org) History - Object-oriented programming - Wikipedia
- (cs61a.org) CS 61A Spring 2025
- (www.brinckerhoff.org) CSC 430, Spring 2025
- (www.cliki.net) CLiki: Current recommended libraries
- Other books mentioned
- Session Eight,
- Current section (sarabander.github.io) SICP, 2e: 2.5 Systems with Generic Operations
- Native number types in Racket causing issues in implementing the examples in SICP
Racket has native fractions which messes with implementing some of the examples in SICP §2.5.
- See also (sarabander.github.io) SICP, 2e: 2.4 Multiple Representations for Abstract Data for definition, or lack thereof, of
apply-generic
,put
,get
- (www.youtube.com) The Unreasonable Effectiveness of Multiple Dispatch | Stefan Karpinski | JuliaCon 2019 - YouTube
- (en.wikipedia.org) Expression problem - Wikipedia
- (www.juliaopt.org) 2019 JuMP-dev Keynote - stefankarpinski.pdf
- (en.wikipedia.org) Numerical tower - Wikipedia
- (en.wikipedia.org) The Diamond Problem - Multiple inheritance - Wikipedia
- (en.wikipedia.org) Python - Extending languages with multiple-dispatch libraries - Examples - Multiple dispatch - Wikipedia
- (en.wikipedia.org) Common Lisp Object System - Wikipedia
- Greenspun's Tenth Rule
- (cs.brown.edu) The Structure and Interpretation of the Computer Science Curriculum (sics.dvi - paper.pdf)
- (en.wikipedia.org) C++ - Emulating Multiple Dispatch - Examples - Multiple dispatch - Wikipedia
- "Design patterns are what happens when you run out of language"
Seems to a mutation of Rich Hickey's
Patterns mean "I have run out of language."
which people seem to like quoting but not citing.
- JuliaCon 2025
- (sarabander.github.io) SICP, 2e: 2.5: Footnote #118
- Session Nine,
- Current section (sarabander.github.io) SICP, 2e: 3.1 Assignment and Local State
- (sarabander.github.io) SICP, 2e: Term Index
- (mathoverflow.net) algorithms - What is this modified arithmetico-geometric mean function? - MathOverflow
- (mathstodon.xyz) Dan Piponi: "Sketch of proof based on paper…" - Mathstodon
- (en.wikipedia.org) Side effect (computer science) - Wikipedia
- (en.wikipedia.org) Algebraic data type - Wikipedia
- (en.wikipedia.org) Abstract data type - Wikipedia
- (elixirschool.com) Pipe Operator · Elixir School
- Crafting Interpreters by Robert Nystrom
- (cacm.acm.org) A Programmable Programming Language – Communications of the ACM
- Session Ten,
- Current section (sarabander.github.io) SICP, 2e: 3.2 The Environment Model of Evaluation
- (www.youtube.com) Lecture 5A | MIT 6.001 Structure and Interpretation, 1986 - YouTube
- (www.youtube.com) L21 Assignment and State | UC Berkeley Cs 61A, Spring 2010 - YouTube
- The Garbage Collection Handbook
- Diagramming parallel vs series frames and environments
Was attempting to draw a diagram of parallel vs. series frames when defining nested and non-nested functions and when calling said functions.
- Build Your Own Lisp
- Session Eleven,
- Current section (sarabander.github.io) SICP, 2e: 3.3 Modeling with Mutable Data
- (www.youtube.com) 6.001 SICP: Structure and Interpretation of Computer Programs (2004) - YouTube
- In particular, Grant recommended (www.youtube.com) 13. Environment Model - 6.001 Sicp (2004) - YouTube at 43 minutes in
- SICP Reading Group - Book Club Notes - Section 3.3 - Exercise 3.17
- (con.racket-lang.org) RacketCon
- (www.youtube.com) From Here to Lambda and Back Again - Douglas Crockford - RacketCon 2023 - YouTube at 8 minutes was shared by Grant
- Next time, still covering (sarabander.github.io) SICP, 2e: 3.3 Modeling with Mutable Data
- Session Twelve,
- Current section (sarabander.github.io) SICP, 2e: 3.3 Modeling with Mutable Data
- Grant's example of
add-to-agenda!
(define (add-to-agenda! time action agenda)
(define (belongs-before? segments)
(or (null? segments)
(< time
(segment-time (car segments)))))
(define (make-new-time-segment time action)
(let ((q (make-queue)))
(insert-queue! q action)
(make-time-segment time q)))
(define (add-to-segments! segments)
(if (= (segment-time (car segments)) time)
(insert-queue!
(segment-queue (car segments))
action)
(let ((rest (cdr segments)))
(if (belongs-before? rest)
(set-cdr!
segments
(cons (make-new-time-segment
time
action)
(cdr segments)))
(add-to-segments! rest)))))
(let ((segments (segments agenda)))
(if (belongs-before? segments)
(set-segments!
agenda
(cons (make-new-time-segment
time
action)
segments))
(add-to-segments! segments))))
- Special forms vs. Function
;; =let= is a special form. =(x 2)= isn't evaluated as a normal expression, rather is understood by the code of =let= to define a local binding.
(let ((x 2))
(display x))
;; =define= is also a special form. Here, =(square x)= and =(* x x)= aren't evaluated; rather, they are taken, as-is, as input to =define= and mean "bind a lambda that takes a single argument to square" and "let the body of the lambda be (* x x)", respectively.
(define (square x)
(* x x))
;; Here, calling =square= is just calling a normal function. Everything is evaluated as normal. No special forms.
(square 2)
- (conservatory.scheme.org) R5RS: Revised⁵ Report on the Algorithmic Language Scheme
- (github.com) racket/racket: The Racket repository
- (dspace.mit.edu) Computer Science and Artificial Intelligence Laboratory - Technical Report: The Art of the Propagator by Alexey Radul and Gerald Jay Sussman (MIT-CSAIL-TR-2009-002.pdf)
- (lobste.rs) Art of the Propagator (2008) | Lobsters
- (www.youtube.com) "We Really Don't Know How to Compute!" - Gerald Sussman (2011) - YouTube
- (www.youtube.com) "Propositions as Types" by Philip Wadler - YouTube
- (store.steampowered.com) Virtual Circuit Board on Steam
- (www.nand2tetris.org) Home | nand2tetris
- (en.wikipedia.org) Memoization - Wikipedia
- (lfe.io) (LFE:Lisp Flavoured Erlang)
- (en.wikipedia.org) LFE (programming language) - Wikipedia
- notes-ch3-3.md exercise 3.32 from (physbuzz.github.io) notes-ch3-3.md
- (www.amazon.com) Building Problem Solvers (Artificial Intelligence): Forbus, Kenneth D., De Kleer, Johan: 9780262061575: Amazon.com: Books
- (mitpress.mit.edu) Software Design for Flexibility
- (groups.csail.mit.edu) Revised Report on the Propagator Model
- (en.wikipedia.org) Linguistic relativity - Wikipedia
- (www.amazon.com) Amazon.com: Common LISP: A Gentle Introduction to Symbolic Computation (Dover Books on Engineering) eBook : Touretzky, David S.: Kindle Store
- (en.wikipedia.org) Leslie Lamport - Wikipedia
- (en.wikipedia.org) Byzantine fault - Wikipedia
- (en.wikipedia.org) Lock (computer science) - Wikipedia
- (en.wikipedia.org) Semaphore - Wikipedia
- (en.wikipedia.org) Semaphore (programming) - Wikipedia
- Favorite footnote: (sarabander.github.io) SICP, 2e: 3.3, Footnote 148
- Next time (sarabander.github.io) SICP, 2e: 3.4 Concurrency: Time Is of the Essence
- Session Thirteen,
- Current section (sarabander.github.io) SICP, 2e: 3.4 Concurrency: Time Is of the Essence
- notes-ch3-4.md exercise 3.38 from (physbuzz.github.io) notes-ch3-4.md
- (pages.lip6.fr) Semantics of Combinations in Scheme (orleans.pdf)
- (en.wikipedia.org) Peterson's algorithm - Wikipedia
- (en.wikipedia.org) Semaphore (programming) - Wikipedia
- (franz.com) Franz Inc Customer Applications: Naughty Dog Software
- (opengoal.dev) OpenGOAL | OpenGOAL
- (en.wikipedia.org) Game Oriented Assembly Lisp - Wikipedia
- (en.wikipedia.org) Leslie Lamport - Wikipedia
- (en.wikipedia.org) Edsger W. Dijkstra - Wikipedia
- (www.cs.utexas.edu) E.W.Dijkstra Archive: Cooperating sequential processes (EWD 123)
- (dl.acm.org) Time, clocks, and the ordering of events in a distributed system | Communications of the ACM
- (dl.acm.org) The structure of the “THE”-multiprogramming system | Communications of the ACM