4 ms·
>* People 'engineering' the system don't actually understand how it works. This is not unfortunate. This is literally the only way to manage complexity. You ca
by kilgnad 4y ago
>* People 'engineering' the system don't actually understand how it works.
This is not unfortunate. This is literally the only way to manage complexity. You cannot hope to understand everything.
I think the course in its old form is good. But what sussman says is legit.
Software engineering is now more of a scientific exercise of testing existing structures then it is an axiomatic construction from primitives.
In fact this is how ALL of society works. Specialists each construct their own universe and nobody truly understands everything as a whole.
- thfuran 4y agoWell, theoretically one could instead expand the engineers' capacity for understanding, but that seems to be harder.
- kilgnad 4y agoWhat do you mean expand? All brains have a upper limit in memory and capacity to understand things. If you exceed this limit, there's nothing that can be done short of science fiction cybernetic brain augmentation.
- inimino 4y agoDo you think that, as an industry, we're in danger of hitting this theoretical limit?
- kilgnad 4y agoIn danger? We already hit the limit, and we're waay past it. Tons of software we produce is so complex it already has no hope of being fully understood by one man. Look at the operating system you're using to read this! It's not even a software thing. Society itself is segmented into specialists. Carpenters specialize in wood, they don't need to understand blacksmiths and vice versa for blacksmiths. Why did society segment itself this way? Because the body of knowledge and skills of each trade is so complex that few can fully master more then a single trade.... This occurs simply because our brains aren't smart enough.
- inimino 4y agoAs an industry we are capable of producing software that is completely incomprehensible to anyone, yes. That is not the argument. You haven't demonstrated that this is a good idea, or that there isn't a better way this software could have been created. The division of labor does not have to be an infinite regress, in fact it cannot, which was obvious to Smith. How many different trades should replace the one that SICP or other fundamentals-first approaches can prepare you for?
- kilgnad 4y agoYou wouldn't be able to reply to me if it wasn't a good idea. The amount of software just to transmit your words to me and others is already too complex for anyone to completely understand. It's not just software most of the technology you use in your life is already are too complex for you to understand. Modern civilization is built on abstraction. If you think there's a better way, then you'd be arguing against modern civilization which is a different conversation all together. The thing that replaced sicp is not multiple trades and skills. There is one skill that functions as replacement. Rather then constructing programs from primitive axioms you employ another skill. Science and investigation. You poke and experiment with a library until you bend it to do what you want. It's a hard course to teach or even design though. How do you teach science/investigation vs. the principles of first order logic? The later is straightforward the former is not. Still, even though it's more elegant and straightforward the later subject is much much less relevant to what a modern software engineer does on the job.
- inimino 4y agoI 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.
- zelphirkalt 4y agoWith more understanding one has more potential for optimization. And I don't mean performance or memory. I mean conceptual optimization. Reducing a solution of a problem to the minimum amount of concepts needed and finding a set of correct concepts to use in the solution. Once such a set is found, one might not need to think more about their details. The beauty is, that one could! Provided, that those concepts are implemented in the same clean minimalistic ways, understanding them is possible as well. When one does not understand the details and instead just pokes around in the code "until it works", one will forever be blind for that kind of optimization and the solution created tends to have leaky abstractions and become even less composable when trying to use it to solve future problems. Reusability is reduced and we keep reinventing things over and over, but not getting a clean version out of it. This is part of why a lot of software we have is so brittle and resource hungry. We do not bother with proper understanding enough and cluelessly throw together balls of mud. EDIT: On a second thought: Software engineering should not be like sciences in the way that we poke the "system" and see what happens. Why? Because sciences only do this, because the world existed before humans existed. We have not made it and are are inside of it. We have no choice but to poke and try to figure it all out. With computers this is not so. We have build these machines. We can and should understand what we make them do.
- kilgnad 4y ago>With more understanding one has more potential for optimization. And I don't mean performance or memory. I mean conceptual optimization. Reducing a solution of a problem to the minimum amount of concepts needed and finding a set of correct concepts to use in the solution Except what I'm saying is that human brain has biological limits on how much and what it can understand. Eventually a system can become so complex the only way it can be developed is through the efforts of multiple people specializing on specific components. >When one does not understand the details and instead just pokes around in the code "until it works", one will forever be blind for that kind of optimization and the solution created tends to have leaky abstractions and become even less composable when trying to use it to solve future problems. For a sufficiently complex system This cannot be Avoided, simply because the system is too complex to be fully understood by a single person. I am 100% talking about conceptual optimization.