Getting Your First Programming Job: Not as Hard as You Think
At Adzerk, when someone has been working here for exactly N years (i.e. every year on the person's "work anniversary"), we take a cue from Redditor culture and refer to that day as their "cake day." Today is my first cake day. This marks not only my first year working at Adzerk, but my first year working anywhere professionally as a software developer.
To say that I am excited to be working in this field would be putting it lightly. I get paid to do what I love, and my overall happiness level has increased dramatically. A year and some months ago, I was still settling for a menial desk job that offered security and benefits, but not quite enough satisfaction, all the while nervously applying for programming jobs for which I didn't think I was qualified. Now, after only twelve months of writing code for Adzerk, I already feel so comfortable doing what I do, it boggles my mind that I ever thought I wasn't competent enough to do this for a living!
If you're reading this and you happen to be in the position I was until a little over a year ago, you may not realize that being a good software developer doesn't necessarily require a computer science degree or years of work experience in the field. What it does require is dedication, a passion for programming and all things related to it, and a willingness to invest hours into exploring problems and seeing their solutions through to completion.
These are traits that I believe a lot of programming enthusiasts have, but perhaps not all of them realize how desirable they are to potential employers. I sure didn't, until I started my job search. I was surprised to find that out of the companies I was actually interested in working for, not only were most of them not dismissing me for my lack of experience, but a few of them were actually taking me seriously and expressing interest in hiring me.
Prerequisites (What Prerequisites?)
Many budding programmers have the misconception that they need to know X language or Y application framework in order to get a job as a software developer. Others (myself included, at a certain point in my life) may feel like no one will consider hiring them because they don't have a four-year computer science degree. Barriers to entry such as these are not uncommon in other industries, but are actually fairly unheard of in the world of software start-ups.
As I was applying for software developer positions, I noticed a pattern. For the most part, larger software companies and corporations would either never get back to me, or they would dismiss me early on in the application process because they have a hard requirement of a certain level of computer science education and/or an equivalent number of years of prior work experience in the field. From what I've read about these types of companies, the application process is typically handled by Human Resources personnel or hired recruiters, neither of which are really qualified to judge the merit of a programmer, so perhaps it is for the best that these companies looked me over.
On the other hand, I found that the start-ups I applied to were more flexible about the amount of education or experience that a job applicant has. At my job interview with Adzerk, we talked about my open-source projects, what programming languages I liked and disliked (and why), and how I would approach solving specific problems relevant to what we do. I had a similar experience when interviewing with other software start-ups. The software engineers who interviewed me were, for the most part, not concerned that I had little to no experience with the databases, languages, or frameworks that they use. They were more interested in whether or not I was the kind of person who would be interested and driven enough to learn to use them.
On the other side of the token, it would be inaccurate to say that there are no prerequisites to becoming hirable as a programmer. There are certain things that engineering teams look for when considering a job applicant. These are things that may not be hard requirements, but that can tip employers off that a programmer is worth hiring.
Some level of competence using the Unix/Linux command line is practically a must-have, since we spend so much of our time performing complex tasks on the command line. In my case, this was not something that I consciously decided to learn in order to be more hirable, but rather something that I decided to learn because it made using my computer easier and more enjoyable. If you haven't already, you should consider reading a good book on using the command line -- if nothing else, it will change the way you use computers.
Start-ups also tend to look for people who are enthusiastic about trying new languages and frameworks. If you have a GitHub account with at least a representative handful of personal projects where you have tried your hand at building things in a couple different languages, you are probably a shoo-in for a software start-up somewhere. Somewhere in the world, there is a company looking to hire a software engineer, and they're growing tired of wading through applications from computer science graduates who have little experience in any language other than (let's say) Java and little desire to learn something new. If you're the type of person who likes to learn how to do new things and you can demonstrate that you've learned a new language or two just for the fun of it, then you may not realize it yet, but you have a real competitive advantage over these other applicants.
This may sound like a no-brainer, but another thing that software companies look for in applicants is general coding competence. The bottom line is that if you don't demonstrate good coding habits, then you won't look like a very good candidate for a position as a software developer. Different companies have different strategies for assessing your ability to write good code. If you have a portfolio of projects you have built that showcase the quality of the code you write, then this may be enough for some companies. Other companies may give you an assessment of some kind, either during or as a take-home addition to your interview. Regardless of how it is assessed, you can improve the quality of the code you write exactly the same way as you would work on any other skill: by practicing. Writing code every day is one good way to improve the way you code.
Adjusting Your Perspective
OK, so you've successfully landed your first programming job at a software start-up. What can you expect when you start? Well... it's hard for me to say anything definitive on this subject because my experience in this area is relatively limited. To date, I have only worked as software developer at one company, and I've only been here for a year. So, I can only tell my own story. Your own experience will likely vary, depending on what kind of a world you're coming from. Whatever your current perspective is, you will surely have to adjust it; a software start-up is a truly unique work environment.
In my case, I came to software development after six years of working for the state government. I dressed conservatively, sat at a desk and adjudicated claims for eight hours a day. The nature of my work was very serious, requiring a lot of discipline and ability to adhere to protocol. In addition, it was a public-facing position, which took a lot of patience and the ability to deal with (sometimes irate) callers and remain calm and helpful. Coming from this type of job to a position as a developer at a software start-up, I wasn't quite sure what to expect.
In some ways, I got what I expected, which happens to have been exactly what I was looking for. In contrast to the hierarchy and red tape inherent in my previous job, I was looking for the kind of job where I would be on level footing with my coworkers, who would take my ideas into consideration and view me as an equal. I was ecstatic to find this aspect of working for a start-up to be exactly what I was hoping.
On the other hand, the comparative lack of structure took some adjustment on my part. I wasn't used to having this much freedom! I was used to being handed tasks and having less control over what problems I worked on or how I felt I should solve them. For some people, not having this degree of freedom at work might be unimaginable. For me, it was all I knew for six years. Needless to say, people of different backgrounds will have different experiences.
Another thing that surprised me was that my existing skill-set from working in a non-programming-related job turned out to be relevant to my work at Adzerk. It turns out that things like patience, being able to work in a team, effective time management, and attention to detail are all skills that can help you do your job better, no matter what your job is. I've even exercised my customer service skills, from time to time when interacting with customers. I had a fear, coming into this, that I might lack some of the job skills that I need to be a good software developer. But this fear was soon dispelled, as I was pleasantly surprised to find that I'd already developed a lot of the skills I need from working outside of the software industry.
Uh, Doesn't This Only Apply to Start-Ups?
To be fair, the advice that I've imparted here is only really relevant if you are considering a job at a software start-up. If you really have your heart set on working for a larger, well-established company, then perhaps it isn't so helpful to market yourself solely on your work ethic, lust for knowledge, and the open-source projects in your GitHub portfolio.
But, look at it this way: your first job at a start-up company might just be a stepping stone toward bigger things. Many companies will allow job applicants to substitute years of work experience for prerequisite educational degrees. Maybe once you bag your first programming job working for a start-up and you've been there for a few years, your resumé will look impressive enough to land itself in the hands of the right people at these larger companies. Or, maybe you'll find yourself addicted to the start-up lifestyle and you'll never want to leave. So far, that's been my experience!