In the early 2010s I was a gradate student in philosophy. I read about Project Euler somewhere and realized that programming was (i) interesting enough to try and (ii) would cost $0 given that I already owned a computer. Project Euler was itself fun, and (more enduringly) I fell in love with Python.
A college friend was working for a bioinformatics startup needing a documentation writer. Needing to choose between (i) leaving Boston for a TAship in Ithaca, NY or (ii) making money some other way, I chose (ii) and got the documentation job. Everyone involved was eager for me to spend some of my time learning the details of algorithms relevant to bioinformatics, so it was a good environment to learn to code.
(There's a familiar story among programmers: "In my course work I was led to believe that programming was all about learning algorithms and data structures. When I started my career I immediately found myself using only basic algorithms; the hard part was learning tools and systems." I had something like that experience, but delayed: my first job thoroughly reinforced the impression that fancy algorithms were absolutely central to industrial work in programming.)
Startups tend to be flexible places, and I took on a lot of jobs within that company, including first-order work as a programmer. Eventually I went out on my own as a consultant, then took a job at Google, then did various other things. But that's of much less interest to most people who ask me about this. The most relevant aspects of this story are:
- I learned from MOOCs, books, and experimentation.
- I started on a lark.
- It was a bit less than a year between starting my independent part-time studies and having some sort of job in software.
- It was about six months after that that I was in some sense working as a programmer.
- I got my first job by (i) being willing to work at a startup and (ii) having a very good personal connection at one.
- And my first job was "programming-adjacent."
That is, I said, my story. It's true and it's what I said in all sincerity, for years, to people who asked. It's incomplete, though. I was in high school from 1997 to 2001. Some friends of mine were into computers; there were a couple computer classes available; and I carried around a programmable TI-83 calculator all day.
I can't say how much programming I did then, but it must have been a lot: I remember spending hours programming, e.g., a simple version of craps. And I wrote a units-conversion program. The latter was my first experience releasing and versioning software: I chased down the one person who self-identified as a user of it and asked to borrow his calculator so that I could attach it to mine with a cable and give him a version of the program with a bugfix.
It is easy to recall many memories of myself being totally engrossed in programming. I omitted from the narrative above because I omitted it from my narrative then: I was a math guy, trivia geek, runner, and so on. (Or so I thought.) I never so much as considered a CS class as an undergrad and never talked about myself as a programming enthusiast.
So, I spent a bit over a decade paying no attention to programming. And the most relevant facts here are that:
- If you asked me about my programming background, and I told you it all started in my grad school years, I wasn't quite getting it right;
- But I wasn't lying; I had really just not allowed that part of my youth to enter my self-concept.
- The more accurate version of that first point above is: I learned from MOOCS, books, and experimentation, where "experimentation" includes a lot of fumbling around with TI-83 programming and BASIC in the Clinton administration.
- The human capacity for self-deception is enormous.