There are few things more practical than a good theoretical grounding when your job is to:
1. design and implement a database
2. design and implement a p2p consensus protocol
3. design and implement a programming language
4. train and validate an artificial neural network
5. reason about concurrency
etc.
At some point, we really need to start distinguishing the kind of programmer who writes REST endpoints all day from the one who engineers the systems other programmers treat as an abstraction. Both are respectable jobs, but the former is closer to plumbing than engineering. The former is also less well-paid, has less job security, more on-call duty, less intellectual substance, less technological innovation (but arguably more commercial innovation), more grunt-work and a lower barrier-to-entry.