Saturday, March 01, 2008

Growing up with technology

The first computer I ever had, I built myself. It had a Zilog Z80 processor and 2K of static RAM. I understood it at a fundamental level and when I learned to program I did it in pure machine code. It was some time before I used even an assembler let alone a high-level language like C.

This gave me a very machine oriented view of the computer. I understood that integers were stored as binary ones and zeros in a specific order in a register. I understood that a mathemtical operation was different from a bitwise logical operation and even today, when I think of an integer or a byte I see a little shoebox with a certain number of pebbles ranged in sub-divided partitions for the bits. Consequently, I find myself surprised when programmers go through their working lives without ever understanding this.

Now, a university student or technical college student immediately sees the high-level language view of the system and may not undertand the implications of the circuitry that carries the signals back and forth along the busses.

I find this to be both interesting from an anthropological viewpoint and disquieting from a professional one. From the first viewpoint its interesting that we don't fundamentally need the deep-down knowledge of the systems we work with anymore. We can work at such a high level that there is no need to understand the mechanism of an interrupt or consider an integer like an array of bits. It's disquieting because there is still a lot of code that relies on these principles so when a new-age programmer sees these techniques in use, they may not immediately understand what the implications are and so make an adjustment that is completely at odds with the architecture.

I wonder how long it will be before even the discipline of logical problem solving and algorithm creation is obsolete? I bet it's less than twenty years.

No comments: