How to become a software engineer?
This was a question that my friend asked recently and it got me thinking. What were some common patterns that people followed in order to acquire the skills needed to be a software engineer?
In this blog, I’d like to break down my personal journey of becoming a software engineer and some key themes that I have seen in other people’s journeys to provide a broad picture of how to become a software engineer.
What is a software engineer?
In my eyes, a software engineer is someone who uses technology to solve problems. The technology that they use depends on who they are, the problem context and the maturity of their technology. But it always revolves around solving a problem for consumers, businesses or the government.
With this in mind, the most direct way of becoming an engineer is to be extremely good at solving problems. So now the question becomes: how can I solve problems?
The golden rule: build products to become a software engineer
When I started my software engineering journey in university, I asked this question to people from my senior years and people already in the industry and everyone has a very consistent message:
Create your own coding project to learn software engineering
This is the golden rule for anyone who is looking to create a career out of software engineering. It serves two purposes:
- Building your own project teaches you to discover a problem, which simulates working on real-life projects
- While building it, you will need to make many architectural/coding decisions, which amasses your portfolio of best practices
To formally execute this, it is important to start small first and build harder and harder projects. Oftentimes, new starters want to jump straight into building a full-stack app, without grasping the basics needed to execute that. When learning any skill, rushing is equivalent to building a house on sand. Starting small allows you to consolidate your foundation, such that your development quality and speed is higher in future projects.
Tools and frameworks that engineers use to build products
In my journey, my goal end goal was to be able to create a full stack app, which is an app that had a frontend user interface, a backend layer for handling business logic and a database to store information. I made small steps towards this goal by building the following projects:
- A portfolio website with ReactJS
- A stock tracker website with python Django
- A stock voting system as a mobile app on Xamarin forms and Azure cloud
The order of the projects I built incrementally builds my skill as a full stack developer, starting with frontend skills with the portfolio website, then backend skills with the stock tracker and finally, full stack skills with the mobile app. Learning incrementally allows you to continuously improve your skills by building projects that are “just” outside your comfort zone. The more you build harder projects, the further you are able to stretch your uncomfortable zone until you reach a point where you can build anything you want; it will just be hard and takes time and it will not be impossible.
Is this the right fit for you?
To tackle this question, I’d recommend reading this book called: So good they can’t ignore you by Cal Newport. This book postulates that a person starting their career should explore a field where they are “good” at it since passion can be derived from what you are good at. From my experience, a person who likes solving problems using technology (specifically) can find software engineering to be a rewarding field. You are challenged every day to learn something new and pick up new best practices and having that tech-driven learning attitude goes a long way in software engineering.
So good they can't ignore you by Cal Newport
Coming back to “being good” at software engineering when starting out, I will again emphasise the importance of building your own projects to learn from them. Actively coding can be far more beneficial than purely looking at the theory (although this assumes you have a decent foundation in computer science concepts).
And don’t be afraid to build “filler” projects initially. Not every single project you build must be the next tech startup and there will be projects where it is entirely focused on learning a tech stack whilst being a generic app. I’d encourage taking those generic apps as lessons on how to build a great app so that when the time comes, you will know how to do it.
To summarise all the points above, becoming a software engineer takes practical experience. Building your own app or for someone else can be one of the most valuable lessons you can learn as an engineer and for those looking to start a career in tech, remember that anyone can become a software engineer. All it takes is an innate interest and work ethic to keep learning and building!
If you are interested in learning more tips about working as a software engineer, check out this blog about workplace stamina:
And here are some bloggers on BULB who I'd recommend reading to learn more about software engineering: