¿Qué cursos de pregrado debería tomar definitivamente un estudiante de CS Masters, sin una licenciatura en la materia?

Hay al menos cinco o seis cursos que realmente debería tomar (ya que en muchos trabajos interesantes requiere ese conocimiento y debe aprovechar al máximo su tiempo cuando no tiene nada mejor que hacer que aprender).

1. Estructuras de datos y algoritmos (especialmente la implementación de, que ayuda a internalizar el conocimiento). No puede hacer nada interesante sin comprender la complejidad computacional, las estructuras de datos y las máquinas de estados finitos.

2. Lenguajes de programación (como en una encuesta de). Varios lenguajes de programación tienen diferentes paradigmas de programación nativos (los lenguajes funcionales no tienen un estado compartido que muta, los lenguajes de programación declarativos producen resultados por reglas, no recetas) y modelos de concurrencia (como el modelo de actor donde los actores pueden enviarse mensajes entre ellos, recibir mensajes, o crear nuevos actores). Cuando haya visto esas cosas, puede usarlas cuando sea apropiado, incluso cuando no sean nativas (he usado el modelo de actor y la programación funcional para productos comerciales en C y C ++). Donde no sepas que existen o que no las hayas aplicado, habrá situaciones en las que te plantarás.

3. Arquitectura de la computadora. Cosas como la localidad de memoria (en sistemas NUMA), la localidad de caché y la localidad de TLB tienen enormes impactos en el rendimiento que a veces pueden afectar la complejidad computacional. Conocerlos te ayudará cuando te preocupes mucho por el rendimiento. Esto puede ser muy importante en un mundo posterior a la web donde podría tener 100,000 máquinas cada una con un costo anual de propiedad de $ 1000 y cada mejora del 1% significa una diferencia de un millón de dólares en el resultado final. También puede aprovechar las técnicas de alto rendimiento para obtener más diagnósticos en el código de producción: sé por experiencia lo que puede hacer con el registro de nivel de seguimiento en sistemas de producción que se ejecutan a 300,000 operaciones por segundo (300,000,000 de entradas de registro por segundo al 100% significa 10 entradas de registro cada una es una penalización de rendimiento del 1% y alrededor del piso de ruido de medición

4. Sistemas operativos (como en la implementación de). Aprenderá sobre la concurrencia, los sistemas de archivos que son estructuras de datos en el almacenamiento secundario y la programación. Todo eso es útil para problemas interesantes del mundo real.

5. La construcción del compilador donde construyes un compilador (construí uno para un subconjunto de una ‘C’, escrito en ANSI Pascal, con un objetivo VAX) te enseña a analizar datos estructurados, transformar árboles y arquitectura de computadoras. Eso es bueno en sí mismo y también constituye una clase de proyecto.

6. Una clase de proyecto. Esto se basa en las otras clases pero es lo más importante. Aprendes mucho al construir proyectos no triviales. Aprendes mucho cuando tienes que desarrollar un sistema por más tiempo (en el mundo real que puede significar décadas; en el acelerado mundo de inicio todavía puedes tener 4 años entre la financiación y el fracaso; y aunque no sea de la misma magnitud uno o dos semestres son mucho mejores que una o dos semanas). Realmente me gustó la construcción del compilador.

Independientemente de lo bueno que usted y otras personas piensen que es usted (hablando por experiencia, programé durante unos ocho años antes de la universidad, obtuve un alto puesto en un concurso de programación, obtuve mi crédito universitario de dos semestres para ciencias de la computación AB AP, me pagaron por programar en alto escuela, tenía una beca Woz) sus primeros proyectos a escala comercial (subsistema Linux SCSI) serán malos (eso fue horrible)

Con eso en mente, mucha gente (quizás la mayoría) en la industria no quiere contratar nuevos graduados. Las grandes compañías no pueden contratar a suficientes personas con experiencia para evitar el problema, por lo que reclutan activamente en las universidades, aunque es posible que prefieran trabajar (trabajo más interesante que las personas mayores para hacerlo en lugar de las personas que luchan por el territorio porque no hay suficiente para trabajar). ir por ahí) no tiene problemas para contratar personas y puede omitir eso. Me tomó cinco nuevas empresas antes de tener que contratar a alguien para su primer trabajo y eso fue después de que construimos el producto y tuvimos tracción. Esa posición es aún más agradable que trabajar para una gran empresa (mi secuaz puede hacer autómatas finitos para su trabajo diario, entre otras cosas divertidas), pero carece de la libertad y los grandes problemas que vienen antes en el ciclo de vida del producto.

Obtenga algunos proyectos reales fuera del camino en la escuela para progresar más allá del nivel de entrada. Las clases del proyecto son buenas. Los proyectos extracurriculares de software libre son buenos.

Las universidades no hacen un buen trabajo enseñando ingeniería de software y es algo que debes saber para que te vaya bien en la industria. Dicho esto, escapé del sistema universitario cuando las personas debatían si un título indicaba pasar algo más cerca de una base teórica o de aprendizaje y no era una de las clases requeridas en mi programa de grado, por lo que no podía comentar sobre cómo un curso formal podría compare con lo que obtendría haciendo proyectos reales y prestando atención a la literatura popular.

Algunos para mencionar: sistemas operativos, redes, análisis de algoritmos, ingeniería de software, etc.

Estructuras de datos y algoritmos: este es el tema más importante. Te ayuda mucho en la resolución de problemas.