prater's blog

in which i hold forth upon various and sundry issues of import to persons employed in the production of software and am promptly and roundly ignored

So you wanna be a programmer
09 November 2016

Before I start dashing your hopes and dreams, let’s get one thing out of the way.

You are smart, you are capable, and if you desire, you can find success as a software engineer.

You already have a leg up on the vast majority of people for whom computers are a magical black box, so even though it may seem daunting, be aware that once you’ve left orbit, you’re halfway to anywhere.

Now for the unpleasant bits:

  1. No one will hire you based on your boot camp experience (unless they have a program designed to hire boot camp graduates.)

  2. Most of that knowledge is syntax and technology. These are orthogonal to your actual skill set, which is the ability to LEARN syntax and technology.

  3. You will never be “good” at this job.

No one hires bootcamp graduates

This is not strictly true. Lots of places hire bootcamp graduates, but few of those graduates are hired BECAUSE they went to bootcamp. Bootcamp code is generally throw-away quality, and that’s okay. Hiring managers and engineering teams care more about your ability to contribute than anything else. Convincing your future teammates that you will make their life easier / better is not a guaranteed job, but failing to convince them of this is a significant hurdle, and convincing them of the opposite is a success-proof strategy.

Whatever shall I do?

One of the ways that you show you CAN contribute is to ACTUALLY contribute. Find an open source project and make some patches. With a few notable exceptions, OSS projects love receiving well thought out patches from new contributors. If there is a project you like and an itch you’d like to scratch, that’s an excellent way of writing “real” production code without actually having a job. This doesn’t need to be an established OSS project. You have a hobby right? Aim coffee and code at your hobby and write some software to make your life easier. Nothing speaks louder than your code, so show off as much of it as is reasonable.

The other avenue for this is freelance. Be careful about accepting freelance too far above your skill level, but don’t be afraid to seek out and perform work that is outside of your comfort zone. Although you probably do not command top tier freelance rates, don’t feel bad about charging for your work. You will know when something doesn’t seem fair - adjust your time accordingly, or seek out non-profit or low-budget projects where you can work at your own pace.

A bootcamp graduate with meaningful open source contributions (make them on Github!) is immediately a cut above junior level devs without them.

I’m sorry to have to tell you that the answer is “work for free” - but so it is. A lot of the hiring managers and Sr. Devs now working grew up hacking around on things in their free time. The expectation is not that you “work for free” but that you apply your skills to things you care about, and that your copious youthful energy be directed into ‘meaningful’ things.

Your actual skills are not programming

Two of the main skills that a “good” Jr Dev will have are stubbornness and curiosity.

You’ve probably already got a stubborn streak if you’ve made it this far, and you’re going to want to nuture that in a certain ways. Don’t give up, even when you are defeated, and have an no-quit attitude. This is HARD. One of my mentees was interviewed at a financial services firm, and they gave her a coding test as part of the interview. The test was UTTERLY beyond her abilities, and she had no hope whatsoever of completing it. She was obviously upset as this was her first interview at a promising company, and she was devastated to know that she was going to blow it. I encouraged her to complete the test even though she would miss the deadline (she missed it by almost 3 weeks, but she did complete it.) She did not get that job, or the next one, but by her third interview coding tests were old hat, and she aced it and got the job. You WILL lose. Keep fighting.

Bo Staff Skills

The other “winning” attribute is curiosity. A different mentee of mine was working with me on a complicated graphics project. I had mentioned offhandedly some point about RGB color math. He didn’t understand what I meant, and although I explained the immediate application to him, he wasn’t satisfied - instead he went home, read a bunch of articles and blog posts on the subject and came back a few days later with questions that I couldn’t answer. He wound up writing the color math portion of the project because he understood the problem better than I did.

If you apply these two traits to your work, that will go much farther than knowing the basics of an additional framework. Jr Devs are hired based much more on potential than on actual production, and displaying an unwillingness to accept defeat at the hand of a machine and a deep curiosity for problems you encounter is a good way to convey to teammates that you will be an asset to them in the future.

Note that this doesn’t necessarily mean you shouldn’t have a life outside of computers - you really should - but that your potential teammates are primarily concerned with your life vis-a-vis computers. Stubbornness and curiosity maybe your two most important skills, but it’s also important that you not be a raging jackass to everyone you meet. Try to be humble, approachable and teachable. For a discipline revolving around unfeeling machines, people skills are shockingly important to your career as a programmer.

You will never be “good” at this job

Remember when we talked about a refusal to accept defeat? Get ready to lose. A lot. Your career from here on out will be near constant terror that you just fucked up so royally that THIS time they’ll finally find you out. Spoiler alert: you didn’t. Everyone feels this way all the time. Seemingly misplaced confidence is another good trait for junior engineers. “I don’t know how to do that but I can certainly figure it out!”

This is very much a “fake it until you make it” sort of behavior. If you’re always moving forward, trying SOMETHING, eventually you find that the things you try work more and more often, and that you really pooch it up way less frequently. More spoiler alerts: the number never gets to zero.

A lot of freshly-minted developers take the exhortation “Be Confident!” as a sexist scold to stand up for yourself. To an extent this is true, but the take away from “Be Confident!” is not to develop a “rock-star-ninjaneer” ego but to be confident in your ability to solve problems. Developers have been talking around this problem for as long as the discipline has existed - “Strong opinions weakly held.”, etc. Be willing to fail, be willing to try. The good news is that, as a computer programmer, things rarely explode when you make a mistake, the better news is that as a Jr engineer, you are likely to (and should!) be insulated from making critical errors by Sr Developers and managers. So, go for it. What’s the worse that could happen?

How is a developer like a writing desk

This sounds all negative-nancy and Eeyore’s pity party - and to a certain extent learning that the several thousand dollars you spent on a dev bootcamp is not a job guarantee is certainly bad news - but I’ll reiterate - you are already half way there.

Awwwwwwwwwwwwwk

Being a Jr. Developer is HARD. In a lot of ways it’s harder than being the grizzled old vet. You don’t know what you don’t know, and you’re entering an industry, where, frankly, social and professional norms are different. You might face additional challenges like being from an under-represented race, gender, or sexual orientation. You might not have the kind of hacker personality that makes engineering and logic problems come naturally to you. And that sucks. It won’t be easy, things worth doing rarely are. You don’t need to have a lifelong dream of being a programmer to be a successful one - if your passion is romantic French literature (my boss for instance) that’s fine. You don’t have to follow your passion, but you need to be passionate about doing good work. I won’t say that you won’t encounter some people who are just useless assholes. People like that are everywhere. If you stick with it, you’ll (hopefully) get to the point where you’re well paid. But, if you’re in this for the money, you’re going to have a hard time. Being subject to continuous failure and the relentless, heartless criticism of the machine can suck the joy out of any paycheck, no matter how big.

I will say this though: The people who become successful programmers often have the same basic traits that you do. They are passionate, they are curious, and fundamentally they want you to succeed. They have ALL been where you are now, confused, uncertain, excited, and amazed at what they can make that machine DO.