As software developers we like to think that we have a strong grasp on language as well as logic. The confidence to believe we understand can just as easily be the hubris which makes us blind. People in general are ingenious pattern recognition engines. We connect dots, see connections, and see the whole of something even when parts are missing. Where this leads us astray is when we try to apply order to randomness instead of simply seeing what’s there in front of us.
There are numerous examples of known logical fallacies that we, as engineers, can fall prey to and must be ever vigilant of. Sometimes even our own ingenuity can be a weakness because we make complex scenarios of things which are simple. Foremost among the fallacies we encounter has been with us for millennia, and, still to this day, is referred to by its Latin phrase, “Ad hoc ergo propter hoc”. The translation of this phrase is, “after this, therefore because of this”. Meaning that just because something happened after something else, doesn’t mean that it was caused by it. When you’re dealing with complex systems, it’s entirely possible that many things can go wrong simultaneously and appear related. It’s important to bear this in mind when doing any kind of technical investigation.
No language is perfect. Whether you’re talking about writing a speech or writing a line of code for a software project, at the end of the day you’re using an abstraction of a spoken language. Every language has imperfections and could mean as many things as there are people who read it. It takes not only a strong grasp of software design concepts, but also a discerning approach to word usage, formatting, and document layout to write a solid piece of software. It takes even stronger understanding to modify or maintain software. You have to be a discerning word smith as much as a keen logician to build solid and reliable software solutions.
The ability to set aside preconceived notions and see what is, rather than what we want to believe, is key to being able to be a software engineer. Just as there’s more to being a plumber than unclogging a drain, there is more to being a developer than writing code. It takes judgment, creativity, and the willingness to prove yourself wrong. Stepping back and exercising objectivity in an analysis can be the difference between a massive success, or a critical failure.
Before the first line of code is written, there is a spark. The spark is the idea that sets the gears of creation in motion. That spark may be as small as a simple messaging application, or as large as a new way to deliver media. Making that spark grow into a beacon that lights up the world takes ingenuity. Being a software engineer means having the mindfulness to consider all the moving parts, the perception to fix one’s own mistakes, and the ingenuity to see and suggest solutions to problems that haven’t even happened yet. That’s what we do. Get in touch with us if you’d like to learn how.