[HN Gopher] Simply Scheme: Introducing Computer Science (1999)
       ___________________________________________________________________
        
       Simply Scheme: Introducing Computer Science (1999)
        
       Author : AlexeyBrin
       Score  : 107 points
       Date   : 2026-02-01 12:35 UTC (4 days ago)
        
 (HTM) web link (people.eecs.berkeley.edu)
 (TXT) w3m dump (people.eecs.berkeley.edu)
        
       | AlexeyBrin wrote:
       | If anyone wants to try the flavour of Scheme used in the book,
       | install Racket and use:                   #lang simply-scheme
        
         | gus_massa wrote:
         | Note that it doesn't get installed by default. You must
         | download the package https://pkgs.racket-
         | lang.org/package/simply-scheme
         | 
         | The easiest way is to go to inside DrRacket and open the menu
         | File > Package Manager and add "simply-scheme".
         | 
         | Or if you prefer the command line, something like
         | raco pkg install simply-sheme
        
         | antfarm wrote:
         | Cool, I just started using Racket this week, for prototyping an
         | S-expression based DSL.
         | 
         | The full PDF is available here:
         | https://ia800200.us.archive.org/13/items/SimplyScheme/Simply...
        
       | functionmouse wrote:
       | I'm to understand this is meant to prepare new learners for SICP?
       | Cool!
        
       | Smalltalker-80 wrote:
       | Ah, Scheme was part of a programming language course, studying CS
       | in ~ 1990. We students struggled to match all the parenthesis on
       | our VT100 terminals. And to understand the intended purpose of
       | the functions, which are not attached to modules or classes
       | (without macro's)..
        
         | juancn wrote:
         | I have fond memories too, we used to follow "The little
         | Schemer" for Scheme, but we had a PC lab running Windows.
        
       | whartung wrote:
       | "Simply Scheme" was a foundational work on my path to a
       | parenthesta.
       | 
       | Simply, for me it was a Rosetta Stone that put Lisp/Scheme
       | concepts into ones that I already understood. Simple things like
       | using "function" instead of "lambda" were Aha moments that lead
       | to breakthroughs.
       | 
       | Super helpful for me.
        
       | linguae wrote:
       | I wonder if there are still undergraduate CS programs that use a
       | functional programming language in the intro course? MIT switched
       | away from SICP (Scheme) to Python back in the late 2000s, and
       | Berkeley switched away from Scheme sometime afterwards. Shriram
       | Krishnamurthi has heavily promoted Racket in education and
       | continues to do so, but for introductory CS he has moved on to
       | Pyret, which has Algol-like syntax as opposed to S-expressions
       | and doesn't require programmers to think in terms of functional
       | programming; for example, Pyret has loops and mutable variables.
       | 
       | At my institution (Ohlone College in Fremont, California), we
       | teach the intro courses in C++. However, for discrete math, a
       | sophomore-level course, each instructor is allowed to choose the
       | language. I chose Haskell the last time I taught the class, and I
       | plan to use Haskell again, since I believe it's a great vehicle
       | for coding discrete math, plus I believe it's a great thing
       | teaching undergraduates functional programming early on.
        
         | ecshafer wrote:
         | Your discrete mathematics class has programming and is taught
         | by the CS department? I can't say I have seen that. My Discrete
         | mathematics class was taught in the Math department, no
         | programming, and we had a few CS theory courses in the CS
         | department which are basically Discrete++ but they were all
         | sans programming.
        
           | linguae wrote:
           | We teach discrete structures as mostly a math class with
           | problem sets, but we have some programming exercises to help
           | "concretize" some of the more abstract portions of the class
           | and to also provide motivation to students who want to see
           | practical applications of discrete math.
        
         | nluken wrote:
         | Northeastern held out for a long time, only switching away from
         | Racket, despite the protest of students and professors alike,
         | in the last year or two.
        
         | sheept wrote:
         | my high school still uses simply scheme and SICP for the fall
         | semesters of its CS sequence I believe, but granted it's in an
         | affluent city in the Bay and its recently retired teacher came
         | from UCB
        
         | bunderbunder wrote:
         | I don't necessarily feel the need to ban loops and variables,
         | but I do kind of wish schools didn't start with object-oriented
         | languages. My undergraduate program started with Scheme but I
         | actually think a proper procedural language would be a fine
         | choice too.
         | 
         | (Or even - and I know this is a spicy take - assembly language.
         | An intro-level course that takes students through games like
         | TIS-100 and Human Resource Machine might have a lot of
         | pedagogical value.)
         | 
         | What I've observed is that people who have had to spend some
         | time working in a language that maintains a clean separation
         | between functions and data tend to be better at domain
         | modeling, which ultimately enables the to produce designs that
         | are simpler and easier to maintain. OOP can be a powerful
         | mechanism, but it seems like, perhaps ironically, people who
         | only know OOP tend to have a harder time reasoning about
         | information flow, control flow and state. Perhaps because
         | object-oriented language features are mostly meant as a way to
         | abstract over those concerns. Which does have some value, but
         | maybe also discourages learners from thinking about them too
         | deeply.
        
           | pinewurst wrote:
           | Or Shenzhen I/O - I tried to get my son into it for just this
           | reason.
        
         | dtartarotti wrote:
         | Grinnell College's (my alma mater) CS program first intro
         | course is entirely in Racket. The program basically has three
         | sequential intro courses: functional programming with Racket,
         | imperative programming with C, and OOP with Java.
        
           | nxobject wrote:
           | I wonder whether it's easier at small liberal arts colleges -
           | my alma mater has a second-semester course teaching SML, Go,
           | and PDP-11 assembler.
           | 
           | The issue is that "CS 110" gets used by a lot of STEM
           | students in other departments that require computational
           | methods and statistical tools, and that require you get to a
           | CS course taught by actual computer scientists. I don't
           | necessarily think that it's a bad thing that you'll need CS
           | 101 before a higher-level biology elective that needs R!
        
           | knoebber wrote:
           | Grinnell 17' here. At first I didn't enjoy intro with Racket.
           | But by the end I changed my mind and it ended up being one of
           | my favorite courses. In retrospect that class easily had the
           | most impact on me during my CS major... I still have quite a
           | few functional programming habits. These days I like to code
           | in elixir for side projects, which has quite a few
           | similarities.
           | 
           | Anyways, cool to see another alum here! I hope the department
           | keeps it around for a while longer :)
        
         | kstrauser wrote:
         | My school switched to C++ for intro stuff right before I
         | enrolled, and egad, I still think it's a horrid choice. It
         | required learning, or at least memorizing, a significant amount
         | of boilerplate before a freshman could even start to consider
         | writing their logic. I'd already written an awful lot of
         | programs before I got there so it wasn't too awful for me to
         | make the leap. I spent a lot of time helping my fellow students
         | get over the massive speedbumps they faced so they could start
         | learning.
        
           | linguae wrote:
           | C++ is not my favorite language, and if I had full control,
           | I'd prefer a more beginner-friendly language. However, most
           | of our students intend to transfer to a university. We have
           | articulation agreements with universities defining what is
           | transferable. Most undergraduate CS programs in California
           | teach their intro courses in Python, Java, or C++; there's
           | even the rare intro courses taught in C. Some universities
           | don't care about the intro language from community college
           | intro courses as long as those classes teach their same
           | concepts of programming, but there are other universities
           | that insist on particular languages. What's nice about C++ is
           | that it pleases most universities. If a student can grasp
           | C++, then that student could easily learn Python or Java.
           | 
           | I have a feeling we'll have to revisit this topic in the next
           | five years as college and university CS departments grapple
           | with the implications of generative AI coding tools such as
           | Claude Code, but that's another story...
        
         | zafka wrote:
         | I know I am biased both by my education and my chosen path _.
         | My first computer class was pascal based,my second course was
         | intel based assembler. These were both in community college.
         | When I started my degree in Computer Engineering, the
         | microprocessor course was essentially an assembly course using
         | the Motorola 6800 chip. I was lucky that the main CS courses
         | were taught using C, course work was compiled on Vax mainframes
         | running some unix variant. I used Borland C /C++ 3.0 to do my
         | homework, then would have to figure out what changed when I
         | used the Vax compiler to turn in my work. I really think it is
         | worthwhile to get an understanding of the low level workings of
         | computing. Every now and then I see a nice article comparing
         | different access times for disk, ROM, DRAM, cache which is also
         | important to know for critical code. _Embedded for Telecom,
         | Medical,etc.
        
         | kerwioru9238492 wrote:
         | At Brown university there are 3 intro courses you can choose
         | from. Two use functional programming languages.
        
         | itay-maman wrote:
         | There's an interesting historical angle here: Church's lambda
         | calculus actually predates Turing machines by a few months
         | (both 1936), and they're provably equivalent in computational
         | power. Church even proved undecidability of the
         | Entscheidungsproblem first, using lambda calculus.
         | 
         | Yet despite this head start, the Turing machine formalism
         | became the dominant framework for CS theory--complexity
         | classes, computability, formal verification. Whether that's
         | path dependence, historical accident, or something deeper about
         | how humans reason about computation, I'm not sure.
         | 
         | But it does make me wonder: if the imperative, state-based
         | model proved more tractable even for theorists, maybe FP's
         | learning curve isn't purely about unfamiliarity. There might be
         | something genuinely harder about reasoning in terms of pure
         | functions and recursion vs. "do X, then Y, update Z."
         | 
         | Fully acknowledge this is handwavy--curious if others have
         | thoughts.
        
         | nickloewen wrote:
         | UBC's CPSC 110 uses Racket. It was built around _How to Design
         | Programs_ when I took it years ago, and at a glance I think it
         | still is.
        
       | fdr wrote:
       | I enjoyed my work with Scheme, having received my instruction in
       | the early 2000s. I'm not a functional language or lisp language
       | advocate in any way, and I don't even dislike Python for
       | professional work, but I do regret that it is not taught anymore:
       | Python's management of scopes is not as good for the instruction.
        
       | jampekka wrote:
       | I'm currently teaching an introductory programming course in
       | Python, and I definitely feel the allure to teach using a simpler
       | language like Scheme.
       | 
       | Python has become a huge language over time, and it's really hard
       | to make a syllabus which isn't full of simultaneous "you'll
       | understand when you're older" concepts. OTOH students don't seem
       | to mind it much and they do seem to learn to write code even with
       | very shakey fundamentals.
        
         | bunderbunder wrote:
         | OTOH I work in Python and I've seen that recent graduates who
         | were only taught Python and Java in school are often in for a
         | nasty shock when they first encounter (for lack of a better
         | term) real-world code.
         | 
         | When I'm helping them understand some subtle point about
         | async/await, I sure do wish they had a semester's worth of
         | Scheme in their background so I could rely on them already
         | having a crystal-clear understanding of what a continuation is.
        
           | jampekka wrote:
           | Indeed. It's hard to teach Python as it's idiomatically used
           | in the wild. There's just so much stuff going on (iterators,
           | generators, async, context managers, comprehensions,
           | annotations etc etc), it takes a lot of study/experience to
           | learn it all.
        
             | fn-mote wrote:
             | Yes, so the point is that teaching it _at all_ is a choice
             | of style not substance.
             | 
             | Not sure I 100% believe that, but buy-in (and LLM help) are
             | significant parts of a successful onboarding.
        
               | bunderbunder wrote:
               | There is at least something to be said for having spent a
               | semester starting with a bare-bones but malleable
               | language like Scheme, and then building up your own
               | libraries to implement more advanced features like
               | object-oriented programming and list comprehensions.
               | 
               | Because then you're interacting with these things in a
               | really concrete way rather than just talking abstractly
               | about what's going on inside the black box. And I'm
               | fairly well convinced at this point that mechanisms like
               | virtual method tables and single dispatch functions are
               | the kind of thing where an hour or two just making one
               | yourself will go a lot farther than many days' worth of
               | lectures. Perhaps even many years' worth of hands-on
               | experience.
        
       | nomilk wrote:
       | Love the site, but seems a shame not to link to the full (~460
       | page) pdf for offline perusal.
       | 
       | EDIT: this might be it:
       | https://people.eecs.berkeley.edu/~bh/ss.pdf
       | 
       | (saving to laptop and phone; perfect for passing time on a long
       | haul flight)
        
         | antfarm wrote:
         | The full PDF is available here:
         | https://ia800200.us.archive.org/13/items/SimplyScheme/Simply...
        
       ___________________________________________________________________
       (page generated 2026-02-05 23:01 UTC)