¿Cuáles son los cursos en CS de pregrado que crees que te ayudaron más en la creación de aplicaciones de software en la industria y cómo? ¿Hay algo que hubieras hecho de otra manera si hubieras estado en la universidad?

Solo pienso en dos cursos cuando pienso en cursos útiles de pregrado de mi título de CS.

  1. Introducción a la programación . Proporcionó un flujo constante de problemas de programación y nuevos conceptos. Pasé más tiempo programando para esta clase que para cualquier otra clase.
  2. Matemáticas discretas . Gran parte de las matemáticas discretas son algoritmos, como flujo máximo / corte mínimo, circuitos euler, etc. Realmente bastante útiles.

Algunas clases más fueron útiles en mi plan de estudios de posgrado:

  1. Introducción a los algoritmos . Realmente me ayudó con mi conocimiento de algoritmos útiles y cómo elegirlos.
  2. Idiomas formales y autómatas finitos . Esto solo fue útil más tarde. Proporcionó herramientas para pensar en problemas complejos, especialmente problemas distribuidos complejos. Tratamiento en profundidad de máquinas de estado y gramáticas.

Como siempre, su kilometraje puede variar.

AP Computer Science AB (introducción a la programación / informática), estructuras y algoritmos de datos y sistemas operativos. Como ingeniero de software de sistemas, también uso lo que aprendí de Computer Organization and Compilers.

Todo se basa en la primera clase de programación introductoria.

Cada programa no trivial depende de lo que se enseñó en Estructuras de datos y algoritmos: elegir estructuras de datos apropiadas, técnicas básicas como dividir y conquistar, indirección y complejidad computacional.

Muchas cosas requieren comunicación entre procesos para funcionar. Muchos programas requieren concurrencia para un rendimiento aceptable. Comprender cómo los programas interactúan con el sistema operativo y entre sí es muy útil. Todas esas cosas se enseñan en los sistemas operativos.

Quizás no por coincidencia, estos cursos cubren lo que se prueba en entrevistas técnicas. Aparte de un poco de matemáticas discretas, no recuerdo haber necesitado nada más de la escuela para aprobar una.

Como ingeniero de software de sistemas, trabajo mucho donde la implementación de la computadora subyacente impacta el rendimiento (sobrecarga de trampa, huella de caché / TLB, proximidad de memoria en sistemas NUMA) que se enseñó en Computer Organization. Saber cómo los compiladores generan código ayuda a la depuración, y en ocasiones necesito crear un analizador analítico con ambas materias que se enseñan en los compiladores, donde creamos uno para la mayor parte de ‘C’.