There is a big difference between software engineerig and programming, and the products created by these two fields speak for themselves. Now not all construction jobs need a civil engineer just like not all software needs a software engineer, but those are the projects that keep people coming back.
Too many people, think, believe and treat computer science as programming and not software engineering. I see and hear about it all the time, loads of projects where people just dive in and start writing code. Even professional projects at major companies, where a programmer writes a bunch of code, and then requirements are written to reflect that code, as well as design documentation to represent the classes and their behavior. It’s baffling.
Imagine for a moment a civil engineer doing such a task, so haphazardly, digging a hole and laying I-beams down. He’d be fired, and certainly loose his license. Think about that last sentence for a moment. In other engineering disciplines, conducting a project, as so many programmers do, is so taboo that it results in termination and a loss of license, meaning you’re not allowed to work in the field anymore. Yet everyday programmers do it all the time. So I plead, let’s stop this, let’s escape this mentality of “programming” and let’s start being engineers. We need to stop cutting down trees and we need to start engineering bridges.
Nearly anyone can create a bridge. All you need is a body of water or air that you want to travel over and a tree. Here is how it is done.
Step 1: Cut down the tree.
Step 2: Put the tree over the impassable region.
The tree will function as a perfectly good bridge, you will be able to cross it, going from A to B and you might even be able to keep your feet dry most of the time. For some software maybe all you need is a tree. Some examples: prototypes, proof of concepts, or something you only need to have done once. For these cases a tree works great. The tree may not be stable, it might not look very good, but hopefully you aren’t climbing the North Face of the Eiger and you actually don’t care what happens to the tree after you have crossed. For jobs like these, you need a programmer. Depending on the time frame you have in mind you might not even need a good programmer.
However for everything else, you need something more than a tree and for these cases you need a software engineer. Just as most bridges are not trees, most software is not programming. When you build a proper bridge you need a civil engineer, not a lumber jack.
More Bridge Analogies:
Just because your bridge doesn’t look pretty, doesn’t mean you can skimp on quality. Case in point is a highway bridge. Consider any number of bridges on the interstate, none of which skimp on design, engineering, or quality. A highway bridge is like notepad. It’s stable as all hell, it gets loads of traffic, and it gets the job done. Notepad may not be pretty, but I’ve never had it fail me. In all my years of computing, I’ve never once had notepad crash on me. It might not be the prettiest, the most powerful, or even all that useful, but it certainly is built well. Notepad has been around in Windows machines for ages, and the fact it still works without fault, shows that it was engineered.
But we can do better, take the Golden Gate bridge. Anyone can cut down a tree, but to build a bridge like the Golden Gate, that takes ingenuity, creativity and disciplined engineering. What do you get for all that engineering? You get an icon. Sure the Golden Gate Bridge is a bridge that lets people traverse the San Francisco Bay, but its also so much more. It’s a world-known cultural icon, it identifies the city of San Francisco, it is an engineering feat of such beauty it attracts thousands of people from around the world to simply experience it, to touch it, to see it and to walk on it, and doing those things, simply being in the same place as that bridge, it is an experience. Now that is an impressive bridge.
The Software Golden Gate:
Just as civil engineering has created such a magnificent artifact, so should software engineering. Software engineers are capable of what civil engineers are, in our own discipline. We may even have a few examples, the iPhone comes to mind, maybe Photoshop or perhaps Google search. My point is, we, Engineers of Software, are capable of what the civil engineers are, when they created such iconic artifacts present in most major cities, and so we too, should strive for such beauty in our own field. So although we can all hack down trees and build devices for traversing water, lets take pride in our work, lets practice a disciplined approach as the civil engineers do, and let’s truly create iconic software. Software that is stable, and beautiful, and of such quality it’s a joy to simply experience.
Some may argue, modern bridge building has a half-dozen decades head-start on us, and it does, but that doesn’t mean we shouldn’t strive for the same level of completeness and quality. In fact, it’s all the more reason we should be able to get there faster, we can learn from the lessons of the engineers that came before us.
The Golden Gate Bridge, the St. Louis Arch, the Hoover Dam, these are the projects that great minds are interested in, and they are designed and developed through engineering, so let’s stop just programming, and let’s start engineering. Those iconic artifacts of civil engineering, those are the projects of beauty, attracting thousands, for years and decades. So let’s learn from the other engineering disciplines, and engineer our own icons, just like that beautiful bridge in the San Francisco Bay.
If you work for a company, interested in engineering software, and building projects of iconic quality, feel free to contact me, I am certainly interested.