When I finished college ages ago, I was getting ready to send out my resume. I felt my resume would easily end up on the top. I knew something like eight programming languages. I would send it to six companies, and then decide between five job offers. That seemed about right.
And so wrong I was. Only after hearing another computer science graduate brag about the number of languages he knew did I realize that everybody who went through a computer science program knew those same eight languages.
And only after about 50 or so resumes being sent out and a dozen or so interviews did I finally land my first job, a year or so after graduation, and after spending that year working in a room where I pulled printouts and stuffed them in bins for minimum wage.
Fortunately, after so many interviews, I started seeing patterns to what these places were looking for. This, of course, was many years ago, but much of the same still applies. I’ve spoken with many hiring managers over the years, and I’ve also been the one doing the hiring. And I’ve put together a list of what hiring managers are looking for today besides coding skills.
Let’s face it: The vast majority of resumes they receive are from great coders. Not all, trust me. But still, being a great coder is not enough to land you that job. First, let’s do a rundown of what coding skills you need. Then let’s look at the other skills.
Summary
Coding Still Matters
Yes, coding still matters, and your coding skills need to be top notch. Hiring managers go into interviews hoping that this candidate is going to be the best they’ve ever seen. And it’s so incredibly frustrating and even disheartening when the applicant lacks the necessary coding skills. Here’s a starting list of the bare bones of what coding skills you need.
- Stacks, queues, linked lists, and similar data structures. Know how to use them. Should you know how to code them? Rarely, but you should have at least once built a stack and a queue so you understand exactly how they work.
- Hash maps and dictionaries: What’s a hash? Go study up and build a dictionary. You probably won’t be building dictionaries, but by practicing you’ll gain a deeper understanding of how they work.
- Recursion: What it is, how to use it, and why you should only opt for it if there are no viable alternatives. (Hint: Most languages today are stack-based, and recursions seriously eats up memory. Not sure what we mean by “stack based”? Your next assignment is to learn what it is. If by chance you’re asked to explain it, you don’t want to be left confused and not getting the job.)
- Call stack and execution context: About that recursion thing we just mentioned, the call stack fills up quickly. What’s the call stack? Again, look it up and understand it.
- Pass by value versus pass by reference. This is vital to understanding what happens to the variables you pass into a function. If you mess this up, you’ll be creating broken code. (Bonus points for understanding what happens in a stack-based language if you return the address of a local variable and why that’s a very bad thing.)
- Big O Notation. Let’s face it, people rarely use this. Why? Because in today’s application development, we’re rarely looking for “optimal code” that translates to “unreadable and unmaintainable code.” However, there are times where this matters, because if you write some code that very quickly fills up the memory and slows the processor, you need to know how to analyze the code you wrote and fix it.
- Algorithms: Sorting, filtering, searching. Learn them and understand them. Then explore map reduce and see where that takes you.
- Understand and develop asynchronous code. This is vital for today’s software development. And don’t just use it, learn why it matters and what’s going on behind the scenes. Imagine being asked during a tech interview, “Why is asynchronous code important and why did they add it to almost every modern language?” If by chance you’re asked that, you do not want to get it wrong.
- Error and exception handling strategies. This should be self explanatory.
- Boolean logic and truthiness. This is especially important in JavaScript/TypeScript.
Treat the above as the bare minimum. If you’re unsure of any of this stuff, or even intimidated by it, then great! That’s an area where you can practice and improve your skillset. Now let’s move on.
Side Skills
In addition to being a great coder, you need to know how to use the tools. What tools?
For starters, the bash shell. Stop relying on VS Code’s built-in Git support. Yes, it’s awesome. And learn it, for sure. But spend your days with git at the command-prompt. Learn everything you can about how to use git in the command line. That includes branching, resolving merge conflicts, and the dreaded “rebase” idea. Learn how to have multiple remotes. And master everything you can about GitHub.
Then:
- Debug. Learn how to use the debugger, and how to step through your code and inspect variables. Learn how to figure out what’s wrong and how to fix it.
- Unit testing is everything: Write great unit tests. Be careful! If you paste your code into ChatGPT and ask for a set of unit tests, there’s a serious problem: ChatGPT will assume your code is correct and will write unit tests accordingly. Instead, do NOT paste your code in. Instead, describe what its intended goals are, and then ask ChatGPT to produce some unit tests. (And better yet: Try to write your unit tests first, and only after they’re done ask ChatGPT for the unit tests. See how yours stack up.)
- Learn how to design great architecture. We don’t have the space here to explain it all, but it’s so important.
- Learn agile, and learn waterfall. Both matter. Older companies still use the older waterfall approach to software development, even though it’s flawed. And learn agile and SCRUM.
- Understand REST and “full stack” architecture. Because that’s what people use today.
- Know SQL inside and out. And MongoDB. (MongoDB is the one “NoSQL” that beat out all the others.) And know why and when you would choose one over the other.
- Know the package managers for the language you’re working with. If you’re using Node, understand the package.json file, and how to pre-create it (and then install everything based on it) or how to manually add to it (both the dependencies and the developer dependencies) and how to do an “npm install” to then add them in.
- Learn Docker. Docker and similar container systems are key to both deployment and development. For docker, learn how to build a docker-compose file.
- CI/CD: Today’s software is built on “continuous delivery, continuous deployment.” Lean what these mean and how to put them to work, especially with GitHub actions.
- Everything Cloud: You knew this one was coming. Know how to deploy software to the cloud, whether it’s as containers or just running on servers. And don’t just learn the basics (like Elastic Beanstalk) but learn how to roll up your sleeves and manually deploy a server with your code running on it using CI/CD tools to deploy it.
- How to protect so-called “secrets.” Software often needs secret keys; how do you guard them without simply hardcoding them and pushing the code up to GitHub? Learn the best practices for guarding secrets.
Pro-tip: You might get asked how you would decide whether to go with an SQL versus a NoSQL database. Understand the differences and when each is more useful than the other. Do NOT simply answer that you would “go with MongoDB” or “go with MySQL” without being told a specific use case.
Also, please know the difference between “Visual Studio” and “VS Code.” There’s a big difference.
AI is Required
Developers are finally figuring out how to make AI work for them. And hiring managers and team leads are learning how AI can help their teams build code faster.
Today, you are very likely to be asked during a tech interview how you make AI work for you. Do NOT say that you refuse to use it. Instead, explain how it’s a great assistant.
You don’t need to learn how AI works “under the hood” (unless you’re aiming for an AI job). Instead, you need to know how to use AI effectively to help you produce better code.
While we’re still a long way from AI simply building sophisticated apps from start to finish, we’re very much at a point where they can be a great coding assistant. Practice with Google’s Gemini and ask it to build a function for you. Just a function. Then look at what it produces. Is it correct? Go through the generated code carefully, and ask for refinements if necessary.
Pro-tip: Reading AI-generated code and spotting problems will likely put you far ahead of other people interviewing for the same job.
Consider the End User
Today, hiring managers want people who can develop software for end users. Except in specific cases (like a company that developers coding libraries, for example), the end users usually aren’t required to be highly technically competent. They’re not expected to be tech geniuses. In fact, for the vast majority of businesses developing software, the end users are expected to be people who will turn over their hard earned money and use the product, which needs to be as easy as possible to use.
While you might get frustrated with your relatives and neighbors, in reality, they represent the vast majority of users. You’re not required to help your relatives and neighbors, but a basic understanding of their (lack of) abilities and what makes them tick in general can go a long way during an interview.
Businesses have customers who are paying them money to build a product. And the businesses don’t want techies who demonstrate a full-on disdain for the people who will be using the products. Instead, they want to hire people who “get it” and “understand” their customers because ideally these customers are together paying millions of dollars to the company who, in turn, are paying six-figure salaries to the developers who have empathy for the customers.
Soft Skills
Now let’s talk about soft skills! We’re coders, and we often don’t have the best people skills, which is why we ended up as coders in the first place. But push those thoughts aside.
At a bare minimum, you need to have good communication skills:
- Good people-to-people skills
- Good comments in your code for other people to read
- Good writing skills
- Great collaboration abilities
- Great initiative and responsibility for your code
All of the above matter, and all of the above will likely come out during an interview.
But beyond that, there’s an important truth in the hiring process: They’re looking for somebody they like, somebody they want to work with on a day-to-day basis.
This is perhaps the single most important factor people make in deciding who to hire. It’s true. If you ace the tech interview and are clearly the strongest candidate, but come across as a jerk? They’re not going to hire you. Period.
And what’s even crazier? Kindness and likeability are skills that can be learned just as much as any coding skill. Choose to be somebody they like. And that will push you far ahead of all the candidates. After all, if they don’t like you as a person, why would they want to work with you on a daily basis? Be a great person.
Conclusion
Building software is so much more than just coding. There’s learning how to build a REST application that interacts with a database, as well as how to secure that database behind a firewall with no direct access to the internet… as well as running the database with the lowest amount of privileges such that if anyone breaks in through it, they’ll be limited on what they can do.