Si estoy tomando la introducción a la informática y las matemáticas discretas, ¿qué temas serán los más útiles para un aspirante a ingeniero de software?

Asumo aquí que está buscando desarrollar un conjunto sostenible de habilidades para una carrera y no un trabajo.
Todo el curso discreto de matemáticas es invaluable. La informática no es lo mismo que la ingeniería de software. Y mucho de lo que se practica en el campo hoy en día es más moda que forma. Su objetivo debe ser desarrollar una metodología adecuada de resolución de problemas y rigor en la forma en que cuantifica, enmarca y resuelve problemas.

  • Hay una gran cantidad de desperdicio de código y reimplementación que ocurre en la mayoría de las empresas. Supongo que es algo apropiado que el movimiento de código abierto imponga el uso de algunos patrones de desarrollo adecuados. Encuentre un instructor que pueda explicar la programación orientada a objetos usando muchos ejemplos que le permiten colaborar con otros (¡vital hoy!) Y usar los conceptos de polimorfismo y herencia, y mostrarle cómo mapear estructuras y algoritmos en esquemas en papel . Si está comenzando en la computadora, cambiaría secciones, cursos o escuelas. No te metas con tu educación en este sentido. Y no, YouTube o las redes sociales no son el mejor lugar para hacer preguntas y aprender. Nada sustituye a un buen mentor que pueda guiarte por las cosas con paciencia.
  • Hay una razón por la cual el desarrollo de software se enseña más tarde y en escuelas profesionales. Si estás tomando cursos de teoría, te estás armando para la longevidad. No saltes el arma. Llegará a tiempo.
  • La sintaxis se puede aprender. Encuentre un buen instructor que primero le explique cómo funcionan la memoria, el montón, las pilas y las colas antes de siquiera tocar un teclado. Le ayudará a comprender la memoria y los punteros, los valores, la mutabilidad. De lo contrario, se abrirá camino a través de las fallas de seguridad y las pérdidas de memoria y copiará el código STL de Google, y no podrá implementar una tabla hash o un árbol AVL. No me he encontrado con muchos desarrolladores que hayan dominado estos conceptos y puedan escribir código C totalmente limpio. Las habilidades de codificación reales se desarrollarán muy rápidamente una vez que comprenda por qué está haciendo algo en lugar de simplemente seguir ciegamente, o peor aún, copiar. Sí, he visto las granjas de trampas y todos son golpeados en las finales de papel, y más aún en años posteriores cuando no hay una solución fácil en Google. Practica en programas pequeños pero útiles, y date problemas para resolver.
  • Relaciones de recurrencia, el teorema maestro, pruebas de convergencia de secuencias y series, complejidad y secciones de cálculo del primer año relacionadas con las mismas. Si alguna vez quiere hacer algo más que simplemente usar otra biblioteca, y quiere crear sus propios algoritmos, nuevos tipos de bases de datos, o básicamente hacer nuevos saltos, el dominio de este material no es negociable. Si no tiene al menos un conocimiento pasajero de matemáticas y álgebra discretas, los campos completos como las bases de datos y las partes realmente profundas del aprendizaje automático estarán fuera del alcance. Escribir código eficiente con buenos tiempos de ejecución y grandes Oh no es una broma. Si planea hacer algo serio con big data, saber cómo y cuándo paralelizar y qué algoritmo elegir y cómo optimizar puede marcar la diferencia entre unos pocos segundos de tiempo de ejecución o una semana.

Eso es realmente duro …

Yo diría que primero vaya con la clase de computación si tiene que elegir una.

1) De esa manera puedes comenzar a practicar la codificación. Un semestre adicional de experiencia lo ayudará a sentirse más cómodo en las clases posteriores.

2) La clase de computación le dará más contexto sobre por qué las matemáticas discretas son tan importantes. Además, discreto será fácil una vez que aprendas a comenzar a pensar como un programador.

3) Realmente no necesitarás discreto para las otras clases tempranas de CS. Ayuda, pero la mayoría de las clases de introducción probablemente repasarán las matemáticas básicas discretas cuando surjan.

Conozca el conjunto de conocimientos de ingeniería de software: lo que debe saber un ingeniero de software. http://www.swebok.org

Primero, toda la introducción a CS es útil. Incluso si nunca implementa las estructuras de datos específicas discutidas, necesita comprender las estructuras de datos o es inútil como codificador. Es posible que las cosas de matemáticas no surjan todos los días, pero le brindan las herramientas para desarrollar algoritmos conocidos para resolver cualquier problema que encuentre.

Todas las cosas matemáticas discretas son al menos potencialmente útiles. Ocasionalmente, en la división superior o en el trabajo de posgrado terminas aprendiendo una técnica poco práctica que a tu profesor le gusta, sin embargo, eso no es lo que está sucediendo aquí. No sé qué son las técnicas avanzadas de conteo, pero sé que todas las demás cosas son lo suficientemente básicas como para que las aprendas. Créeme, todos los temas aparecerán una y otra vez.

Todos los temas de la Introducción a la ciencia de los compiladores son casi una cuestión de deily, independientemente del idioma / IDE que use.
Acerca de Matemáticas discretas (me encantó en mi tiempo), realmente depende de ti. Lo que obtienes algunas formas de dominar el mundo o tus problemas. ¿Es realmente un set? ¿Puedo representarlo como un gráfico? ¿Lo modelaría como una recursión?
Disfruta de los dos.

Utilizo todos los temas en ambas listas de forma regular hasta el día de hoy. Después de 27 años de graduarse de la universidad, creo que cuenta como a largo plazo. Tenga en cuenta que algunas de las cosas en esta lista no existían en ese momento (STL, por ejemplo), sino que formaban parte del aprendizaje permanente que tendrá que realizar en este campo.

Bueno, me sorprende que NADA esté en la lista sobre arquitectura de computadoras o sistemas operativos.