7 ms·
I've always wondered if recommending SICP would also be applicable to a person who has never programmed before. Perhaps pragmatism aside, would you?
by justaj 8y ago
I've always wondered if recommending SICP would also be applicable to a person who has never programmed before.
Perhaps pragmatism aside, would you?
- xyzzyz 8y agoSICP 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.
- golergka 8y agoDepends on how smart they are. When my physicist friend works on cold fusion and judging by interacting with him, has IQ around 140 (compared to my 110-115) wanted to get into programming, I recommended him SICP, but never to to anyone else.
- EForEndeavour 8y agoWorking on cold fusion doesn't sound like a particularly intelligent use of one's resources.
- agumonkey 8y agoMy only critic about SICP is the fondness for arithmetic/analysis in problem sets. For EE it's obviously normal. For pure programming it's an unnecessary requirement/burden (unless you love maths). HtDP is better in that regard.
- dan-robertson 8y agoI basically agree with this opinion on SICP: Many of the illustrations are based on mathematics and a lot of problems require a decent amount of mathematical maturity to tackle. I think it’s a great book for anyone decently mathematically competent but for people who don’t really know what to write when asked for a proof, I think it’s a lot more difficult. Apart from the mathematics based examples, a lot of the way things are explained is not very related to actual machines and relies a lot on abstract symbol manipulation, something that is easy not to notice if one is used to mathematics, but is often very difficult if one is not.
- 3b9cd7355317f55 8y ago> For pure programming it's an unnecessary requirement/burden (unless you love maths). HtDP is better in that regard. I disagree strongly on that assertion. The mathematics in SICP was what made it stand out for me, and what got me into programming. Other books I read before that just presented programming as an opaque thing where you follow instructions and write incantations without any rhyme or reason. In general terms, the math-phobia that has been prevalent in computer programming for the past 20 years is a new phenomenon (I have not seen it in literature from the 1990s or earlier, or heard it from old-school programmers and CS people) and is at its core deeply anti-intellectual. An example of this dumbing down is the current crop of JavaScript "devs." This runs all the way to the semantics of the language: one of the most idiotic decision made in JavaScript is overloading '+' to concatenate strings. Commutativity? Associativity? Algebra? Get out of here with this math nonsense.
- agumonkey 8y agoYou read me wrong, i said arithmetic/analysis. To encode, resolve a problem with a computer you need no knowledge of convergent square Root approximation (an exercise early on) Mathematical approach is a plus to me toi.
- gumby 8y agoIt was specifically written as the first textbook on programming for freshmen who had never seen a computer before (this was in the early 80s when the MIT freshman who had used a computer before were the exception). So dive on in!
- joe_the_user 8y agoWritten as a text book for freshmen who were going into engineering and programming - at one of the top schools in the country. I've only been close to the level but I believe freshman courses of those sorts often involve throwing really smart, cocky kids to a given subject in the most challenging fashion possible. (Remember Caltech used the Apostol text book for calculus, developing everything axiomatically, because, you're smart). So it is introductory text but it might not a gentle, easy introductory text.
- charlysl 8y agoSICP, although an excellent book, is not a good introduction to programming. [1] thoroughly explains why [2,3] based on How To Design Programs [4] is a much better intro; you should read SICP after completing this [1] https://www2.ccs.neu.edu/racket/pubs/jfp2004-fffk.pdf https://www2.ccs.neu.edu/racket/pubs/jfp2004-fffk.pdf [2] https://www.edx.org/course/how-code-simple-data-ubcx-htc1x https://www.edx.org/course/how-code-simple-data-ubcx-htc1x [3] https://www.edx.org/course/how-code-complex-data-ubcx-htc2x https://www.edx.org/course/how-code-complex-data-ubcx-htc2x [4] https://htdp.org/ https://htdp.org/