I talk to many ABDs in math, physics, engineering, economics, and various other technical fields.
I work with exceptional people from all those backgrounds.
I would like to unreservedly say to any collegians out there, whether choosing an undergrad major or considering fields of study for grad school: if you know you want a technical major but you're not sure which, choose Computer Science.
Unless you're extremely talented and motivated, relative to your extremely talented and motivated peers, you probably aren't going to make a career in academia even if you want to. And if you want a technical major but you're not sure which, you shouldn't want to! Academia is a huge drag in many ways. When a math ABD starts telling me about how she really likes her work but is sick of the slow pace and the fact that only six people in the world understand her work, I get to take a nice minute alone with my thoughts: I've heard it over and over again, in the same words and the same weary, beaten-down tone. You shouldn't be considering a career in academia unless you're passionately in love with your field, unless you think about it in the shower and over lunch and as you drift off to sleep, unless the problem sets are a weekly joy. A lesser love will abandon you and leave you stranded and heartbroken, four years into grad school.
What's so great about CS, then? Isn't it just a bunch of glorified not-real-math and hundreds of hours of grimy debugging?
Let's start with several significant, but peripheral, reasons:
- CS majors learn to really program. There's an ocean of difference between the power of a decent, desultory programmer and that of a real programmer. If you're not a programmer, the power of real programmers to create good stuff borders on magic.
- Not least among the good stuff is time. It's disgraceful, the amount of human effort that goes into work that could be done by a Perl one-liner.
- CS majors learn to be at home with the guts of computers. This seems to come in handy in a hundred little ways.
- CS majors are significantly more likely than other technical majors to get involved in startups, which are one of the best ways around to create wealth.
- While having abstract and intellectual sides, the good kind of CS is strongly tied to the practical.
- CS people can do fun side projects. I've never heard of an engineer doing a bit of engineering on the side from their management consulting job; with CS people it's rare that they don't have a little something cooking.
None of that gets to my real point, which is the modes of thought that CS majors build. Working with intransigent computer code for years upon years, the smart ones learn a deeply careful, modular, and reductionist mindset that transfers shockingly well to all kinds of systems-oriented thinking--
And most significantly to building and understanding human systems. The questions they learn to ask about a codebase--"What invariants must this process satisfy? What's the cleanest way to organize this structure? How should these subsystems work together?"--are incredibly powerful when applied to a complex human process. If I needed a CEO for my enterprise, not just my software company but my airline, my automaker, my restaurant chain, I would start by looking for candidates with a CS background.
You can see some of this relevance in the multitude of analogies CS people are able to apply to non-CS areas. When's the last time you heard a math person refer to some real-world situation as "a real elliptic curve"? The CS people I know have a rich vocabulary of cached concepts that address real-world situations: race conditions, interrupts, stacks, queues, bandwidth, latency, and many more that go over my head, because...
I didn't major in CS. I saw it as too "applied," and went for more "elevated" areas. I grew intellectually through that study, but I've upped my practical effectiveness enormously in the last few years by working with great CS people and absorbing all I can of their mindset.
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.