“What do you look for in a Junior Dev?”
I was asked this in a private message on reddit today and spent a solid half hour formulating the response. Never one to miss a chance to tout my own opinions to the internet, here was my response:
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
What I would expect from a junior that I’d want to work with (I’m not a recruiter and have only been a part of ~4 interviews in my life) is:
- Familiar with SOLID and can identify abuses of it. Solving those abuses may be beyond their ability — it is much more difficult to create an elegant solution than to identify a problem.
- Not too proud or stubborn to learn from others and admit when they are wrong.
- Not too insecure to challenge others when they think they are sure that they are right.
- Devoted to learning on their own time — not just during the work day. Reading, writing, and sharing is how you really improve your abilities.
- Familiar with the common programming patterns that are taught in college. Delegation, observable, composition, builder, etc. Knowing when to use each one is not necessary, but they should have at least heard of them.
- Not rash. Companies want software done quickly, but they also love to change the requirements and hate bugs. A dev needs to plan ahead and try to follow SOLID in order to avoid creating an unmaintainable mess — you can’t do that if you are always just fixing symptoms without looking for causes.
- Grit. They should do their best to solve a problem themselves and only ask somebody else once they get stuck, unless it’s something very trivial. There’s nothing quite as annoying as somebody who asks easy questions that you can Google the answer to, and it wastes both peoples’ time.
Bonus: High proficiency in the client’s/program’s language (usually English). Good naming of classes/methods/variables is very important. Understanding a client’s needs and having the ability to tactfully question or challenge the client is also important.
Bonus: Interested in open source development. Maybe they have something on github/gitlab already.
- Self-published code, although it would really help
- Knowledge of which programming patterns to use for any situation
- General programming experience that you can really only get by making lots of mistakes over a long period of time.
As you can see, most of what I would look for is in the actual character of the person, rather than their skills. I want to work with somebody who enjoys the art of programming, not someone who is only doing it because it makes more money than other jobs.
Realistically, though, you can remove numbers 2, 3, 4, 6, and 7 — recruiters probably won’t care about those. They just want certain knowledge checkboxes ticked off.