I was reading The Elements of Cooking last night and ran across a statement that resonated with me. According to Ruhlman, there are two stages to learning to cook. First you learn the fundamentals, then you learn the finesse, and without the fundamentals, all the finesse in the world won’t do you any good. Fancying up a sauce that was prepared incorrectly won’t help; only once you have a good base can you start to experiment with variations to come up with something you can call your own.
I find the same is true in programming; you need a good solid foundation to build upon. If you understand how languages and compilers work, it’s generally not too difficult to pick up another one, or even to write your own little mini-language. If you understand how language constructs map to memory allocation, you can make better design decisions when building your program. Without that base, it’s hard to understand why doing things one way is preferable to doing them another.