3 ms·
I had a fun conversation with my brother the other day. He was working on an R script (given to him by his lab) to perform some data collection. The script was
by bern4444 5y ago
I had a fun conversation with my brother the other day. He was working on an R script (given to him by his lab) to perform some data collection. The script was no longer usable and he had to rewrite some parts. He was annoyed.
Most of the time, software is written until it works just well enough to be just reliable enough to deliver value. And then abandoned. Engineers move on to solving the next problem using that previous bit.
We only go back and edit that previous bit once we get to a point that the new thing becomes limited by that previous bit. That is to say, once we encounter a fundamental issue of the old bit.
We can't write 'perfect' code today to build on in the future. We have no way of knowing what will be built on top until it's built! At which point we discover the fatal flaws. And then go back and rewrite. Or design a new language/framework/tool etc that avoids those issues. So of course this is the pattern.
Separately, engineer's have become end consumers for software. And that software is produced by other engineers, who, are also using software.
End consumers may not care about how software is made (though some certainly do, especially once they notice bugs, degraded performance etc caused by technology decisions etc - see 1Password's plan to switch to Electron).
But what's the alternative? How could we otherwise avoid this and all the other problems Ryan points out. What is the alternative? Endless rewrites of existing layers with no progress made?
Editor configurations, file structure, variable names etc don't affect end users. But they help engineers who help end users.
Lots of progress is made to 'simplify' processes. But of course, those simplifications create their own new things that have to be learned, along with their own issues. And those new things are usually built on those old bits.
It's easy to download a docker image today and with a single command spin up a React project, running its own databases, and express server and not have to worry about configuring paths, installing dependencies (the right way), configuring ports etc.
But now we have to know about Docker. And Docker itself is built on those old bits.
If there's a better solution (besides the pedantic write perfect code) I don't see it. But I'm all ears.
- 6510 5y ago> We can't write 'perfect' code today to build on in the future. We have no way of knowing what will be built on top until it's built! We have a very good idea what will be built on top compared with the idea we had 20, 40, 60 years ago. At some point we will just have to start from scratch.. again... and again. The frequency will decline tho.
- salawat 5y agoEver heard of the Waterbed principle? Every problem has a baseline level of complexity beyond which it cannot be simplified further. Thus by simplifying one aspect of the system, you necessarily increase complexity in some other aspect. This shows in spades in Computer Science. At the end of the day, you have an address space. The things you can populate that address space with are either instructions or data. You are populating that address space with the right patterns to get useful value out of the underlying machine. Everything above that. Abstractions. Languages. Tooling. Mental models. Are best collected (in my opinion) as tools for a toolbox (filling out your workspace horizontally), but not piled up too high on top of each other. Once you start piling abstraction on abdtraction, it gets whack. Real fast.
- LAC-Tech 5y agoI feel like that's a fallacy. Sure if you stripped away all needless complexity, you'd get to incompressible water. But people rarely do that.