By degree I am a Computer Scientist, and I also emphatically agree with everything you have said, particularly your handyman analogy.
Part of the problem, which causes me no end of grief, is that when most people go to school to become "Computer Scientists", they are really trying to become handymen. Most universities do not do a particularly good job of discouraging this notion, partially due to economics, and partially due to the fact that there is no distinct classification for "code handyman".
I recently interviewed someone with a Computer Science degree from a very respectable private university who could not even attempt an explanation of what NP-Complete meant. Because of the university in question I feel sure beyond doubt that he must have been exposed to and tested on this information, yet it was blatantly obvious that this person was more concerned with whether or not he could say he "knew Java", or some such. When this person went on to say that he felt that the university had not adequately prepared him for the job market, my head nearly exploded! (and not just because this is a stupid thing to say in an interview). Admittedly, this is an extreme case of this sort of mentality, but I have observed that milder cases seem to predominate the industry known as "Software Engineering".
To make matters worse, the majority of programmers I know are not even familiar with the idea that something can be formally verified as correct, and they will even go so far as to reject the notion that there is such a thing as "correct"!! They will say something to the effect of, "how can you tell if something is correct when there are a thousand different ways to accomplish the goal", as if a plurality of solutions implies that there are no wrong ones.
It is as if all of the mathematics generally required for such a degree mean nothing.