Ask HN: What is the skillset required to be employable as jr dev?

44 points by lostPoncho ↗ HN
When hiring someone as a junior developer, what do you look for if they don't have a college degree?

39 comments

[ 0.26 ms ] story [ 66.6 ms ] thread
(comment deleted)
First, look for companies that you'd like to work. See if the technologies that they work with are the ones you know, and start developing more skills on them. That will increase your chances of getting hired.
Working in semi academia I do see these kind of applications. The following are personal opinions that work for convincing me when I am in an hiring committee.

* A good cover letter * Having worked with a version control system * Shown initiative

For me a good cover letter makes a world of a difference. Anything at all that shows you have thought about the problems that the organization you are applying to is gold and basically an guaranteed phone call.

I still see CV's and get people at phone stage that never used a version control system e.g. git. I don't care which one you used. Its just that it is my baseline for competence.

For a junior position our main aim is to have someone who is willing to grow to a senior and that requires initiative i.e. doing more than what they are told to do but seeing what needs to be done and starting on it. Being in semi-academia I also know that we can rarely keep people once they become senior level due to wage differences. Initiative can be shown in many ways, from the way you reach out to us in the pre-interview stage, to highlighting things you have started in your social live e.g. club activities etc...

Having a good understanding of things you claim to know (even if that is not a huge set), and ability to effectively convey that understanding to someone else.

Personal or commercial projects that demonstrate relevant skills. Bonus points if I can see the source.

Having a mentor really helps to prioritize your learning efforts in the right spots, both before and after getting the job.

I am a developer without a degree and transitioned from IT into development. I am in my last year of my Undergrad in CS now.

What you need more than anything are skills. Ranging from networking knowledge to having a good command on linux. In addition you have to be able to program in Python, Java, JavaScript, C. You also have to understand data structures like linked lists, queues, b-trees..., and to top it all of understand algorithm analysis to judge the efficiency of the code you write or look at.

My recommendation is to get the degree, medium to long term you will need it, and it will benefit you greatly. It seems to be popular to claim a degree is not needed for CS but if you want to do anything besides simple web apps then you will need the knowledge.

Lets go through this one by one:

In addition you have to be able to program in Python, Java, JavaScript, C.

This is objectively false. To expect a junior developer to know all these is unrealistic, plain and simple. If you have working knowledge of one or two programming languages and have an appetite to learn you are good to go.

You also have to understand data structures like linked lists, queues, b-trees..., and to top it all of understand algorithm analysis to judge the efficiency of the code you write or look at.

For 99% of the work out there, this is also not true. This is the horse crap that is fed to everyone so that folks can ask questions that have little to no relation to day to day development. If you are doing web development, then some knowledge of database query optimization will come in handy. But I don't remember the last time I had to figure out how a linked list worked whenever I was doing any server side or front-end optimization.

Agree with your points, and want to add that I've been in the professional software world for 7 or 8 years now and I don't have an active working knowledge of Python, Java, or C. I do have Objective-C, Swift, PHP, and JavaScript. I can hack together some Java or C, and I can recognize Python. I think asking for full working knowledge of 4 different languages is a bit much for a Junior, or even Mid position. Ability to apply knowledge to a language is more important than knowing the ins and outs of a bunch of them from the get go.
Try applying for a job as if you don't have any professional experience. Almost everyone wants Python, Java, and something with 'C' in the name for junior positions. However, in my limited experience, they only (reasonably) expect (somewhat) in depth knowledge of one ecosystem and just syntactic knowledge of the other two. Took me about six hours to learn Python to answer the interview questions.
For the work it may be true, but there are lots of interviews that screen and filter on these kinds of questions. The other side of the gate may totally allow for learning and growth, but the gate itself is usually not as forgiving.
I did not mean to imply being an expert in all the languages listed, but having some knowledge of them and being able to write code.

I also think that an understanding of data structures is required to be able to identify the best way to deal with data in terms of processing and storage.

It is equally false to say none of what I mentioned is required. There is a broad spectrum between your statement and mine, and the truth is somewhere in between. The better prospect for a job is in the area of knowledge though I hope we can agree on that.

> > In addition you have to be able to program in Python, Java, JavaScript, C.

> This is objectively false. To expect a junior developer to know all these is unrealistic, plain and simple. If you have working knowledge of one or two programming languages and have an appetite to learn you are good to go.

Still in school, so haven't had even begun to look at jobs yet, but I know python, java, and c (and a few others), and have a basic knowledge of js. Does that give me an edge, then?

nope; its actually not that uncommon for a college graduate; An edge may be gained if you vary paradigms for some companies (Procedural, Functional, OOP, Logical, Interesting Type System)
> You also have to understand data structures like linked lists, queues, b-trees..., and to top it all of understand algorithm analysis to judge the efficiency of the code you write or look at.

While it's true that you need to know how to judge efficient code, the bit about data structures is HR bullshit. If the only indicator about an organization's coding styles during the interview is a bunch of cargo culted questions from HackerRank, then you should think about whether you really want to work there or not.

Remember that hiring is a two way street. As much as you're offering them something, they're offering you a paycheck (among other things). Don't accept a bad deal just because their "innovative".

I am not offering the ultimate truth here, just my opinion. However I notice that people seem to be offended by the notion that some knowledge of data structures is required. It's a very basic concept of how to efficiently handle and store data.

I am not sure what people think a basic requirement for a development job is. Being able to learn is a very low threshold in my opinion, and how do you prove that when you don't have a degree and don't know the basics? See the catch there?

Again, If someone want's to be a front end web developer what I am saying is most certainly not required. For anything else I think it holds though.

- a good working knowledge of the command line (up to say piping, xargs)

- basic networking

- show me a hobby or project you have worked on, I'll ask you questions

- I'll likely try to teach you a command or small factoid to see how receptive you are to learning

- I'll likely query you on this factoid at the end of the interview to test your memory and comprehension

- if you haven't said "I don't know" in the interview I'll ask you a very hard question to see how you react to not knowing something (hint: getting angry or defensive is not good)

- I will try and get you to teach me something, so I can make sure you know that senior members are life learners too. This is to identify if you're one of those people who lose respect for someone not knowing something you know, as I think this is a strong negative sign

Bonus points if you have competed an end-to-end project, it doesn't have to be deployed online, but being about to talk full stack is great!

A brain, and the ability and willingness to learn. None of us really know what we're doing in this industry anyway, and you're constantly on the treadmill of learning new things to keep up.

Being able to effectively use the internet to search for information is a big deal.

Honestly, it doesn't make a huge difference if they have a degree or not. Most universities don't teach much of anything that is particularly relevant to actual software development in their curricula. If the practices and technologies that are taught are only ten years out of date, that's cutting edge.

You're going to be spending 3-6 months training up a junior developer before they are at all useful anyway. You just want to find the ones that will be continue to progress at the twelve month mark.

I have a question for interviewers:

how much, if any, white boarding do you have the interviewee do for a front end junior position? And what are you looking for - memorization of common problems/solutions? ability to think through problem? something else?

As someone who has pretty poor memorization and does poor on tests in general - this portion of interviewing gives me the most anxiety.

We don't use any whiteboarding questions. There is a coding component of our interview process, but it's all done on a laptop.

Our goal is to test like you work, so you have an IDE, access to Google and StackOverflow, and when we ask you to implement an algorithm (like QuickSort) we link to the Wikipedia page in the instructions.

We've found that the ability to memorize is basically useless is identifying good candidates, but the ability to implement when given proper instructions is really valuable.

This is what I was hoping to hear! Thanks for replying.
The parent provided one datapoint - his company. But I can tell you from personal experience that this is not the norm (at least in San Francisco.) I've interviewed at a wide variety of companies and I can't even remember the last time I wasn't asked to whiteboard.

Pretty much every company you've heard of uses a similar technical phone screen -> onsite with whiteboarding process. If you're not somewhat proficient at them, you're greatly limiting yourself.

At many bay area startups I've worked for we would do whiteboarding sessions but I would stress that the candidate "treat me like google". I would actively encourage them to ask questions of the type they'd look up, to be comfortable being collaborative. This to me showed much more about a candidate's ability to work on a team, learn quickly, and apply what they've learned than any whiteboard session entirely from memory could prove. This becomes even more important the further out of school a candidate is; some of us took algorithm classes decades ago.
Someone who can talk through a problem, ask questions and think critically. I know HN hates the "consulting" type interview questions; but I find for jr devs its a great barometer of how they would react in the real world to a problem they were unfamiliar with. Ie: how much would you charge me to wash every window in the city? I don't care about the total price, I care they ask and answer the questions, well how many buildings, how long would it take to do one window, how many different building types are there. I want to see them take what looks to be an insurmountable problem, and break it down in to small manageable problems. If they can do that, they can reason about any bug or feature on a system they are not familiar with. The only "wrong" answers are if someone blurts out a number without thinking, or someone who just shrugs and goes, I have no idea how to do that.
I was hired as a junior developer, without a degree, with the following things:

- A personal blog

- roughly 20 personal projects that I've worked on throughout my lifetime as a hobbyist, most of which weren't very complete but demonstrated my passion

- A willingness to learn

- A good attitude

That's very impressive. You should be proud of yourself for putting so much work in!
Thank you! I did most of those project during my high school and college years. I've found that there's no substitute for hard work in life, you can either go to school and work hard to get a degree or you can work hard on entrepreneurial endeavors but you have to work hard. How you choose to gain experience isn't that important, especially as a software developer.
(Optional: Where do I ask:) Who's hiring Jr. Devs? Because as far as being passionate to learn (and knowing some of the basics of .NET flavored development), I'd like to grow my skillset beyond that of IT Generalist.
As someone who doesn't have much of a resume, but has a lot of knowledge and passion, I have no idea where to present myself.

Every "job listing" I find for programming asks for a 4 year degree and years experience. Since I don't have either (on paper), I have no idea where to show myself.

Who is hiring Jr. Devs? Where?

I don't think that the traditional "find a job post - click apply - send resume off into the void - wait" model will work very well for you. So instead, I would focus on researching companies and then reaching out directly to founders/very senior engineers. If you work hard to demonstrate passion for both their product and learning how to help build it, you will get some opportunities.
Contribute to open source projects by fixing bugs and writing features, it shows you can navigate a large codebase and you learn a lot from working on software people use instead of toy/academic projects. That's how I got hired without formal requirements.
Resourcefulness. Being able to get things done.

Curiosity. Always wanting to learn more.

Growth Oriented. Constantly learning.

Humility. Knowing when to say, I don't know and ask for help.

Pride. Having a decent ego, wanting to be the best and showing it by putting in the work.

Know SQL. Not because you'll be needing it, but because of the bias among older developers that junior developers just glue together frameworks and libraries, and lack real problem solving knowledge. Learning SQL is probably the quickest way to diffuse that.
I have hired junior web developers, both those right out of school and those without CS degrees. I look for:

- a portfolio website that deploys a range of recent web technologies. This demonstrates initiative, and also the fact that you can set up a web site somehow.

- some freelance work on your resume, even if it's as simple as setting up a WordPress site.

- a code sample, so have something decent ready, again showing an interest in more than basic web development. Deploying a framework other than jQuery is a plus, as long as you show some sufficient hand-coding skills.

- interest in back-end technologies is a plus even of the job doesn't require it

- in the interview, openness, honesty and drive

- and finally the coding test I give you will show if you know what you are talking about

We look for junior developers who are "coachable": we can teach them the skills they lack and they will learn quickly.

As a junior developer where I work, we aren't expecting you to know a lot coming in. But we do expect you to have a good attitude and to want to learn. We can teach you how to write software, but we can't teach you about work ethic.

We have one developer who started 10 years ago without a college degree. He's a team lead now.

In summary: - You should want to learn from the senior developers - You should have a positive attitude - You should have a good work ethic (show up on time, help your coworkers, shouldn't act like any task is beneath your skill level)

There's a lot of great advice here which can be broken down into two categories: specialist vs generalist. A really important thing to figure out is what kind of developer you are. Which sounds better: a. Constantly being challenged to learn new things, a rapid paced environment where lots of change and challenge are introduced b. Organized environment where work is split up by expertise, groups have a narrow focus where they become experts in their domain and iterate to perfection

Obviously you should have a nice balance of both, but I've found many company cultures to lean more one way or another, and the advice on this post seems to divide similarly. If you like option A I'd recommend getting a good overview of a variety of languages, data stores, and tools/frameworks so you can at least have an idea of which one you'd learn more of for a given problem. If you like option B I'd do a deep dive into algorithms and CS fundamentals with one language (C, Java, etc) and target companies that work with that language. They're also more likely to have a well defined intern/junior dev role than the fast paced shops, but a slower pace of learning/advancement.

I got hired as a junior developer (a long time ago) with a math and physics degree, one computer class on my transcript, no experience, and "mostly self-taught with respect to computers". I got hired by a manager who had a master's degree in math and was mostly self-taught with respect to computers.

So the skill set required to be employable as a junior dev is to be able to convince one hiring manager that you can do it. Then, after that, you have to learn enough to be able to actually do the work, so that you can remain employable. That's different, though. Learn what you need for the job you have. Don't worry about learning other things; learn what you need as fast as you can. You'll pick up other stuff around the edges, and that's good, but they're paying you to learn (and then do) what you need for this job.

Without a degree you need a ledger of work, and preferably references by people you have collaborated on something on.

- You must have projects in at least two programming languages with at least one programming language listed in the job posting

- at least one project to 'completion' that uses a database (sqlite counts) (MVP of MVC with DB) (preferably something remote so you have do deal with networks and latency)

- Either know how to navigate Linux command line Environment xor a Microsoft/Netbeans Style IDE

- Use of a version control system (preferably in collaborative environment)

- Depending on company culture you may also need to have reviewed algorithms and abstract data types. (you can usually skip this requirement by being hired as an intern first, and bootstrapping your employment)

- willingness to document and report work completed during a time period (as a ledger of progress)

Background: Recently started my second job (mid-level) after leaving my previous job (junior, first programming job). Switched to programming from journalism

How: Wanted to create a news aggregator, so I teamed up with a friend (backend guy) and learnt how to do frontend. 14-months later I got hired after creating some side-projects and learning enough to convince my first employer to take a chance on me.

What worked for me: Learning JavaScript, the language, instead of trying to learn shiny, new frameworks. Learning how to read source code (a more recent habit but it helped me get my second job). Showing a genuine passion for coding through getting involved in open-source communities and learning outside of work

Smart and gets things done.

Every other thing is related to that. Are you a freelancer asked to build a website? Who cares whether it's PHP or JS, it just has to be done. Are you maintaining a PHP website? Then you need PHP to get things done.

The rest of the interview process is to filter out the smart part.