I agree with this - but it is more than that too; I've undertaken a self-study of machine fundamentals too. That is something almost all web application programmers lack (those that don't come from EE/CS that is). By machine fundamentals, I mean how instructions are executed on the processor - how memory works - how different kinds of work can either be optimized for the CPU and the CPU's cache or how it can be optimized for memory - what the difference is between a 64bit bus and a 32bit bus - what's so special about PCI-Express and the AGP buses - how I/O actually works and what random seeks on the disk are (yay for SSDs).
The biggest gap, IMHO though, is a lack of knowledge about big O and why quadratic behavior can be bad, what it is, &c... That goes hand-in-hand with a lack of knowledge in algorithms. Why is bubble-sort considered bad? What's a generator? Why does everyone keep saying to use xrange() in python? Why is it bad to use list concatenation?
The biggest gap, IMHO though, is a lack of knowledge about big O and why quadratic behavior can be bad, what it is, &c... That goes hand-in-hand with a lack of knowledge in algorithms. Why is bubble-sort considered bad? What's a generator? Why does everyone keep saying to use xrange() in python? Why is it bad to use list concatenation?