Back in the 1940s, computers were still regarded as specialized electrical machines. They were so complex that getting them to run was a massive undertaking and a challenge reserved for men whom the established sexist culture treated as technically superior.
With men busy building the hardware, software was left to women. Programming the computer was treated as secretarial work. It was efforts of these women who laid the foundations of computer programming. Their software literally put men on the moon.
In the late 1960s when computers proved viable solutions to enterprise businesses, the variety of business problems increased the demand for software applications. Now, more men were interested to write software. Since building software was still exclusive to the highly educated, software teams became as diverse as academic circles of engineering schools.
It was the introduction of personal computers in the 1980s that tilted the balance yet again. PCs abstracted the hardware, which left the software for the curious mind to figure out. Best news: you no longer needed a PhD to use computers. Sadly, this change made computer programming as male-dominated as the larger workforce.
Those of us who grew up in that era feel pretty nostalgic when it comes to PCs and subconsciously treat our childhood experience with computers as a badge of honor. Those of us who became software engineers of today have shaped today's stereotype of the software engineer. While diversity in the workplace has been increasing over the years, the pace of change has been too slow to make a dent in this stereotype.
The software engineer stereotype goes beyond being male-dominated. It keeps away anyone who did not live the same childhood or did not receive the same education as we did. Maybe because we think those life experiences are necessary for someone to learn our craft and to enjoy building software as much as we do.
But the joy of building software is inherent within the craft: As best described by Frederick P. Brooks, Jr in his book The Mythical Man-Month, programming is fun because it involves "fashioning complex puzzle-like objects of interlocking moving parts and watching them work in subtle cycles, playing out the consequences of principles built in from the beginning. The programmed computer has all the fascination of the pinball machine or the jukebox mechanism, carried to the ultimate."
It is this element of fun that makes many of us spend so much time in front of the magic screen. We fall in love with our craft. To the outside observer, this seeming obsession is difficult to to understand: if we prefer spending our time in front of a machine, then we must lack social skills. This perception has further developed our stereotype into a socially awkward introvert. Sadly, we embraced this perception and reinforced it: We refer to great programmers as nerds.
Computer programming is indeed similar to solving puzzles. We use an abstract medium to solve an abstract problem. But software engineering is the craft of solving real-world problems. Just as real-world is messy, software engineering has an element of chaos that takes more skills to deal with than puzzle solving.
Software engineers work as a team to solve a business requirement through a software solution. Since the business requirements are ever-changing, software solutions take a life of their own, gradually turning into large and complex systems. So we spend more time reading existing code than writing new code. To work effectively within our team, we are expected to share our understanding of the software, through documentation, collaboration, and team meetings.
Our stereotype of the true software engineer will perform very poorly in the real-world.
Breaking the Stereotype
It would be to our benefit to break the stereotype of the software engineer. If we do not wish having a man-child hacker with underdeveloped social skills as a future coworker, we should stop promoting this mascot for our brand.
Breaking this stereotype helps us develop the skills that we need to become more effective software engineers. It also removes the artificial constraints on age, gender, and career background, making our craft more inclusive to all those who wish to join the fun.
Building software is becoming easier. Learning computer programming is more efficient than ever before. With much lower barriers to entry, anyone with sufficient level of interest could learn how to build software, master the craft, and work with us as colleague. This is worth celebrating: Now we can share our joy for the craft with more people. 🎉