I don't think K-12 is the problem here. Usually the problems I'm teaching are trivially small (find max of a list, etc). The only other CS class we offer is the AP class, and it's taught to the test - but it's an algorithms and data structures class, not a software engineering class.
It seems to me like the problem is at the college level. My school offered just one software engineering class, which taught one monolithic method of developing software. A couple of semesters developing different types of software using different methods of development would have been nice.
As much as I love to rag on education, psychologically you have to be of a certain age to really get nuance at all, and no amount of attempting to jam "nuance" into a fourth-grader's mind is going to work, no matter what you do. Monolithic, rigid thinking is endemic to pre-formal-operational humans (to borrow Piaget's terminology and to give you something you can google if you like).
Or what about the businesses? Certainly not all programmers can be amazing at smashing out good enough work and others can be good at some deeper long-lasting design.
I think there is an expectation that a 'seasoned' developer can be good at all types, but often that's not the case.
We certainly need a mix of both, and they absolutely need to get along (to some degree).