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
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
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
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