23 ms·
SICP: the end of an era (2021) [video]
- bitwize 4y agoBecause real software engineering is less about building things up from first principles and more about combining and integrating pieces of software that already exist. Sorry, but it's the way of the world.
- fdgsdfogijq 4y agoEven more, usually the biggest mistakes are made by not "using what is standard", any type of programming from first principles is usually a huge mistake. People generally arent smart enough to build something from scratch in a way that beats whats already been tried and tested
- varjag 4y agoTo make an informed choice whether to apply a first principle solution you have to understand said first principles. Otherwise it's just an excuse for incompetence. And to internalize the principles you have to at least use them in a didactic setting.
- whartung 4y agoI was talking to our junior developer one day. He was working on a Delphi project of some kind. I asked him how it was going, and he said it was going well. But that he was confused about some things. I asked them what they were. He said, paraphrasing, "What's the difference between disk and RAM?". On the one hand, it's great that someone without such fundamental understanding was able to accomplish something. On the other hand, it was a bit disturbing. I've run in to several folks who do not understand first principles, and some times are combative when I explain how I "know" something "can't work" or "didn't happen". I'm sure we've all heard those things. "What about <absurd thing>?" "No. Just...sigh...no."
- lanstin 4y agoTho the difference between disk and RAM is collapsing. It used to be (90s) bog standard advice to never write to disk in the call path of a customer request. Now, there’s hardly anything that isn’t writing to disk all the time; but not spinning platters, just SSD. So maybe their confusion is less bad than it seems at first? Maybe?
- layer8 4y agoWhile the numbers are changing, there are still 2-3 orders of magnitude between RAM and SSD latency: https://colin-scott.github.io/personal_website/research/interactive_latency.html https://colin-scott.github.io/personal_website/research/inte...
- lanstin 4y agoAnd a similar gap between cache and RAM, but a software engineer unclear about the finicky business of cache optimization would not seem as dumb as the person in the original post.
- mvc 4y agoWhen I was just getting started as a programmer, everyone was using Apache. Fortunately people who do stuff don't spend their time listening to the naysayers on hn.
- syntaxfree 4y agoSo people (MIT students, the elite) shouldn’t learn Real Analysis because Wolfram Alpha?
- simplotek 4y agoI think you're missing the point. Everyone is free to learn real analysis, and it's ok if it's a part of the standard curriculum. But if you're aiming to provide the best education to future professionals so that they are able to excel at their field, you'd serve them far better if you taught them how to effectively use Wolfram Alpha. The truth of the matter it that the bulk of the work in software development, and what makes more economic sense, lies in growing a system through accretion and adopting higher level components developed and maintained by third parties.
- andreistan26 4y agoExcel at what? You need to build a strong foundation in order to innovate and to discover new stuff.
- phlakaton 4y agoAs always, the question is: a strong foundation in what? And why?
- hnfong 4y agoObviously the AI researchers in MIT need a strong foundation in GPU and parallel computing design and semiconductor technologies in order to innovate. Only those in trade schools `import pytorch` /s
- simplotek 4y ago> Excel at what? You need to build a strong foundation in order to innovate and to discover new stuff. I agree. The problem is that you have a gross misconceptions about what "strong foundation" represents in this day and age. I knew guys who fail to stop and think about "foundations" and instead use that as a scapegoat to shoehorn their gatekeeping logic and as a form of ladder-pulling. It's the kind of character who think that playing trivia games is a good way of asserting whether a candidate is a competent engineer.
- DennisP 4y agoMaybe so, but it's starting to look like AI can take over a lot of that combining and integrating.
- lanstin 4y agoIt is often true, but also see http://steve-yegge.blogspot.com/2007/06/rich-programmer-food.html http://steve-yegge.blogspot.com/2007/06/rich-programmer-food... I recently was with a group of dev ops folks that had written a 100k of terraform code. It worked great, nice improvements for consistency of cloud deploys, and decreased time to implement and all that. Problem was when terraform would implement breaking changes in new versions. We had so much code to fix, the group just wanted to stay back at version N - 1. But I knew where that would end, in five years they would have buggy unsupported old terraform needed some big heroic project to upgrade, with risk and so on. So I wrote a simple Python script that was a recursive descent parser/transformer patterned on expat with callbacks. It was able to transform all the code and bump the terraform version at the latest version. It took a while to write, but was tremendously fun, gave us a powerful tool for transforming and therefore owning the 100k+ LOC of terraform, which other wise threatens to become a congealed unmaintable blob. Even writing custom off the shelf services can have big payoffs, in efficiency or in operational ease. There are two ways in which the body of existing software is full of good solutions; there are a ton of turn key solutions, from Hadoop to NoSQL to Airflow to the other fifty nine Apache projects, Kafka, etc. etc. etc. Also, modern languages have so many excellent facilities for highly scalable, cheap and reliable software that is shall we say designed precisely o meet a given customer need. The custom solution can be faster better and cheaper than the turnkey open source system, which usually has a high cost of complexity and a high cognitive burden for ops to understand the configuration space and so on.
- EFreethought 4y agoYes, a lot of us just link black boxes together. But what about the people who make the black boxes? How smart are they? Maybe we all do not have to know first principles. But somebody does. And if MIT won't teach first principles, who will?
- vijayr02 4y agoThis reminds me of an Asimov story: https://en.wikipedia.org/wiki/Profession_(novella) https://en.wikipedia.org/wiki/Profession_(novella)
- deleted 4y ago[deleted]
- ThrowawayR2 4y agoSo who are the people building the pieces of software that ordinary developers are combining and integrating? The next Linus Torvalds, Bjarne Stroustrup, John Carmack, etc. is going to need to know the first principles like the back of their hand to build the next generation of operating systems, languages, and platforms. That's "real software engineering"; what most developers do is merely coding.
- klodolph 4y agoThe curriculum isn't being removed from existence, it's just being removed from the introductory classes. There are probably more people making their own OS from scratch in 2023 than in 1993 anyway--we have many more people with access to computers, and tons of free resources online for people who want to learn computer architecture, operating systems, assembly language, etc. This is not some kind of hypothetical supposition that "there must be people out there"; I know for a fact these people are out there because I keep meeting them, and some of them are damn young. The idea of genius men making stuff from first principles is just some kind of Hollywood schlock version of programming anyway. It's the stuff you see on NCIS when they make an episode about hackers. All the good stuff has been a team effort, even if it starts out as a solo project. Maybe with a few exceptions like cURL.
- inimino 4y agoThose people are the ones who can't be stopped, and they will continue to exist as long as people continue to pursue understanding for its own sake.
- javamoss 4y agowhy no battery-included scheme ?
- nequo 4y agoIs Racket basically that? https://docs.racket-lang.org/reference/index.html https://docs.racket-lang.org/reference/index.html
- Turing_Machine 4y agoSadly, no. For one thing, despite several attempts, there's not really any good mobile deployment story for Racket at the moment (especially for iOS). The Racket team appears to be more interested in (primarily) education and (secondarily) tinkering with programming language internals than making something that can be used to produce polished, packaged, distributable binaries (and let me stress here that this is perfectly fine... it's not a criticism, just an observation. Different people are interested in different things, and there's not anything at all wrong with that). Things that would have to change in order for for me to consider Racket fully "batteries included": 1) Capable of building binaries for all major platforms (including iOS), including stuff like code signing. 2) A standard GUI and widget library that, again, works on all major platforms. The days when cranking out a command-line binary was good enough are long gone. 3) At one time there were some licensing issues that precluded use on iOS. I think that this may have been resolved by switching to the new Chez-based system, but am not 100% sure of that. There are probably some other things. Let me stress once again that I think Racket is great! It's just not something that easily be used for commercial software development in its present form.
- threatofrain 4y agoIs there anything for mobile aside from Swift, Flutter, or React Native?
- Turing_Machine 4y agoAt one time there were numerous packages that let you run JS-based code across both mobile and desktop (e.g., Cordova). These seem to be mostly moribund nowadays, though. I think there are a couple of options for running Python on mobile.
- karmakaze 4y agoI went through SiCP much later and enjoyed all the intricacies and discoveries while at the same time realized that it would have little impact on how I go about day to day problem solving. The video explanation very much aligns with how I see programming has changed. Now we have ecosystems and library managers and perform composition at higher levels. SiCP still has great value to those interested in program language development or making/using DSLs and compilers, but this is a minority of the general software development/engineering audience.
- otabdeveloper4 4y agoProgramming hasn't changed, people teaching it have. There used to be Cobol and SQL back in the day too, they just didn't teach it at MIT.
- dwheeler 4y agoI disagree, programming has changed greatly. Today programming is mostly about picking existing components and gluing them together. Those components are themselves mostly gluing together of other components, to many levels. While it is still possible to write code from scratch, that is usually not a productive use of time. SICP is an awesome book, but it is probably better for a pure Computer Science course after you have had other courses.
- dragonwriter 4y ago> While it is still possible to write code from scratch, that is usually not a productive use of time. The thing you use to “glue components together” is as much code as the components themselves are, and the techniques used in connecting them run the full gamut of programming skills. SICP may not be the best pedagogical tool available today, because the space of options in programming pedagogy has changed, too. But the skills it teaches are no less relevant.
- slaymaker1907 4y agoCreating things from scratch is still definitely a thing, particularly for high performance code. Sure, there are plenty of data structure libraries, but squeezing out that last bit of performance often requires something bespoke. For example, I recently wrote a custom CSV parser because I needed something that did no heap allocation but without mutating the original character array (using explicit string lengths).
- jeff-davis 4y agoIf the fundamentals of the course change, shouldn't that be a new course? If the previous course existed, would that still be worthwhile for some students even if most move to the new course?
- klodolph 4y agoThere are negative consequences to bifurcating your students like that. Practically speaking, what you want is a set of students with common experiences for the first half of undergrad, which serves as the foundation for the second half of undergrad. You really want to think of the curriculum of the program as a whole, rather than focus too narrowly on individual courses.
- fferen 4y agoSICP blew my mind the first time, but I think it's most useful when you already have some hands-on coding experience (as I did). It's why we don't start teaching math with set theory.
- dmix 4y agoYeah I taught myself how to program for about 1-2yrs, but I didn't really learn what it meant to be a programmer or the ideas unpinning programming languages until I fully dug into SICP and watched the classic 1980s videos of Sussman's class. But I don't think I would have appreciated without my prior exposure to programming. That said, I've also watched some MIT 101 math classes and they also seem like courses better suited for people who know/appreciate the basic content (beyond typical high school math). So maybe MIT selects for kids smart enough to grasp it.
- inimino 4y agoNot so much about smarts but about exposure. Most of the kids who get into MIT for math didn't start doing proofs at MIT, but in maths olympiads and such at a much younger age. Still, even given the formidable qualifications of the MIT undergraduate CS class, they probably overshot at the time with SICP. (I also read SICP for the first time well into my programming career, and completely agree with your assessment.)
- deleted 4y ago[deleted]
- yazzku 4y agoDon't miss Sussman's talk linked from the post: https://www.youtube.com/watch?v=OgRFOjVzvm0 https://www.youtube.com/watch?v=OgRFOjVzvm0 This stuff resonates with me deeply. The reality of the modern computing world is a clusterfuck that no single person understands, especially because, like Sussman said, parts are entirely secret/proprietary anyway. Therefore I think an engineer should be skilled in a) removing the unnecessary bits of that clusterfuck that are not necessary to their problem and b) getting stuff done without having a complete understanding of the whole system. (b) sounds scary as fuck, but I think that's the (sad?) reality we live in in the software and hardware world. Embrace the cluster; embrace the fuck.
- strangattractor 4y agoSo should the new course be called ECEF?
- yazzku 4y agoAbso-fucking-lutely.
- musicale 4y agoThis HN topic should link to the actual video on youtube rather than a random blog post discussing it. The unreliability, unpredictability, and incomprehensibility that Sussman describes is only getting worse as we shift to ML-based everything.
- tpmx 4y agoBack in the mid 90s when I studied CS/EE (in Sweden) it seemed like LISP (and SICP) in undergrad education was primarily used as tool of bringing everyone down to the same base level, so that the 50% of students who had already spent ten years programming iteratively wouldn't have a gigantic advantage. I dropped out after two years partly because of this. I was learning so much more at my part time job - it was insane how effective that job was at teaching me programming. It set me up for life. I can't even summarize it without it sounding made-up, I just realized. (This problem has nowadays been fixed at my "alma mater". I think they're doing Python now.)
- JW_00000 4y agoMy experience is the opposite: I only appreciated the marvel of SICP (at least that's how I experienced it at the time) because I already knew other programming languages. Something "clicked" that didn't click before. I have the feeling that students with no previous programming experience didn't feel this. If that's true, it also makes sense to start with Python and move SICP to later in the program.
- veltas 4y agoThis change is necessary because young people aren't interested in the fundamental abilities of computers, instead they're only interested in the applications. If you grow up playing video games and using social media then you won't appreciate programming if you're made to start from the bare metal. There is a certain kind of person who's interested in this, but most people instead are better motivated by demonstrations that relate to them. Robotics is cool regardless and allows the kids to "smell blood" early on, it lets them be dangerous, and then maybe one day some of them will be motivated enough to slow down and understand the old principles that underlie all of this.
- simplotek 4y ago> This change is necessary because young people aren't interested in the fundamental abilities of computers, instead they're only interested in the applications. I don't think it's fair to spin this on lack of interest. My take is that young people are smart and they are goal-oriented, and their goal is to actually provide value instead of wasting time with irrelevant low-level details that matter nothing and are practically meaningless. And they do it just like the generation before them did. No one bothers with knowing how to put together opcodes once they got around to use compiled languages. Some people do quite well for themselves in the software engineering field without touching a compiled languages even once, and thus can't be bothered with subjects like linking, how to create and consume static lib, rpaths, finding symbols, etc. You can have high-paying careers in software engineering and never be bored with the difference between a stack and a heap. Popular tools like the StatsD daemon are written in Node.js, and no one can be bothered about it. So why pretend that knowing how things work from the metal up is relevant to get an understanding of how things operate? I mean, most services don't even operate on metal, but on interpreters running on containers launched from virtualizations. To each its own, but let's not fool ourselves into believing that in a world of countless layers of abstraction it's relevant to dive into the lowest of levels.
- veltas 4y agoI agree with you completely, and this was what I tried to convey. You have misunderstood me.
- hardwaregeek 4y agoI really liked his point about how you should find people who actually want to teach the course. In my experience at school, too many professors didn't actually like teaching and therefore taught a very perfunctory curriculum. The courses that I enjoyed were the ones where the professor had an explicit approach to the course that was based around their perspective vis a vis the material. For a course that's focused around teaching programming, you need a professor who has a perspective on programming. I remember talking to the head of undergraduate CS, who was frankly more of an applied mathematician than a computer scientist, and being frustrated because she fundamentally didn't get what it meant to teach programming. She complained that students wouldn't read the textbook, which was a rather boring Java textbook. She also didn't seem to understand that an intro course needs to be an introduction to thinking about computer science problems, to modeling and solving problems with programming, not just a literal introduction to the act of writing code. So unless you have a professor who is willing to devote a lot of time to education, which is not necessarily encouraged, and who has these opinions on programming, on computer science education, then you won't have a good intro CS class. Which really means you won't have a good CS program.
- jeffreyrogers 4y agoI read SICP and never got the hype. Seems like there is a certain personality type who really takes to SICP but not everyone learns best that way. I found it much more intuitive to learn about computing from the hardware up rather than from the abstract, mathematical way of thinking SICP uses.
- kjeetgill 4y agoSincerely no snark intended. But this comment and another about "bottom-up" via Assembly and C kinda show that maybe you've missed the point. We can blame SICP itself for that maybe, but it's all in the name: Structure and Interpretation of Computer Programs. It's abstract because it's not about actually physical computing — nor is it trying to take you to the same place as learning computing from hardware, "bottoms-up" is meant to but via some other mathematical means. It's trying to teach you to reason about computer programs by it's structures — that they aren't just a list of instructions. Reading Shakespeare won't teach you grammar but they'll help you be a better reader and writer in their own ways!
- jeffreyrogers 4y agoYes, I understand the motivation for SICP. There are similar trends in mathematics where some people like an abstracted, axiomatized presentation and others like something more intuitive. I'm in the later group as are many others. I don't think either way is superior in itself, nor do people who learn from one approach or the other turn into better programmers.
- mixmastamyk 4y agoI don't think we can have one without the other. For example in Petzold's Code book there is a chapter about Boolean Algebra. In a following chapter, we then vastly simplify our previous circuits of logic gates, replacing them with other simpler ones. This happens after proving they are equivalent with our new found algebra talents. Imagine your computer being 3x (estimated?) slower and hotter without this advancement from the "propeller-head" pure-thought-stuff people. There are undoubtedly wins like this across the whole industry.
- 4y ago
- jpe90 4y agoBefore I read SICP I had used OOP, functional programming, and lazy evaluation to varying degrees. In school and independent study I learned how to use those concepts to write programs, but I didn’t really have a clear conceptual understanding of what they really are or how they work under the hood. I read SICP to learn more about lisp and was surprised to learn a lot about all of those concepts as well. It’s all explained very clearly and there are code examples you can toy with to wrap your head them. I found it such a gratifying book to read through. And I really regret spending time learning Haskell before reading it, so much needless head scratching.
- rbongers 4y agoI definitely agree about how it may appear to young programmers that they're casting magic spells. I had the fortunate experience early on of building my own virtual CPU and RAM, then I learned assembly, then C, then algorithms, then OSes, then about Unix. I'm not trying to toot my own horn, I've always been a little slow and struggled through this material. However, learning from the bottom up has granted me a lot of insight into how things work and an ability to learn pretty much anything software development related. SCIP has a different approach to "bottom-up" learning than I took but I think it still applies. Maybe with all the tools out there not every programmer needs to learn from the bottom up, but someone needs to learn how everything works to build good tools, and if you can't learn that from MIT, I don't know where.
- zozbot234 4y ago> I had the fortunate experience early on of building my own virtual CPU and RAM, then I learned assembly, then C, then algorithms, then OSes, then about Unix. I suppose what's missing from that experience is the reality of programming "in the large", where modularizing code and creating well-defined interface boundaries becomes quite critical. The easiest step forward coming from C would be learning something like Rust - or, historically, C++. This is when the broad high-level patterns and approaches that SICP discusses at length in a theoretical way become practically useful.
- inimino 4y ago> building my own virtual CPU and RAM, then I learned... Sounds like you know exactly where :-) Being committed to a project or goal for a long time, taking your time with the foundational material, seems to be the most direct path to mastery in any field.
- rbongers 4y agoThe problem is not the learning path doesn't exist, the problem is finding it and knowing if you should follow it. When you get started, you don't know what you don't know. That's why I say I got lucky... I somehow found this learning path and decided to follow it without really knowing if it would be useful. Yes, I think that dedicating yourself to any project for a long time will teach you a lot, but you can also end up with a lot of holes in your knowledge depending on the path that you take. For instance, the most common mistake I see people make regarding learning programming is focusing too much on specific languages and frameworks and never learning anything that could be called fundamentals. I suppose that's what this is really about. Fundamentals versus specifics.
- antipurist 4y agoI find it funny that the author dislikes "casting magic spells", and yet cherishes the book which states that we conjure the spirits of the computer with our spells. What I don't find funny is that people keep suggesting SICP instead of a much more digestible How to Design Programs — https://htdp.org/ https://htdp.org/
- inimino 4y agoThe difference is whether you are the one conjuring the spirits by writing your own spell, or whether you are the one casting the spells that others have npmed.
- zelphirkalt 4y agoI only looked at the beginning of HtdP, so I cannot say a lot about it and maybe that fact l, that Scheme was sort of new to me when I worked with SICP also had a part in it, but: I found SICP beautifully written as well. That John Locke quote at the beginning? I thought it sounds like a philosophical quote, and then I saw the name under it: "It really is by a philosopher! By John Locke! WTF!" and it fits the content of the book so perfectly. I did not get the same feeling at the beginning of HtdP.
- neilv 4y agoA few unfortunate things about software development practice lately being mostly plugging together components: * People make huge things out of often poorly-chosen components and frameworks. * People 'engineering' the system don't actually understand how it works. * Much/most of your time is spent figuring out a pile of library/framework bureaucracy that someone else created. Not even useful concepts that you are smarter for learning, just figuring out some muddled version of an old model, the particular forms of made-up incantations around, and discovering and working around the shortcomings of their design and implementation. Often you find the thing you're using is actually poor design and implementation, and you might feel stupider for having learned its bureaucracy. * This plugging together of components can be done well, and sometimes is, but it's also a little too convenient for developers who think software engineering is like turning in homework assignments in school. In which the goal is to get your homework (sprint task) past the grader (PR approved), and that's the end of it (what's analysis, planning, and architecture?). So you do Web searches of Stack Overflow (and maybe some Copilot open source laundering), to slap together some components, and no one even seems to expect you to know how it works. Where's the pressure to do software engineering? * Perhaps some of the churn of these components is due not to technical/business merit, but to the fact that putting the latest possibly-rising component on your resume can improve your marketability in an employment environment oriented around frequent job-hopping. It's a symbiotic relationship between people who spit out "new" components to plug together, and people who twist projects to put the new thing on their resume. That's not exhaustive; just a few off-the-cuff that are annoying this weekend. :)
- klodolph 4y ago> People 'engineering' the system don't actually understand how it works. The problem is that the complexity of systems is growing beyond the capacity for people to understand in the first place, and the solution is to make it possible to do meaningful work in systems where people only understand a part of it at a time. In a way, software engineering is catching up with the rest of the world, which already operates that way. When you build a skyscraper or a bridge, maybe you have a structural engineer who understands how concrete and steel work, and you have a geotechnical engineer who understands how soil and sand work. My personal observation is that programming has long attracted people who like the kind of absolute certainty that you can have in smaller programs, where the behavior of programs is known to a mathematical certainty. If you're careful, you can build larger and larger programs this way... but at some point, the program or system is too large, and you are forced to think about things in statistical terms. You have to accept that your program has bugs in it. Some people who are otherwise brilliant programmers are simply too uncomfortable with the jump from the certainty you have in small programs to the known uncertainty you have in large programs & systems. It used to be you could make a decent living working within the certainty of small programs, but nowadays you are going to have to plug things together.
- lisper 4y agoThis made me sad. Sussman is saying -- almost literally -- that MIT just threw in the towel on teaching actual understanding of how things work and instead went with treating engineering artifacts as magic black boxes that no one, including the people who created them, actually understands, and that this is OK. It is not just that no one does understand them, no one can understand them, and so we're stuck with them because if no one can understand them, no one can improve upon them. Which is, of course, a self-fulfilling prophecy.
- rtpg 4y agoI heard a story once, that for a while France was teaching math to kids from first principles. Like trying to teach about number sets before diving into other topics. It was hard and abstract. They stopped. Instead they do what most people do: they teach concepts with a lot of papering over of the details. Then, once people have a stronger grasp on things, they go into first principles. It’s easier to understand commutativity if you can do addition already! Similarly, you can teach people black box stuff at first, then dive into details. it’s ok to use a high level language before understanding how to run stuff on a machine. Let’s not forget something important: Python and Lisp are basically abstracting away the important machinery anyways! Sussman has said it himself, computer science is about computers the same way that astronomy is about telescopes. And of course it’s not like SICP is the only class all these people are taking. One intro class. Meanwhile people get to do fun and engaging shit while learning. And they will learn more stuff later!
- lisper 4y agoSure, but we're not talking about elementary school here. I think Python is a fine language for teaching first graders about programming. But this is MIT. If MIT students aren't expected to understand how things work under the hood, what hope is there for the rest of humanity? What I lament here is not the fate of 6001 specifically. It probably was outdated and in need of a refresh of some sort. What I lament here is the rationale that Sussman gives and apparently buys into, that the new approach is acceptable, and it's acceptable because treating things as magic black boxes is an inherent feature of modern engineering. No one understands, no one can even be expected to understand, and that's Just The Way It Is, and it's OK. Well, no, it's not OK. People can and must be expected to understand because the magic black boxes aren't actually magic. They were created by mere mortals not that long ago, some of whom went to MIT and read SICP. If SICP is dated (and it is) the thing to do is to update and improve it, not to discard it.
- markus_zhang 4y agoMaybe I'm not smart enough, but I consider building CPU from NAND gates, writing a simple OS for the machine and writing a complier for a C subset for it can do a lot more about de-mystifying computing. I tried twice to read SICP but I don't get the hype. I guess it's fine to not read it after all. Disclaimer: I still consider nand2tetris too trivial for the de-mystify work. A full project on the same scale of UTokyo's CPU project [1] is a lot better. Disclaimer: I only completed the hardware part of nand2tetris so I don't claim that I have done the CPU+OS+compiler stuff. But I do find it a lot more interesting than SICP. [1] https://www.is.s.u-tokyo.ac.jp/isnavi/practice01-01.html https://www.is.s.u-tokyo.ac.jp/isnavi/practice01-01.html
- ekidd 4y agoThe approach you describe is excellent, but it builds upwards from the physical foundations of computing. SICP builds from the mathematical foundations of computing (sort of). The end game is to take students from zero through: 1. Understanding several styles of programming (though most often in terms of "what fundamental operations does this language provide?"). 2. Being able to build an interpreter. 3. Being able to build a compiler. For a two term intro course, it's extremely agressive. I encountered it much too late to benefit much—I'd already been working on compilers at Lisp companies for a couple of years. But as an introductory text, it's a bit like the Feynman Lectures are for physics: probably too hard for almost everyone. But the right people, at the right time, will really love it.
- kayodelycaon 4y agoThat would explain why I never got SICP. I can’t follow the math.
- User23 4y agoDon't sell yourself short. The traditional mathematical guild has put religionists to shame with their penchant for obfuscation and ambiguity. Computing science math on the other hand is rigorous, concrete, and accessible to anyone who can, well, write a program.
- userbinator 4y agoIt could be argued that the industry does not want people to know too much of the foundations, because the knowledgeable are harder to sway with fads and superficial arguments or keep under control. They want programmers to become fungible "resources", while something like SICP espouses the complete opposite philosophy. That said, I think SICP preaches a bit too much about abstraction, although that's something a lot of programming texts do, and overabstraction is quite endemic in the industry even without SICP. The fact that SICP also became a meme --- which you'll notice if you search for images of it --- may be another reason why it seems to have a cult following. The whole "anime girls holding programming books" meme started with SICP.
- urthor 4y ago> They want programmers to become fungible "resources", Capitalism is a graph search problem linking supply and demand. Don't imagine otherwise, for one second. It's genuinely, EXTREMELY, easy to hire c++ programmers with knowledge of assembly. There's buckets lying around. > industry does not want people to know too much of the foundations Foundations of Engineering are: Evolution of Useful Things: How Everyday Artifacts-From Forks and Pins to Paper Clips and Zippers-Came to Be as They Are. Skunk Works: a Personal Memoir of My Years at Lockheed. The Unwritten Laws of Engineering. They're not the foundations of computer science.
- inimino 4y agoAre you agreeing here?
- hgsgm 4y agoWho do you think is "the industry", and why would they prefer to hire PhDs if they are afraid of smart educated people? How can you write that paragraphing trashing "industry" for not liking SICP, and then immediately segue into agreeing with them, and accusing them of being too much like SICP, while pretending you are superior? How can you make any sense out of what you wrote?
- inimino 4y ago
- whywhywhydude 4y agoComputer science is like Maths. Do you need to know real analysis and delta epsilon proofs to do calculus? It just amounts to gatekeeping if you are using an abstract and higher level course as an introductory class. Introductory classes should be fun and approachable. The Harvard CS50 is a good example - https://m.youtube.com/watch?v=YoXxevp1WRQ&t=101 https://m.youtube.com/watch?v=YoXxevp1WRQ&t=101
- inimino 4y agoIf the problem with SICP (with both authors teaching it) was that too many people were failing out, I would expect they would have mentioned that. The Harvard course welcomes non-majors and is part of a liberal education, it's not comparable to an introductory course for majors at a competitive engineering school.
- lambdaxymox 4y agoI know two people who worked through SICP. One of them had so much fun with it they worked through it twice cover to cover in their free time. In both cases they reported to me that SICP was quite a revelation to them, since Scheme is about as simple a practical programming language as one can get other than maybe stack languages like Forth. That is, while [un-|simply-]typed lambda calculus and Turing machines are simpler models of computation, I wouldn't exactly call them practical models of computation. In one case they said that it really gave them real purchase on what computation really means. That is, what is it really about when one strips off all the type theory, build tools, and dependency hell. My sense is that SICP is better left to after getting a couple years of experience doing computer programming to appreciate though for most people though.
- tobinfricke 4y agoHuh wow, I find this video a bit shocking. I took a course from GJS in 2020 and in my recollection his answer to this same question was a somewhat oblique and resigned "Well, the best language doesn't always win."
- inimino 4y agoSounds nearly the same to me, obscured by an added layer of organizational retconning.
- calf 4y agoIn college, SICP was the singular course that changed my mind about computing. Before, a math teacher tried to teach me C/C++ and I just didn't get why anyone would be interested in computer programs. SICP is more like how a mathematician would teach computer science. Thus for people with a AP math and/or physics background entering university (such as at many EECS or ECE departments that put CS together with Electrical Engineering majors), the LISP style formalism of functional programming and recursion / mathematical induction make a lot more sense. It's a gateway to the more theoretical parts of computer science as well. Whereas if someone is less motivated by mathematics and more motivated by wanting to write the next app or webpage, then a SICP style course would be a lot less meaningful. On the other hand, if I had started college with a course on C/C++ or even Java at the time, I would've disliked it and likely gotten turned off from studying computer science forever.
- b20000 4y agosounds like they are trying to compete with bullshit coding camps computer science education is not about doing something fashionable but about teaching the right fundamental non sexy skills.
- zelphirkalt 4y agoWhat I took from SICP is something, no one else and no other ressource has taught me and it has enabled me to start a long possibly never ending journey of learning. I will be forever thankful for having learned the lessons I took from it. I think I would be half the engineer I am today, if I had not read and worked through the part of SICP, that I did work and read through. What I use most of those in my software development: Avoiding mutation when affordable and feasible (which is often), proper abstraction barriers and modularization, thinking about functions and how to compose them and solve problems with them, instead of going "I heard a noun, I need a class!", how to solve problems recursively (although The Little Schemer did have a hand in teaching that as well), and some kind of idea of minimalism. Aside from all that, SICP has shown me a different way to learn about math stuff. It has shown me, that there is a way, in which I understand math better than in university lectures. That way is through computer programming. If I can write the code for it and explain what the code does, I usually can also understand the math.
- nequo 4y ago> there is a way, in which I understand math better than in university lectures. That way is through computer programming. Do you have examples of mathematical concepts that you developed an understanding of this way? It is not exactly the same thing but it reminds me of a 1986 interview with David Blackwell[1] in which he went into great detail about how computers helped his own mathematical learning: I have a little computer at home, and it's a lot of fun just to play with it. [...] Jim MacQueen was telling me about something that he had discovered. [...] He has an interesting algebraic identity. [...] Also, I had a conjecture that some stronger result was true. I checked it for some numbers selected at random and it turned out to be true for him and *not* true for what I had said. Well, that just settles it. [1] https://projecteuclid.org/journals/statistical-science/volume-1/issue-1/A-Conversation-with-David-Blackwell/10.1214/ss/1177013814.full https://projecteuclid.org/journals/statistical-science/volum...
- Jtsummers 4y agoYou may be interested in the ideas in Papert's book Mindstorms and the application of Logo to education through "microworlds". Given rules and systems to work within (or possibly to define themselves), students are given the opportunity to explore the systems and the way things interact. Most people only seem to remember Logo for its turtle graphics, which allows an exploration of geometric and (through the connection of geometry and algebra) algebraic concepts. But there were also microworlds for physics (dynaturtles) and others. ---------- https://dl.acm.org/doi/pdf/10.5555/1095592 https://dl.acm.org/doi/pdf/10.5555/1095592 - PDF of the book.
- easeout 4y ago> To me, it seems more like casting magic spells. Younger engineers using those libraries—almost always without understanding how they work—are just casting spells without any understanding of the magic behind them. Isn't casting spells one of the key metaphors of SICP, the wizard book? Concepts as objects, spirits controlled by their names, and abstraction barriers preventing a consumer from needing to know implementation details?
- inimino 4y agoYes, and SICP was the book taking you through the abstraction barrier. Toto showing you the Wizard of Oz, behind the curtain. The point of the bureaucratic approach is that how you use the spells together is more important than individual skill in making your own spells. This is more comfortable to bureaucrats than outright talk of wizardry, where clearly a wizard can do things that a bureaucrat cannot even explain.
- runevault 4y agoFeels like we as a society just want to skip to the end. Fundamentals are how we got here and we still need them to keep growing. An example related to a lot of the debate I'm seeing in these comments: Anytime anyone talks about wanting to build a their own engine to build a game, the majority of replies boil down to basically "you're an idiot just use an existing engine." There is nothing wrong with using one that already exists, but we need to stop discouraging people from/pushing people away from understanding the core of ideas, and start making it easy to find that path and explore it. We need future generations who are equipped to start from first principles and explore in directions prior generations never thought to if we are to continue to advance.
- nextos 4y agoThis is sadly everywhere now, e.g. "data scientists" are just people trying to do a statisticians job without any formal background on probability theory.
- runevault 4y agoI have a friend who got a real degree in data science and we talk sometimes about the people on reddit who ask the questions that boil down to EXACTLY what you are talking about. I just don't track that space as closely so mostly hear about it second hand.
- effie 4y agoThat's exactly how I feel about this fake term. The job description should be something like "data analyst". Very little people doing that reach the level of scientist. You need to publish useful research and get feedback on it to call yourself a scientist.
- inimino 4y agoThere's an "intellectual immune response" effect, when a group that asserts that you don't need to know something meets someone demonstrating the passion to learn it.
- 4y ago
- dang 4y agoWe changed the url from https://irreal.org/blog/?p=11127 https://irreal.org/blog/?p=11127 to the source it points to. It's worth reading too!
- timbit42 4y agoUniversities should be focused on teaching programming, not languages. Scheme is excellent for this. Instead of switching to Python, they should start out with Scheme and switch to Python at some later point.
- gabrielsroka 4y agoThe original video is from 2016.
- trieste92 4y agoI read some of SICP in my second sem of CS undergrad, and in hindsight it provided a really nice summary of stuff to come later like synchronization Also the exercises are very well done and some of the harder (yet doable) ones made uni workload seem incredibly easy in comparison But personally not really on the lisp bandwagon, not out of dislike but because because the syntax feels too unnatural compared to C and the lack of practical applications
- sriku 4y agoI don't get the feeling that the next gen of programmers (if the species isn't extinct) won't have much to learn from SICP ... and I'm saddened by that. In particular, trying to introduce some programming to kids seems like a herculean task since they've seen gaming nirvana already - like how do we deal with "when will I be able to make a game like Minecraft?" when 2D sprites and gaming logic do not spike any interest? It's like a computer is a laboratory for doing mathematics and mathematics needs to move from proofs towards empirics to be of interest ... vague thoughts, but yeah.
- Liberonostrud 4y agoPeople should learn assembly first. Lisp is not how computers really work. You will learn some terrible habits that will kill your RAM by sticking to Lisp functional principles instead of procedural principles.
- Ulied 4y agohttp://YouTube http://YouTube
- muyuu 4y agoI see the end of the SICP approach (not just SICP itself) as the canary in the coalmine for the end of University education itself for technical fields. Killing SICP is the admission that the artist/creator-engineer is dead and the technician/plumber-engineer is the only engineer that matters for the economy. IMO University itself is failing that very utilitarian litmus test if what you need is people with piece-wise qualifications that can be as easy to swap out as humanly possible, then there are already existing models of education providing just that better than University degrees. People are paying top dollar for stuff that can be done much better with perhaps a combination certifications and online programmes. Much more efficiently, cheaply, and with just as much access to the same information, teaching manpower etc etc. If I were a teenager now rather than back in the 90s, I honestly wouldn't know what to do. Degrees remain important as CV items and have a lot of vestigial traction, but they're terrible value as simultaneously their price has shot up and their nominal utility has plummeted. You are forced to make a very risky call as a teenager as to where will things be in 4-5 years time in what you expect your discipline to be in the medium term.
- epolanski 4y ago> Degrees remain important as CV items and have a lot of vestigial traction I really don't think that's true anymore besides for starting. But once you start, the degree bears only some weight when aiming for higher roles that hold a political status/value. I agree with the rest of your post, but I also think there should be a wider distinction between a degree in computer science, software engineering and "computing". E.g. in Italy we have a degree for all three: computer science leans more heavily on the side of theory and math, software engineering is mostly an engineering degree with more programming-related exams and computing (which we call "Informatica") is the one which leans more than the rest on the practical side of programming while having much less exams on the theoretical and engineering side.
- anthk 4y agoHere in Spain it's "ingeniería informática" it's what is means. a bit of EE, huge on CS, and a good chunk on math. No software engineering. The software trade degree it's another thing, and legally it can't be called an engineering degree.
- Nebasuke 4y agoOne of the worst things is that the great online course for SICP (6.001 iCampus) is now also retired, and MIT is not willing to recover it. I remember seeing a message that their server crashed and they were not able/willing to recover it, but that seems to have disappeared as well. It's really sad as this is the course that actually made me love programming.
- revskill 4y agoSICP to me is more about LISP though. If it uses Pascal, or any "basic" programming languages, than it's practical for further generation. Why ? You want to implement yourself without any "advanced toolits" from LISP.
- doublepg23 4y agoAs a Zoomer who grew up with Python being a dominant teaching language I don’t think I’ve even heard Pascal mentioned. I’ve even taken classes in QBASIC (which was replaced with Python…)
- revskill 4y agoI lost interest in that course when they said: "So we need blah blah from LISP because LISP is bleh bleh". Lol, why MUST i need LISP to learn basic concepts ????? The authors got something wrong from beginning i think. Basic concepts should be taught and built from SCRATCH !
- criddell 4y agoThe book doesn’t stop at basic concepts. A Lisp-like language was chosen because it allows code to be manipulated like data (homoiconicity). If you aren’t interested in the interpretation of computer programs part of SICP, then this book isn’t for you. If you are interested in the ICP part but Scheme doesn’t work for you, check out Crafting Interpreters. It’s truly excellent and you can read it for free at the author’s website.
- revskill 4y agoI don't see those 2 things are related though: LISP vs Interpretation of computer programs. That's the issue here. See ? The book title has no mention on LISP, it's to teach Interpretation of computer programs right ? Why do readers need to learn something else (like LISP) ?
- 4y ago
- jshaqaw 4y agoI think there are (at least) two types of learning modes. One way is to teach a bunch of implementation up front and save the “why this all works” for years down the line. Some brains like a build up from basic principles. My brain works the second way. I didn’t “get” math until well into my adult years when I started with foundations (ala New Math) and everything else just clicked into place. The way we generally teach math in the US (I can’t speak globally) is sort of the worst of all worlds. Kids spend inordinate time crunching through arithmetic algorithms without any particular deep understanding of what all the symbol manipulation means. Well in 2023 you are going to let a computer do all of that number crunching. There is very little intellectual or practical advantage in grinding our fussy long division problems by hand. I get that we sort of tried starting with set theory and a nation of people who said “what nonsense this isn’t how I learned math” rebelled to the degree that New Math is now just a joke punchline. But we are still teaching math as if computers/calculators don’t exist in the early years and that’s just laziness.