Algorithms.
Learning to use a programming language in a descent way is something you can learn as you go, but It's virtually impossible to invent all the widely used Algorithms by yourself.. One really should at least be aware of what can and can't be done with some problems.
For example one simply can't write some programs with bubble-sort and expect it to be considered good, no matter how fine the code is.
To sum it up - take a look at Introduction to Algorithms
No need to master it, just know what's going on...