The cumulative effects of that are huge, and it's more of a method of working than something where you take the assembler manual out. Just like an engineer is not going to go and re-learn the ins and outs of materials science when building a bridge, it is the solid background in materials science that guides him in his choices.
This is changing my view of programming languages. I'd like an environment where abstractions are built up in transparent layers that don't hide the underlying architecture, but still give you powerful operators to compose things. The standard options mostly require you to pick one or the other.
Put differently: rather than thinking of expressive power as being built up in layers that move the highest level ever further away from the lowest, is there a way to keep high and low relatively close together while still providing lots of expressive power? The closest thing to this that I know of are Arthur Whitney's languages. The latter are notoriously cryptic, but unless I'm mistaken they do provide both of these things: an execution model that is close to the hardware and a very high-level, logically scalable language.
A graphical environment where you can see the program as it is running, with the memory map displayed in an arcade game style window.
I can imagine that such a tool would be a great eye opener.
Show hotspots in real time, move your cursor in to the memory map to get the 'hint' to display the label of the memory location at that spot.
An advanced version of it could show you the two layers caching next to the main memory and how data is flowing in and out of the caches.
I'm pretty sure that something like that is doable.
I wouldn't be surprised if people eventually come around to this point of view. It will take a while, though. The current thought is that parallelism will save everything. It could take a decade before people figure out that that isn't going to happen. Maybe then there will be a renaissance of going back and rebuilding things from the ground up. But I'm rambling.
"People who are serious about software have to be serious about hardware"... that Alan Kay has a gift for putting his finger on things.
The object information is readily accessible when you compile your program with -pg, the memory map is accessible through /proc, it shouldn't be too hard to couple the one to the other and make a nice display. If you are clever about it you might even be able to fish out what memory is filled with what type of data, and colour the map accordingly.
No millions required, unix is pretty clean when it comes to stuff like this.
Some joker had written a shell replacement based on 'doom' where you could literally shoot the processes. You had to hunt them down first of course...