Becoming a Developer Overnight, In Only Five Years
This post was inspired by an article on Cal Newport's site entitled, "The Pre-Med and Ira Glass: Complicated Career Advice from Compelling People". That article caused me to reflect on my path to my current career. By most people's standards, I accidentally backed into my career as something of a prodigy, since by age 19 I was working as a full-time software developer in the Florida Governor's office, but it took years of hard work to get there.
Through age 14 I had no idea what I wanted to be when I grew up (which was perfectly normal, of course). However, the Christmas after I turned 14 I got a TI-99/4A computer, and right away I dove into learning how to program it. I spent the next few years sitting in front of a computer with a guitar in my lap, programming for a while and playing guitar for a while, pausing only for annoying intrusions such as schoolwork or meals.
Back then, there was no Internet, and BBSes hadn't gotten very popular yet, so if you had a computer and wanted it to do anything interesting you usually had to program it yourself. I bought whatever books I could find and soaked up everything I could learn from them and from magazines such as COMPUTE!.
I guess I did have a little bit of natural talent with the computer. I could imagine what I wanted the computer to do and then turn that vision into a working program within weeks of getting my first computer. My first simple programs drew pictures of spaceships on the TV screen, and within a year or so I had written a text editor that could encrypt messages to my friends, a simple database application, and a typing game to improve my keyboarding skills.
The summer after I graduated from high school, at age 17, I was given an opportunity to work as an administrative assistant in a programming shop in the Florida Governor's Office. Even though the job entailed answering phones, taking messages, and delivering memos, I got to be around real programmers writing real code and listen to them talk about their jobs. Even better, there was an entire room at the office full of binders containing all of the printed source code for the entire budgeting system (this was way before Subversion or git). I would spend my breaks thumbing through reams of COBOL and Natural 2 code trying to sort out how it worked. I felt like Mickey Mouse in "The Sorcerer's Apprentice," reading the wizard's secret books of spells.
When I started as an admin, the office's word processing system was still in transition from a mainframe text editor to WordPerfect, and I used this transition as an opportunity to help automate the office. I wrote a WordPerfect macro that could download an existing document from the mainframe system, translate the mainframe formatting codes to WordPerfect formatting codes, and save the file locally so that the document could be edited in WordPerfect from then on. It was a very simple macro, but it was a huge time-saver and it got a little bit of attention. Next, I wrote a program that would let me edit and print the address labels for a memorandum distribution list. That caught the eye of a programming manager at the office and eventually led to my first real programming job, at age 19, in the office where I had started as a lowly admin.
When I got my first computer and decided that programming was what I wanted to do for the rest of my life, I didn't really have any idea how to translate that desire into reality. The officially sanctioned method of entering the profession was getting a bachelor's degree in computer science and then applying for jobs afterward, but I ended up short-circuiting that process by soaking up all the knowledge I could find, creating programs for any and all ideas that I had, and by taking the first opportunity to just be near computers and software developers. Even though I wasn't initially hired as a developer, the admin position still allowed me to polish my programming skills by writing applications that contributed to the efficient operation of the office. That eventually led to an entry-level development position where I continued to learn my craft and refine my skills.
The article I referenced earlier made me think of this path to my current profession, because the first thing I started doing was developing my skills. At first I didn't have much guidance or direction, but it turned out that the most important skills for a software developer are visualizing the end result and then creating a plan to bring that vision to reality, and that's what I worked on in the five years between getting my first computer and finally becoming a professional software developer.
If you have an idea what you want to be when you "grow up," but you don't know how to get started, my advice is to worry about building skills and gaining experience first. Once that's underway, try to put yourself as close as possible to the people who are doing what you want to do and learn all you can from them. Eventually you'll build your skills to the point where you can make a meaningful contribution to an organization by doing not just what you love, but what you're demonstrably good at.