Author Madmeg
Over the years I have seen many software engineers who lack a passion for software. This is fundamentally flawed. Their main objective is collecting a good paycheck there is nothing wrong with this but if you lack passion and ambition you will inevitably feel disdained and end up contributing poor inadequate code. On the other hand, there are many people who believe that they can drift through their career without learning anything new maintaining outdated and sometimes harmful beliefs.
In this post I will go over what I think makes a good engineer and how to become a better engineer.
Firstly we must understand what an engineer is,
" Engineers apply scientific principles to analyze, design, invent, code, build, and create to solve all sorts of problems and make the world a better place "
Understanding this is important, engineers must be well-versed in all aspects of their chosen field. So for software, we must understand the principles that make a computer work and why they work and then build up an understanding of software and how it interacts with hardware from the ground up.
This is an aspect of software engineering that is becoming forgotten. With an increasing number of new engineers learning the very basics of some abstract language like Python or JavaScript just to get a job. Pushing out low-quality code that is net negative, slow and blotted. Most of the time this is no fault of their own, with the advent of online courses and "learn to code in 1 month" books shrouding the complexity of software in falsehood.
A good engineer will understand the principles of their chosen domain in great detail. So a mechanical engineer will have a great understanding of materials, their properties and their applications. A software engineer will have a great understanding of how memory works and how software interacts with memory. The same goes for the CPU.
The reasoning behind having strong foundational knowledge is because of how integral it is to the subject, there is no excuse to have a poor understanding of the basics, even if you primarily work on web applications it's still important to understand how the http works even if you're not directly interacting with it. Then from the ground up you build your understanding of a technology such as the web instead of jumping in at the top where most of the base principles are abstracted away.
A key aspect of becoming a "good engineer" is keeping up with new developments and inventions within the field of engineering. This is critical not only to stop your self falling behind but to also look at the development critically to see what positives and negatives this development entails.
A good engineer will learn these subjects in-depth, and go down the rabbit holes as most of the time it will reveal other areas that they haven't learnt or didn't know about. This is especially true with mathematics, where one top-level subject will lead you down a rabbit hole into many more niche subjects.
This is very important especially when it comes to picking the right tool for the job. Knowing and accepting the pros and cons of a tool or a language is very important. Too many software engineers gloss over the floors of a language for their own benefit rather than the benefit of the project.
The same goes for engineers who hold a tool or a language on a pedestal because they think that it's objectively the best.
It's good to know all the theory but if you can't accumulate that knowledge into a project or proof of concept then it's
useless.
Applying knowledge is the whole point of being an engineer either to solve problems or prove a concept.
A good engineer will constantly practice what they learn.
Learning to think critically is one of the most important aspects of engineering. It's integral to understanding and challenging concepts and their effectiveness. There are too many engineers who lack or choose not to spend the time critically thinking about a subject leading to inefficiencies and complications.
Here is a good resource if you want to learn how to critically think: Critical Thinking: Where to Begin
Reading is a great way to pick up lots of knowledge on a subject. There are loads of books on different subjects within software engineering. But don't take these books as the word of god, again think critically about what the book is saying. Normally I ask myself questions such as "are there any issues with that approach?" "is there a better way to do this?" "what would I do differently?" or even "is what this book describing correct?".
Take notes of what you think and what you have learnt, take note if there are other subjects the book mentions that you don't know about, then do some research on them. I like to use obsidian to take notes but that's a personal preference.
Here are some good reading lists (for software engineers) if you're stuck on what to read:
Once you have learned a subject, the best way to reinforce that knowledge is by putting it into practice. Theory alone isn’t enough—real learning happens when you apply what you know in a tangible way. Even if it’s just a small proof of concept or a side project, the act of building something forces you to engage with the material at a deeper level.
When you start applying new concepts, you’ll encounter real-world challenges that weren’t obvious in theory. These practical hurdles will test your understanding and push you to refine your knowledge. More importantly, working on projects helps you develop problem-solving skills, which are essential for any engineer.
A few ways you can apply what you learn are:
By consistently applying your knowledge, you move from theoretical understanding to practical expertise, making you a far more competent engineer.
One of the most overlooked but essential habits of a good engineer is the ability to critique their own work. Many engineers make the mistake of assuming that once their code works, it’s "good enough." However, truly great engineers understand that there is always room for improvement and that self-assessment is crucial to growth.
The goal of critiquing your own work isn’t to be overly harsh on yourself, but to develop a mindset of continuous improvement. Engineering is a lifelong learning process, and the best engineers are the ones who are never fully satisfied with their own knowledge and abilities. By making self-assessment a habit, you’ll consistently refine your skills and become a better engineer over time.
It's easy to get lost on what to start on and what to read, here is a list of my recommendations
Try and steer away from websites and project similar to that. They won't teach you much. Pick a project from the list above, research the subject and then write it.
Becoming a good engineer isn’t about knowing the most programming languages, mastering every framework, or chasing the latest technology trends. It’s about developing a deep understanding of the fundamental principles of engineering, applying knowledge in practical ways, thinking critically, and continuously improving your skills.
The best engineers are the ones who never stop learning, who challenge their own assumptions, and who strive for excellence in everything they do. They apply what they learn to real-world projects, analyze their own work with an objective eye, and collaborate effectively with others.
Engineering is a lifelong journey—one that requires curiosity, discipline, and a willingness to grow. If you commit to these principles, you won’t just become a good engineer—you’ll become a great one.