If we were to assume that that programmer had some formal education in programming (computer science, math, EE, etc.), then you might be closer to the truth ... With better and better tools, though, those mistakes lessen (and possibly go away). That type of development becomes commoditized (meaning that new college graduates can do it for a lot less money).
I agree with the problem, but think the cause is that our expectations have outpaced the technology. Because of the immaturity of the tools, a good programmer still must have some theoretical background beyond their specific toolset. Eventually the tools will be mature enough to allow specialization, by automating the "generic programming" aspect. But until the tools reach that point, a good programmer will still probably have to know more about programming than about a specific problem domain.