¿Cuáles son los cuatro mejores cursos de CS que consideró más útiles y aplicables como ingeniero de software?

Dado que me gradué con un título de CS en 1985, esto puede ser un poco anticuado, pero …

Principios de lógica:

Matemáticas booleanas, básicamente. Realmente hundido en casa el valor de las tablas de verdad. Una gran ayuda para comprender no solo las operaciones lógicas utilizadas en la codificación, sino también para comprender el hardware informático que se encuentra en su nivel más bajo (digital), una colección de puertas lógicas.

Lenguaje ensamblador:

Creo firmemente que todo ingeniero de software debería al menos estar expuesto al lenguaje ensamblador, si no es por otra razón que es el único lenguaje que requiere aprender sobre los componentes internos de la CPU (registros, banderas, etc.), qué son las diferentes regiones de memoria y para qué se usan, y muchos otros conceptos básicos de computación a los que nunca estarías expuesto a solo conocer idiomas de nivel superior. Una ayuda tremenda para desmitificar el hardware en el que se ejecuta nuestro código; después de aprender el lenguaje ensamblador, el hardware nunca más será simplemente una “caja negra”. Serás un programador mucho mejor en cualquier idioma después de aprender el lenguaje ensamblador.

Teoría de sistemas operativos:

Los sistemas operativos en los años 80 eran mucho menos complejos que en la actualidad, pero lo que más me atrapó de esa clase fue tener que crear una simulación de una multitarea (o multiproceso, lo mismo que solían llamarse “hilos” tareas “: gracias a Microsoft por crear otro nombre innecesario para algo para el que ya teníamos un nombre) Sistema operativo que muestra una representación gráfica del espacio de memoria de la computadora a medida que las tareas se creaban, ejecutaban y terminaban dinámicamente. Cosas muy chulas.

Teoría de la base de datos:

No es una clase de “base de datos”, sino una clase de teoría y “partes” básicas necesarias para crear un sistema de base de datos (piense: crear su propio reemplazo de SQL desde cero). Los diversos tipos de árboles de búsqueda y sus algoritmos relacionados, tablas hash, etc. Reforzaron de manera excelente lo que se aprendió en la clase Algorithms & Data Structures (otra clase excelente, pero solo solicitó los 4 primeros) al tener que estudiar y usar muchos varios tipos de estructuras de datos, especialmente listas vinculadas, algoritmos de clasificación, etc.

Algoritmos: porque es un cliché y todos mencionarán esto

OOP: programación orientada a objetos, porque hace maravillas para la organización del código y simplifica las cosas.

Programación de sistemas: principalmente para aprender sobre hilos y cómo el sistema operativo hace las cosas detrás de escena

Arquitectura: personalmente, mi clase favorita y más importante porque ves las cosas en el nivel más básico. Por ejemplo, no entendí completamente los punteros y la asignación de memoria hasta que tomé la arquitectura; hasta entonces, era principalmente memorizar