It is so easy to distinguish an engineer (or an engineer to be) from a non-engineer. When we interview people for a software engineering position, we want to determine how much of an engineer the candidate is. That’s why we ask a fair amount of questions apparently unrelated to software. Real engineers focus on the problem, break it into pieces, and analyze them. They translate the problem into their “own words”, making analogies with common, easy-to-understand processes. Once their solution is challenged, they are able to optimize and explain it.
Non-engineers on the other hand tend to scratch the surface of the problem and come up with a quick solution. When challenged with questions, they get defensive saying that it’s not something they ever studied or ever did and that’s why they cannot propose a better solution.
The truth is not everyone is born to be an engineer. And still, many schools pretend to be able to train people in becoming one. 🙂 Jokes aside, engineering is not something you are born with, well … maybe exceptional capabilities. Anyone can train to become a decent engineer. Unfortunately, schools are not of great help. For example, software engineering schools train students in a lot of things, because knowing as much as possible about computers is definitely good. Certainly, it’s necessary, but not enough.
Computing helps people and the final goal of a software engineer is to make things possible. Of course, the way things are built matters, but the final objective is to improve someone’s life. Many times, engineers forget about the final goal, usually because they are educated to focus on the inner layers.
Fortunately, there are ways you can train yourself to become a better engineer.
1. Ask Yourself Questions. A Lot Of Them!
I do not mean questions related to your work (I assume you are already doing this), but situational questions in general. In short, be inquisitive. I remember that, when I was about seven years old, I noticed that generally the braking distance does not depend on the car weight. For almost a month, I tried to find an explanation for it…
It might seem pointless to ask yourself questions for which you can very easily find the answer on the Internet, but training your brain is really a good thing. Some people prefer to lift weights, you should lift problems.
2. Validate Your Findings.
Assuming you’ve already found some answers, do some research on the Internet. Understanding how far your approach was from ideal may be very rewarding.
3. Put Yourself In Charge.
There are many ways to do a specific thing, but some ways are better than others. Engineers are change agents. You can imagine what would have happened if Einstein had taken everything for granted. Yes, I think Einstein was a great engineer, as he was able to connect the dots.
4. Learn How To Ask Questions.
No matter who you ask questions – yourself or others, there has to be a process that starts with the overall picture and ends with the last detail. To me, the process of asking questions is very much like Google Maps. First, you get the picture of the entire region and afterwards you may zoom in. The basic set of questions imply at least a “what”, a “how”, a “when”, and a “where”. Sometimes, you may need to ask more, but always ask “what” and “how” (in this order).
Having a strategy for asking questions is one of the most important things you can do – never break the rule and try to make other people follow the process. Otherwise, simple things like meetings, for instance, can turn into mess.
5. Don’t Be Afraid Of Making Mistakes.
Great engineers make big mistakes. People who do not want to make mistakes live by the book. For example, in software engineering there is a solution for almost anything. All you need is a little bit of research. I like it when people still try to build greater things, even though they failed in the past. It’s really no shame to fail. With engineering in particular, lots of things can go wrong and many lands remain unexplored. Because most people choose to walk the line.
I do not particularly like people who give up once they discover that other people tried the same thing and failed. Before anything else, it is important to understand why other attempts failed. Just because other people failed doesn’t mean you should abandon.
6. Don’t Be Afraid Of Fixing Mistakes.
Always fix and improve. For example, very few people are able to acknowledge mistakes and fix them. When it comes to engineering, denying mistakes leads to extremely poor results. In software engineering, this may turn out to be a big issue, because things can get crazy when you somehow know that a component is broken and, instead of fixing it, you simply wrap it up with layers that eventually try to deal with the source of failure.
7. Befriend The Impossible.
If you assume something is not going to happen simply because chances are slim, bad news – it will in fact happen at the worst moment possible. As an engineer, try to identify the things that got overlooked and anticipate the worst-case scenario; there might be a few. Predicting the unpredictable is a highly important engineering task!
It is actually hard to be a good software engineer. Computing can be very anti-engineering, as it’s closer to mathematics than to physics. The already known resolution is the best place to start. This makes people forget about engineering and, eventually, even promising engineers take the paved road.