My bout with Windows Script Host (WSH) the other day turned out fine. I managed to get a working script less than an hour after my post, but it left me thinking about low-level issues in today's environment. There are some low-level issues that are truly inconsequential such as old DOS relics like expanded memory (XMS) and extended memory (EMS) specifications but there are also many useful aspects as well. Things like two's complement, Karnaugh maps (haven't had to use it in quite a while though), floating point data format (something I had to discover on my own) -- I hope most of these are still taught in university today. One of the reasons I mention this is that an old project I worked on involved displaying an image that exceeded the size limit of normal DOS memory allocation so I used djgpp and DPMI to solve the problem.
For most programmers, the most productive time is spent when coding at a high level. As soon as a tricky low-level issue is encountered, the productivity level takes a major dive. Debugging these issues can be frustrating and time consuming but at the same time it can be rewarding. Some issues are accompanied by a moment of "Eureka" -- for example one of my first memorable debugging challenges was the first week of interning at a company that build compressor controllers. I was working on software that used commercial hardware I/O boards to test the response time and accuracy of the compressor controller's I/O. I was debugging someone else's code that was reading an analog current from an I/O board but the value seemed to be all over the place. I soon realized that the current was occasionally reading a negative value and added a little range checking and the problem was solved. The problem in retrospect was not difficult but at the time it felt rewarding.
It has been interesting to see an article in MSDN Magazine about security vulnerabilities that included assembly and WinDBG. For those interested, I also recommend reading Mark Russinovich's blog.
I believe programming is an art form and as I have progressed as a programmer, I have tried to achieve a higher level of competence and art. It is important to identify (ahead of time) the low-level issues that might derail the high level productivity.