Mi respuesta tiene dos lados: uno general y uno específico en relación con campos desafiantes e interesantes.
Lado general. La informática te dota de tres conceptos cruciales:
- Análisis de algoritmos, diseño e implementación. Los algoritmos y las estructuras de datos son el equivalente del cálculo, la mecánica y la física para la informática. Aprende rápidamente que los problemas comunes a menudo siguen patrones similares, que se estudian en profundidad. Este último le permite buscar el lenguaje apropiado para la tarea mientras conserva importantes propiedades de eficiencia (en el espacio o el tiempo).
- Reducciones Suponga que conoce la solución para el problema A. Se encuentra con un nuevo problema B y se da cuenta de que, al realizar un número limitado (y con suerte eficiente) de transformaciones a la entrada, obtiene una instancia de A. Esta es una reducción. Muchos problemas pueden entenderse en general a gran profundidad a través de este dispositivo abstracto.
- Trazabilidad Saber si un problema es manejable (es decir, existe un número finito y razonable de pasos para resolverlo) o no proporciona una visión de ingeniería. Si no se sabe que el problema es soluble de manera eficiente, puede proceder con aproximaciones, muchas de las cuales se garantiza que son correctas en algún porcentaje del tiempo o para un rango limitado de instancias.
Lado específico. Con su experiencia en ingeniería, hay varias áreas donde tendría una ventaja única:
- Sistemas distribuidos: ¿Cuál es el significado exacto de A (Disponibilidad) y qué significa en el teorema CAP de Brewer?
- ¿Cómo es tomar X en Y College ?: ¿Cómo es tomar 6.856 (Algoritmos aleatorios) en MIT?
- ¿Qué literatura necesitas para resolver el problema P vs NP?
- Aunque amo CS y la programación, soy malo en matemáticas. Mi lógica para desarrollar programas es débil. ¿Qué debo hacer para mejorar mis habilidades lógicas y dónde puedo aprender las matemáticas esenciales para la programación?
- ¿Es importante entender cómo se derivan los teoremas específicos, o es suficiente entender solo cómo usarlos?
- Diseño de controladores y software especializado para instrumentos científicos.
- Desarrollo de nueva maquinaria que se basa en implementaciones de software de teoría de control.
- Modelado y simulación de maquinaria o procesos industriales.
- Desarrollo de herramientas de evaluación de riesgos para software que interactúa con maquinaria
- Implementación de software seguro y / o seguro para sistemas de misión crítica
Si estuviera en su posición, definitivamente dedicaría tiempo a aprender Haskell / Clean y la verificación y análisis de software formal (por ejemplo, Fundamentos de la especificación algebraica y desarrollo de software formal) y luego comercializarme como un consultor que construye software en el que se puede confiar. Este es uno de los caminos menos explorados pero más gratificantes en la intersección entre CS e ingeniería.