It's important skill to be able to cope with limited resources, but may be such skill can be used in a neat combination with others? If it is the hardware level that is interesting for a programmer, then I see here an opportunity to learn many things about processors, caches, memory controllers and so on. But to learn it the hardware is not required, at least when the programmer can build an emulator. Actually, the hardware behaviour is relatively simple - just 0 and 1 states on the chip's pins with some logic attached to the state interdependencies. So, for me, it is more interesting to create a simple emulator of an imaginable processor. And the processor can be of any architecture, just as complex as you wish. This is not only programming experience, but it introduces you into the world of the processor architecture and lets you feel the magic of a hardware designer.bwat wrote:I'm a programmer, so if it can be programmed, then I want one. I justify it by calling it deliberate practice. The older machines have constraints which lead to techniques being used that you just don't see anywhere else.
For me it is interesting to emulate an 'open' processor, when there are a lot of simple units like adder or subtracter and all them are connected with many internal buses. After having such basic design it is possible to move to the cache emulation, then to the memory controller and PC's main bus and so on. In such a way the hardware will be covered in great details and without the need for expensive hardware to debug it (like complex oscilloscope and many other things). Next, after the basic hardware is emulated, it is possible to start digging into the area of compilers. And if you see that the resulting system performance can be improved with a new hardware design - you just have everything in place to implement it.
As I remember there was an interest in high level logic like is implemented in prolog or lisp - all this can be used for the hardware emulation and the compiler development. So, you can leverage your knowledge even better.
And even for beginners such starting point (as a hardware emulation) will be a really good learning experience without losing time for a tricky hardware debugging.
And it is possible to get even bigger picture - if many programmers will do such a beast, then there is a plenty of space for collaboration and team work experience. Socializing the computer science is an interesting goal. And one part of it has been completed here by starting this forum.