> What stops a self taught developer from also 'self teaching' the fundamentals?
I think that the main problem, especially for maintaining the student's motivation, is that a lot of the fundamentals don't seem to be all that useful to a programmer... until you finally understand them and it "clicks".
The more serious topics(set theory, algorithm design, and processor design) are almost entirely theoretical at the basic level, with very little information that can be directly applied to the real world. But once you start digging deeper, the usefulness becomes readily apparent.
Algorithms is an especially problematic topic, for a couple of reasons. The first is that the entire topic is built on top of a good foundation of discrete math, big-O, set and graph theory, and with a sprinkling of data structures on the side. So it's no a topic that you can just jump into immediately. There's a lot of background study needed before you can really start working on it.
The second is that to really understand an algorithm, you really need to be able to make(or understand) the proof of correctness and proof of efficiency. The goal of the student looking into algorithms shouldn't be just to get a laundry list of potential things to use(though they will get that as well), but to have the skills to be able to show that their algorithm will work correctly for all valid inputs, and that it's capable of doing so at a certain efficiency. That's the mindset of a good programmer, and it definitely comes with experience, but I think having the theoretical background helps a lot as well.
I think that the main problem, especially for maintaining the student's motivation, is that a lot of the fundamentals don't seem to be all that useful to a programmer... until you finally understand them and it "clicks".
The more serious topics(set theory, algorithm design, and processor design) are almost entirely theoretical at the basic level, with very little information that can be directly applied to the real world. But once you start digging deeper, the usefulness becomes readily apparent.
Algorithms is an especially problematic topic, for a couple of reasons. The first is that the entire topic is built on top of a good foundation of discrete math, big-O, set and graph theory, and with a sprinkling of data structures on the side. So it's no a topic that you can just jump into immediately. There's a lot of background study needed before you can really start working on it.
The second is that to really understand an algorithm, you really need to be able to make(or understand) the proof of correctness and proof of efficiency. The goal of the student looking into algorithms shouldn't be just to get a laundry list of potential things to use(though they will get that as well), but to have the skills to be able to show that their algorithm will work correctly for all valid inputs, and that it's capable of doing so at a certain efficiency. That's the mindset of a good programmer, and it definitely comes with experience, but I think having the theoretical background helps a lot as well.