Creo que son dos cosas complementarias.
Creo que cuando se sale de la universidad (o cualquier otro centro de formación) se tienen unos conocimientos (posiblemente más enfocados a aspestos formales y teóricos) y unas carencias (posiblemente más enfocados a la práctica), y normalmente cuando uno aprende cosas por su cuenta tiene unos conocimintos (normalmente más enfocados a la práctica) y unas carencias (normalmente más enfocadas a aspectos teóricos). Repito, creo que es algo generalizado; Siempre habrá excepciones, pero en general creo que es así.
Por poner un ejemplo (y hablo de la UPC -Universidad Politécnica de Cataluña-que es la que conozco), cuando yo salí de la facultad no sabía "casi nada" de lenguajes de alto nivel.
En el lado opuesto, conozco programadores autodidactas muy buenos y en su andadura no se les ha ocurrido estudiar, por ejemplo (**) "Teoría de Autómatas", "Máquinas de turing", "Cálculo lineal avanzado" o "Lógica" (que conste que yo por mi cuenta yampoco lo habría hecho...
)
Cuando yo lo necesité los estudié (como autodidacta), supongo que si alguno de ellos necesita "teoría sobre autómatas" también lo estudiará y listo; Lo que sí es cierto que a veces temas como los comentados más arriba (**) son difíciles de estudiar y comprender por cuenta propia.
En ambos casos creo que una personas puede ser un excelente programador y profesional.