I think this all depends on the goal of the education. Yes, even education has a goal.
There are probably at least five educational areas for programming (the first four probably overlap a good bit): theoretical computer science, building hardware to execute programs, developing tools to create programs that run on hardware, true software engineers, and then the "just use the tool" class.
Most people, probably not on this forum though, fall into the "just use the tool" class. These are the people that don't realize that there are high-temperature reactions happening inside their car to make it go; the people that just know that a hammer hitting a nail through two things makes them stick together, etc. The engineers are those who actually know how to design a structure that will let someone build it without hassle. The toolmakers are those who run the mills to shape the wood into boards and beams; the hardware folks are the guys that build the milling machinery, and the theoretical guys are those that are studying statics of solid materials and chemistry and such.
So, yes, if you don't care about why a piece of wood is strong, or why you need three nails instead of two to hold them together, you end up with structures that are not very safe: bad code. This doesn't matter if you have good blueprints, good wood, wood made on the best mills, or people who fully understand the material properties involved.
Just as it's not feasible to expect everyone who plays with a hammer to know exactly what is good and what isn't, it's not feasible to expect everyone who programs to know what's good and not.
However, I think the idea that production code should be somehow certified (not I specifically didn't say the programmer needs to be certified, but the *code*; I think having certified laborers is really also amiss; if the structure is certifiable, who cares who built it?) so that people know what to expect. In aviation, for instance, code must be certified. However I'm not even aware that any code in a financial system has to be certified to any testing standards, and we all know that there are basically no standards for desktop applications, web interfaces, and the like.
So, essentially, the level and order of education really does depend on the end result desired. Also remember that, unlike activities which involve "matter bashing", programming has a very high turn-around time with very little risk involved with making a bad decision; if a program crashes (usually) there aren't dire physical consequences. It's probably mostly because of that latter statement that so many programs are in the state they are in.