I'm an undergraduate strongly interested (well, this is a hunch) in theoretical CS and all things mathematical. While I'd like to devote my time to participating in research opportunities and learning more about academia-related CS, I also want to develop a skillset (in software engineering) that, if I were unsuccessful in entering academia, would give me a fallback.
I suspect that the past an early point, the learning routes for academia-CS and industrial CS diverge, meaning that I can't prepare myself for both. To what extent is this true -- everybody needs to have experience in a couple of programming languages, for example, but that aside, are there commonalities or differences between preparing for academia and industry that bar or support my plan? Is what I want feasible and, if so, how? Many Thanks.