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.
- ¿Cuáles son las habilidades más importantes de un emprendedor TECH?
- ¿Hay algún programador o desarrollador realmente técnico / bueno que tenga dislexia?
- Herramienta de gestión de recursos - UK Call Center - ¿Necesita un sistema para organizar al personal, alguna idea?
- ¿Los desarrolladores profesionales usan un montón de bibliotecas diferentes en una aplicación?
- Soy un desarrollador de nivel medio sólido que conoce sus cosas técnicamente, pero siempre me encuentro detrás de la curva en las conversaciones con sr. desarrolladores, ¿hay algún código secreto que todos ustedes conozcan para evitar romper los NDA y comunicar conceptos 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.