Thursday, October 23, 2003

Technicolor Code



i like my c programming class. although i am quite young, i still feel like i hail from an earlier era. when my parents bought the family's first computer, i was in the third grade. if my memory serves, it was a tandy 1000. it had no hard drive, but it boasted a whole 256 kilobytes of ram and a state of the art four color monitor.

we really had no idea what to do with it. my parents purchased a text adventure game and a graphical mickey mouse game, both of which frustrasted me to no end. i gave up on them after a week and returned to the more satisfying entertainment provided by our atari video game console. i went back to the mickey mouse game years later and actually beat it.

it was stupendously easy, and i'm embarassed to admit i couldn't win it immediately. because i didn't open a cabinet in mickey mouse's garage, i didn't find the all important crowbar. the object of the game was to collect a crystal from every planet in the solar system.

i tried my hand at the basic programming language, but didn't get very far with it. no one in my family knew the slightest thing about programming. actually, people who knew anything about computers were few and far between in eastern kentucky in the early eighties. therefore, the computer ultimately became a big paperweight. nevertheless, when i read the owner's manual that came with it, one thing captured my imagination -- the fact that computers could 'talk' to one another through this thing called a 'modem.' but modems were prohibitively expensive back then, and i had no idea that the internet existed.

flash forward to 1990. i pestered my mom into buying a computer, and for $2000, we became the proud owners of a system with 640 kilobytes of ram, the latest dos operating system, and a massive 20 megabyte hard disk. it was also blessed with a 16 color monitor, but even better, it came with a 300 baud modem. some months later, the local newspaper published a tiny article located deep inside its pages about local BBSes. i wrote the author to ask for some numbers.

thus began my obsession with online life. at some point, i got an internet account on someone's unix system, but i didn't really begin to appreciate the internet until i got to college. by the time the web explosion began, my idea of the 'net had coalesced around the stark and elegant text console unix environment.

i should have learned c programming over ten years ago. i don't know why i didn't. i'm making up for lost time now. going to my c programming class is akin to time traveling back to the late seventies and early eighties. the professor is very much an old school programmer who cut his teeth on c and unix. he also loves teaching this stuff. you can sense his excitement whenever he introduces a new subject, whether it be pointers or character arrays.

learning c is like an archeological expedition into the philosophical and technical underpinnings of programming itself. it makes me want to learn fortran and assembly language. the more primitive the language, the closer you are to the hardware. they force you to learn how a computer processes information. languages like java hide most of this from you by design.

now that i am taking this class, i have a newfound respect for the pioneers of computer science. there is no way that anyone could truly be a great programmer (in my opinion) without learning c (and assembly language). the higher level programming langauges simply do too much work for the programmer.

of course, these features speed up the development of software. you can accomplish things with a few lines of code in java that would require more work with c. although, i love java for its modularity, i have a special affection for c because of its simplicity. it's a much smaller and more compact language. to use it implies a faith in your technical know how and creativity. to use java implies a faith in the technical know how and creativity of the developers of java. c appeals to my arrogant faith in my own intelligence as well as the part of me that likes to take things apart and examine the gears inside.

No comments: