My Dad introduced me to programming when I was pretty small, maybe seven or eight? He’s not much of a teacher (Sorry Dad, but it’s true!) so “introduced” involved tossing me a Delphi starter box and letting me use his work computer after hours. I didn’t get very far, but managed to make my first few horrible blunders, such as copy-paste and edit instead of using function calls and loops. My best friend was re-writing the example games in BASIC, and another was making interactive Mandlebrot Set explorers, so my skills felt pretty weak-sauce by comparison. I’ve never been very competitive, preferring to excel in areas others aren’t pursuing. My attention turned from programming to 3D graphics, and it would be years until I picked it up again.
Flash-forward to my first semester of college. I’m taking the mandatory “computer programming” course, and enjoying it. It’s all C++, which is finicky and annoying, but I can make the computer do stuff. Neat! I do well in the class, and tutor a few people in what little I know about programming. Meanwhile my best friend (yes, the same one) is coding automatic vessel designers for the tabletop RPG we’re playing together (complete with GUI and save files), and another (yes, the same other friend, we all went to the same college) is doing advanced atomic simulations for the chemistry department. Meanwhile I’ve made a third friend who wrote his own open-GL graphics engine for fun. I figure there are plenty of people doing this programming thing better than I am, and don’t follow it up. I end up rooming with the graphics guy, who is gunning to be a teacher. He talks a lot about programming, and I pick up a few things just from listening to him. I dabble with his source code occasionally, but C++ still strikes me as inelegant and I can’t bear to really invest in figuring it out.
So I stick to 3D modeling in my spare time. People keep telling me that I should switch to using Blender, because it’s free and amazing. I’ve heard of it several times before, but the learning curve is steep. Plus I’m familiar with a different software package that does everything I’ve wanted up to this point. Near the end of my BS, I finally outgrow the software I’m comfortable with, switch to Blender, and never look back.
My next encounter with programming is about a year after graduation. I’m working full time, but have some slack in my schedule. Blender is a great tool, and I discover it has a programming language built in so you can write code to make stuff. I’ve always wanted to do this, and now I’ve got to try it. The language is called “Python”, so I set out to learn it. Fortunately, Python had great documentation, and a tutorial, and in a few months I’m coding like crazy. I make several scripts in short order. It helps that very few people seem to be doing this kind of thing. I feel like I’m making something valuable and unique instead of trying to play catch-up. Around the same time I also start maintaining my own website, and write all my pages in hand-crafted HTML.
Also around this time I started playing Dwarf Fortress, which pretty much required that I learn how to use AHK (if you’ve played DF, you’ll understand). Auto Hot Key has its own syntax that I had to pick up on, but the reward was skill in an excellent automation tool for all manner of tasks.
A few years later I’m unemployed, and playing Minecraft. Notch releases the save file format, and I write up an interface module to edit the save-games. Before I know it I’m coding again. One of my projects is popular enough that I approach Notch with the idea of incorporating it into the game. He says yes, but only if I write it in Java. All my code is Python, but why not! I strap in and learn enough Java in a week to write passably professional code and make my first coding paycheck.
Also while unemployed, I worked some part-time positions doing data entry. My latent AHK skills proved exceptionally valuable here, resulting in much faster and more accurate progress than would have otherwise been possible. We were working with a back-end programmed in India, and after poking around I found a few major structural flaws in the source code which essentially put the project on hold. It was a sobering lesson in the danger of relying on unproven production code, even if it’s written by professionals.
Somewhere along the way I dabbled in perl, lua, and a few others. For me, learning programming languages isn’t so much about finding the perfect syntax as it is about discovering the ways a particular difficulty can be tackled. No one has ever asked me what language I want to write in, so I’ve always just used whatever is at hand. That said, I am working on formulating the perfect programming language.
I’m sure no one’s thought of that before.