The choice of what to study is not a rational decision but a social decision. People follow their friends, guys go study what the hottest girls he knows are going to study, parents push kids to study fields that they themselves perceive as high-status like finance, law or medicine.
The biggest problem with computer science degrees is that it is a relatively new field and it hasn't been embedded in society as high status yet. This will change, but it will take generations for it to take effect.
The field is obviously difficult but you don't have to be a genius to get a CS degree, it doesn't require much more determination to study ridiculous amounts of jargon for law or medicine degree then to understand complex discrete mathematics problems. The social cost of "failing" a law degree is much higher (parents complain son of X did pass and he had similar SATS) then failing an engineering degree (parents understand "it", they don't understand computers either).