Do you regularly implement van Emde Boas trees and analyze the big O runtime of your algorithms? Have you ever saved the day by applying a highly theoretical result? Or do you find theory largely unhelpful?<p>Some context: as a mathematician transitioning into programming, I find it easiest to pick up the theoretical side of computer science, but I don't know how useful this will ultimately be. It seems like most problems, even performance-sensitive problems, are best solved by standard techniques, or clever memory management, rather than theory.
I reckon that's a good question to ask. In my personal experience - very rarely, only in cases when building reusable components or working directly with hardware.<p>The truth is the answer will depend entirely upon which field of programming you are working in.<p>Most programmers are building stuff for clients (like websites, software etc.) wherein programming is just a minor part of the process.<p>Also, most of the programmers I've spoken to rarely use any computer science theory because of the state of RAD - mostly everything is already implemented, tested and optimized.<p>Sounds to me like you would be more suited towards the engineering side of things rather than traditional 'software' development.<p>I'd say you'd be pretty well suited to game development which usually involves a lot of math and physics as well as optimizing. Anything hardware related should probably fit your aforementioned requirements.
I've found that programming can be as theoretical as you make it, when you do it as a hobby. Professionally, you may have to look a bit harder. Most "standard" coding that I've done involves finding the right library and wiring together with another, and then building the application between the two.<p>As always, your milage may vary. Speed is still a very real concern, especially in fields like data analysis. And even wiring libraries together you may find that eventually you may have to write your own implementation of something theory based.
When I was working in finance I probably used most of the stuff I learnt from undergrad CS (concurrency theory, network protocols, information theory, complexity theory). It's not often I had to do stuff that pushed at the edge of CS (except maybe with lock-free algo design where industry is ahead of academia) but I'd often need to use my CS training to figure out clever ways to apply standard techniques.<p>In the startup world I've not used my CS knowledge as much, but am starting to do some data-mining stuff which is more theory heavy.