|
|
|
|
|
by humdumb
4993 days ago
|
|
"That's progress." Yes, but not in software. It's the hardware that's improved. So the sw can be sloppy and inefficient and most people won't notice. Hardware has improved. Software has not. This is hard for some folks to accept. But it is a plain truth. Take away the added power of new hardware and what's left? You wouldn't want to know. It is easier to do the same basic computing tasks as in 1984, with less effort, but it's not easier to exceed what you could do in 1984 because you have better software. It's because you have better hardware and can afford to be sloppy. 2-3 lines of perl/Python but how many lines are in the binary or the libraries? (e.g. what if you discovered there was gratuitous use of backtracking in _all_ perl's regex, even for the simplest matching; who would care?) There is no Moore's Law for software. To put it another way, most of the computing tasks being done today are the same ones (albeit on a different scale) and use the same methods (or even lazier ones) as in 1984. Hence the example of spellcheck. It's one of many tasks performed in 1984 and today and it will be performed in the future. It's easy to mistake advances in hardware (more power) for advances in software (novel and more efficient approaches to problems). |
|
In other areas people are doing things which weren't even possible on old hardware, think about 3D graphics. Real time lighting approximations are doing really clever stuff, just look at the latest unreal engine demo. If you put these into old hardware you would get the same quality render in less time. Modern ray tracing engines are using more sophisticated algorithms, giving better results in less time.
Beyond the algorithmic work optimising for modern hardware is different to old hardware. An optimal program for old hardware isn't optimal for modern hardware and vice versa. Now if a program needs data from RAM you have to wait hundreds to cpu cycles. Even accessing the L3 cache, which is in a modern processor chip, takes about 75 cycles on modern chips. So you can recalculate things and find your program runs faster.
Similar things happen with branches, I was looking at some GPU shaders recently and there was a simple raytracing loop (parallax occlusion mapping), the obvious way to do it is to stop when you intersect the surface. Instead it is actually faster to always run the loop for 10 steps because this removes the branch. So you do twice as many loop iterations on average but your code runs faster.
Of course you can afford to be sloppy as well. People are 'sloppy' so that their code is faster to write, easier to read and less likely to have bugs (3 lines of python is pretty likely to be easy to read and bug free). I would say software is advancing in many different ways, which hardware has enabled to happen.