5 ms·
SICP is literally a textbook for programming 101 class. It's whole purpose is to teach programming to people who might have never programmed before.
by xyzzyz 8y ago
SICP is literally a textbook for programming 101 class. It's whole purpose is to teach programming to people who might have never programmed before.
- mcculley 8y agoMy understanding is that SICP was developed as the programming 101 class for MIT. Do students come into programming 101 at MIT never having programmed before? I would suspect that what is a great book for programming 101 for MIT students is not necessarily the right book for those that have not yet been exposed to programming.
- nostrademons 8y agoI've heard that actually students who had never programmed before did better with SICP than students that had. You have to un-learn a lot of habits from imperative languages when you start working with Scheme. Total novices could take the material as it was presented, but people who had programmed before often tried to shoehorn it into the C/Java/PHP paradigm they'd already experienced and ended up fighting the language. The same effect worked in reverse as they graduated MIT or worked on projects in more mainstream languages, though. Students would have to unlearn some of the elegant recursive formulations and strong abstraction abilities of Scheme and deal with languages that actually have strong industry adoption. That was a major factor [1] in the replacement of SICP with Python in MIT's intro programming class. Python has abundant library support that more closely mimicks what the programmer will have available and what challenges she'll face in the real world. [1] https://cemerick.com/2009/03/24/why-mit-now-uses-python-instead-of-scheme-for-its-undergraduate-cs-program/ https://cemerick.com/2009/03/24/why-mit-now-uses-python-inst...
- mcculley 8y agoI don't disagree that SICP is a better fundamental model than other approaches. I am one of those that was slowed down by learning BASIC as my first language. I was questioning whether or not the typical student learning Programming 101 at MIT is a good template for other students coming into a class with similar goals. I would be surprised if the typical MIT freshman hasn't done some kind of programming in high school or earlier.
- gumby 8y agoAt the time the book was written, the freshman who had used a computer were in the minority, even for EECS majors.
- tjr 8y agoOne potential downside for novice programmers is that some of the examples are a bit deeper than what you find in most beginning programming books. For example (as exhibited in the blog post topping this thread), writing programs pertaining to differential calculus. Obviously, lots of non-programmers have studied calculus, but lots haven't, as well. To the extent a reader might stumble on some example programs, SICP could be challenging, even if the programming content itself starts at zero and builds up.
- deleted 8y ago[deleted]
- jacobolus 8y agoIt’s supposed to be a rigorous and challenging introductory course for first-year MIT students 40 years ago who had no previous computer programming background. For someone who is not as well prepared as a typical first-year MIT student, something else might be better, but it’s reasonably accessible in my opinion. I would have loved to have a course like SICP as a high school student.
- leoc 8y agoThe target audience for SICP seems to be basically a freshman Gerry Sussman. There's no doubt it's reasonably accessible to people with a suitable combination of background and aptitude, but the historical evidence seems to be that it's not accessible to the typical CS undergraduate: according to https://www2.ccs.neu.edu/racket/pubs/jfp2004-fffk.pdf https://www2.ccs.neu.edu/racket/pubs/jfp2004-fffk.pdf it had a wave of adoption as a CS 101 text but enthusiasm soon soured. In my experience, even The Little Schemer, which covers much of the same material, from a similar perspective on computing, but in a much more streamlined and learning-friendly form, isn't close to being universally accessible for unsupervised learning.
- jacobolus 8y agoMy quick take is that the authors of the linked essay have a circumscribed and very industry-focused view of what an introductory CS course should teach and what kind of things a student should be expected to learn. Their primary goal seems to be preparing students for a follow-up Java course (of the early 2000s style of Java), but without dropping all of the incidental complexity of Java/C++ on the students right away. To that effect they have pared down most of the “computer science” content of a SICP type course, and focused heavily on the computer programming process, analogous to the way middle school English classes teach about writing. (Disclaimer: I have not directly evaluated their curriculum/textbook.) This differs markedly from my own opinion about the proper goals of a ‘computer science’ course at the undergraduate level, which is to teach timeless principles and flexible thinking without bending to fashion (especially fashion which is now a decade out of date), and to prepare students for follow-up computer science courses such as data structures / algorithms, theory of computation, programming languages, or in a more applied direction databases, networking, graphics, operating systems, numerical analysis, machine learning, and so on. A lot of these follow-up courses will be substantially mathematical and will rely heavily on analytical skills developed in in introductory CS course and in mathematics courses (not just on programming skills per se). But if updated for 2018 the authors’ curriculum would be appropriate as a course titled “introduction to programming” or the like. I agree it sounds like an improvement vs. first courses that start students out on C++ or Java (their main comparison in the linked paper). YMMV.
- inimino 8y agoBut incoming MIT freshmen are likely to have some programming experience, and they didn't cover the whole text. Self-study SICP without any previous programming experience would be exceedingly tough.
- derefr 8y agoYou know how there's a thing called "precalculus" in high schools? Covers trig, logarithms, etc.? I feel like SICP would be a perfect text for introductory CS, if there were a "pre-CS" course in high schools that was essentially equivalent to the current 100-level Discrete Mathematics courses. Come into programming already knowing set theory, graph theory, computational complexity, etc. and SICP will make perfect sense.
- hackermailman 8y agoThere's been proven success teaching a variant of HtDP (How to Design Programs) to highschool students in Algebra classes https://www.bootstrapworld.org/index.shtml https://www.bootstrapworld.org/index.shtml It is described here in an excellent talk about the challenges of curriculum design https://youtu.be/5c0BvOlR5gs https://youtu.be/5c0BvOlR5gs note the end of the talk he discusses how Calculus is secretly taught to them as well by keeping track of a video game state over time. Going from Bootstrap->SICP would be possible too.
- derefr 8y agoThat's a completely separate idea from what I'm suggesting, though. You don't need to already understand programming to be able to use SICP. SICP doesn't need an intro (or to be modified), it is an intro. What you need to already understand, is math. Specifically, the kinds of math that SICP uses in its examples and problems—which aren't taught in high-school, but totally could be (100-level Discrete Maths has very few prerequisites; you could theoretically learn it in elementary school, though practically not, for mental-development reasons.) SICP is, essentially, a book to teach programming to "mathematicians who have not necessarily ever heard of a computer." It works wonderfully when used as such. But the less mathematical grounding you have, the harder you'll struggle. It's exactly like a textbook for one of those "Communications for Business" courses. If you're not a business student, then it'll be a bad communications textbook, because all the examples and problems are business-related.
- baddox 8y agoThat may be, but it was still incredibly dense and challenging for me when I found a discarded copy in the 3rd year of my 4-year computer science degree, when I was already quite familiar with Java/C/Python-esque imperative code and somewhat familiar with Lisp.
- gnulinux 8y agoSICP is taught to freshmen in UC Berkeley and MIT in their "CS 101" classes. I mean, most of these classes are "translated" to Python but still it is SICP and it has Scheme parts for things you can't do in Python. As a lisp enthusiast, and having learned programming with SICP, I believe it's possible.
- kasey_junk 8y agoI’ll go further at Indiana Univeristy when I attended the cs 101 was taught sicp style. The cs 101 equivalent for non-majors was not & was taught in c++. I entered as a non-major so did it in c++ first. It only clicked when I went back to sicp. Could just be having done the material twice but I’ve always understood most cs concepts in a functional sense more easily.
- ACow_Adonis 8y agoIts literally a text book written for use at MIT. I don't think its fair to continue the fiction that introduction to programming 101 at MIT is about pitching to people who have never done programming before any more than it is to pretend that people who get into top medical or law schools haven't had multiple years being coached to get into top medical or law schools. Humbly, its not a beginner programming book in any reality-connected universe...
- deleted 8y ago[deleted]
- jacobolus 8y agoIt was the introduction to programming at MIT from 1980. Almost nobody born in 1962 had any programming experience whatsoever when they got to college. Even when SICP was being phased out at MIT a decade ago (heck, even today), there were many smart students without any programming experience when they get to college. Maybe even the majority, even at highly selective technical schools. It was not and is not necessary to have extensive programming experience to get into a good engineering college in the USA. (Arguably middle schools and high schools should place more emphasis on the subject, but that’s not where we are today.) Many of the best professional programmers I know were first exposed to it in college. Some were first exposed to programming after finishing college, and taught themselves.
- mycall 8y agoI think it was different in the 70s/80s.. no coaching before college. Maybe self learning, but no tutors.