Thursday, October 20, 2011

Thank You, Dennis Ritchie

Unbeknownst to me, mere days before I posted this little homage to my introduction to programming as an adolescent, Dennis Ritchie died.

The death of Steve Jobs did not affect me greatly. I appreciate the attention to elegance and detail that Apple applies to their design, but I have barely used Apple products in my adult life. What Mac aficionados must have felt at Jobs' passing, I am feeling a bit of that with the death of Ritchie.

Dennis Ritchie created C, which I have repeatedly referred to as my "first language" as a programmer ("first" being akin to "native" in this case.) Every other language I have worked in I have done so with a C accent. C was beautifully small and efficient, fast in execution and powerful in capability. It is the language crafted to build the UNIX kernel. You could create code that practically read like English, or you could create code that stomped rampantly over anything in memory. Even the manual was a concise, elegant work, telling you everything you needed to know in an impossibly short format. "C is not a big language, and it is not well served by a big book," the preface of the 2nd edition of "The C Programming Language" reads.

I began programming in C in the late 80's, after buying my Commodore Amiga. I had programmed games in BASIC for what seemed like ages, but the speed of that interpreted language always bothered me. I had successfully learned to program in the compiled language Pascal, and now I was ready to try something that could do what I wanted really fast. There were numerous C examples showing how to access the Amiga's graphics and sound, and I dove in (with limited success) to learn to do that. It wasn't until I got a PC (an AMD 486 clone) in the early 90's that I acquired Borland's Turbo C and really got to work. Game programmers like Id Software and how-to authors like Michael Abrash opened the gates of knowledge to the arcane VGA card to me and my friend Jens. When we acquired a student discounted edition of Watcom's C/C++ compiler with its integrated Rational Systems DOS/4G Extender, the flat memory model became available and I felt like something magic had happened. All of memory was available to me without all that XMS/EMS and segment/offset malarkey.

Professionally as a test/measurement software engineer, I wrote C programs to access hardware, to process test data, to display user interfaces and graphs of results. When I came to my current job, I wrote a few utilities in C at first, but found scripting languages like Perl or UNIX shell more useful for what I needed to do. Still, as I said, I approach every new syntax I learn with the silent question of "I know how to do this in C. How do I do it in X?"

Thanks, Dennis.

1 comment:

  1. This is a late comment, but I am just now getting around to reading the rss feeds. I am finally going back to school, and in my senior year at university getting my own degree in Software Engineering. I am sure you remember the hours of free time between the various programming and calculus classes required?

    I also felt this, and while my programming experience did not start until the 90's with PHP, I never truly understood programming until I saw it through the eyes of C. I mostly write code in Java these days, especially in school, but I still call methods "functions", and secretly wish my oop languages had the speed and simplicity of structured programming.

    It's nice to meet fellow wargamers that are also programmers (especially software engineers). Thanks for sharing your thoughts.