It begins back in 1977 when I casually take some Computer Science classes in college. I almost instantly fall in love with every aspect of computer programming, and it ends up becoming one of my longest-running hobbies. And my career!
It was as if everything in my life led up to coding. A long-time interest in electronics allowed me to understand how the hardware worked. Interests in logic, mathematics, and analysis, provided a good foundation for designing software. An innate engineer’s sense of precision and accuracy, and a love of learning and of excellence, pushed me to be a good programmer.
Which to be honest, is all I am: a good programmer. Not a great one — I don’t have the higher maths or the advanced topics of computer science. I couldn’t write a sine function, and I know I’m not encryption or video-driver caliber. (I have written TCP drivers, so I could probably figure out video drivers. But encryption, transcendental floating-point routines, or advanced searching and sorting techniques? That’s Coder God territory; those are the ones I look up to and think, “I’m not worthy!”)
But judging by the programmers I’ve met and worked with over my career, I’m one of the better ones. Just saying. A big part of that’s experience. I’ve covered a lot of ground in nearly four decades. I’ve programmed “at the metal” and at a remove using 4GLs and at most points in between. And I’ve taken it seriously. I’ve always wanted to be the best programmer I could be, so I studied my craft throughout.
I first began writing code in good old BASIC, although my early college classes introduced me to Fortran, Algol, PL/I and Kunth’s Mixal assembly language. (I also encountered the dreaded IBM JCL early! The compensation was that I also encountered the amazing IBM 370 early.)
I soon added C and Intel 8086 MASM, and it wasn’t too long before I was writing little TSR (popup) utilities that ran in the background on my MS-DOS 3.3 machines. In fact, it was writing a popup everyone could use for time-tracking at work that let my employers know I was a “software guy” as well as a “hardware guy.”
I jumped to C++ fairly early in its popularity curve, although I’ve never used it professionally. (But as many did, I used the compiler to write “better C” professionally for many years. It was the seven years working for engineering systems that C and Unix were the core of my work life.)
Digging into C++ enticed me to go back and write object-oriented framework libraries for MASM and C. That’s right: I was writing object-oriented assembler. Damn straight! I actually used my “object-oriented C” at work, since it provided a rich core of useful tools (like linked lists and file “objects”).
Speaking of languages I used only for hobby coding, I had a brief, very torrid affair with Lisp for several years. Lisp is one of the sexist, most interesting languages ever! It’s truly amazing. No other language manual has caused me to laugh out loud (with delight) while reading.
I got into Microsoft’s Visual BASIC from the beginning. I’m pretty sure I had version 1, and I know I was using it a lot (strictly hobby at that point) by version 3. I still have the code from that era.
I did end up using it professionally, starting with VB5, but especially in VB6. In fact, some of the work I’m proudest of I did in Visual BASIC. You could make really good looking professional programs that acted just as slick as any other program.
(At this point I had an “object-oriented” MASM library, a similar one in C, and now a library of useful tools for VB apps. The idea of “reusable code” goes back to programmers carting around their punch-card libraries from job to job. I went so far with VB as to write powerful string and Windows Registry routines in C, which I compiled into a DLL for my VB apps to use.)
Of course, like any working programmer, Java took over my life the last decade or so. I was a bit askance over Java at first, but I’ve come to love it. It’s such a friendly language, and the standard library is extremely powerful. Even so, I still ended up creating a library of tools, even frameworks for applications.
In fact, while working with the CRM groups, I used Java to develop J2EE and web services applications. I had a general Java library for application development, plus a web services library that I’m really proud of. We used a hosted third-party CRM application that supported web-services data access, and my library allowed rapid creation of client applications.
What I recommend now is Python, which in some ways I love even more than I loved Lisp. (In other ways, Lisp will never be matched. It’s like your first expert lover: a real eye-opener, and you never forget.) Python is a delight, and I just love the idea of the indentation. Python is almost exactly the pseudo-language I’ve been using all along, so it fits me like a well-worn shoe.
By my count, that’s 43 years (and counting) of mucking around with computer programming, about 25 of those years professionally at The Company. I retired in 2013, and I’m still mucking around with computer programming.
I just can’t stop writing code!