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.