This is a very mathematically inspired introduction, as they say in the initial chapter.<p>What I would like to see is a <i>logical</i> introduction to computer science, or at least theoretical computer science.<p>Start with combinational logic [1], i.e. with Boolean circuits. They are both conceptually simple and relatively close to physical transistors, unlike any functional / mathematical approach. Then move on to sequential logic[2] which allows the introduction of memory/states, e.g. via flip-flops. From this, more complex circuits and even a primitive GOTO language would be introduced. What I would be interested in is how these circuits relate to the traditional models of computation, i.e. finite state machines, pushdown automatons and Turing machines. Not very cleanly, I suspect.<p>[1] <a href="https://en.wikipedia.org/wiki/Combinational_logic" rel="nofollow noreferrer">https://en.wikipedia.org/wiki/Combinational_logic</a><p>[2] <a href="https://en.wikipedia.org/wiki/Sequential_logic" rel="nofollow noreferrer">https://en.wikipedia.org/wiki/Sequential_logic</a>
Don't miss Part II [0], which (not to discount the quality of Part I) is much less elementary and much more interesting.<p>[0] <a href="https://cs.uwaterloo.ca/~plragde/flane/FICS2/" rel="nofollow noreferrer">https://cs.uwaterloo.ca/~plragde/flane/FICS2/</a>
Oh, they are using Racket. I really love that language. I think it's also great that they explain how to work with structures, instead of going the "everything is a list" aproach (the latter is, in my opinion, better suited for advanced students).<p>Unfortunately, I haven't managed yet to integrate Racket into my daily work. The last time I tried to use it, the resulting (manually optimized) compiled code was as slow as an unoptimized python solution and 10x slower than a manually optimized Java version.
See also "Teach yourself Computer Science functionally"<p><a href="https://news.ycombinator.com/item?id=36312603">https://news.ycombinator.com/item?id=36312603</a> <i>(315 points | 18 days ago | 99 comments)</i>
How to Design Programs is also an intro to programming using Racket as the teaching language <a href="https://htdp.org/2023-5-12/Book/index.html" rel="nofollow noreferrer">https://htdp.org/2023-5-12/Book/index.html</a>
Ragde is an excellent CS prof. I really enjoyed the functional approach Waterloo takes in first year CS, especially in the optional more advanced version of the course where they go a lot deeper into the math connections and interpreters
Can this be considered a modern version of SICP?<p><a href="https://en.wikipedia.org/wiki/Structure_and_Interpretation_of_Computer_Programs" rel="nofollow noreferrer">https://en.wikipedia.org/wiki/Structure_and_Interpretation_o...</a>