| > One can roughly divide mathematical education into three stages: Similarly with programming. 1. Write programs that you think are cool 2. Learn about data structures and algorithms and complexity and software organization. 3. Write programs that you think are cool. But since you know more, you can write more cool programs. If things are working as they should, the end stage of mathematics and programming should be fun, not tedious. The tedious stuff is just a step along the way for you to be able to do more fun stuff. |
Example, (1) You start programming with the simplest abstractions and in a concrete way. (2) You learn about all the theory and mathy stuff: data structures, algorithms, advanced types, graphs, architecture, etc. Eventually you become very skilled with these, but at a certain point you start to bump up against their limitations. Technical disillusionment and burnout may set in if you are not careful (3) You return to using abstractions and architecture that are as simple as possible (but no simpler), but with a much deeper understanding of what is going on. You can still do very complex stuff, but everything is just part of a toolbox. Also, you find yourself able to create very original work that is elegant in its seeming simplicity.
I've noticed the same thing in other fields: the best approach their work with a certain novice-like (but effective) simplicity that belies what it took for them to get to that point.