Live data from Hacker News

SICP: JavaScript Edition available for pre-order

mitpress.mit.edu

91–100 of 123 posts

Re: SICP: JavaScript Edition available for pre-order

#91
SICP should be shelved into the museum of the great CS courses. It served its purpose in its generation (the early batches like 1990s were already electrical engineers).Even Discrete-Math was just an experimental collection of concepts for them[1]. My mad respect and admiration to those professors at MIT.

We moved on. Assuming we have completed nand2tetris[https://www.nand2tetris.org/], we should instead be focussing on something like HtDP[2], or maybe like how they do at Brown using Pyret[3] or my favourite, how they teach programming at CMU - C with training wheels[5][6]

SICP as a second course, will then be fun to those passionate about mariad applications in the midst of innovation decades.

Javascript (and sometimes Python) won't give you the insight these courses were designed for. To learn programming? Absoutely NO.

[1]http://www.aduni.org/courses/ [2]https://news.ycombinator.com/item?id=18890417 [3]https://www.pyret.org/ [4]https://www.cs.cmu.edu/afs/cs/local/sml/common/smlguide/inde... [5]https://news.ycombinator.com/item?id=15499160 [6]https://bitbucket.org/c0-lang/docs/wiki/Home

Re: SICP: JavaScript Edition available for pre-order

#92

Note to the unaware, both* this version and the classic (Scheme) version are Creative Commons-licensed and freely available online. (*edit: thanks to keithwinstein for enlightening me -- I wrongly thought it was just the one. The publisher's site doesn't advertise this at all!) https://sicp.sourceacademy.org/ (JS version) https://mitpress.mit.edu/sites/default/files/sicp/index.html (1984 classic)

There is also github repo https://github.com/source-academy/sicp/wiki with instruction how to generate various versions

Re: SICP: JavaScript Edition available for pre-order

#94

SICP should be shelved into the museum of the great CS courses. It served its purpose in its generation (the early batches like 1990s were already electrical engineers).Even Discrete-Math was just an experimental collection of concepts for them[1]. My mad respect and admiration to those professors at MIT. We moved on. Assuming we have completed nand2tetris[ https://www.nand2tetris.org/ ], we should instead be focussi…

No, thanks. It serves as a perfect blend of a serious bullet point in the introduction entries and niche comedy. It's part of the eternal culture around it.

Re: SICP: JavaScript Edition available for pre-order

#95
post #84
post #73

Earlier quoted context omitted.

The scheme version was aimed at students who might never have touched a computer before. Why should this book be different, though these days aimed at students who’d only operated a computer before.

When the Scheme version was written, all the programming languages were equally weird to incoming students. So Scheme was as good a starting point as any other. Today, Scheme is still weird, but JavaScript is familiar. It's something the incoming students are at least likely to have heard of. So it makes more sense to ease them into the material with the familiar rather than drop them into something weird.

By that logic, North Korea is a better vacation spot than Niue, since most people are at least likely to have heard of North Korea.

Re: SICP: JavaScript Edition available for pre-order

#96
post #10

I saw this the other day on Amazon while picking up the SICP instructor's edition. For the life of me, I can't figure out why they chose JavaScript to do this. And the new authors are professors . Since the original SICP has a permissive license, I've actually thought about doing something similar, but with a more modern functional language.

Yeah, imagine the craziness of making materials like this accessible to users of the most widely used language.

> Yeah, imagine the craziness of making materials like this accessible to users of the most widely used language.

One of the reasons it was originally written for scheme is that scheme has a small core, simple syntax and can very easily be learned while reading SICP.

More importantly, the type of user that would get put off by using/learning scheme, is probably not going to make it through SICP. Learning just enough scheme is arguably the easiest part of going through SICP.

Re: SICP: JavaScript Edition available for pre-order

#97
I will preface this with, "I absolutely love SICP", but I think there are better places to go for everything it teaches. In terms of breadth and information per page ratio there's almost nothing better though.

- For how to actually program: How to Design Programs [1]

- For how to write programming languages: Essentials of Programming Languages [2]

- For how computers actually work: The Elements of Computing Systems (nand2tetris) [3]

I am a huge fan of How to Design Programs. It does a better, more thorough job of teaching the "core skill" of programming SICP or anything else I've come across. Its text is better paced (although very long), more approachable, and more focused on teaching how to program (as the name suggests). On top of that it has an absolutely massive number of exercises that do not require an interest in basic number theory to enjoy.

You will know how to actually solve new problems with programming when you finish HtDP (or are even part way through).

The really interesting parts of SICP are the 4th and 5th chapters any way right? Well, Ch. 4 (about "metalinguistic abstraction" or how to modify your interpreter to give your language different properties) is incredibly densely packed with information. It covers an interpreter for all of this in about 100 pages:

- lazy evaluation by default

- nondeterminism

  - aka search as a language primitive

  - the basics of continuations (but not accessible to the user)
- propositional logic

  - aka declarative (what is) vs imperative (how to) programming
It's a great appetite whetter, but it'll leave you wanting more.

If this stuff interests you Essentials of Programming Languages is a much better resource. It follows a similar style to the approach in SICP. You are walked through building interpreters for increasingly more complicated languages. Here are some brief descriptions of some of features you'll learn to add to the LET language (a very simple purely functional language that serves as the core, you'll also write this too):

- Mutually recursive procedures

- Static code transformation to use lexical addressing

- Mutation (and how to perform call-by-value, call-by-ref, and call-by-need languages)

- Continuation-passing vs Environment-passing interpreters

- Advanced control structures like exceptions and threads

- Static types and type inference

- Typed modules (I've not seen any other introductory text do this)

- Object-orientation

It contains a plethora of great exercises that ask you to extend the languages in interesting ways or to reflect more realistic demands of a language.

For chapter 5, Register Machines, I think we all know that the first half of Elements of Computing Systems (colloquially nand2tetris) is a great resource for that. The second half is excellent as well, but it's outside of the SICP scope.

Summary:

;; Page Count 1374 = (+ 792 410 (/ 344 2))

In total I just recommended 1374 pages to replace 657 pages in SICP, so it's double the effort. And to be honest, if you're motivated enough to read all that then, you'll probably still read SICP if for nothing else than historical interest. If you start with SICP though, you'll still get a lot out of all the recommendations though!

[1] HtDP: http://htdp.org/2021-11-15/Book/index.html

[2] EoPL: https://eopl3.com/

[3] nand2tetris: https://www.nand2tetris.org/

Re: SICP: JavaScript Edition available for pre-order

#98
post #89

Earlier quoted context omitted.

Very respectfully disagree; but long or short, this looks really bad: list("sequence", list(list("constant_declaration", list("name", "size"), list("literal", 2)), list("binary_operator_combination", "*", list("literal", 5), list("name", "size")))) https://sourceacademy.org/sicpjs/4.1.2 ( "4.1.2 Metalinguistic Abstraction / Representing Components" ) This isn't an ideal language for doing this stuff. The Scheme versi…

Making sense of those parentheses is genuinely hard for a newcomer, too. The Scheme version is more readable to you because you already know it - anyone who's actually working through this with a class level of effort instead of skimming pages is going to spend an equal amount of time learning how to read the syntax you quoted, and they'll be fine once they do.

JS is the WORST of both worlds.

With the scheme version, you have straight-up trees to work with.

With the Javascript version, you have to learn all about parsing rules and gotchas and then you STILL wind up with trees for everything.

Re: SICP: JavaScript Edition available for pre-order

#99
post #84

Earlier quoted context omitted.

When the Scheme version was written, all the programming languages were equally weird to incoming students. So Scheme was as good a starting point as any other. Today, Scheme is still weird, but JavaScript is familiar. It's something the incoming students are at least likely to have heard of. So it makes more sense to ease them into the material with the familiar rather than drop them into something weird.

By that logic, North Korea is a better vacation spot than Niue, since most people are at least likely to have heard of North Korea.

(Just to be clear, that was intended as a friendly poke, not a scathing rebuke. I do think lisps are better suited for SICP than JS is for the reasons others have mentioned, but I’m not trying to be a jerk about it.)

Re: SICP: JavaScript Edition available for pre-order

#100
post #75

Earlier quoted context omitted.

You mean it's super hard in java? All they have is maven with hard links into eclipse from my observation. Npm is light years ahead in execution and usage. Python distribution is.... interesting with eggs & poetry

I agree. I don't find it's hard in Java. But with that being said, in the JavaScript world, the tooling treat developers more like "users" rather than "engineers". For example: - Many documentations are cohesive, well-thought, and well main-maintained. - There are usually handy shortcuts for things like `npx` or `npm i ` - And many other improvements strive for developers' life-quality, such as call back-end and data…

> But with that being said, in the JavaScript world, the tooling treat developers more like "users" rather than "engineers". For example:

Tooling really is about becoming a user. It takes a dozen different file types and shoves them through at least a dozen different type-specific pieces of software. Understanding any one of those to any real degree would take weeks to months.

Just JS itself would require understanding transpilers, minifiers (an optimizing compiler), how NPM works, how these work with all the other tools, various module bundling styles, map files, feature differences for literally 10 versions of JS, browser JS limitations (eg, Chrome and FF break the JS spec for tail calls), JS API differences and polyfills, hot reloading techniques, and wrapping an entire server instance into all of this. I'm sure there are other parts I'm not thinking of.

I did the hand-rolling of all this stuff for several years before jumping on to create-react-app. I've spent many days reading the documentation only to have to read it all again when the next major version drops and everything changes in slightly incompatible ways.

I love learning, but on the whole, this adds very little value to most of the projects I've worked on (though some really did need hand-rolling for very niche requirements).

I rather like laving all the tooling to domain experts who know far more about it than I ever will. I'd rather be a "user" and leave all my engineering headspace for the problems at hand.

Post reply on HN