Software engineers tend to be smart people. Writing software is hard, and it’s entirely a discipline of exercising your brain cells to write the correct commands to make the computer do what you want it to do. Add in the layers of complexity that come with dealing with humans who want software to do something without necessarily knowing or understanding precisely what they want, and what you end up with is a fairly complicated practice.
There are many things that make writing software inherently difficult: it’s easy to mess it up, there’s a lot of complexity, the abstractions we use are often flaky and poorly understood, and everything is a moving target because the whole platform is constantly evolving both above and below wherever your project happens to be in the stack.
Software engineers do have one huge blind spot: their egos are often much larger than they should be. If you read comments on Hacker News, you’ll quickly get a sense that people who write software and frequent web forums like HN think quite highly of themselves and their intellect. They’re not entirely wrong, it’s true that you do need to be smart to make decent software. However I get the sense that a lot of these people grossly overestimate their own ability to understand and synthesize all the information in the world.
Admittedly, I think in my younger years I was one of the computer people who believed I was smarter than I really was. It didn’t help that throughout my youth people often called me smart, and it wasn’t unusual to be praised as a “genius”. It wasn’t until I became older and realized that while software appears to be magic from the outside, it’s actually just a bunch of instructions that a machine follows which can start to provide illusions of intelligence once the complexity grows large enough.
The point of this post, I suppose, is to remind folks to keep their egos in check. Perhaps I’m just writing this as a reminder to myself. There are plenty of good ways for software engineers to get reminded of how unspecial they are, and usually the easiest way to do that is to go engage in activities with other people that don’t involve computers.