11 August 2023

Essential skills to learn to land a junior developer role

My girlfriend is retraining as a software developer and I am supporting her as best I can. I've mentored juniors before but never a complete beginner. It's a weirdly nostalgic experience witnessing her grapple with the same challenges that were driving me to frustration 20 years ago.... HTML "Why is a link made with an a-tag?", CSS "Why won't these 2 boxes just line up?", JavaScript "Why is the 2nd item in an array number 1?"

But for all the similarities the biggest difference from when I learned in 1998 (aside from the annulment of rule 30) is the huge breadth of learning resources at her disposal. I learned in a pre Google, pre StackOverflow, pre code-along video tutorials, pre Skype/Zoom/Meet and most certainly pre the free (or really cheap) code camps.

But how the hell does she plot a path through all these 6-week courses? What does she aim for? When does she draw the line at the end of pure abstract learning and start interviewing for junior roles? Well, with the help of my network, I wrote this list of bare necessities that I think a typical Bristol software company would expect someone to have before taking them on as a junior....

Git: You should be able to...

  • Create a repo on GitHub (or Bitbucket)
  • Clone a repo locally via the command line
  • Create branches, switch branches
  • Stage file changes, unstage, commit
  • Push branches to remote repos
  • Create PRs

(I wouldn't expect a junior to know how to rebase, squash commits or use reset)

HTML: You should be able to...

  • Know basically how to use all the main HTML tags; all the H's, the parts of a table, the paragraph and text stuff, lists, the media elements, parts of a page (head, body, nav, header, footer).
  • Use the Chrome inspector to see how long it took for the page to download and render
  • Have built your own little personal site
  • Explain the relationship between XML and HTML

CSS: You should be able to...

  • Demonstrate the 3 basic selectors (tag name, id and class)
  • Understand nested selectors
  • Give an example of a shortform and longform styling rules
  • Be able to mark-up a table, a flexbox layout
  • Know how to use display property and how each option affects the element

JavaScript: You should be able to...

  • Explain the 3 types of variable and how you define them
  • Iterate over an array
  • Define a function, call a function
  • Concatenate strings
  • Do all the mathematical operations (addition, subtraction, multiplication, division, modulus)
  • Know how to use a closure
  • Select DOM elements, update the styling and text content of elements

HTTP Requests: You should be able to....

  • Name the 2 most common HTTP verbs and what they are roughly used for
  • Use PostMan to make a request and analyse the response
  • Name some common response codes and what they mean
  • Describe 3 ways a request can contain some parameter data

Testing: You should be able to to....

  • Explain automated testing and why it exists
  • Explain the different between a unit test and a feature test
  • Give some examples of things a manual human tester might do to help make a product better
  • Talk a bit about security and attack vectors, OWASP top 10, common vulnerabilities.

IDE: You should be able to...

  • Describe a couple of your favourite keyboard shortcuts that make you a more efficient coder

Server side: You should...

  • Be able to explain the basic technologies involved when a server receives a request and sends back a response
  • Have built something in a server-side programming language (eg. PHP or Node)
  • Have written code that reads and writes data from/to a database
  • Have written code that generates a HTML page
  • Defined a class and instantiated it
  • Used a package manager system (Composer or NPM) to install a library/package
  • Have looked at frameworks and what they do (Express for Node JS, Laravel or Symfony for PHP)

Database: You should be able to...

  • Sketch out a couple of tables in an entity relationship diagram
  • write a select query
  • write an insert query
  • write a delete query
  • write a join

So there it is. That list above, if you can hack your way through it using bootcamps, courses, tutorials, videos and forums and be able to tick every row. I reckon you'd land a chance of getting an entry level software developer role in Bristol.

I invite any feedback to the list above. If you think can think of any key skills which you think a junior might be asked to demonstrate in an interview, please let me know with a comment. I will update the list above as I think of more and hopefully, in a years time (summer 2024) Hannah can land herself a junior role and start learning on the job.

POST UPDATE: After sending this post to some friends in the industry I got the following comments:

Pete pointed out I'd missed out anything about testing or the distinction between front-end and back-end so I updated that bit above. Thanks Pete.

Tim would argue that if you're looking for entry level front-end jobs (and of course that is a big "if"), you're going to be building react components from a design. So basic proficiency should include at least 1 style framework and one JS framework. His justification for this is if you know basic JS and how to build modular reusable react components and enough tailwind/mui to make something look like the picture in front of you then congratulations you can now land a £35-40k job grinding out.

I was trying to steer this post (and Hannah) away from making the front-end / back-end distinction too early. Naturally I want her early career to be as free from the shackles of a specialisation as mine was where I learned at a time when everyone had to be full-stack (pre-2010) so I was able to get a broad understanding that allowed me to jump sides frequently or deliver entire sites to clients on my own. Yes we may be in a time now where a framework and package library will always be present and she will never work at a company that is hand-crafting everything in a native language (like I did), but surely having the fundamental under-the-bonnet knowledge of both front and back will make her better than someone who is lacking either one.