SICP is still the best introduction to computer science. The problem is the reliance on scheme/lisp languages to explain stuffs. it could be taught in almost anything that supports basic FP,it's even taught in JS !
SICP is still the best introduction to computer science. The problem is the reliance on scheme/lisp languages to explain stuffs. it could be taught in almost anything that supports basic FP,it's even taught in JS !
The fact that Scheme uses Lisp is what makes SICP work at all. The course would be difficult or impossible to complete using most other languages. The keyword is: homoiconicity, the "code=data" property of Lisp.
Most of the course focuses on writing interpreters and compilers for Lisp and making variations on it (lazy evaluation, non-deterministic). This would be very painful if a non-homoiconic language is used.
And indeed, the "JavaScript version" you posted is very painful to read. It's difficult to understand how the data structures used by the interpreter are related to JavaScript code. And the code most definitely is not idiomatic JavaScript. I would not consider this an improvement over the original Scheme version.
in javascript functions are data.While javascript doesnt allow lazy evaluation,it's good enough to teach most of SICP concepts.
For someone that knows basic javascript,it's good enough.
I dont agree with you saying it is not idiomatic javascript. There is nothing such as idiomatic javascript ,that's why people keep arguing on how to write javascript,javascript doesnt care. If javascript did care,it would be a different language.
Anyway my point is ,what matters are the concepts , not the language. Most SICP concepts can be taught in many different languages.It's not about LISP, or javascript. It could be Haskell,CAML,or even Python it doesnt matter.
But if that is the case, wouldn't SICP be less language agnostic since (most of) the concepts taught cannot be universally applied to non-homoiconic languages?
Tools and environment were another matter, getting MIT Scheme installed and running was a bit of a pain. Next time I'll probably try with Racket and Neil van Dyke's SICP support package :
http://www.neilvandyke.org/racket-sicp/
From the looks of it support for the 'Picture Language' is supported, looks like fun. :-)
There's something reassuring about these vids, possibly the timelessness of what they attempt to convey. The enthusiasm, Sussman's especially for me, shines through well. They were filmed at HP in the 1980s, there's some great examples of 80s fashion going on there at points :-)
I followed along with the video lecture in Racket using van Dyke's SICP package, and it went just fine. For all practical purposes I don't know scheme.
It was nice trying to run the sqrt procedure that I had built up, be told that the 'average' procedure was not defined, quickly define it and successfully run sqrt. Such a simple thing, but ... it just worked.
Interesting seeing fractional results displayed as actual fractions.
I think it's very helpful, having programmed for >25 years, that I knew where the lecture was heading. Nevertheless, it was a wow experience. I wish I'd been exposed to this in my early years.
SICP uses 'wave' and 'rogers'. The package for racket includes only 'einstein'. FYI.
Lisp resistence is a phobia, a problem of the afflicted person, not the wider computing community as a whole.
Yeah right, first you dont know me you are assuming I dont know LISP while i have GCL opened on my computer right now. Second, your kind is the problem, computer science has nothing to do with being able to learn LISP in 2 hours or not.that's good if you did. You must be the smartest computer science guy in the world.
I dont know you, but your message makes me say you are arrogant and bigheaded and i'm not interested in people like you. I'm interested in making knowledge accessible, even for those who "cant learn lisp is 2 hours therefor they have no business dabbling in computing".
You may be smart but i pity your coworkers that need to endure your arrogance.
I did not come here for a fight just to suggest an alternative version of SICP.
I just dont like trolls and I responded appropriately.
My position is that if you're involved in computing in any capacity, you will have to learn countless formalisms and languages. And S-expressions are on the more accessible end of the spectrum.
If you and I learned it, so can others. Exclusively seeking out C-like syntaxes will only hinder you, professionally.
P.S. SICP introduces all the Lisp you will need as it goes. Really.
yes you are trolling,now go back to wherever you come from,because you're not contributing to any constructive discussion.
Compared to the math, Lisp was a non-issue. I didn't even notice I was learning it. But I'm a "practical" coder lacking formal training, not a science student learning to code.
Also, a trick I like to do with the exercises is struggle with one for 20 minutes or so, and if I am not making progress, look up the answer. Usually that helps me understand what I was missing enough to then do it myself. That happens maybe 1/5th of the time, and usually because the question was vague or oddly worded, or most commonly, I didn't know how to test that it was correct.
They have a lot of data, we have ... opinions. And the data was saying that students were having trouble learning to do practical engineering problems after this course. So, 2 hours or not (and I say not), the reality is that really bright students had trouble with it, and their professors and designer of the course, co-inventor of the language, and author of SICP thought Python a better choice than Scheme for this course.
Empiricism trumps all.
I'd rather it in something new to me (scheme) than be shoehorned into a language I know already. That way I can gain additional benefit of seeing similar concepts in a new form.
Trying to protect someone from having to learn a new language just doesn't make sense, like protecting people from regular exercise. Everyone should have the benefit of knowing multiple tools, and a language should be no exception.
If it was written using the flavour of the month language then, it would have disappeared into obscurity by now.
Towards the end, when they start building the machine simulator lisp, you get a very natural transition to machine-level thinking -- they build up to it with simple constructs, just like everything else in lisp, and I think that's beautiful. You can clearly see how you could wire up some buffers and wire up an ALU, and wire up some circuits and end up with a completely generic calculating computer.
The bottom-up approach a lot of classes take is somewhat more burdensome to pull together and hold in your head