How to Become a Great Software Engineer
As we all know, being a software engineer takes work. You need to see a lot and constantly improve yourself. Yet, there are many questions and dilemmas, what one should do to become a great one, and what is less critical.
During my 20 years of career in different companies, from startups to large ones with more than 10.000 people, I found what differs between good and great software engineers, and here are recommendations on how to become one:
Master one programming language in depth
Take one programming language and go in-depth with it. Learn everything you can and be a master of it. Some good languages you can select today are Python, Java, C#, and Rust, ...
To be sure which programming languages to learn, check these indexes of popularity:
Learn Software Engineering concepts
When you master a programming language, its syntax, semantics, and constructs, the next thing is to learn different software engineering concepts, such as:
Algorithms and data structures
SOLID, DRY, KISS, and YAGNI principles
More on this in the next section.
Learn the complete Software Development LifeCycle (SDLC) process
Try to understand the complete software development process, from requirements to deployment. Learn about Agile methodologies, DevOps, and Quality assurance.
And try to work on different projects; on more projects, you work you will learn new stuff and grow.
Be a product-minded engineer
When working on your project, don't settle just with specs; jump to implement it. Think about other ideas and approach your product manager with them. Try to understand the complete system, but also how business works. Be an end-to-end product feature owner.
Improve your communication and soft-skills
Be respectful of others, communicate clearly, and be humble. Being kind has no financial cost, but its effects are immeasurable.
Learn to write, learn to present, and speak well. This will make you stand out from the crowd.
Try pair/mob programming. Talk with people outside engineering, grab a coffee or lunch, or do a hallway chat.
We need to learn, but the trick is when and how. Don't just learn things because this could be more efficient. We need to know intentionally, just before we need it, and this will make the most significant impact.
Work with someone more experienced
The fastest way to progress in your career is to find a mentor. He can help you find your gaps and show you some new opportunities. A mentor can be found inside an organization or outside (check specialized services, such as MentorCruise).
Always try to work with people who you admire and who admire you.
Use good engineering practices
Learn and follow good practices, such as:
Using version control
Write your tests correctly (check the test pyramid)
Learn how to refactor
Also, learn your IDE and all the essential shortcuts you need. Debugger too.
Use productivity techniques
To be more productive, we need to learn different techniques, such as:
Prioritization (check Eisenhower matrix)
Time management (check Pomodoro)
Concentration (check Deep focus / no distractions)
Note-taking (check Notion)
This will help you to keep in your mind the only important things you need now for the current task. techniques
Also, remember a can-do attitude and proactiveness. —an essential pillar of every great software engineer.
To learn more about it, I recommend a book, “The 7 Habits of Highly Effective People: Powerful Lessons in Personal Change”.
Ultimately, more is needed, even if we know a lot. What does it take to be a great engineer? It takes time, fails, and experiments. So go and practice, practice, practice!
Learn Fundamentals, Not Frameworks
We, as developers, like to learn new stuff and try them asap. That stuff is mostly some new frameworks and tools (such as React, Angular, Spring, Web Forms, ...). Yet, those frameworks usually have a short life, 2 to 5 years at their best. Instead of learning frameworks, which are needed to some extent, we should focus more on learning fundamentals.
Learning software development fundamentals allows developers to understand the underlying principles and concepts common across different frameworks and programming languages. This understanding allows for more flexibility and adaptability when working with new technologies or facing problems that a specific framework may take time to solve.
Additionally, a strong understanding of the fundamentals can lead to more efficient and effective use of frameworks, as the developer can better understand how to customize and extend them to meet specific needs.
Take an example of a web application that allows users to upload and share images, which is done, e.g., in Ruby on Rails and its functionalities for image processing. If the number of users increases, we could only work with performance issues if we know only the framework well. Yet, if we understand the fundamentals of web development, we could identify bottlenecks and try different solutions, such as using CDN-s, optimizing image sizes, using various storage solutions, etc.
So, which fundamentals to learn:
Try to learn those fundamentals, buy and read these books:
Thanks for reading Tech World With Milan Newsletter! Subscribe for free to receive new posts and support my work.