¿Cuáles son los cursos más importantes en un plan de estudios de CS para un ingeniero de software?

Según mis experiencias, muchos cursos en un plan de estudios tradicional de Ciencias de la Computación le brindan fundamentos o enfoques teóricos. Si está trabajando como ingeniero de software desarrollando sistemas de software para que alguien los use, se necesita un conjunto de habilidades completamente diferente.

Para mí, solo había tres cursos ofrecidos por el departamento de Informática que eran especialmente relevantes, fuera de la introducción a la secuencia de programación.

El más importante se llamaba Conceptos del lenguaje de programación. El curso comparó varios lenguajes de programación de diferentes paradigmas y discutió cómo actúan. Cuando tomé el curso, vimos Java (como línea de base; era el lenguaje introductorio que todos en la escuela conocían), Ruby (principalmente las características orientadas a objetos), Scheme (funcional), Prolog (lógica) y Haskell (funcional). No aprendimos los idiomas en profundidad, pero resolvimos los mismos problemas en cada idioma para comprender las fortalezas y debilidades de las soluciones de modelado en diferentes paradigmas. Estar expuesto a lenguajes funcionales y lógicos también fue útil y creo que me ayudó a aprender otros lenguajes más rápidamente.

La Introducción a las estructuras de datos y algoritmos también es importante para un ingeniero de software. Aunque muchos programas de informática también tienen un curso más avanzado, el curso introductorio ofreció una visión general de la implementación de los algoritmos más utilizados (varios algoritmos de búsqueda, clasificación, fusión) y estructuras de datos (listas, mapas, árboles) y más lo que es más importante, cómo realizar un análisis básico de las operaciones para determinar qué estructuras de datos y algoritmos son los más apropiados. Como ingeniero de software, nunca tuve que escribir mis propias estructuras de datos o algoritmos personalizados. Pero he tenido bibliotecas con múltiples implementaciones de algoritmos que necesitaba entender y elegir, y poder tomar una decisión informada es poderoso.

La Introducción a la Teoría de las Ciencias de la Computación cubrió lenguajes formales, gramáticas, teoría de autómatas, computabilidad y complejidad. Es posible que no use muchos de estos en la profesión, son los fundamentos teóricos de la computación, por lo que debe tenerlos en cuenta. La complejidad se vincula con una comprensión más matemática de los contenidos del curso de estructuras de datos y algoritmos. Los idiomas y las gramáticas son útiles si está realizando un análisis, y me ha ayudado a comprender y depurar cómo se entienden y pueden diseñarse y documentarse los formatos de archivo propietarios.

Hay otros cursos que pueden ser parte de un programa de Ciencias de la Computación que pueden ser útiles: cursos en sistemas paralelos, sistemas distribuidos, bases de datos y gestión de datos, comunicación de datos y redes, sistemas operativos, gráficos por computadora, visión por computadora y otros. Sin embargo, a menudo, estos se enseñan como conceptos teóricos. Todavía hay un salto entre la teoría y la capacidad de construir software práctico y utilizable que sea de alta calidad.

Sin embargo, hay algunas formas de ayudar a mitigar la naturaleza teórica de algunos programas informáticos.

En primer lugar, probablemente trabajarás en un equipo mientras trabajas como ingeniero de software. Si no tiene proyectos grupales (y un grupo es más que un par de 2 estudiantes), tome algunas clases que tengan trabajo grupal. También tome clases que incluyan comunicación: escribir, presentar y hablar. Técnicamente, también aprende sobre los sistemas de control de versiones y úsalos para tus proyectos (aunque pregúntales a tus profesores antes de ponerlos en un espacio público como GitHub, eso podría ser una violación de la política de deshonestidad académica para compartir tu trabajo).

Segundo, aprenda sobre temas suaves. Tal vez tomar un curso de gestión de proyectos o gestión empresarial. Aprenda a interactuar con los clientes, capturar requisitos, negocios. Si tiene interés en un dominio en particular o desea trabajar en una industria en particular, aprenda sobre eso también y obtenga una ventaja. Use sus asignaturas optativas con prudencia, y no tenga miedo de hablar con los servicios de su carrera o asesorar al personal para ayudarlo a determinar qué cursos pueden ser los mejores para su carrera.

Tercero, practique desarrollando software. Asegúrese de crear buenos hábitos para comprender los requisitos, descomponer los problemas en partes más pequeñas, comprender sus herramientas (sus editores e IDE, depuradores, compiladores, crear scripts, idiomas) para que pueda explicar lo que está haciendo en lugar de hacer cosas “mágicas” , escribir código de alta calidad, desarrollar pruebas (pruebas unitarias automatizadas, casos de pruebas manuales) y determinar por qué esas pruebas son efectivas y buenas, y hacer que su código y las pruebas sean revisadas por pares para obtener comentarios.

Los cursos más importantes en mi opinión son:

Estructura de datos : Linus Trovalds dijo:

“Los malos programadores se preocupan por el código. Los buenos programadores se preocupan por las estructuras de datos y sus relaciones”.

La estructura de datos, que es lo más importante que se debe aprender en informática, era mucho que aprender mientras se aprende, pero fue la mejor clase de la historia. Enseña diferentes estructuras de datos como Array, Listas, Árboles y Gráficos.

Encuesta de Algoritmos ( Algoritmos ): Esta es otra clase más importante. Se trata de los diferentes algoritmos, su tiempo de ejecución y sus implementaciones. Aprender el análisis asintótico para diferentes problemas y analizar sus implementaciones en diferentes problemas es una muy buena experiencia.

Es posible que casi escuche diferentes palabras elegantes como ” Big O “, ” Mochila” , ” Recursión “, ” Programación dinámica “, antes de tomar esta clase. Después de tomar, todos tus amigos.

Ambas clases son realmente útiles para ir a los concursos de programación y resolver problemas en HackerRank, SPOJ.

A2A Computer Science es una combinación de negocios, ingeniería y matemáticas, por lo que cuando pregunta cuáles son los cursos más importantes para un ingeniero de software, un título de trabajo sofisticado para un programador, son los más importantes, está preguntando acerca de alcanzar un objetivo móvil que depende exactamente de la especialización que haya dominado, algunas que pueden existir mucho después de graduarse.

El objetivo de una licenciatura en matemáticas es aprender a leer una prueba, y los programas no son más que pruebas ejecutadas por una computadora. El objetivo de una especialización en informática es similar: cómo escribir un programa que implemente una aplicación en una plataforma.

La informática te da una estructura teórica, pero la práctica y la formación continua hacen que un ingeniero. No hay absolutamente ninguna manera de decir en diez años qué cursos van a ser importantes.

More Interesting

Para un programador promedio, ¿en cuántos lenguajes de programación debería ser muy competente?

He creado un producto de software utilizando desarrolladores offshore. ¿Cómo sé que están codificando adecuadamente para el futuro crecimiento / venta / mejoras?

¿Qué tipo de plataforma informática es la más adecuada para la robótica a nivel de producción?

¿Cómo es ser ingeniero de software en una empresa de pornografía?

¿Cómo se pasa efectivamente de ser un ingeniero principal a la gestión de equipos de ingeniería?

Dado el número cada vez mayor de utilidades (Puppet, Chef, Redis, MemCache, Selenium, etc.) agregadas a la pila de aplicaciones principales (HTML, CSS, JS, DB e idiomas de back-end de elección), qué es una base pila 'completa' para dominar para el desarrollo general de aplicaciones de nivel de producción

Dentro del desarrollo de software, ¿con qué conjunto de tecnologías es más fácil trabajar? ¿Por qué?

¿Cómo se aplica la Ley de Little al software?

¿Cuáles son algunas intuiciones detrás de la estimación de cuánto tiempo lleva ejecutar un fragmento de código?

¿Qué tipo de proyecto expondría uno a muchos conceptos de programación concurrentes?

Cómo entender el código de un proyecto de manera rápida en un entorno profesional y programar más rápido

¿Cómo se decide qué lenguaje de programación usar para un proyecto?

¿Cuáles son las mejores maneras para que un estudiante de cuarto semestre aprenda programación del mundo real en Java?

¿Qué es lo peor que te puede pasar como ingeniero de software y cómo evitarlo?

¿Cuánto tiempo le tomará a un solo programador construir su propio software?