I originally wrote this article in August 2013. While it's nearly ten years old, I wanted to give it a new lease on life because it remains just as true today as it did when I wrote it much earlier in my career.
When I was growing up, I wanted to be a lighting designer. I didn’t really care about live music but I was going to design awesome lights as my part of the total package of a live concert. As a teenager, I worked for a few local production companies that were small enough for me to actually run the light board for whatever artist was rolling into town. These were mainly college shows or B-artists who were past their prime but I loved it.
There is something so magical about having a standard set of tools, a very strict time limit, hundreds (or thousands of people) who are coming whether you are ready or not, having equipment fail at the most inopportune times, and still pulling it all off. No one will experience what you did quite the same way as the people that were actually there.
I ended up going to Boston University to pursue this dream. I spent three years in Boston learning everything about lighting, technical production, safety, great design, and made life long friends through the process.
During the summer between my sophomore and junior years, I spent a few months in Las Vegas working on a software product that helped live event lighting designers use 3D visualization to plan their shows. But, this is when I also found a second love.
A few months before heading to Las Vegas, I started programming again. I liked to solve people’s problems with software. I really liked to solve problems that made both sides of a problem really happy. I was trying to use programming to pay my (very expensive) tuition bills. While in Las Vegas, a startup based out of Framingham, Massachusetts sent a post to the BostonRB mailing list looking for some developers. I knew full well I wasn’t qualified to answer the listing but I did it anyway.
After coming back to Boston to continue attending school, I met with them. We were a perfect fit. It wasn’t because of my software acumen, or my ability to code a binary tree on a whiteboard, or my ability to have my code up on GitHub (which wasn’t launched publicly yet). It was because we both understood that the software was a means to an end, we both knew that the product was going to solve real problems for real people, and we both knew that I could continue getting better.
After another semester at BU, I wasn’t able to afford school anymore. I was paying almost $20,000 a semester and even with loans it wasn’t tenable. I had to drop out. It was the most difficult decision of my life up to that moment. I met with counselors at the Financial Aid office to see if there was money somewhere else. I had an on-campus job, a weekend job doing lighting gigs, and the startup job as a programmer. I still couldn’t pull it off.
I’ll never forget at my final portfolio review an advisor telling me, “don’t get used to making money or you’ll never come back.” I assured him that this was only a temporary leave so I could make more money, save it, and come back. I never went back to BU.
We spend so much of our lives telling ourselves who we are going to be. We read the blogs of influential people, go to conferences to see them speak, and tell ourselves “if I just conquer this one thing I could be just like them”. As a developer, I feel like if I just conquer TDD, learn how to program this algorithm, or learn this new programming language I’ll be able to get up in front of everyone and start talking about my experience. I’ll be legitimate.
I spend even more time qualifying who I am as a programmer to others.
I’m a programmer but not a ‘computer science’ kind of programmer.
I like to solve problems using code. It’s just a means to an end.
I’ll never be like (nameOfFashionableCoder).
Even though as a kid I told myself I was going to be a lighting designer, I ended up as a software developer. Now, as a software developer, I’m trying to further clarify my small niche in my field as if I know I have the ability to control my future path.
Biasing your future self with your current self’s fears, hopes, and concerns does neither your future self or your current self any good. I never would have predicted I’d join such a “boring” career path as “software development” when I was in high school. I never would have thought I’d be working at one of the most (in my opinion) influential companies of my generation.
It all happened because my wife told me to stop complaining about what I can and can’t do and go talk to them. GitHub didn’t court me. My only real connection with them was meeting Kyle Neath at a conference and conversing over a few (delicious) home brewed beers. Eventually, I was hired because I could solve a problem they were having. The skills I had that made me a good fit came from being a lighting design student, working in a financial-technology startup, and consulting on my own with small businesses. It was impossible to project that path or how I might go about optimizing everything to make sure I got there.
I’m writing this less because I think I have the answer to fixing my problem. I’m writing this because I know other programmers out there feel the way I do. Programmers that realize they have a skill set but don’t feel like they have all the answers yet. Our field has such a large array of knowledge available to it that it is impossible to conquer all of it.
I’m writing this to remind myself that it’s perfectly OK to just go where your path takes you. Do the things that you care about now which may not be the things you care about later. But most importantly, don’t wait to share your thoughts, experiences, and code with other people. I still struggle with this.
I’m convinced that if I speak about a technical matter, write a technical book, or even release some meaningful open source that I’ll be “found out”. That I haven’t figured out how all the puzzle pieces are put together.
A lot of people have been there before. I like to tell my wife, “normal people with normal problems don’t write normal things online”. You only hear the worst case and best-case scenarios. We can all be programmers, but many of us come from unique backgrounds. We have much to offer, but we block ourselves from sharing, learning, and growing.
I had no idea that my life would look like it does now. I couldn’t have planned it this way even if I had tried. As programmers (especially in the current “Lean Startup,” “A/B Tested,” and “Y Combinator” world of things), we like to optimize the hell out of everything we touch. So we need to acknowledge that there is a lot of serendipity in what we do.
It’s OK to go on a tangent now and then, stop coding and read a few articles on why “mocking” is a good/bad thing, and build a silly little app in Go even if you never intend to use Go professionally. It’s even better to put yourself in situations where you are vulnerable, unsure, and potentially embarrassed. By doing this, you don’t pretend to know your path. You let the path appear before you, one step at a time.
I love presenting in front of people. But I still struggle with appearing in front of user groups talking about code. I assume it’s because I’ve told myself, “I’m not that guy.” I have a lot to work on, but this article is my first step in figuring out how I got here.
Some people would probably call this the “hacker way.” I’d never give myself a “hacker” title. But then again, I’ve never been very good at figuring out my path or the path I’ll be going onto.