In karate, this has caused the dilution of most forms of karate (with the exception of Kyokushin) into little more than ritualized movements, where the vast majority of even high-level teachers don't know how it relates to a real fight. Pure theory has taken over - 'when your attacker does a simple forward kick ('teep', don't know what it's called in English), move the leg with your hand!'. Except that that never happens in the real world, and yet it's a core movement in many kata (and kihon etc, not just kata).
Now, how does that relate to software? Just knowing how to write a binary tree, or linked list, or singleton, or whatever, doesn't make one capable of writing a program that users want to use. Yes, maybe it makes one capable of writing a perfect program even, in the sense that it may even be mathematically proven correct; yet that's absolutely irrelevant outside of the realm of the theoretical. The basics of this nature are well-documented everywhere already, and it's not necessary to know all of them before doing more integrated exercises; full applications that people actually want to use.
Or to make the connection back to martial 'arts' (I hate that word, what's 'arty' about it? We need to get rid of the mystical aura around it - it's fighting, a methodology to inflict maximum, concentrated or controlled damage onto another person, sorry for tangent - it's a pet peeve ;) ); we need to get rid of the karate's, tae kwon do's and capoeira's of the software world (disclaimer: I have brown belts in judo and karate, I get to have an opinion on it ;) ) and we need to go back to the essence - the mixed martial arts of software development: the misv or startup or whatever you want to call it. Actual products for actual users, not fetishising technology for technology's sake.
(second disclaimer: I know I'm sort of arguing a straw man here, nobody said anything about not making end-user products, but it's a lot easier to make a point when you don't have to put in all the nuances ;) )