I got started programming a couple of years ago because I like problem solving. The harder, the better. I know I'm not alone in feeling that way. I've gotten a bachelor's degree and learned a bit of ruby, rails, and other frameworks/languages, but I'm running into a problem. It seems like all jobs are just simple CRUD apps. I look at 99 percent of the software out there and know that I could do it if I had the time.
My question is how do you get to work on the hard/fun stuff? A quintessential example for me would be self driving cars. It's challenging and would have a real impact on the world.
I'm looking into becoming a data scientist because it's newer and seems to have more challenges. I also have a theory that any challenging computer science problem requires a lot of math. Do you need a PhD to work on these hard problems? Can anyone give advice on how to avoid a career of working on simple CRUD apps? (CRUD is a metaphor for simple problems in this case)
The self-driving car might sound sexier if you've never done something like that, but once you've learned the basics of how control loops work and the quirks of realtime operating systems, that's about it for novelty. What you'll actually spend your time on is the same old stuff: managing complexity. Debugging, testing, designing APIs, designing user interfaces, integrating disparate module, etc. You may actually find that it's more soul-crushing than a basic CRUD app, because in a safety critical project you'll probably have less autonomy, more oversight/bureaucracy, and a much slower pace.
The fundamentally hard part of any software project is complexity. It's easy to let even the simplest project spiral into unmanageable complexity, and it's deeply challenging work to prevent that. That's the meat of what any good software engineer does.
There's a better way to word your original question: in what kind of organization should I be writing software? That has a far bigger impact than the problem domain on your happiness, level of challenge, and autonomy.