After focusing on studying, learning, and preparing for a career in technology, facing the workplace in the real world can be daunting. You may ask yourself "Am I ready to translate my knowledge into practice?" Come learn about the seven technical skills you need to launch your career as a software engineer. Leave with tools and ideas that will help you acquire and enhance these seven critical skills.
When I first started my career as a software engineer in the data storage industry there was so much to learn. Between new skills, new processes, and proprietary software that I had to learn, I felt like my brain’s processing units were running out of cycles, and its circuits were overloaded. It took me around six months before I became comfortable with the tools and internal processes. Some skills I had already learned in school, such as version control, while others I was not adequately skilled at, such as figuring out the right bug fix in a multi-million line codebase, a skill school has not prepared me for. When I spoke with other new employees in my field, we all felt that the learning curve was steep.
I will share seven skills that I needed to jump-start my software engineering career. My work colleagues and technical professional network validate this list of skills based on their own career experiences. A lot of us were even asked about those skills during our technical interviews. These skills differentiate candidates by demonstrating the ability to translate knowledge to practice. My colleagues and I all had a sliding scale of how many of these skills we possessed and how much we mastered them before we started our careers in software engineering. We wished that we had an insider’s scoop on the skills we lacked. I want to be that insider to help candidates launch their professional careers in software engineering and be productive for their own benefit.
- This is my personal experience, as well as others that I have asked. So this may not directly apply to you.
- These skills are in no particular order.
- My experience has been in the United States of America. Your experience may vary depending on where you work.
- My experience has been with Fortune 500 tech companies. Your experience may vary depending on where you work.
- This list is not exhaustive but represents the skills that apply to many workplaces.
- My experience has strictly been in the backend side of the software stack so some skills may not directly translate to frontend roles.
The Seven Skills
1. Version Control
Description. Every company has its own way of keeping track of source code changes. Sample revision control software includes GitHub, GitLab, and Perforce, among others. Knowledge of one tool is all a candidate needs to get up to speed with similar tools within their workplace. While many schools and bootcamps now use tools like GitHub, version control is not consistently taught, especially when you factor in international schools.
Topics beneficial for candidates to learn are, but not limited to: What is version control? What is a branch? How do you checkout and checkin code? How can you back out a change? How do you take a change from one branch to another? How can you collaborate with others using version control?
Recommendations. Track your own projects using version control, such as GitHub. As part of building your project portfolio, link to your GitHub profile in your resume so employers can see the great work you have been doing and what you are capable of.
2. Building Code
Description. Candidates get introduced to build tools, such as Makefiles early on in their studies. However, many move on through their study program relying on push-button compilation/builds provided by Integrated Development Environments (IDEs), such as Eclipse. While IDEs are convenient and useful, they may not be used in the workplace because many IDEs do not scale to large software systems.
It is fundamental for candidates to learn how to create heir own build rules/files. Candidates will likely work on large codebase with its own build tools and they will need to modify the build files at some point. Having exposure to them early on will give them an edge at work. There are also various full-time positions for build engineers that candidates could miss out on if they did not pick up those skills early on in their career.
Recommendations. Create your own build files and do not rely on push-button options that are provided in IDEs.
3. Continuous Integration and Continuous Delivery/Deployment (CI/CD)
Description. Companies now use CI/CD to various degrees. Knowing what they are and how to use them is a great skill to learn. As early on in your career, the expectation is not to be an expert in CI/CD. However, having a high-level understanding of CI/CD, its benefits and its limitations will give you an edge as a candidate.
Recommendations. Setup a continuous integration pipeline for your GitHub repository. Note: this is extra-credit. As a hiring engineer, I do not expect you to have had such experience.
4. Scripting and Software Testing
Description. Scripting languages are used to solve many problems. Quality assurance/test engineers usually use scripting languages to write automated tests. Development engineers also use scripting languages to write their own unit tests. Engineers can write scripts to automate various workflows to increase
their productivity or to analyze data.
Scripts are commonly written in Bash, Perl, and Python, among others. Scripting has become a mainstream skill in technical fields. It is beneficial to learn at least one scripting language. Not only do scripting skills open multiple job opportunities for candidates, such as in the fields of quality assurance and data analysis, they also enable traditional developers to be more efficient and effective in their job by enabling them to automate repetitive tasks.
Software testing can vary in scope and complexity. For example, an engineer can perform unit testing to verify the feature/bug fix that they are implementing. Test Driven Development (TDD) is a common approach now for newly/recently developed software. A quality engineer can perform functional testing to verify functionality developed by the development engineers. Other quality engineers can perform systemic testing that verifies the interaction of various features and emulates customer’s software usage patterns, as well as continuous integration tests.
Candidates often apply for jobs wanting to be development engineers and overlook the quality assurance career path. A career in quality assurance can be as technical as a career in development and have career path parallel to that in development.
Recommendations. Write scripts to automate project testing, or other repetitive tasks such as backing up documents to the cloud.
5. Contributing to Existing Code
Description. Many classes require candidates to develop their own projects either individually or in groups. Most of these assignments are either built from scratch or built upon previous assignments that were built from scratch by the same candidates. This is rarely the case in the workplace as employees modify existing code either to build on it or fix existing bugs. This means that the employee will likely change code written by someone else who may no longer be working at the same place to help. You may even work on legacy code. Accordingly, the skill of modifying someone else’s code in a complex code base is priceless.
Recommendations. To learn this skill, candidates can read the source code of any open source project and try to understand it and modify it as they see fit. For example, students can find bug lists in open source code and fix them. A lot of open source projects have change requests tagged for new contributors. While modifying existing code, candidates will learn the following:
- How to read and understand existing code
- How changing one module can impact others
- How to write maintainable code for others to change in the future
- How important it is to document code to explain the rationale behind design decisions.
If this is an option for you, you can also become a tutor and help others with their assignments to gain experience reading someone else’s code.
6. Software Debugging
Description. Bugs are an everyday problem that developers tackle. To analyze bugs, developers usually need debugging tools, such as gdb. Debugging tools can be used during development to examine the values of different variables. Candidates should learn how to use debugging tools, as well as learn how to write macros for such tools when possible. This will help candidates become more effective engineers.
Another tool that helps with debugging is logs and metrics. Can you look at logs and metrics and construct the story of how the system behaved in a way that was not intended? Note that looking at logs/metrics may be a more advanced topic for early in career professionals. As a hiring engineer, showing that you know that these are available tools to help with debugging and solving a problem is enough.
Recommendations. Learn debugging tools and write macros for their tools. For example, candidates can run their programs from gdb, set breakpoints, and check the values of different variables.
7. Familiarity with Linux and Containers
Description. Linux is “the world’s most important open source project”. Linux is gaining traction in the technical community and is becoming a more mainstream operating system than ever before. Many companies use Linux as their development environment. Being comfortable around Linux and its tools helps candidates launch their careers more smoothly. Gaining familiarity with Linux will help you understand containers and Kubernetes a bit easier. Knowing about containers and Kubernetes is also a very valuable skill to have.
Recommendations.To learn Linux, candidates can install a Linux operating system on their computer or within a virtual machine and start using it. When using Linux for other non-development tasks, students will learn how to become more familiar with it and start to administer their own Linux systems. There are simpler versions, such as Ubuntu that are easier to install and maintain. Ubuntu is also used in the cloud, IoT, and containers.
From my experience, these are the main seven skills that I found helpful to jump-start my career in the software industry. As mentioned earlier, as an early in career candidate, the expectation is simply familiarity and not expertise. What other skills do you find valuable to jump-start your career in tech?
I would like to thank the various colleagues at NetApp that helped me refine and edit this post.