¿Cuáles son las clases de CS más importantes para un ingeniero de software?

Muchos programas de cuatro años en CS o ingeniería de software requieren un conjunto de cursos básicos. Estos cursos básicos son esenciales para una comprensión general de la informática. Son los candidatos más claros para el título de “más importante”.

Por lo general, hay cierta flexibilidad en los cursos de nivel superior. Entonces, ¿es el curso de sistemas operativos más importante que el curso del compilador? ¿Qué hay de la informática distribuida frente al aprendizaje automático? Es difícil de decir. Factores como los intereses personales del alumno, los objetivos a largo plazo, el profesor que imparte el curso y la naturaleza del trabajo del curso (por ejemplo, si hay una práctica) podrían influir fácilmente en la decisión en una dirección u otra.

Personalmente, aprendí mucho de la práctica de sistemas operativos (los laboratorios eran abismalmente difíciles) y un curso de matemáticas aplicadas (códigos de Hamming, encriptación RSA, etc.), pero mi favorito de todos los tiempos era la teoría de la computación. Lamento no haber tomado compiladores (aunque no estoy seguro de lo que habría cambiado en su lugar) y si recuerdo correctamente, no había un curso de aprendizaje automático a nivel de pregrado cuando estaba en la universidad. Parece que hubiera sido beneficioso.

  • Cosas sobre algoritmos numéricos discretos y deterministas deterministas (de un solo subproceso). Aprenda cómo se pueden hacer las cosas en una sola computadora.
  • Sistemas distribuidos, redes, tolerancia a fallas, paralelismo, concurrencia. Aprenda cómo se hacen las cosas en múltiples sistemas de comunicación. Observe que la “computadora única” idealizada supuesta anteriormente no existe. Su sistema operativo, la jerarquía de memoria RAM / caché, los dispositivos IO y, por supuesto, las computadoras interconectadas en red forman un sistema distribuido con partes comunicantes.
  • Alguna lógica matemática y teoría de prueba y clases de matemáticas discretas (álgebra); verificación de modelos, etc. para comprender mejor lo que significa especificar y verificar el tipo de sistemas formales que las computadoras nos permiten implementar.

Debería centrarse más en cursos teóricos, analíticos y estructurales que lo ayuden a aprender a pensar, implementar soluciones y manejar flujos de trabajo comerciales que las tecnologías específicas. La razón es que las nuevas tecnologías se introducen con frecuencia, aumentan y disminuyen su popularidad o incluso perecen, pero una persona que sabe cómo operar de manera efectiva independientemente de la tecnología tiene más probabilidades de adaptarse y tener una carrera exitosa.

Solo agregaría que si planea desarrollar aplicaciones, algunas clases básicas de física serían de gran ayuda. Dos razones:

  1. La física lo ayudará a comprender un amplio conjunto de requisitos del “mundo real”.
  2. La física puede ser uno de los mejores temas para presentarle las técnicas de resolución de problemas. Mi maestro de física de primer año sugirió que el punto de partida para resolver muchos problemas es “dibujar un panorama general …”

El lenguaje de la física es matemática, así que toma un par de clases de álgebra, trigonometría y cálculo. Cuando se gradúe, estará preparado para la disciplina de Ciencias de la Computación y esto puede brindarle una gran ventaja en cualquier área de CS que elija. De hecho, estoy sorprendido de cuántas especialidades de CS tienen antecedentes débiles en otras ciencias.

Las clases de CS más importantes que debe tomar un ingeniero de software:

Paso 1:
Lleve todos los requisitos previos a la programación dinámica.

Paso 2:
Tome la programación dinámica, que le enseña a resolver su objetivo al revés.

Paso 3:
Use la Programación dinámica para resolver su objetivo profesional al revés: decida dónde quiere estar en 10 años, descubra qué cursos de cuarto año necesita para eso y resuelva al revés todos los requisitos previos.

Paso 4:
¡Lucro!

Seis se destacan para mí:

  1. Estructuras de datos (generalmente 2 clases)
  2. Algoritmos (generalmente 2 clases)
  3. Matemática discreta (generalmente 2 clases)
  4. Álgebra lineal
  5. Arquitectura de Computadores
  6. Sistemas operativos

Sorprendido, nadie mencionó los patrones de diseño. De todas las preguntas que me hacen en casi todas las entrevistas, se trata de una o más sobre patrones de diseño.

Pero, al mismo tiempo, su pregunta me implica que cree que puede tomar solo las clases que desea tomar, no obtener un título, y aún así obtener un buen trabajo. Como alguien que comenzó su carrera hace más de 20 años sin título, debo decir que tengo dudas. Mis primeros trabajos, me pagaron mal, abusaron de mis trabajos y, en general, asumieron que estaba atrapado porque la mayoría de los lugares quieren ese grado. De hecho, dejé de ser programador y entré en atención al cliente. Luego terminé mi licenciatura y obtuve un trabajo decente con un salario decente.

Entonces, a menos que planees ser un emprendedor, te recomiendo terminar ese grado. Te pagarán mejor y tendrás más opciones.

Todos ellos. Un título es una combinación de cursos que se determinan para obtener un graduado de suficiente habilidad. Los temas principales centrales como PLI, DSA, OS, DFA, Arquitectura de Computadores y otros son los fundamentos de una buena especialización.

Al menos, según esa institución.

Los algoritmos, las matemáticas de nivel superior y el sistema operativo. Esas son cosas que si no lo hiciste bien la primera vez, jugar a ponerse al día con tutoriales en línea no ayudará.

More Interesting

¿Debo perseguir mi sueño de ser científico o convertirme en ingeniero de software?

¿Cuál es mejor para un ingeniero de software más reciente: Amdocs o iGATE?

¿Un nuevo grad SDE en Amazon codifica 8 horas al día en el trabajo? Si no es así, ¿cuánto se codifica realmente a diario?

¿Puede un ingeniero de software convertirse en investigador de software?

¿Cómo puede un pasante aumentar sus posibilidades de obtener una PPO (oferta previa a la colocación) de Arista Networks?

¿Las API solo se aplican a las soluciones de marca blanca?

Soy ingeniero de software y me gustaría ser un defensor del desarrollador. ¿Qué debo hacer para lograr eso?

¿Qué hacen los ingenieros de software en Amazon?

¿Pueden los ingenieros de seguridad de red o los ingenieros de red ganar 50 lpa después de 5 años de comenzar sus carreras como ingenieros de software?

En las casas de software actuales, ¿qué técnica se usa comúnmente para estimar su software?

Como ingeniero de software que deja la industria para seguir su pasión en las finanzas como analista (banca de inversión / capital privado), ¿qué último consejo le daría?

Ingenieros de software que desarrollan / desarrollaron software que podría costarle la vida a alguien (si se codifica mal) - ¿Cómo se enfrenta a esto?

¿Cómo hacen un seguimiento los ingenieros de software, organizan y recopilan información sobre los procesos comerciales involucrados en un software de sistema?

¿Cómo aprender a construir sistemas escalables, de alto rendimiento y altamente concurrentes? ¿Cuáles son los requisitos previos? ¿Qué recursos debo usar para aprender? ¿En qué tipos de proyectos debería trabajar? ¿Cuáles son las habilidades y la mentalidad de un SDE de este tipo?

¿Cuál es el mejor momento para enviar un correo electrónico a un ingeniero de software?