¿La informática consiste en codificar? Si no es así, ¿qué es lo que realmente aprendemos en informática en la universidad?

No. Desgraciadamente, esa idea errónea es común.

En realidad, durante el primer o segundo año, probablemente aprenderás sobre todo codificación. Pero eso es solo un pretexto para los verdaderos temas de informática. Desafortunadamente, las ciencias de la computación, a diferencia de la mayoría de los campos, no tienen un curso de estudio, por lo que la mayoría de los estudiantes no tienen idea de lo que son las ciencias de la computación hasta que están a mitad de camino en la carrera.

Pero te daré un vistazo:

Ciencias clásicas de la computación
(estos son temas que la mayoría de las universidades cubren de alguna forma)

  • Modelos teóricos de computación - la idea de un ordenador existía antes de que las máquinas existieran físicamente, y puedes demostrar matemáticamente las limitaciones teóricas de los diferentes tipos de modelos de computación.
  • Arquitectura de ordenadores: los modelos teóricos describen la funcionalidad, pero no la implementación física, por lo que la arquitectura de ordenadores añade una capa física a los modelos teóricos, y es donde se encuentran los componentes físicos que se juntan para que un ordenador funcione.
  • Algoritmos y nociones de computación eficiente: una vez que se tiene un modelo de computación, ya sea teórico o físico, se quieren resolver problemas con el ordenador. Se diseñan procedimientos para el ordenador, llamados algoritmos, para resolver diferentes tipos de problemas, y se quiere ser capaz de comparar diferentes algoritmos en términos de su eficiencia. Por ello, aprenderá métodos formales para analizar y comparar la eficiencia. También aprenderá diferentes estrategias de resolución de problemas que se han utilizado en el diseño de algoritmos.
  • Diseño de sistemas: cada algoritmo puede considerarse como una tarea específica para resolver un problema concreto, pero a menudo queremos que los ordenadores no sólo hagan una tarea, sino que sean un sistema complejo que pueda manejar simultáneamente muchas tareas. Por ello, aprenderás los principios de diseño de sistemas que se han utilizado para diseñar estos sistemas complejos. En concreto, la gestión de recursos es un tema importante. El ordenador tiene recursos limitados: la memoria RAM es un recurso, el sistema de archivos es un recurso, la pantalla es un recurso, incluso la CPU y el propio tiempo son un recurso. También puede tener diferentes garantías para los diferentes tipos de tareas que se ejecutan en el sistema - ciertas tareas son de tiempo crítico, ciertas tareas se adelantan a otras tareas, ciertas tareas se les permite fallar y otras siempre deben tener éxito, etc. Entonces, ¿cómo se gestionan los recursos para asegurar las garantías deseadas? Estos principios suelen dirigirse a los estudiantes enseñándoles a construir un sistema operativo como UNIX, pero se aplican igualmente a la construcción de otros tipos de sistemas como servidores web y bases de datos.
  • Diseño de redes: una vez que se tiene un grupo de sistemas, ¿cómo se consigue que se comuniquen entre sí? ¿Qué tipo de protocolos quieres utilizar? ¿Cómo se puede hacer frente a la congestión de la red? ¿Cómo se hace frente a la pérdida de información y a los retrasos? La propia red puede considerarse un sistema gigante, así que, en cierto sentido, se trata de una extensión más avanzada del diseño de sistemas. Una red es un sistema en el que la comunicación es fundamental para la gestión de los recursos, y en el que hay que establecer tolerancias adicionales para las entidades rebeldes de la red que no se comportan como se supone que deben hacerlo.
  • Diseño e implementación de lenguajes de programación: ¿cómo se diseña un nuevo lenguaje de programación y qué características se desea que tenga? Luego, ¿cómo se crea un compilador que analice ese lenguaje y lo traduzca en algo que pueda entender una máquina? A menudo, esto se divide en dos cursos separados. Un curso se centrará en cómo los informáticos clasifican y modelan los lenguajes de programación, la teoría de los lenguajes de programación. El otro curso se centrará en la construcción de compiladores, es decir, en las técnicas para traducir un lenguaje formal a otro.
  • Inteligencia artificial: desde los inicios de la informática, los primeros pioneros, como Alan Turing, imaginaron los ordenadores como "máquinas pensantes". Y desde entonces, los informáticos han estado fascinados con la idea de dotar a los ordenadores de un comportamiento inteligente. Un curso tradicional de IA le enseñará algunas de las técnicas (probablemente no todas) que los informáticos han utilizado (con distintos niveles de éxito) para producir lo que algunas personas pueden considerar un comportamiento inteligente. Por supuesto, la noción de "inteligencia" es muy discutible, por lo que un curso de IA también cubriría las diferentes métricas y criterios que los científicos de la computación han propuesto para evaluar la inteligencia artificial.

Ciencia de la computación moderna
(temas que su universidad puede o no ofrecer, normalmente como optativas)

Los temas que se enumeran en "Ciencia de la computación clásica" son los que se establecieron en los años 60 y 70, cuando las principales aplicaciones de la ciencia de la computación eran la construcción de sistemas operativos y compiladores. Desde entonces, las aplicaciones de las ciencias de la computación se han disparado hasta un número casi infinito, lo que ha introducido muchos temas nuevos en la informática. Algunos de estos temas se basan directamente en los principios de los clásicos, y otros temas toman prestados muchos principios de otras áreas de las matemáticas y la ciencia.

Cabe destacar que, si bien todos los nuevos temas de la informática introducidos desde los años 70 corresponden a alguna aplicación de la computación, lo contrario no es cierto. No todas las aplicaciones de la computación crean temas académicos legítimos en informática.

Y en cuanto he mencionado esto, se abre una gran lata de gusanos porque hay espacio para el debate sobre qué es un tema académico legítimo en informática y qué no lo es. Puedo decirte que varios de los temas que otras respuestas enumeraron no creo que deban considerarse temas de informática, independientemente de que un departamento de CS en algún lugar los ofrezca o no.

Pero toda la razón para abrir esta lata de gusanos es que los estudiantes a menudo confunden la informática con sus aplicaciones, y asumen que el objetivo de la informática es enseñarles sobre aplicaciones específicas en lugar de los principios que esas aplicaciones requieren.

Por ejemplo, "Construir procesadores de texto" podría ser una aplicación de la informática, pero prácticamente nadie consideraría que es un tema legítimo para incluir en un plan de estudios de informática. Para construir un procesador de textos, vas a necesitar utilizar muchos de los principios de la informática clásica, pero no hay nuevos principios específicos para el diseño de procesadores de textos que aprender - al menos ninguno que los académicos hayan estudiado. Así que no es un tema nuevo, sólo una aplicación de los antiguos.

De manera similar, yo tampoco consideraría el "desarrollo web" como un tema real de ciencias de la computación - a pesar de que algunos departamentos de CS pueden ofrecer esto como un curso debido a la demanda popular. Claro, puede que estés aprendiendo algo nuevo, ya que tal vez no sabías HTML, JavaScript o PHP antes de tomar el curso. Pero la razón por la que no pasa la prueba del olfato, en mi opinión, es porque no es un tema en el que sea posible mejorar lo que estás aprendiendo. Si haces un curso de sistemas operativos, puede que un día se te ocurra una forma de mejorar los principios de diseño de sistemas que estás aprendiendo. Esa es la base científica de la informática: todos los principios de resolución de problemas que aprendes pueden mejorarse algún día si alguien da con soluciones mejores. Pero con el desarrollo web, no estás aprendiendo un nuevo principio científico - estás aprendiendo algunos lenguajes arbitrarios que alguien decidió que debería ser el lenguaje de la web.

Por otro lado, un curso de "Diseño de sistemas de información multimedia interactivos en red" podría ser un tema legítimo de ciencias de la computación hipotético. La diferencia entre éste y el curso de "Desarrollo de la web", es que aunque este curso también hablaría de cómo funciona la World Wide Web, ya que es el ejemplo más conocido de un sistema de este tipo, no es ahí donde se detiene el curso. Es un tema más amplio y hay espacio para la investigación académica: ¿es la WWW la mejor manera de construir un sistema como éste, o podría haber una manera mejor? Ahora bien, se puede examinar desde diferentes perspectivas: economías sociales, teoría de la representación de la información, computación virtual, etc. Y esas diferentes perspectivas te dan algunos principios de diseño en los que puedes pensar.

De todos modos, aquí hay otros temas legítimos de ciencias de la computación con los que te puedes encontrar: Aprendizaje automático, procesamiento del lenguaje natural, visión por ordenador, robótica, renderización gráfica, interacción persona-ordenador, sistemas de bases de datos, criptografía, seguridad informática, biología computacional, ingeniería de software, sistemas de razonamiento automatizado, simulación, computación cuántica.