8 ms·
This change is necessary because young people aren't interested in the fundamental abilities of computers, instead they're only interested in the applications.
by veltas 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. 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.
- hgsgm 4y agoYou misunderstood history. "young people aren't interested in the fundamental abilities of computers, instead they're only interested in the application". Young people back then were the same, but back then applications were far simpler and were built using the fundamentals of computers.
- veltas 4y agoI also agree with this. You have also misunderstood me.
- avx56 4y agoYeah, you can always ship a shitty SaaS or plug libraries you don't understand into each other and still make a lot of money. But you honestly cannot do much more than that if, say, you don't know the difference between the stack and heap. Statsd is like ~4000 lines of code, which is absolutely tiny; it's a trivial codebase. You can't write fast JavaScript if you don't know how arrays are represented in memory. You can't optimize SQL queries if you don't know how a database works. Hell, you can't even create good code in general if you don't know how to compose functions properly. The countless layers of abstraction may be useful, but without them you are basically stumbling through your day and hoping everyone else can be smart enough to let you continue to not learn anything.
- simplotek 4y ago> Yeah, you can always ship a shitty SaaS or plug libraries you don't understand into each other and still make a lot of money. What you're failing to understand is that the SaaS or plug libraries are not shitty. They might even be better than anything someone who reads SICP like the bible can possibly put together. Why? Because they focus on the right level of detail and abstraction instead of wasting time and effort on irrelevant and useless details. And they deliver it far faster. I repeat: the StatsD daemon is written in Node.js. it's a >100MB Node.js application to receive, aggregate, and send UDP packages. The StatsD daemon is perhaps the most popular metrics sidecar out there, and no one cares it's not a 1MB C app. > Statsd is like ~4000 lines of code, which is absolutely tiny; it's a trivial codebase. Don't you get the point? It's a Node.js app that took a few lines of code to out together to handle UDP packages. Writing the same thing in C would not be hard and it would be far more efficient, but it would be entirely pointless because slapping together a Node.js application performance wise is already good enough. What does this say about the cargo cult beliefs of SICP fundamentalists ? > You can't write fast JavaScript if you don't know how arrays are represented in memory. Sure you can. You just hear that arrays are faster and use those not bothering with any irrelevant low-level detail. And who exactly advocates using JavaScript for a UDP server and mention performance needs with a straight face? > You can't optimize SQL queries if you don't know how a database works. Don't you get the point? The point is that you don't need to waste your time bothering with performance tuning if your goal is designing a working system. Bothering about irrelevant details like that is a waste of time. Decades ago someone smart already stated that premature optimization was the root of all evil. The first rule of software optimization is "Don't". And here you are trying to argue that being bothered about low level details is relevant for the sake of optimization? Don't.
- logarhythmic 4y agoOf course it's not strictly necessary to learn the various levels of abstractions in computing. But some people just do it out of curiosity and wanting to know how things work from the ground up. These people typically tend to be smarter and better, but it's true that not everyone needs to do this to have a good career and make lots of money.
- simplotek 4y ago> But some people just do it out of curiosity and wanting to know how things work from the ground up. And that is perfectly fine. Some people also get a kick out of learning Esperanto or Klingon, but that doesn't mean those are critical subject areas that you need to to excel in any professional domain.
- tremon 4y agoThis change is necessary because young people aren't interested in the fundamental abilities of computers Respectfully, then these young people shouldn't be attending MIT. You go to a top university to learn about the fundamental principles; if you just want to build stuff by assembling components, go to a trade school.
- veltas 4y agoEach generation has different motivations, regardless of our ideals. They can still ultimately produce many people who will care about the same things you do.
- urthor 4y agoThat's not how tertiary education works. University is where students choose the classes they want to take. Students are 100% responsible for their learning. They vote with their feet. Faculty must JUSTIFY why the knowledge they teach is relevant to undergraduates. To students, and increasingly, the external advisory board of the faculty.
- inimino 4y agoTo the administration, yes. Not to the students (except perhaps morally). The University decides what you are required to learn to get the credential, the wider society determines what the credential is worth, and influences the institution to produce more or fewer graduates of the various specializations. The students get to pick which institution they go to and which credential they will try to get, and then they must learn the material that is required. The computer science department is not trying to get students to "vote", in fact their interests generally align with having fewer, but more promising, students. The institution, to the degree that it desires revenue, generally desires more graduates, because each pays tuition, but as highly qualified graduates as possible, so as not to tarnish the brand.
- randcraw 4y agoI agree, elite schools (like MIT) have traditionally grounded their curricula upon a basis set of essential principles like "great books". At MIT, those were calculus through diff eq, physics, and engineering basics like statics and dynamics. However, since around 1990, I suspect high school AP courses routinely overlap with said principle courses. So dropping MIT's four course intro to EECS probably became unavoidable after so many freshmen with AP course credits expressed frustration that taking those four EECS courses ("the MIT way") duplicated courses they'd already taken for credit in high school.
- urthor 4y agoAs said young person. The issue is: I truly, truly, love programming and working with computers. I truly, truly, cannot see myself writing software in a systems programming language, ever, for the rest of my career. I'll only work in GC languages. I love reasoning about code, logically. I'm studying compilers/mathematics in night school, that's how much I love it. But... I learnt Rust, learnt assembly. I set up a Raspberry Pi Pico as a hardware debugger as a fun project. That knowledge's usefulness is... tenuous. I appreciate the assembly mental model, but it's only a rough mental model. I truly, truly, cannot see myself using non-garbage compiled programming languages for any of my future project ideas. Knowledge of the underlying machine is irrelevant. Same as knowledge of the electrical resistance threshold of your transistors before a bit flip. Computing is changing, fast, as we ascend layers of abstraction at an extraordinary pace. Most knowledge is highly specialized to your level of abstraction. SICP/functional programming HAS to justify itself as relevant to each level of abstraction.
- mixmastamyk 4y agoI had a similar trajectory, but would not describe that learning as useless or irrelevant. That knowledge informs my every decision, and understanding hardware or algorithms is why I'm sometimes able to find a better technique or abstraction for a project than other folks. Plus it's just more satisfying.
- inimino 4y agoThis is the right perspective, and you should continue to pursue your own projects using the languages that make you most productive. Don't study what does not interest you. The problem is if you change majors to engineering, the first courses are not going to teaching you what is exciting and flashy, they are going to teach you the very boring, mostly unmotivated maths that you need later to build bridges that won't collapse. SICP represented the engineering approach, by starting from first principles (more logical than mathematical, but appealing for similar reasons) and then proceeded to an understanding of interpreters, compilers, register machines, and so on. Giving up on SICP meant giving up on the engineering approach which produces programmers, to the software engineering approach, which leaves out the hard parts of engineering and produces software users, who plug together libraries that are written by others. > Knowledge of the underlying machine is irrelevant. As you look back on your assembly experience later, you'll realize this is false.
- canjobear 4y agoSICP is the opposite of starting from the bare metal.