What does it feel like to be a programmer?
Of course, my transition has been a longer, more circuitous and less dramatic (or exciting) of a journey than it has for some others who go through these kinds of immersive programming programs; for starters, I always knew I wanted to be an engineer — I just didn’t really know what kind — and I ended up going through a traditional, 4+ year undergraduate program in mechanical engineering, followed by a 2+ year graduate program in biomedical engineering). Even before then, I picked up the tip of the iceberg of Java in high school in an independent study (emphasis on the independent: my school didn’t have any CS instructors, and I was just given a textbook with problem sets), and while I picked up the basics of array manipulation, I didn’t really understand what I was doing: I just learned to start any given program with
public static void main (String args) and sandwich the good stuff (if you can call basic array manipulation “good stuff”) between the curly braces which followed. The one required CS course I had in college was a total snooze and left me feeling similarly empty, without any real understanding of what I could do with C++ or what object-oriented programming was. To me, programming was an obtuse, niche discipline that a few bona fide nerds delved deep into but that the masses could largely ignore.
It wasn’t till the better part of a decade later that I really woke up to the power of code. I left grad school to join a startup in 3D printing, a field ideally suited to showing mechanical engineers just how clunky the products of their discipline are. It was there I discovered the utility of the open-source microcontrollers that translated software instructions into the physical actions that melted plastic and deposited it in place to make custom parts that existed in the real world. Things that took hours of careful work and patient tweaking could be abstracted away in a few lines of code, and it indeed oftentimes seemed as if the software department at that company were running circles around the mechanical department. Incredulous and intrigued, I tried my hand at hacking on these software-hardware interfaces, and using code to solve problems was so effective that it felt like cheating. Hooked, in my spare time, I built and wrote code for everything from a 3D-printed blinking jellyfish necklace to a garden timer hack that engaged its rain delay functionality if rain was forecast by an API to ponytails that moved like, well, pony tails.
Looking back, my code was garbage — that is to say, while it worked, it wasn’t very readable (I needed copious comments to describe what I was doing) and was borderline imperative, not really taking full advantage of the object-oriented nature of the programming language I was writing. That’s okay, though: no one’s code’s very good in the beginning, and the code I was writing was finally doing things I found useful and/or interesting. I was able to teach myself enough that I was able to explain it to others with no coding experience themselves, and I picked up a gig teaching high schoolers the fundamentals of programming for a couple of months one summer. Being the teacher I never had at their age was a rewarding experience, and realizing I somehow knew more than I thought I did, I started applying to full-time software engineering positions thereafter, only to find out that, while I could logic my way through an open-book, work-at-your-own-pace coding challenge assessment, I still had to try too hard to do well on them, and my code still stunk.
When I did land whiteboard interviews, I didn’t know what to do with the marker they’d given me, oftentimes making the mistake of clumsily diving straight into scrawling out some kind of half-pseudocode, half-Python jumbled mess of code instead of pausing to talk through my thought process and sketching out logic flows. During those whiteboard interviews more than ever, I really didn’t feel like a programmer: I felt more like an imposter faking his way though an ordeal while the “real” programmers looking on saw right through me.
As the definition of insanity is said to be doing the same thing over and over again and expecting results, I decided to switch strategies. While great practice, I was tired of going through countless job interviews and struggling through myriad coding challenges for way longer than I should have. I needed to be able to code in my sleep and teach myself the fundamentals of computer science before I would feel like a programmer — and moreover, before prospective employers would feel like I was programmer. Now, after a couple of months of coding full-time in an education environment, I indeed feel more like a programmer — or I at least feel more comfortable calling myself one — but the transition, I assure you, while marked, was a gradual one. There was no magic moment of radical transformation, just a steady stream of concepts I’d had but a tenuous grasp on before all of a sudden making sense. I’m more or less at the point where I can “code in my sleep” — and indeed, I’d have coding stress dreams — but I still feel like the same person I was before, merely more confident in my skills as a computer programmer.
So there you have it: a programmer is a programmer because they’ve just studied the field and practiced working in it a fair amount, the same way a nurse is skilled in medicine because they’ve studied medicine and worked in a hospital for some time, the same way a welder wields their title because they’ve learned from someone else who can do what they do and have practiced their trade a fair amount. Practice doesn’t only make perfect, it seemingly works magic and makes us all who we are — but when it comes down to it, the specialists we may be, we’re all still very much human.