Typically, software developers are proficient in a few programming and scripting languages, along with industry- and company-specific applications and services. In general, learning Java, C++, and Python will open lots of career opportunities.
As you plot your career trajectory, though, keep in mind that specialist languages can lead to specific, often lucrative opportunities. For instance, R is used for statistical computing, while COBOL is still integral to legacy systems in the financial services industry. Shell scripting is used for systems administration and developing CI/CD pipelines.
If you’re just entering the software development field for the first time, know that fundamental concepts of computer science such as algorithms, data structures, and software design patterns provide the building blocks for all software development, regardless of the specific technologies and programming languages used in a particular project. Understanding data structures and algorithms is likewise essential for developing efficient and scalable software, along with a grasp of design patterns, which help make code more maintainable.
Understanding SDLC, Cloud and Frameworks
Abhi Shrikhande, Toptal vice president and general manager of technology services, says an understanding of development methodologies such as Waterfall, Scrum, and Agile is also important as you progress along your software developer career path.
“Technology has fundamentally changed how we think about the product and software development lifecycle,” he adds. “Technologies like the cloud that provide access to complex services and features at the click of a button, allow for a more collaborative SDLC and have blurred the line between SDLC phases, from requirements definition and design to testing and deployment—the product life-cycle has greatly shrunk.”
It’s important to understand development frameworks that provide predefined libraries for common-use cases. These include front-end development frameworks such as React, Angular, and Vue.js, mobile development frameworks such as React Native and Flutter, and machine learning frameworks such as PyTorch and TensorFlow.
Uri Shamay, chief architect, developer security at Check Point Software Technologies, thinks that, because of the rise of the cloud, it’s important for career-oriented software developers to know cloud basics and the differences between IaaS, PaaS and the world of cloud native .
Self-learning and online courses are a good way to start for many software developers. “You can choose… bootcamp programs,” he says. “You can still go the old way and do a Bachelor’s degree in Computer Science or a related field like IT, but with the explosion of content on the internet today, there is no entry barrier to learning a new thing by yourself.”
Possible Career Paths
“I’ve been a generalist as a programmer my whole career up until I stopped writing code for money, because that gives you the most opportunity,” says Nathan Sutter, global vice president of engineering at CoderPad. “I think Python is going to be around for forever and the most popular thing for quite some time because of how ubiquitous it is.”
According to Sutter, once you’ve gotten your foot in the door as a software developer, there are two main tracks to take for career advancement: one is the management track, while the other is the individual contributor track.
“The management track typically looks like engineering manager or senior engineering manager, director, senior director, VP, SVP, global VP and then CTO,” he explains. “That is all management- and leadership-focused, starting with individual team management all the way to my role, which is global engineering team management.”
The individual contributor track goes from senior engineer to engineering manager to principal engineer and then senior principal, where it can fork off into architecture-focused roles at larger and enterprise-focused companies.
When you get further along in your career and you’re on the senior engineering route, you have a choice to make. “Either you stay as an engineer forever, which is, to be honest with you, a terminal position for many people, and many people are very happy with that. They want to be at the senior level doing an individual contribution for forever—it’s great and we need lots of those,” Sutter says. “Or you go down the management route or go down the sort of more architecture-focused route.”
Shamay says a developer can specialize in a specific area, such as security or machine learning, and follow that through a senior level: “Some developers decide to continue the management path, but if a developer wants to stay as a builder, he can go into an architect/tech-lead position.”
Do You Want Management?
Reed Laverack, senior engineering manager at Codecademy, says choosing to move into management hinges on personal preference and personality type. “There are those people who just love to be in the code, and they want to think about their piece of the code and making it the best it can be,” he says. “For me, I really liked dealing with large ideas, but I didn’t like getting into the details as much, so I liked having much more influence over a larger area—that’s why I liked the managerial route.”
He also likes the mentorship and people aspect of management. “Usually, companies offer a project that you can lead completely to sort of get project management skills,” he explains. “A lot of companies have tech lead roles, which is sort of half in, half out of software development before you make that transition. There are ways to sort of build up within the company.”
Delegation, Communication, and Continued Learning
For software developers moving into management, one of the most effective skills is delegation. “Let your team really drive the product. The engineers are in there every day. They know the code. Let them steer it,” Laverack says. “I definitely stumbled quite a bit getting into it, trying to take on too much, and I didn’t empower sort of the team enough. That was the biggest skill I needed to learn, and a lot of it was learning by doing and leaning on more senior managers.”
Shamay says all software developers need a key set of soft skills, including:
- Willingness to learn new technologies
- Attention to detail
- Strong problem-solving and analytical skills
“The most important are strong communication and collaboration skills because, at the end of the day, software development is like an NBA team,” he says. “An individual will never be able to build great software like a collaborative team.”
Shrikhande says software development is used in every industry, making it a constantly evolving discipline. “Along with the desire for continuous improvement, it is important to deliberately carve out time for learning and experimentation,” he says. “It’s easy to deprioritize that when life and work get busy.”
He advises keeping up with new technologies and industry trends through technology publications and forums such as Hacker News or Linux Journal, and even social media communities like Reddit. Online learning platforms like Udemy and Coursera are likewise useful for many developers.
“Participate in industry conferences and events, and experiment with technologies that you are interested in and passionate about,” he adds.