Remix.run Logo
imglorp 2 days ago

This is closely related to why Sussman and Abelson stopped teaching SICP: it is not possible to engineer software any more because systems are too complicated to completely understand and abstractions hide too many behaviors. So now we do "programming by poking" to understand what the system does instead of making it correct by construction.

http://lambda-the-ultimate.org/node/5335

We just tinker. That's all we can do to get stuff done.

tptacek 2 days ago | parent | next [-]

Helps to have more of the quote:

He said that programming today is “More like science. You grab this piece of library and you poke at it. You write programs that poke it and see what it does. And you say, ‘Can I tweak it to do the thing I want?'”. The “analysis-by-synthesis” view of SICP — where you build a larger system out of smaller, simple parts — became irrelevant.

mwcampbell 2 days ago | parent | next [-]

Shouldn't that make us want to fight to simplify our software stacks to the point where we can do analysis by synthesis, building from simple, well-understood parts, again?

guhidalg a day ago | parent [-]

You can certainly do that if you restrict software to be a mathematical artifact instead of an executable running on one of 3 kernels with different APIs and behaviors, let alone the mountain of dependencies your code will build and link against.

The reality is that the machines we write software for are complex, and trying to abstract it away and simplify it will introduce more abstractions that someone has to understand and deal with when they inevitably leak. It's not all bad, all this shit we're writing makes a lot of money.

HPsquared 2 days ago | parent | prev [-]

We've gone from synthesis to distillation.

pwndByDeath 2 days ago | parent | prev | next [-]

Software is the one discipline we can have perfection. In every other engineering there are tolerances, unknowns we have to yield to nature. In software we are god. We're just a lazy and stupid god.

Anecdotal, I had a coworker working on a new feature in a huge code base. I was trying to ignore the pseudocode planning they put on the board. After a moment of frustration I wrote down 6 conditionals that simplified what would become hundreds of new lines, to those 6 statement, and capture a few more corner cases they had not worked out yet.

Months later I got a green light on a total overhaul of the larger code base and we turned a massive code base into a fully automated and effectively bullet proof distributed system because I took the time to apply engineering principles to.the problem. The code wasn't always the most proper (I did things downright sinful) but the system was organized like an engineering project with interdependent subsystem instead of a rube Goldberg kludge of new.function on old. That overhaul too less time than any of the prior incremental feature updates prior.

api 2 days ago | parent | prev | next [-]

There have been serious efforts at software engineering, like the OOP movement in the 1980s and 90s to construct software very methodically.

Programmers hate it and rejected it.

To be fair, it does tend to create its own pathology. Instead of a layer cake made of congealed spaghetti, you tend to get over-engineering.

https://github.com/Hello-World-EE/Java-Hello-World-Enterpris...

Software engineering leads to software over-engineering because unlike in physical material engineering there is no capital or material cost to push back against complexity. You can just add things, and add things, and add things, forever, and it costs very little (a bit of RAM and CPU but that's cheap).

I have this weird hypothesis that part of why methodical "correct" software engineering fails is that it succeeds. It is able to manage complexity, which allows complexity to grow without bound. A mountain of ugly shit will start crashing in mysterious ways if it gets too complex, which has the virtue of limiting complexity.

A root problem is that programmers tend to add complexity, not remove it, and the incentive structure of the software business tends to encourage this. Each new bit of complexity or layer is something you could build a business around, or a feature you could sell. Nobody pays for simplicity. It has value, often massive value, but it's not intuitive. In what other domain would you pay more for the absence of something? This would make sense in software since simplicity is harder than complexity, but it feels weird and wrong.

porridgeraisin 2 days ago | parent | next [-]

> I have this weird hypothesis that part of why methodical "correct" software engineering fails is that it succeeds. It is able to manage complexity, which allows complexity to grow without bound.

Interesting thought that. Makes a lot of sense. Will remember it the next time I randomly have a train of thought about software complexity on the bus... Am I normal? does everyone here do that? Of course outside hackernews this is a hopeless question.

mwcampbell 2 days ago | parent | prev | next [-]

> there is no capital or material cost to push back against complexity

On a thread about software bloat and inefficiency, @josephg once speculated about an alternate universe where Moore's Law stopped decades ago. I've kept thinking about that. Unfortunately, I kept coming up with counterfactuals where important things like accessibility weren't as advanced or (relatively) widespread as they are in this world.

spookie 2 days ago | parent | prev [-]

Look at ECS and game dev. Some may say games are just products, yet some real engineering is done in some places.

api 2 days ago | parent [-]

Good game dev shops tend to have some very good programmers in them. Game dev has pioneered ideas like data oriented development, which are not suitable for everything but are cool.

Marshferm 2 days ago | parent | prev | next [-]

Which means software is trapped behind the evolutionary lens. And without a direct connection between goal and method, it's like an out of control path to extinction.

kjkjadksj 2 days ago | parent | prev | next [-]

If that is the case any biological engineering is also impossible since no one understands the full system.

BeFlatXIII 2 days ago | parent | prev | next [-]

Software as science.

uvaursi 2 days ago | parent | prev [-]

I’ll stick my neck out and say SICP has never been relevant to me. I’ve tinkered from embedded, to OS, to databases, to desktop applications, drivers, compilers, web applications, and all sorts of shit inbetween when I’m not reversing some archaic binary compiled in a pre-standard C++. I’ve done both idiomatic programming in a language as well as applying idioms from other languages that I liked. I’ve turned C# into Lisp because it couldn’t do what I needed it to do. I read through ARM opcode docs while I’m daydreaming of writing Ruby.

When I looked at SICP I saw one thing: an introduction to “thinking about programming” for people who will have to re-learn everything and will maybe use a few things here and there. The fundamentals matter but the application is the “everyone has a plan until they get punched in the face” phase of actual learning. There are much better ways to go about studying and learning and I found SICP lacking, among other course work that I think is taught backwards and makes it hard to reason and apply.

Read “Great Programmers” by Bram Cohen. The wisdom is there, but it’s lost on people.

Just my 2c.