Last week on TheAtlantic.com, Ian Bogost published an article titled Programmers: Stop Calling Yourselves Engineers.
In his article Mr. Bogost argues that those who are writing software applications shouldn’t claim to be “engineers” because they haven’t passed a state-mandated certification exam.
He says that the title “engineer” is “cheapened by the tech industry.”
Although I wholeheartedly disagree with this premise, reading the article made one thing abundantly clear to me: those of us who create software for a living have a credibility problem.
The Stage is Set
The public relies more and more on software, and tremendous software successes have set the bar high.
We have:
- Smartphones that deliver near-limitless functionality and can be extended via millions of apps.
- Tablets that a four year old can pick up and use without any instruction.
- A social media infrastructure that seamlessly handles tens of thousands of interactions per second and “just works.”
Because of the prevalence of software in the everyday life of almost everyone on the planet, and the tremendously high level of quality that’s been driven into these products through the evolution of software project management techniques such as Scrum, software failures become very dramatic.
This doesn’t help with the perception problem.
The bar will continue to be raised as the public relies more and more on the software we create and the cost of failure continues to escalate.
Programmer, according to Google, means “A person who writes computer programs.”
That’s not good enough.
“Programmers” need to adopt an engineering approach. If they’re just slinging code, they need to step it up. They need to adopt contemporary software engineering disciplines such as Scrum, test-driven development, and continuous integration. They need to evolve into software engineers.
The Economic Impact of Software
Our economy is continually becoming more and more dependent on software. From 1997 to 2012 software industry production grew by $276 billion — from $149 billion to $425 billion.
During that same time period, the software industry’s direct share of GDP grew over 50 percent, from 1.7% to 2.6%, outpacing the rest of the economy.
It’s no surprise. Any product you purchase today either includes software or was designed and/or manufactured with software. All fundamental business processes rely on software, and software forms the foundation of all worldwide communication.
What does this mean? It means we need to continue to get better.
The Definition of “Engineer”
According to Merriam-Webster, the definition of an engineer is:
A person who has scientific training and who designs and builds complicated products, machines, systems, or structures.
Those who have a computer science or engineering degree and go on to design and build software certainly fit this definition. Is it fitting to use the title “software engineer,” even without passing an exam? I believe so.
Software is complicated, with little margin for error. The computer understands 1s and 0s and that’s it. Each feature you add to a software product either works 100%…or it doesn’t.
Driving sophisticated software systems to perfection is a tremendous undertaking, and can only be done successfully with a disciplined approach.
Today’s software engineers accomplish just that, with the help of contemporary tools, sophisticated automated test techniques, and by leveraging pre-built and pre-tested libraries of components.
Scrum and Software Engineering
Since the late 80s software development processes have evolved from an archaic waterfall approach to today’s agile methodologies such as Scrum.
Contrary to what Mr. Bogost suggests in his article, Scrum doesn’t lead to lower quality because of its short iterations, but just the opposite. By injecting quality into the project early and often, projects are delivered in a more visible and predictable fashion.
Scrum is founded upon the principles of planning, communication, and quality. It is especially adept at battling the time-honored waterfall-based tradition of “testing at the end.” By requiring a specific standard of quality to be met before the end of each short production cycle, there’s no way that testing can be allowed to wait until the end.
Software projects oftentimes fail because they don’t meet the needs of end users, or the product doesn’t work reliably. In our webinar on Driving Business Results, you’ll see how Scrum addresses both these problems.
Throughout a Scrum project, business stakeholders have total visibility into the status of the product as it’s coming together. Instead of “going away for 6 months to build it,” the team is front and center, demonstrating fully tested software every few weeks. If the software isn’t meeting the needs of the business, adjustments can be made long before it reaches end users’ hands.
Because of the requirement of Scrum to demonstrate only software that’s “shippable,” sophisticated quality assurance techniques, including use of automated testing, dramatically increases the level of quality throughout the project.
Software engineers understand how to leverage today’s tools to build in quality from the very beginning.
Licensing of Software Engineers
Mr. Bogost compares software engineering to other engineering disciplines, such as civil engineering, where those signing off on the plans for a bridge must hold a professional engineer (P.E.) certification.
Many states require licensing of software engineers if they are independent contractors who work on systems that affect the health, safety and welfare of the public. This helps ensure they meet a minimum standard if hired to work on a relevant software system in one of these categories. This makes sense if you’re an individual hired to help code a control system for a radiation therapy device.
I fly airplanes for fun, oftentimes in the clouds. When I can’t see anything outside I have a 100% dependency on the flat-screen displays in the airplane to tell me which way is up. Those avionics are all software-driven and really need to work if I’m to stay alive. I’m not opposed to oversight to ensure the software developers that create this kind of software follow a mandated process and do the proper testing.
Does this mean anyone with a title of “software engineer” needs to go through a time-consuming and expensive licensing process? I don’t believe so.
Engineering for the Rest of Us
I don’t believe we need to charge off and start licensing everyone who is writing code. However I think everyone who writes code should think like an engineer.
How do we do this? We have two options:
- Wait for newly minted software developers to learn how to think with an engineering mindset, through experience and mentoring in a professional environment.
- Enhance our educational system to produce new college graduates with the requisite skills, focusing on teamwork and contemporary software engineering processes as part of their curriculum.
Steve McConnell highlights the challenge in his book, Professional Software Development:
“The software world has become a victim of its own success. The software job market has been growing faster than the educational infrastructure needed to support it, and so more than half the people holding software development jobs have been educated in subjects other than software.”
That was written in 2004.
We continue to battle this problem today. There is a dramatic shortage of software development talent, and as the software industry continues to grow it will only get worse without dramatic change.
There is a lot effort already being expended to tackle this problem. Colleges and universities are rising to the challenge and enrollment in computer science degree programs is up. That’s fantastic, but we need to continue driving software development education earlier in the education process.
We need programming education that starts much, much earlier. Elementary school is not too early to be teaching programming skills.
Organizations such as Code.org have taken on this challenge and they’re doing tremendous work. We need to keep the ball rolling and continue along this path, supporting these organizations and helping the next generation utilize the tremendous resources they provide.
Want to help? Bring your children to an Hour of Code event, sponsored by Code.org. There are over 75,000 of them around the world.
Find one near you and plant the seeds for the next generation of software engineers.
So What Does This All Mean?
There are four key factors in play:
- Software is becoming more and more prevalent.
- The margin for error is becoming smaller.
- We have a dramatic shortage of software development talent.
- The demands on software developers are higher than ever.
Those of us who create software for a living need to be at the top of our game. If we haven’t already, we need to adopt an engineering approach, with all the creativity, drive, and standards of excellence that are traits of all the other engineering professions.
Engineers of all kinds are critically important to the growth of the world’s economy. But I believe most important type of engineering right now, the one we need to focus on more than any other, is software engineering.