5 ms·
I think before making any broad statements here I'd want us to be clear about what it means to completely understand something. I was once asked the classic int
by inimino 4y ago
I think before making any broad statements here I'd want us to be clear about what it means to completely understand something. I was once asked the classic interview question about what happens when you type a domain and hit enter in a browser, and my answer (which I attempted to tailor to every level of understanding in the room) was good enough that the co-founders met me at street level and I had an offer before I could get 20 steps away from the building. Could I tell you what's going on on a line of code picked at random from the browser I'm using, or any random library it depends on? Much less likely. But do I understand, for example, why and how the DNS works? Yes.
Arguing against (parts of) modern civilization is the only thing that might improve it.
SICP is about abstraction, that's where the book starts.
Science and investigation is hard to teach, indeed, but if you start with a platform that is inscrutable and unreliable, you're not going to be doing as much science.
Look, I'm not saying poking at libraries, or programming by way of SO, NPM, and ChatGPT is bad. I'm just saying that if you think that's the scientific way, and the way advocated by SICP is less scientific, then I think you should re-check the steps of your reasoning, because I'm pretty sure that's not true.
- kilgnad 4y ago>SICP is about abstraction, that's where the book starts. abstraction is a simple concept. Everyone understands it. SICP goes deeper then that but it doesn't explicitly say it. What sicp is about is abstraction from the ground up. Every entity in your program is essentially modular and re-usable unit. This is opposed to procedural programming where a list of procedures isn't modular due to mutating state. Though even in the traditional style of programming, abstraction can still be done. You can encapsulate both the procedures and mutating state into modules. This concept is well understood. >Science and investigation is hard to teach, indeed, but if you start with a platform that is inscrutable and unreliable, you're not going to be doing as much science. Unreliable? They used python. Python is pretty reliable. More so then C++. Python is definitely inscrutable but not much more inscrutable then scheme. What you can do in scheme you can do in python. What you can do in python, you can't necessarily do in scheme. It's the restrictiveness of FP languages where the modular composition pattern starts to arise. >Look, I'm not saying poking at libraries, or programming by way of SO, NPM, and ChatGPT is bad. I'm just saying that if you think that's the scientific way, and the way advocated by SICP is less scientific, then I think you should re-check the steps of your reasoning, because I'm pretty sure that's not true. The way advocated by SICP is not scientific. It's more logical and mathematical in it's approach. You start off with primitives (axioms) and you build theorems from the primitives. Modern programming is the other way around. Top down. You have a complex library with shitty arcane documentation then you have to constantly try things out with it and poke at it to get it to work properly. This is indeed science. You make a hypothesis and you test, the result of the test falsifies or confirms your hypothesis. It is extremely hard to formulate a efficient hypothesis and sometimes hard to come up with a way to easily test it. On the other hand FP style programming while beautiful is significantly easier then trying to decode a blackbox.
- inimino 4y agoSICP starts with abstraction, and gets there via closures, which are an abstraction that encompasses and goes beyond everything that OOP can do with regards to encapsulation. You can do as much mutation as you want in Scheme, SICP uses this to explore some ideas. It does take a primarily SSA or non-mutating approach, but it's a far cry from hairshirt-wearing pure FP. I mean, the book has you simulate a register machine. It's not afraid of mutation. Python is fine, and if they used the Scheme-like subset of Python, it'd be a similar book. But they picked it (the committees that Sussman mockingly describes as doing the things committees do) because of the libraries. So the idea is that you'll be doing "science" on libraries, which replaces (in the 90s) having students reading man pages (look how out-of-touch Sussman already sounds here! nobody reads man-pages anymore, now SO is preferred, it being better to get a solution than to consult a reference). Sussman is not praising the experimental approach, where you need to probe your libraries like a science experiment before you can use them, where now you need to do science before you can do science, he is mocking it. People using shitty libraries with shitty documentation, and building systems on top of these foundations, are doing science that didn't need to be done, solving problems that didn't exist before those choices were made. It's frustrating work that gets in the way of real work, that is, work that engages with the complexity inherent in the domain. It's an inefficiency that is self-imposed, not so much by the individual programmer, but certainly by the industry as a whole deciding to go in this direction.
- kilgnad 4y ago>Sussman is not praising the experimental approach, where you need to probe your libraries like a science experiment before you can use them, where now you need to do science before you can do science, he is mocking it. He neither praised or mocked it. He just stated it's the status quo, and he quit teaching SICP because it was no longer relevant. If he mocks the science approach I'd imagine he'd continue teaching the course. >People using shitty libraries with shitty documentation, and building systems on top of these foundations, are doing science that didn't need to be done, solving problems that didn't exist before those choices were made. It's frustrating work that gets in the way of real work, that is, work that engages with the complexity inherent in the domain. It's an inefficiency that is self-imposed, not so much by the individual programmer, but certainly by the industry as a whole deciding to go in this direction. This is the only direction it can go because as frustrating as it is, it's BETTER then building from scratch. You can't hold a job without using libraries this I guarantee you, if you're building all your shit from language primitives then you're not going to employed for long. >SICP starts with abstraction, and gets there via closures, which are an abstraction that encompasses and goes beyond everything that OOP can do with regards to encapsulation. You can do as much mutation as you want in Scheme, SICP uses this to explore some ideas. It does take a primarily SSA or non-mutating approach, but it's a far cry from hairshirt-wearing pure FP. I mean, the book has you simulate a register machine. It's not afraid of mutation. SICP doesn't go beyond OOP at all. It's all abstractions that can be done with OOP languages. SICP overall teaches restrictive patterns of FP to promote the math like programming style. Yes it does mutation but that's not the main theme. Closures aren't a big deal either, OOP languages have lambdas now and the pattern is more or less isomorphic to object instantiation.
- thfuran 4y agoDid you get as far as discussing what's happening with regard to the electric field near the gates of the transistors as they're switching or did you, perchance, skip a few levels of abstraction that you or the interviewers don't understand especially well?
- inimino 4y agoI kept my answer to about five minutes, so no to the transistors, although I started with a switch closing in the mouse or keyboard, so I was able to give some sense of a lower level.