Hunting Software Jobs, Part 1

For the past six months I've been looking for a software engineering job, and I was fortunate to get one a few weeks ago at Clarifai. While it's a great fit and I'm very excited to be there, it was a long and difficult path to this point--especially since this is my first full-time gig as a professional programmer and I have no formal training (I've touched on those particular anxieties elsewhere on this blog).

Since my life was for better or worse completely consumed by the hunt, I have quite a lot to say on the subject. I don't yet have a clear idea how many posts I'll write for this series, but ideally they'll modulate from general thoughts to more specific technical content as much as I see fit.

This first one is pretty straightforward: in no particular order, these are some broad reflections on the experience that, hopefully, someone in the same position I was a year or two ago--just starting to write software seriously, with the thought of figuring out how to get paid to do it looming ominously--might find practical or encouraging or comforting. It's relatively cliché to say, but these are the sorts of things I wish someone would have told me a long time ago, and that if I'd acted on sooner (or acted on at all) I probably would have had a quicker and less stressful employment gap.

First: yes, it's doable

There's already quite a lot of advice on software jobs floating around. So while I don't want to add noise, I think if I could only make one point very clear, it would be that it is possible to find work as a programmer without either a Computer Science degree (or similar discipline; I studied Creative Writing) or prior related experience (I was a sort-of journalist and sort-of musician). I did it and have numerous friends who have as well.

There's several caveats to this, of course. I'm certainly not going to claim that it is easy (it's not for most people), that the odds are necessarily good (or even knowable or consistent), that a CS degree is useless or doesn't help (it isn't, and definitely does), that it can or should be done alone (I was supported by the Recurse Center in more ways than I can easily sum up in a blog post, and also by more experienced and well-connected friends I'm extremely privileged to have; more on that later), that as a result of it I'm now fully confident in my skill and have eliminated imposter syndrome (not even close), or that everyone is necessarily in the right life position to go through it (for the sake of transparency: I have no debt, no debilitating health conditions, no children, and basically nothing else that prevented me from taking on the risk and putting in the time I felt was necessary to become an employable programmer--and for me, at least, that was a lot of time).

All of that said, I still feel the need to emphasize that it is, if nothing else, possible, as I lost months and months to indecision largely due to people on certain parts of the internet claiming that it was not possible at all, which I at times wholly believed.

However, one more time for good measure: it is possible. If your ambition is to find a job writing software and you feel you're currently equipped to deal with the necessary sacrifices, I would suggest you throw yourself into it and ignore any and all advice that doesn't prove a useful tool to you (including this post).

Take care of yourself

This is the second most important piece of advice I can give, and one that I absolutely did not follow myself.

Looking for a technology job is a very uncertain process. The timeline is even more uncertain, especially if you're inexperienced. Even though I knew this from the beginning, it was amazingly easy to justify unhealthy decisions--eating poorly to save money, ignoring illnesses, operating on consistently minimal rest and/or having a wildly fluctuating schedule for both sleep and work--with the excuse that I'd "only be living like this for a few more weeks."

I remember first having this thought only a few days into my search as a means of convincing myself to practice algorithm questions all day instead of resting and recovering from a particularly nasty sinus infection. I started looking for a job in September 2016, and signed my offer letter in late March 2017. You get the idea.

Due to this approach, there were times when I was deeply miserable, and also frankly and ironically performed far from my best during some important interviews. I could have avoided both of these things by not dehumanizing myself and soberly acknowledging that the search could turn out to be more of a marathon than I wanted to accept at the time.

Another perspective: you should also take care of yourself because you are still living life while you're searching for work, no matter how much it may feel like a strange limbo between states rather than life itself. I think it's helpful to try to think of all personal situations as no more or less important than others, no matter how unusual or difficult they are, and to not allow yourself to get distracted from the basic business of living. I'll defer to Seneca on this one before I get too far off track.

Ask for help

This is a topic I'll explore in more detail in future posts, but in short: you really shouldn't do this alone.

Like I mentioned above, I've had access to the Recurse Center, its staff, and its wide and varied network of alumni, so in many respects I had a bit of a shortcut on this point. But even if your relevant network is only one or two people wide, send them an email, try to get a coffee, try to pick their brain about their own career path, try to see if they know anyone who is hiring, and maybe try to get them to help you practice interviewing or at the very least point you toward useful resources.

Those last two suggestions are particularly crucial, as it is unfortunately excruciating to get most companies to interview you without some sort of referral, and it is proportionally challenging to get any sense of what those interviews will actually be like without having someone with more experience walk you through it.

It took me a long time to get used to the artificial constraints and pressures of software interviews (and even after dozens, they still feel stilted and strange), but if I'd gone into them completely cold it would have been much worse. Find people who can get you acclimated.

(If you really don't know anyone, feel free to talk to me, and if you happen to be in the New York area I'm always happy to try to meet up to discuss any of this--no promises that I'll have time, but do reach out.)

Practice--but be comfortable with & honest about your skill level

While giving me a mock interview, a friend passed on a great bit of advice that bucks against received wisdom about interviewing as a junior developer.

First, the received wisdom: there's an idea that, especially if you're approaching programming from a non-traditional background, you must make up for your on-paper inexperience by developing very impressive skills in & off-the-cuff recall of advanced Computer Science topics. The fear that I was behind the curve in this regard pushed me to drill complex algorithms and obsessively study esoteric concepts early on in my search.

However, I rarely had the chance to draw from any of that knowledge in interviews. The vast majority of interviewers 1) covered only the most basic CS concepts--think tree traversal, computational complexity, hash tables 2) were more interested in probing the depths of things I claimed to know rather than things I didn't 3) tested for skills that were immediately relevant to the job in question--front-end interviews naturally covered JavaScript-specific topics, etc.

I still encountered some situations where I was asked questions about things that I knew nothing about or just struggled to answer. As a result I was embarrassed, far too self-critical, and initially convinced that I needed to learn to "pass" as a more experienced developer than I actually was.

My friend's advice was to flip the whole thing on its head and approach it from the other side of the table: if a company has chosen to interview a developer with no experience--particularly if it's a final-stage on-site--the responsibility falls more on the company to ask questions that one could reasonably assume a person with that background could engage with, and less on the candidate to prepare for every possible scenario. Otherwise, they are wasting the candidate's time and their own resources, and as much as possible you should not hesitate to immediately turn down companies that waste your time.

As a corollary, you should also be direct with interviewers about what you do and don't know, and be honest with yourself about the fact that you do not have a four-year CS degree (if you don't) and cannot reasonably approximate one in just a few months' time. (Aside: you should still study theoretical Computer Science, but you should study it because it's fascinating and will make you a better engineer, not because it will get you a job.)

It's easy to lose sight of the fact that a key part of the job hunt is evaluating whether a company is a good fit for your skill level and, in exchange for value you create, can help you progress. If you are dishonest about your current position during an interview and still manage to get an offer, the facade won't last, and you probably won't grow.

Luckily, I figured this out--or at least developed a better sense of it--before I had any actually successful interviews, but it's still something I try to be acutely aware of (perhaps more so now that I'm actually working).

Be persistent. Seriously

And that's all I've got for now. My parting thought is both a bit banal and not a easy pill to swallow--it certainly never was for me--but persistence really is key.

Unless you luck out, finding that first job is, as I've already discussed, going to be a relatively long process, so it's essential that you stick with it as much as your circumstances allow. This, of course, also has to be balanced with the points above, namely: maintain your health and don't set unreasonable expectations for yourself. But it will realistically take time, and you will realistically improve during the process and eventually develop a much better idea of what sort of role you'd actually like to work toward under the very broad umbrella that is software (I gravitated closer to the web front-end over the course of months; I didn't really start there).

But none of that will happen if you give up when things become challenging, and they will likely be challenging from day one. So persist.