I believe every new student studying Computer Science or Information Technology will be introduced to the sub-systems of computers, which are Input Unit, Output Unit, Arithmetic and Logic Unit, Central Processing Unit, Storage Unit (Primary Storage Unit/Main Memory and Secondary Storage Unit). I always thought that the most amazing part of a computer was its processor (i.e., ALU and CPU). The least thing that I had ever considered was I/O sub-system. But, at the end of my bachelor study, I realized that it was the other way around: a computer is just a dumb object without its I/O. No matter how sophisticated the other sub-systems may be, they will be useless without the I/O sub-system. No matter how poor the other sub-systems may be, they are something with the I/O sub-system.
Beside being a strong supporter of the Free Software Movement (http://fsf.org), I am always interested in low-level system work such as Compiler Design and Implementation, Operating Systems, and Computer Architecture. Among other things, I have been following the development of the GCC (GNU Compiler Collection, http://gcc.gnu.org) through its mailing lists. And, I came to know that they are many targets for which a source code file can be compiled. The target is a combination of the processor, the vendor, the kernel, and the operating system of a system (e.g., i686-pc-linux-gnu). What interests me is the various processors that GCC supports. Previously, I only knew x86 and PPC. Now I know that there are Alpha, Arc, ARM, AVR, Blackfin, CRIS, FRV, Hitatchi 8300, MIPS, SH, and some others. And, yes, I was excited to try to compile a program for one of those processors with a cross-compiled GCC. It happened that my former Electrical Engineering lecturer was assisting my friends that studied Mechatronics in using AVR to build a number of embedded systems. So, I came to meet him to see how an AVR embedded-system board looked like.
Well, it was not surprising for me. It was only a simple board of about 20 cm by 10 cm containing a microcontroller that housed an AVR microprocessor and its EEPROM. It was simple enough to be under USD 20. So, I asked him how I could program that embedded system. He explained that I should have produced the machine code to be stored in the EEPROM, and he continued on telling me how to store the code in the EEPROM. When he finished his explanation, I suddenly realized that I could not see the result of my program by only having that simple embedded-system board. Sensors, Motors, and other mechanical stuff were needed before the simple board could be useful at all. And, those other things were much more expensive than the simple board.
After that day, I really appreciate the importance of the I/O sub-system as a vital sub-system in a computer.