If you found value in this post, consider following me on X @davidpuplava for more valuable information about Game Dev, OrchardCore, C#/.NET and other topics.
Write code. Complete an app.
This is the short path you can take to becoming a software engineer.
It's important to ask yourself what you mean when you ask "how to become a software enginner" because different people may have different ideas about what that means.
I would argue that any person who can code a complete application qualifies as a software engineer.
Not all applications are equal, however.
Software comes in all shapes and sizes.
You have web apps, desktop apps, mobile apps, daemon/background apps, embedded apps, games, command line utlities, and more.
A "full stack developer" is one who is competent in all layers of a particular application stack, where "application stack" is loosely the different aspects of a software system. Namely: User Interface (UI) & User Experience (UX); core logic or business logic rules; and data persistence like a database.
That's a bit of an oversimplification but it covers the major areas necessary for a software system to provide some kind of value to some kind of users.
A person who can write code to deliver each part of the full stack of an application can certainly call themselves a software engineer.
Here is a brief step by step of how one might become a software engineer, which is sort of a bare minimum that I'd look for what considering candidates for open software engineering positions at my company.
Create a web application that allows a user to create, retrieve, update and delete some kind of data. This is a classic "CRUD" application that covers basic functionality found in most software used by end users.
One example of this is a "todo" application that allows you to keep track of your todo list.
Another example is a movie database for you and/or your family to track movies that you own.
Once you've mastered creating a web application to store, retrieve and update data in a database, you're ready to then apply those skills to a specific domain skill.
Software engineers and software developers are modern day blacksmiths.
We take code and forge into into valuable functionality that a specific person or group finds useful for their work.
In essence, we make software for other people who have problems that software/technology can solve.
A more complex project to work on might be a double entry bookkeeping system for you to track your finances.
This example requies you to understand how double entry bookkeeping works and that you build a software system conform to the rules and constraints of that particular process.
There are certain rules, or business rules, that a bookkeeper (one who does bookkeeping) must follow to keep a set of financial books for a business.
As a software engineer, your responsibility is to understand the "domain" of that bookkeeper, to understand what bookkeeping is, and to create a software system that allows the bookkeeper to do his/her job with your software system.
Once you've take your software skills and applied them to a specific domain skill, that is how you know you've definitely become a software engineer.
The next step is to understand how your software application is just one part of a greater system.
Where a software application allows a users to do his or her job, a software "system" encompasses how that software application existence with other systems in this world.
For example, to build on the prior mentioned bookkeeping application, you can imagine how that application can exist alongside other systems, like the bank account for the business.
Imagine refactoring your bookkeeping applicaiton to interoperate with that bank account so it can automatically read transactions to allow the bookkeeper to classify them.
To achieve that, you would have to know and understand how (if possible) you can integrate with the bank's system likely through some kind of Application Programming Interface (API) to read data.
Most times when you want to read data from another system, you'd follow some kind of developer guide provided by the bank to interface with their system.
Once you've added an integration like this, you're no longer creating just a software application, but you're maintaining a software system.
Software Engineering is a unique combintation of science, art and applied social skills.
And it certainly is a craft that is ever evolving requiring software engineers to change with it.
Consistency is critical.
Continually writing code to make applications is important to improve your craft.
Understand how tha craft can be applied to other people's profession is next level and further increases your stance and a software engineer.
And then finally, once you understand how you can integrate your application with other systems, you're an advanced software engineer that can apply systems level thinking to solve real problems.
Good luck and keep coding!
If you found value in this post, consider following me on X @davidpuplava for more valuable information about Game Dev, OrchardCore, C#/.NET and other topics.