Carlos Bueno has a very interesting article in Facebook’s Engineering Notes which defines the concept of the “Full-Stack programmer”. Carlos defines a full-stack programmer as:

a generalist, someone who can create a non-trivial application by themselves. People who develop broad skills also tend to develop a good mental model of how different layers of a system behave. This turns out to be especially valuable for performance & optimization work. No one can know everything about everything, but you should be able to visualize what happens up and down the stack as an application does its thing.