I’m someone who has been educated in CS, as well as other fields. I both perform and manage industrial-scale programming and research programming, and I hire programmers of varying skill-levels for projects.
In my experience, there are a few caveats to your advice:
1) Strong programmers, fun side projects, and deep understanding comes from the pre-Computer interest which many of the die-hard CS people have. It is rarely, if ever, taught in academic programs and is something I specifically look for in my heavy-duty programmers whether or not their major is or was in CS.
2) My personal take on things is: The best programmers take innate talent and a lifetime of experience and turn it into super-star ability—don’t expect to become one by majoring in CS. The second best programmers have a strong mathematics background (i.e. proof writing), because their code requires less debugging, which is the most costly part of software development. Any programmer can do better by analyzing their process and learning from that, but that form of software engineering seems to have become less popular, since it takes more work and makes you vulnerable to bad managers. Algorithm design is, of course, an entirely different matter.
In short, I’d suggest a CS/Mathematics double major. It’s a good idea to be able to speak more than one technical language after all.
Oh and, my usual answer to:
When’s the last time you heard a math person refer to some real-world situation as “a real elliptic curve”?
Well there was the time Heisenberg came back from his honeymoon where he had, of course, spent the entire time trying to puzzle out quantum mechanics. He was about to give up because of the non-commutative multiplication when he talked to a mathematician friend who said, “Wait, let me tell you about these things we call matrices.”
Mathematics gives you very useful models, it just doesn’t tell you how to use them. CS gives you the tools to implement solutions, but it tends to leave the solutions rather ad hoc. Bringing the two together is one good mix. I could suggest a half-dozen others—but this will do for now.
Edited to add: This is a mix if you want to achieve the goals laid out in the post. Not suggesting that it is either trivial to get such a pair of degrees or desirable for everyone to head in that direction.
But to be clear, if you’re not already a showing talent as a programmer, and you want to be skilled as one, if you have to pick between mathematics and CS, pick mathematics and learn a programming language on the side (give yourself a challenging, sizable project which you care about—and get it done, even if it takes a year or two). The cognitive skills you will learn in mathematics will do more to cover for your gaps as a programmer than most CS programs will teach you.
Bear in mind, I’m talking about effectiveness, rather than credentials. Credentials are an entirely different matter—and like most status games it is a constantly evolving mess.
I’m someone who has been educated in CS, as well as other fields. I both perform and manage industrial-scale programming and research programming, and I hire programmers of varying skill-levels for projects.
In my experience, there are a few caveats to your advice:
1) Strong programmers, fun side projects, and deep understanding comes from the pre-Computer interest which many of the die-hard CS people have. It is rarely, if ever, taught in academic programs and is something I specifically look for in my heavy-duty programmers whether or not their major is or was in CS.
2) My personal take on things is: The best programmers take innate talent and a lifetime of experience and turn it into super-star ability—don’t expect to become one by majoring in CS. The second best programmers have a strong mathematics background (i.e. proof writing), because their code requires less debugging, which is the most costly part of software development. Any programmer can do better by analyzing their process and learning from that, but that form of software engineering seems to have become less popular, since it takes more work and makes you vulnerable to bad managers. Algorithm design is, of course, an entirely different matter.
In short, I’d suggest a CS/Mathematics double major. It’s a good idea to be able to speak more than one technical language after all.
Oh and, my usual answer to:
Well there was the time Heisenberg came back from his honeymoon where he had, of course, spent the entire time trying to puzzle out quantum mechanics. He was about to give up because of the non-commutative multiplication when he talked to a mathematician friend who said, “Wait, let me tell you about these things we call matrices.”
Mathematics gives you very useful models, it just doesn’t tell you how to use them. CS gives you the tools to implement solutions, but it tends to leave the solutions rather ad hoc. Bringing the two together is one good mix. I could suggest a half-dozen others—but this will do for now.
Edited to add: This is a mix if you want to achieve the goals laid out in the post. Not suggesting that it is either trivial to get such a pair of degrees or desirable for everyone to head in that direction.
I don’t at all disagree that for those who can do it, the CS/math parlay is excellent.
But to be clear, if you’re not already a showing talent as a programmer, and you want to be skilled as one, if you have to pick between mathematics and CS, pick mathematics and learn a programming language on the side (give yourself a challenging, sizable project which you care about—and get it done, even if it takes a year or two). The cognitive skills you will learn in mathematics will do more to cover for your gaps as a programmer than most CS programs will teach you.
Bear in mind, I’m talking about effectiveness, rather than credentials. Credentials are an entirely different matter—and like most status games it is a constantly evolving mess.