I get ticked off whenever a manager uses the word coder , unless, of course, he or she is referring to someone who does nothing but crank code.
Historically coder means someone who translates a very detailed design to C, C++, or whatever language is used. In the old IBM “chief programmer” days, coders were an important part of the development team, but were at the bottom of the pyramid. It was assumed these folks were trainees or had little expertise, so they slaved at more or less rote translation activities. Coders were analogous to draftsmen, those skilled technicians who render engineering concepts into the important but dull drawings needed to actually build something.
Let's face it: any idiot can write code. Even teenaged hackers do a workmanlike job building (mostly) simple systems. UML advocates often demonstrate that the machine itself can write the code from a sufficiently detailed design.
The challenge we engineers face is designing a solution to a particular problem. The real fun is in inventing the solutions, not in the dreary coding process. For me the most exciting and creative part of a project is doing the rough system design, figuring out what should be done in hardware and what in the firmware, and then blocking out the overall approach.
Coding is most fun when there's not much of a design, when we're putting the C and the structure together at the same time. A lot of people might recoil in horror at this statement, since we “know” we're supposed to design first and implement second. But right or wrong, the vast majority of developers work from an incomplete spec and design.
In fact, the only complete design spec tends to be the code. There are a hundred little decisions we make as we type in C statements, from oddball exception handling to what happens if some really weird combination of inputs happens. In my experience virtually no design document captures every essence of what the program will really do.
In the embedded world there are few true coders. We're highly trained engineers who code and design together, or who create the structure and then implement it in firmware. Perhaps we'd be more efficient if we did separate designers and coders, but this seems unlikely to happen. It's certainly valuable to keep one's hands in the dirty business of actually making the system and getting it to work. The crucible of making things work always teaches us a lot about the limits of what we can actually build.
The term coders is usually used by managers who view software as a necessary evil, rather than a critical part of the value delivered to the customer. These oh-so-common dinosaurs doom projects and frustrate their staff.
Desktop developers embrace programmer as a job description. Perhaps that adequately captures the limited range of skills needed to crank out a Windows app. I prefer engineer , a moniker that better describes the breadth of experience needed for embedded systems, where hardware and software seamlessly blend together to yield a product.
Jack G. Ganssle is a lecturer and consultant on embedded development issues. He conducts seminars on embedded systems and helps companies with their embedded challenges. He founded two companies specializing in embedded systems. Contact him at . His website is .
I'd certainly disagree with the statement that “design is the most fun”. I find implementation to be more fun, because that's when product, whatever it is, begins to work. It is also when I learn the most.I think I was originally attracted to engineering (I am an EE) because I wanted to create things. I originally got involved with software — way back in the 8080 days — because I couldn't be sure the hardware I'd designed worked until I had some software for it, and there was no one else to do it. Just designing it wasn't enough… I had to know that it worked.
Software Engineering Manager
Echostar Technologies Corp.
Good article. I just wish that the title “engineer” be more guarded. There are many “engineers” out there who have never had to go through the hardship and long study hours of an engineering degree. I beleive that the title “engineer” should not be used by anyone who does not have an engineering degree. This in no way belittles the excellent people who do great jobs and even outdo some engineers, yet have no engineering degree. Maybe we should come up with different titles to represent all possibilities.
Great article on differentiating programmers from coders. I have often heard the analogy with architects and builders, and also been reminded that architects should be made to live and work in the buildings they design. Good programmers have to spend a lot of time also being coders and users of their systems.
Hmm. Looks like everyone agrees that the right and best way is to do little design and then complete the design while coding. Then why is it that the 'artifact' and 'document' generators get heard all the time and corner the best pay packets on 'consultancies'?
Programmers are the backbone of software industry. Without their new creative ideas of design, coding and implementing things nothing is possible.
Take for example a Tailor who stitches new clothes for us. Anybody can start using a Tailoring machine to stitch clothes. But if you or I stitch the clothes, who will wear them. Reason being it will not be a perfect fit for the person to wear and he will be feeling uncomfortable.
Like that programmers design and write the code. This should be perfect, otherwise machine will feel uncomfortable like how we human beings feel uncomfortable to wear a dress which does not suit us.
First, a lot of people should understand that Programming is an art.
Robert Bosch India Limited
Well done again Jack. It's the best description of what I have been doing for a living for the last 15 years.
Senior Software Engineer
Delphi Automotive Systems
My experience has been the complete opposite. Many times I have seen people spending vast amounts of time “designing” software, producing useless artifacts (UML-diagrams) that can neither be executed nor analyzed, meaningfully. Avoiding this has been the thrust of David Harel's whole work – producing executable models (design specifications). UML ain't it! Unless you're producing something that can be executed and/or analyzed – you're NOT doing anything useful. It's that simple
When these designs (UML artifacts) are handed over, it is utter folly to believe that the hard work has been done; the hard work has just begun and it is only by virtue of some first class software engineers (not “programmers”) that the job gets done. Usually by ignoring the “designs” and going back to written requirements and conversations with the customers, the engineer begins to “grow” (“No Silver Bullet” by Fred Brooks) the software.
All too often I heard the sirens of the “process” weenies only to see the project dashed upon the rock of cost overruns and missed schedules.
Senior Software Engineer
In a world where many spend years pursuing an education in the scientific and engineering fields I can understand your dismay. I would disagree somewhat with the statement “any idiot can write code” but that's a subjective issue not worth arguing. I remember many years ago when a certain company began adding the word Engineer to most (if not all) of their job descriptions. They still do it even though most of their “engineers” know little if anything about design and have even less of a technical background. So I've given up concerning myself with what management wants to call my job or what corporate policy dictates it should be called in order to “impress and satisfy the customers.”
In the end it isn't what they call you that matters, it's how you do what you do and if you are satisfied with it. I do not have an Engineering degree and though my job title recently was one of an “engineer” I did not use that term when working with customers. I told them the facts, I'm a tech who is studying engineering, and I'm not an engineer yet. Unfortunately, though honesty may be eschewed as a virtue in our society it is rarely valued by those one works for (at least in my experience.) So I am no longer working for the above employer. But wherever I work they can call me what they want, I know who and what I am.
Jack, Excellent differentiation between a coder and programmer. The Software company which realizes this difference can really do well and maintain high quality standards in their products.
One hundred percent agreed! I am a software engineer, too. I like rough desining of the early stage of development and detailed design. But while I implement what I have designed, I always see missing points and the design spec is finally completed as the form of 'code'.
Nice try Jack. This should assuage some of our hurt feelings.
For embedded systems, it seems the design is usually useless until the lowest level code works on the hardware (and the designer then understands the hardware). It is the second design (throw the first one away – Fred Brooks I think?) that is usually the best. Of course, later designs are equally useless as features expand beyond the capabilities of the hardware. I think separation of the coders from the designers cannot and should not happen at the embedded level.
Thanks for your latest article, Jack. While a college student, many years ago, I had a six-month co-op job at Brookhaven National Laboratory. My job title was “Coder”. My duties were just as you described. I translated the flow charts, notes and diagrams created by a Programmer, into working Fortran code. As a result of that experience I learned early on that there is a difference between writing code and designing a program that implements a solution to a problem.
I myself am a coder. I design on the fly, I work hard, and I have been successful in my chosen field (games software) for 13 years. I don't appreciate the attitude that coder is a bad word or somehow has less talent than anyone else.
Being a coder is something I am truly proud of and don't like being referred to as a programmer or engineer, because the term seems very high and mighty to me. I am not a rocket scientist or a brain surgeon, I just write code well. Please consider that some of us really like and are proud of the term coder.
Coders in my opinion are those that are capable of making a machine do feats of magic 🙂 and can really squeeze the best out of a machine.
Please don't take this as an insult. It's just my 2 cents 🙂
Senior Coder 🙂
Namco Hometek Inc.