Exactly the problem. If programmers still wrote efficient code we wouldn't even need these systems with gigabytes upon gigabytes of RAM. It was a negative feedback loop that brought us here in the first place.
- Systems get more RAM
- Programmers can write lazy due to more RAM
- systems need more RAM because of bad programming
- More RAM = programmers don't need to be efficient
It's not so much that programmers are lazy, it's that our expectations are getting very high. All of us are sitting in front of systems that, were they magically transported back 30-40 years, would be super computers. The modern PCI-e bus would compare nicely to the advanced I/O of an early CRAY supercomputer.
The difference is that we can do things that our parents could only dream of. We can manipulate fully animated 3-D objects in real time - on software systems that were developed in a few years or less. It wasn't that long ago that you had to have an SGI box to do stuff like that. We expect more of our systems now, than in the past.
Which brings me to my point. The only way to do all of this stuff in a timely fashion is to use frameworks, reuse code, etc. If everyone had to write everything from scratch, every time, it would be decades between releases - not a few years. Unfortunately, frameworks that are generic enough to be useful often have to trade raw efficiency for ease of use and integration. I'd say we have done quite well with that trade myself. For one thing, open-source software wouldn't exist without these frameworks - it would simply take too long for a small team to produce anything without being able to stand on the backs of others for lots of stuff.
Then, there is the insane amount of graphical stuff in modern systems. For a standard GUI, you can get away with just drawing rectangles and filling them with solid colors - but for most things, you have to use stored textures. Those textures have to be stored on disk, loaded into RAM, and transferred to a graphics card - all of which takes resources.
So yes, it seems like we aren't making progress because our apps seem to be as fast or slow as they were a decade ago - except for the fact that they are doing a heck of a lot more than they were a decade ago. Can you imagine running something like the TES CS on a machine from 2000? I still recall moving from an AGP video card to a PCI-E video card, and being pleasantly surprised that I could move in the preview window in real-time.
I'm old enough to remember having an Atari 800XL with 64kB of RAM. http://en.wikipedia.org/wiki/File:Atari_800XL_Plain_White.jpg It was cool for the day, but I can now
emulate that system at nearly 100x speed with ease. In fact, I still remember when PC's had "turbo" buttons on them, because hardware was advancing so fast that poorly written software would run "too fast". (If you have ever played the old DOS game 'stunts', you will know what I'm talking about)
I'd say we have made some progress...
(PS - I still remember hand soldering RAM chips to an add-in board for my old Franklin Apple II/c clone to get up to 128kB of RAM.)