Are Programmers Engineers?
In yet another attempt to drive their ad impressions, Slashdot asks an old but still controversial question: Are Programmers Engineers?
I used to think otherwise. I graduated from the University of Illinois at Urbana-Champaign where the Computer Science department is part of the College of Engineering. For a couple of years I took the same classes as the engineers. I still have the T-square to prove it.
Because CS gets lumped in with engineering at many schools, graduating programmers often think of themselves as engineers. But the distinctions start appearing very quickly.
Engineers are required. Programmers are optional.
To be an engineer, you have to be licensed. You have to pass the Professional Engineer exam. Engineering is one of those fields where you have to have a license to know the right answer. Law is like this too. I'm quite certain I know more about copyright law than most small town attorneys. Nevertheless, they are allowed to render their opinion on the subject whereas I am not. Engineering is similar. Some things can only be legally done by a licensed engineer.
Anybody is allowed to write code.
Engineers work for a living. Programmers do what they love to do.
Engineers are generally marked by a higher degree of professionalism than programmers. Some people think this is because of the certification, but I think it comes simply from the origins of career choice. Many programmers started coding as a hobby and gradually made it their profession. I did. I was writing code years before I could drive a car. Sometimes we make stupid choices because the distinction between hobby and profession gets blurry.
Engineers generally don't do that. Teenagers don't design bridges in their spare time and then decide to pursue civil engineering as a career. Engineers always think of their job as their profession, because that's all it has ever been.
Engineering is well-understood. Programmers have no idea what they're doing.
In general, engineers can predict their workflow. They don't get into very many arguments about widely divergent ways of managing a project. Ask them to estimate a project and they'll probably get it darn close.
So far, there are no universally accepted methods for management of software projects. We all do it differently. Some of us get amazing results with virtually no process at all. Some of us have formal methodologies and still can't finish anything on time.
Engineering is real. Programming is abstract.
Engineers work with physical things like electricity, mechanics and heat. When engineers design and build something, it is usually a tangible item which must be manufactured. You can touch it, maybe even hold it in your hand. In some cases it will retain its value for centuries.
Programming is the manipulation of complex abstractions. We invent abstractions and give them names. We manipulate them and use them to build things. When our finally product is built, it requires no manufacturing. It is merely a string of bytes. Theoretically, a monkey sitting at the keyboard might accidentally of typed the same string. The product we build cannot be touched or held. It will be worthless in just a few years.
Am I saying that engineers are more valuable than programmers? Certainly not. Could I design a bridge, a TV, or a concrete canoe? Nope, but I defy any engineer to design and ship a good version control system. Programmers solve really hard problems too.
Our universities call us engineers because there is no college where we fit. I don't blame them for that, but I have no desire to borrow the word engineer as an attempt to make myself sound more credible.
Why not just admit that software development is unique? No other field is like ours. Engineering looks really dull to me. I love being a programmer.