Back in my first job, the only skill I needed was to be able to write programs for desktop computers in BASIC. There were no databases, no internet, no debuggers, no test frameworks and no build systems. Once the web appeared, things quickly got more complicated with web development, server languages, CSS, HTML and JavaScript all appearing and maturing in a relatively short time.
I had ten years of development under my belt before I encountered my first version control system and that’s when I also found out about relational databases. Five years later I discovered spreadsheets and build systems. It’s hard to think of many jobs where so many new things have come along during the course of a career. It’s felt like being on a permanent learning curve. Every five or seven years there were new things to learn to keep myself employable and much of that wasn’t programming languages.
Summary
Developer skillsets
- Hard skills. These are programming languages like Python, C/C++, C# and more recently Rust. Plus, there’s SQL and databases. These are the main things on a CV.
- Soft skills like being able to communicate effectively, write documentation, solve problems, understanding the business you’re in and self-management.
- The In-between technical skills. Let’s look at some of these in a bit more depth.
Development Tools & Environments
These are now a must-have in any CV. The most popular VCS (Version control system) is Git but there’s also the commercial ones like Perforce and TFS and the online ones GitHub, GitLab, and Bitbucket. To write software you’ll likely come across one or more of these IDEs and text editors (Visual Studio, Visual Studio Code, Android Studio, IntelliJ IDEA, Vim, Eclipse). On Linux you’ll also need to know terminals for shell scripting (Bash), and package managers (npm, pip, Maven). Then there’s build tools like Webpack, Gradle, and Make, containerization platforms such as Docker and Kubernetes, and virtual machines. And knowledge of Git (branching, merging, rebasing) would not go amiss.
Data & Storage
The last fifteen years has seen the arrival of NoSQL databases such as MongoDB, Redis, DynamoDB, Cassandra, plus Graph databases like Neo4j and Amazon Neptune. Add to that ORMs (like Hibernate, SQLAlchemy), schema migrations, and query optimization basics. It’s a long way from Access and SQL Server!
Excel or Libre Calc are great for data preparation. Do not be afraid to mention them.
Networking & Infrastructure
Network engineering is an entire subject in itself but a knowledge of the basics: things like TCP/IP, DNS, HTTP, SSL/TLS and SSH is useful, especially if you are setting up websites and servers. If you’re using APIs then REST architecture and proxies e.g. NGINX is useful. If you’ve designed APIs then you should know about versioning, pagination and rate limiting and how to use Swagger and Postman. In that case, you might find it useful to include OAuth2, JWT, authentication/authorization concepts on your CV.
AI/ML Concepts
The clamor for AI knowledge has never been louder and can add many dollars to your worth. However, there’s quite a bit more to AI than just prompt engineering. ML has been around a while and there are plenty of books and courses about it,
Cloud Platforms
I’ve avoided these myself; too scared of something going wrong at the weekend and ending up with a $15,000 bill. But if you’re looking for work in a company that uses them then these are probably a must.
AWS services such as EC2, S3, Lambda, IAM, CloudWatch, ECS, etc. are most popular with typically 30% of cloud services using AWS. Then there’s 20% who use Azure services: App Services, Functions, Storage, Monitor, etc. and 13% for Google Cloud Platform: Compute Engine, Cloud Run, IAM, BigQuery, etc. Source.
Testing & Quality Engineering
Testing your software is important so knowledge of unit testing, integration testing and TDD (Test-driven development) are useful skills to have.
This also ties into security. Do you know how to manage secrets and code securely? Have you used encryption and hashing?
Understanding hardware
While not strictly necessary, a knowledge of hardware can improve software performance. On some processors code or data that fits in memory caches will run faster. Understanding when to use stack memory rather than heap can also provide gains and even something as simple as using smaller integer types can lead to faster code. Being able to use a disassembler to view the compiled machine code can provide insights into code length.
This isn’t a complete list. Some other areas you might like to look at.
- Containers & Virtualization
- Data Engineering & Analytics
- Software Maintenance & Reliability
Conclusion
What I’ve found in teams of developers is that even though everyone can program in the same languages, each is often a specialist in a subset of these technical areas and be the goto person when needed. In the current team I’m in, I was the only one that could program in C/C++ and translated over a thousand lines into the language we use and I’m the goto person for our Build server which uses Jet Brain’s TeamCity.
Do in-between skills make a difference on CVs? I like to think that if you can demonstrate a selection of these, they will distinguish you from other candidates and show that you are adaptable and good at learning, both desirable attributes to have. They’ll also give an interviewer an insight into your experiences and things to discuss. And your future manager will get a feel for making you his go to person for whatever.