Tardé 5 años en sacarme la carrera de ciencias de la computación. Es cierto que un trimestre me lo tomé para trabajar, y muchas clases no estaban estrictamente relacionadas con las ciencias de la computación.
Diría que alguien dedicado con buenas habilidades de aprendizaje podría enseñarse a sí mismo las cosas más importantes en un año.
Nota que estoy asumiendo que no estás hablando de cómo programar, porque deberías considerar que eso te llevará muchos años, y nunca deberías dejar de aprender.
Volviendo a la ciencia de la computación solamente…
Yo aprendería algunos algoritmos como el funcionamiento de las listas enlazadas, el funcionamiento de la ordenación, el funcionamiento de los árboles equilibrados, etc. Si bien es posible que nunca los codifiques tú mismo, considero que aprenderlos es parte de una educación en ciencias de la computación equilibrada.
Deberías aprender los fundamentos de los sistemas operativos. Los sistemas de archivos, los procesos, la memoria virtual, la seguridad básica, lo que un núcleo hace más o menos, cómo se habla con el sistema operativo con las llamadas del sistema ( UNIX es más fácil de aprender OMI, que las ventanas en este sentido.) Los programadores pueden tratar de ser ignorante acerca de los sistemas operativos, pero si se ejecuta en los problemas con su programa debido a la interacción entre su programa y el sistema operativo, va a ser bueno saber algunas de estas cosas. Por ejemplo, tuvimos que usar la afinidad de procesadores en un proyecto para afinar nuestra aplicación correctamente.
Sugiero aprender un poco de lenguaje de máquinas para saber cómo funcionan las CPUs. Cualquiera servirá. Heck, el juego Human Resource machine no está tan lejos del lenguaje de máquina y te daría una ligera idea de cómo funciona.
Deberías saber cómo los ordenadores hacen matemáticas, como el complemento a 2, y un poco sobre cómo funcionan los números de punto flotante IEEE.
Deberías entender la notación big O, lo que significa, y cómo usarla para evaluar algoritmos.
Deberías saber sobre diseño orientado a objetos, patrones de diseño, y tal vez incluso algo de programación funcional, porque parece que hay más interés en eso hoy en día.
Deberías aprender a evaluar el rendimiento de los programas, como el uso de herramientas de perfilado.
Probablemente quieras entender cómo funcionan los asignadores de memoria, y cómo funciona la recolección de basura.
IMO, deberías conocer Bases de Datos. MySQL es una buena para aprender en mi experiencia. SQL puede ser importante, y se usa mucho hoy en día. Almacenar los datos permanentes de tus programas en «archivos planos» es una forma bastante antigua de hacer las cosas ahora.
Esta no es una lista exhaustiva, sólo cosas que aprendí en el camino y que creo que son útiles en la programación.