5 tips for mapping out your career in software engineering
How do you become a good software engineer? What skill set is sought after in the industry? How can you efficiently keep up with the latest developments?
Insight in brief
Welcome to the Hüb – a place where our experts frankly share their opinions, ideas, expertise and knowledge about the industry, its future and important trends.
How do you become a good software engineer?
Becoming good in a field starts with the foundations of learning, right? We can do this through formal or informal education. I believe any education you invest time in is of value because it influences your life in many ways. It teaches you how to think and how to solve problems systematically by relying on foundations that have been present in our industry for a long time, and will continue to be.
What I have observed in the industry in the last few years is that companies are after a certain skill set rather than formal education. So much of the information and knowledge related to our industry is easily accessible and free at the same time. But if you truly want to become a good software engineer, the key is constant learning and self-improvement.
When it comes to formal education, there is a systematic approach to problem solving and assessment, you learn all the fundamentals and a wide scope of knowledge that comes with a field of study. In programming, most schools teach algorithms and other elements that are important for most jobs in software engineering. I’m not saying you can’t become a good software engineer without a formal education, but that would be an exception rather than the rule.
However, I believe that the most efficient learning is on the project and in the team. It’s important that the seniors have enough time to work with other members of the team and help them grow. Also, maintaining a flow of information between seniors and juniors is vital to master techniques in the most effective way for the project they are working on.
You can also learn via online training, courses, and tutorials. I also advise participation in an open-source project. That way you can build your own project portfolio and do some networking at the same time.
I must also add that pacing yourself is quite important when learning new things. Take it one step at a time, move on to the next thing when you’ve learned one thing well. If you have an in-depth knowledge of something, it will help you stand out in your field. Such experts are also respected by clients.
In general, every engineer should strive to spend a few hours each week doing some intentional learning, in order to “sharpen the saw”. I follow one simple 20-minute rule: every day, first thing in the morning, for (at least) 20 minutes, to learn about something you don’t know or don’t know deeply enough. For this, you just need to start your day 20 minutes earlier than usual. Doing just this one thing will make a great impact in your professional life, because If you get 1% better each day, you’ll end up with results nearly 37x better after a year.
What should newcomers pay attention to?
A lot of companies still prefer programmers that have specialized in one area (specialists), because they know their tech stack very well. But specialists can have a limited skill set for analysing problems outside their field. A T-shaped engineer who knows one area thoroughly but also is knowledgeable in other areas as well is a much better option for a team. It is useful for an engineer to have a multiple set of skills to be able to help out in different parts of a project.
I believe newcomers need a solid grasp of fundamentals, whether they learn it from books or from working with colleagues on a project. Problem solving through the processes in a project can make the latter more effective. My advice is to code as much as you can, especially with other teammates during a project (pair programming), but also to read other people's code and do code reviews. In this way you will obtain a skill set that is sought after in the industry. Furthermore, it’s important to learn how to work in a team and collaborate with others. This is often even more important than technical skills.
How valuable is it to keep up with industry trends?
I belong to a group of programmers for whom coding is a job as well as a hobby. I love writing code, so I do it whenever I get the chance. I’m also an avid reader of books and articles in the field. Besides writing code, I take time to read other people’s code, especially online as there are many open-source projects. You can always find something new to learn.
If you do this, you gain a broader perspective on your field of work, but it might also help you out with your future projects. For example, I am using some language novelties in an application we are working on. I did not need to do that at the time, but I believe these novelties will boost my future efficiency in writing more structured code.
Speaking about industry trends, every avid software engineer or architect should take time to read various kinds of technical books and articles online from reliable sources, such as InfoQ, DZone, ThoughtWorks Technology Radar, etc., but also to use any internal knowledge exchange platforms available (such as Yammer).
What are the essential skills of a software architect?
Software architecture entails a different set of responsibilities from those of a software engineer. An architect needs to have broad and deep technical knowledge, preferably in different technology stacks. Most important is a knowledge of architectural foundations, different architectural styles, diagramming, etc. One of the most important skills for a software architect is good communication skills, as they need to talk with a variety of stakeholders, customers and developers. Last but not least, an architect needs to have good leadership and analytical skills. In the role of team leader, an architect should be able to lead a team of diverse personalities and specialities. Regarding analytical skills, they must know how to clearly identify stakeholders in the project, understand the requirements, how to design the system, how to select the right architectural style and technological stack, and of course, how to document it.
To become an architect, it’s definitely important to know and understand one or more technological stacks. On the other hand an architect needs to read a lot of articles and books, preferably recommended by other architects. An architect can also enrol in various courses on the topic and gain certifications (TOGAF, Open CA or an architectural certification from one of the major cloud providers).
It is also essential that an architect knows what is possible to implement at the code level. This is the basis that can be further compartmentalized into different architecture fields such as solution architecture, software architecture, etc. What is common for architects is that they can all agree on one thing - there are no ideal solutions, only trade-offs.
How do you take your career to the next level?
If a company has defined specific job requirements for each role and an internal career track, you can stay with that company for a long time, move up the ladder, and gain the experience they are looking for. Moving into more senior positions requires more people skills, working with junior developers and coaching them. After some years on the job, there are several directions you can choose. For example, some people choose to go into management, where project management is quite a popular option. Others, however, might prefer to follow a technical career path. There are companies that have predefined recommendations for selecting a desired career path in advance, so moving into one also means moving out of a comfort zone and provides an opportunity for improvement.
Since each individual has the greatest influence on their own career, you should find a company that will support you in your career choices and allow you to grow in the desired direction.
Dr Milan Milanović has been working at Zühlke since October 2017. He has over 15 years of experience in the software industry, working in different domains and several tech stacks, including web tier technologies, .NET and Java platforms, mobile and distributed computing technologies. He holds a PhD in Computer Science and is a Microsoft Certified Developer and ScrumMaster. He is the author of numerous scientific publications in various fields of computer science, for which he has received several (international) awards. His main areas of interest include software architecture, cloud computing solutions, web and mobile solutions, agile methodology and managing software teams to deliver innovative and high-quality products.