4 ms·
A Functional Introduction To Computer Science
- yungporko 3y agothis seems like a great resource, thanks for posting.
- josefrichter 3y agoOh God, wish I had this when I first started.
- deleted 3y ago[deleted]
- worldta8 3y ago[flagged]
- tralarpa 3y agoOh, 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). 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.
- FrankyHollywood 3y agoI can't believe I have never heard of Racket before, it's 28 years old! Quite some libraries available too https://github.com/avelino/awesome-racket https://github.com/avelino/awesome-racket
- thu 3y agoMaybe you did while it was still called PLT Scheme (supported in DrScheme), although it's called Racket since 13 years.
- melling 3y agoMentioned many times in the past 8 years on HN. https://hn.algolia.com/?dateEnd=1688294284&dateRange=custom&dateStart=1435190400&page=0&prefix=false&query=racket&sort=byPopularity&type=story https://hn.algolia.com/?dateEnd=1688294284&dateRange=custom&...
- noelwelsh 3y agoI'm really surprised to hear Racket code was slower than Python. Racket has had a JIT compiler for a very long time, and v8 has a much better JIT compiler, so I would expect its performance to be vastly better than Python.
- asicsp 3y agoSee also "Teach yourself Computer Science functionally" https://news.ycombinator.com/item?id=36312603 https://news.ycombinator.com/item?id=36312603 (315 points | 18 days ago | 99 comments)
- kingkongjaffa 3y agoHow to Design Programs is also an intro to programming using Racket as the teaching language https://htdp.org/2023-5-12/Book/index.html https://htdp.org/2023-5-12/Book/index.html
- cubefox 3y agoThis is a very mathematically inspired introduction, as they say in the initial chapter. What I would like to see is a logical introduction to computer science, or at least theoretical computer science. 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. [1] https://en.wikipedia.org/wiki/Combinational_logic https://en.wikipedia.org/wiki/Combinational_logic [2] https://en.wikipedia.org/wiki/Sequential_logic https://en.wikipedia.org/wiki/Sequential_logic
- tialaramex 3y agoIt makes sense that it's a mathematical approach because Computer Science is ultimately a Mathematical discipline, the Church-Turing intuition aligns these machines to mathematics (and I would argue us too, but that's controversial). Lots of elite CS courses start there, Cambridge did even when I was applying thirty years ago, Oxford does these days (back then it didn't acknowledge CS as a "real" subject, you were basically a mathematician and you'd just be studying this oddly practical sub-discipline of mathematics). Both teach an ML today. The place I studied began with an ML then too (today it begins with Java, which is I think inferior but they get $$$ so...) My unconsidered guess is that your "begin with booleans" thing just gets to arithmetic via a long winding route, and either as it approaches arithmetic, or just before, it accidentally gets infected with Gödel incompleteness so you are no better off, with the same problems but maybe a greater appreciation of why they were unavoidable, except maybe you're very tired.
- cubefox 3y ago> It makes sense that it's a mathematical approach because Computer Science is ultimately a Mathematical discipline The fact that the abstraction "logical circuits" is much closer to actual computers than any "mathematical" or "functional" abstraction casts doubt on this claim.
- lincpa 3y ago[dead]
- s-zeng 3y agoRagde 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
- grousewood 3y agoHad him 25 years ago for Digital Logic. His enthusiasm was far beyond most of the other profs. Warms my cockles to see he’s still keeping it real.
- genericuser256 3y agoThis was a really fantastic course, good intro to the principles of recursion and fundamentals of CS
- amelius 3y agoCan this be considered a modern version of SICP? https://en.wikipedia.org/wiki/Structure_and_Interpretation_of_Computer_Programs https://en.wikipedia.org/wiki/Structure_and_Interpretation_o...
- adamisom 3y agoThat would be https://htdp.org/2023-5-12/Book/index.html https://htdp.org/2023-5-12/Book/index.html (see https://users.cs.northwestern.edu/~robby/pubs/papers/htdp-sicp-fdpe2002.pdf https://users.cs.northwestern.edu/~robby/pubs/papers/htdp-si...) which also uses Racket
- Unknawnuser 3y ago[flagged]
- Unknawnuser 3y ago[flagged]
- wk_end 3y agoDon't miss Part II [0], which (not to discount the quality of Part I) is much less elementary and much more interesting. [0] https://cs.uwaterloo.ca/~plragde/flane/FICS2/ https://cs.uwaterloo.ca/~plragde/flane/FICS2/