Andrew Binstock, the Editor over at Dr. Dobbs, wrote an article a few months ago about how difficult it is for software engineers to focus on coding rather than all of the overhead tasks involved in building applications and systems. The article is Just Let Me Code! and is well worth the read.
Andrew makes a really good point, in a roundabout sort of way, that industrial-strength, production-quality code is less about actual programming than it is planning, architecture, testing, monitoring, and configuration. There’s a big difference between a programmer — someone who can write decent code — and an engineer — someone who can produce a quality product.
You can hire a decent programmer right out of high school, but to bring up a software engineer takes time. Anyone can learn to code. Heck, even the President was seen writing a few lines during the last Code Hour. Coding is a skill, just like cooking, and you can hire a cook right out of high school.
To carry the analogy further, the cook understands how to follow a recipe. They might be an excellent cook, and honestly there’s nothing wrong with that. However, a chef understands that a good meal is so much more than cooking — it’s flavors and textures and pairings, along with presentation and expectation that make for a memorable meal. There’s timing and long preparation involved, and the ability to juggle several tasks in just the right order to bring everything onto the plate at the perfect moment. It’s an art, just like software engineering.
I expect software engineers to have a lot of skills, such as tools and languages. But I also expect them to bring so much more to the table. This is why we spend so much time on the non-coding aspects of software engineering. We don’t want to create cooks, we want to create chefs.