Back in the fall, I had my first experience teaching. I was the co-instructor for an evening class that centered around front end development tools and best practices. I won’t get into the class itself much, but it was an interesting experience, and I enjoyed teaching. During the past few weeks I have met with a couple of former students over coffee, as they struggle to figure out what to do next in their journey to become professional coders.
Unfortunately, there is a disconnect between what code school generally teach and what many companies need (more on this in a later post). But perhaps the bigger issue is that many companies are looking for coders with at least 2 or 3 years of experience. A pretty common problem in any industry.
Unless a company specifically has an apprenticeship or internship program, no one is going to advertise a position requiring no experience. Look at it from my perspective: if I said I would take any person looking to get into programming, I would get hundreds of applications. Talk about some late nights. I can tell you right now: reading through resumes and cover letters is a special kind of torture.
So just to make my life easier, I’m going to say I need at least some experience for the position. The Media is telling everyone to code. Programming is the new nursing–it’s the magical ticket to a stable job with good prospects. Code schools, whether in-person or online, are pumping out tons of people looking for the golden ticket. I’m looking for a diamond in the rough: someone who has a passion for the job and who will work well with my team.
Programmers like to think that there are certain “types” of people who make good coders. They put code on a pedestal and fancy themselves some kind of elite class of nerd. Don’t get me wrong, there are many brilliant engineers, just as there are brilliant people in any field. But really, it’s not terribly different from any other industry, and similarly, there are certain skills and preferences that make life easier.
- Can you sit in front of a computer for 8 or 9 hours a day and solve problems?
- Ok some people have standing desks so maybe not sitting, but you get what I mean. This is not a job for folks who need constant interaction with other humans
- On the flip side, can you work with a team and not be precious about your work, even if you spent all night solving a problem that turns out to be the wrong problem to solve?
- Ok actually many programmers are notoriously precious and have huge egos, but it’s best to get ahead of the curve on this one
- Have you accepted the fact that every day you must learn something new? Forever. In fact, you will turn around five years from now and be aghast at what you did. Every day. The learning you have started has only just begun. Even when you’re tired, even when you just want to coast, a new framework or draft spec is being worked on and released, and you have to know it. Unless you want to maintain old systems, then you can gather dust as you like.
- Are you easily frustrated? Are you waiting for the magical day when you know all the things and you can stop spending hours down rabbit holes and being unsure of what you are doing? Sorry, that also never ends. It’s just part of the job.
- Can you work under pressure? Even when you’re taking on a project in a system you have never used before and there is no one to help you because no one at your job has ever used it? Yes, I do this all the time.
While code schools can certainly help folks figure out whether or not this is really the field for them, there is really nothing like real job experience to show you if you have a real knack for it. No it doesn’t have to be your main passion in life, no, you don’t have to spend every night geeking out over code, but you do need to be motivated enough to spend some time outside of work educating yourself.
So when I’m hiring someone with less experience, I’m trying to gage if they are all of these things. It’s quite a bit easier to know that if they’ve been working full time for a couple of years. But that doesn’t mean we won’t hire someone without the supposed minimum experience.
Unless you’re applying for a position at a huge corporation where the HR department automatically tosses any resume without the minimum requirements, every “required” skill is optional. Most code-related skills can be learned on the job. It’s really more about whether or not the company has an immediate need for someone to jump in and take on a specific job without any help, or if they just generally need more resources. There’s no way to know, so don’t make any assumptions.
So when I’m looking for folks to hire at a very junior level, what am I looking for? First and perhaps most importantly, I want to see someone who has worked on real projects. Not student projects, sites that are live on the internet, done for a client. The client can be a family member, a friend, whomever. A band website, a small business website, anything. The point being that you can work with clients, on a time line, get feedback, solve problems, and deploy code. There are many steps involved in this process, and it shows me you have both the skills and the initiative to take on real work.
In terms of more specific skills, understanding and using git is an absolute must. You don’t have to be an expert, I am not by any means, but being able to work with a team through source control is just how the job works. The code school I taught at did a great job from day one of requiring everyone to use git for everything, much to the frustration of the beginning students.
If you want to know if you need to know Angular or React or Ruby or Python, I can’t really tell you that. For my company? No. For some other company? Maybe. When I get asked this question, I always ask back “Well what are you interested in?” I realize this is tough, because it can be hard to tell what you will be interested in until you are doing it.
Just pick a thing and learn it. Build something in it. Then build something more complex in it. It’s better in the beginning to learn one thing really well then a bunch of things not very well. When you start solving more complex problems, that’s when you really start to learn how to program. You will never learn this if you stay on the surface. Once you have a solid understanding of one thing, then learning new languages and systems becomes vastly earlier.
As I was wrapping up a coffee date with one ex-student, she admitted that she just didn’t feel confident in her experience. It was hard for her to apply and interview because she just didn’t feel like she would be taken seriously or that she was “ready”. I completely understand this.
After almost ten years in the industry, when I see job requirements for front end development roles, I don’t know half the things listed there either.
So don’t get hung up on the details. Don’t get hung up on your lack of experience. Have confidence in what’s actually important in any job: Your passion and aptitude for learning. Your interest in programming and love of program-solving. Your professionalism. Your knowledge that you can handle whatever is thrown your way–you may not know all the answers, but you know you can learn it and ask for help. Those are the things that are truly important and stand out amongst the crowd.