August 05, 2011, 8:30 AM —
This still comes back to the basic guideline: 'learn your fundamentals.' You don't need to learn them all (designing CPU instruction sets??), but you do need to know the primary layers you interact with. A web programmer generally doesn't need to be aware of the machine code generated by his application, but should be knowledgeable in networking (layer 3 and up), caching, databases, and so on.
Today's coders may know how to whip up a PHP script or a Drupal extension, create a mobile app for both the iPhone and Android, and run DOOM on their car's GPS (which has been done, it turns out). But there's a lot that their predecessors knew that today's programmers don't.
Some of these skills aren't likely to be needed again, any more than most of us need to know how to ride a horse or (sigh) drive a manual-transmission vehicle. But other skills and "lessons learned" may still or again prove relevant, whether developers are banging their heads against legacy systems, coding for new mobile and embedded devices... or other devices and applications we haven't yet thought of.