Según su descripción, ya está haciendo software. Estás hablando de un cambio de software que admite el desarrollo de hardware a software que admite otra cosa. Todavía es un cambio, pero NO es un cambio tan extremo como pasar del hardware puro al software.
Creo que necesitas dos cambios importantes para hacer esta transición. Uno es el reciclaje que espera, pero el otro es un cambio en el marketing. Para la comercialización usted mismo, comenzaría reescribiendo su currículum actual no como un currículum de hardware sino como un currículum de software. Usted es una persona de software con experiencia en la interfaz y soporte de hardware. Resalte los idiomas que conoce, los aspectos de programación de sus trabajos, las herramientas de programación que ha utilizado, etc. Al hacer esto y hablar con empleadores potenciales, recuerde que probablemente ya sepa lo siguiente:
- Conceptos básicos de programación (bucles, variables, orientados a objetos, etc.)
- Depuración
- Trabajando con algunas herramientas de software
- Desarrollando proyectos en equipo
- Convertir requisitos en software de trabajo
- Implementación y prueba de las cosas específicas en las que trabajó
Eso es una gran cantidad de conocimientos prácticos necesarios en cualquier trabajo de programación.
- Tengo una oferta de PIC para el rol de desarrollador de Python y otra oferta de Teradata para el rol de ingeniero de DevOps. ¿A cuál debo unirme?
- ¿Una pasantía no remunerada en Ingeniería de Software me ayudará a conseguir un trabajo de Ingeniería de Software en el futuro?
- ¿Cuáles son algunos nichos independientes interesantes y bien pagados en los que un desarrollador senior de Rails podría entrar?
- ¿Cuáles son los tipos de proyectos que puedo hacer que puedo incluir en un currículum de prácticas de ingeniería de software, además de juegos, aplicaciones telefónicas y extensión de Chrome?
- ¿Cuál es el alcance de las pruebas de software?
Para la parte de reentrenamiento, es hora de expandir tus horizontes, pero creo que en una dirección diferente a la que estabas pensando. Los algoritmos son geniales, pero ahora hay muchas herramientas y bibliotecas que manejan mucho de eso para las personas. A menos que esté entrando en una programación altamente teórica, no necesita tantos algoritmos de núcleo duro como supone. Si quieres un buen repaso, he oído que este libro es bueno, pero no creo que necesites memorizarlo para un trabajo de programación “regular”:
Manual de diseño del algoritmo: Steven S Skiena: 9781849967204: Amazon.com: Libros
Lo que realmente necesita para su reentrenamiento son dos partes.
- Romper la mentalidad de hardware
- Amplíe sus áreas de especialización fuera del área de bajo nivel
Romper la mentalidad de hardware
La mentalidad de hardware no es mala cuando trabajas en hardware. Tienes que ir despacio. Tienes que ser metódico. Tienes que medir dos veces porque solo puedes cortar una vez. Tienes que probar, probar, probar porque no hay marcha atrás y actualizar todos los chips. Si no sigue esta mentalidad en el hardware, puede meterse en muchos problemas.
Las cosas son totalmente al revés cuando trabajas en el desarrollo web moderno. Las cosas cambian tan rápido en el espacio de desarrollo web que si planificas cuidadosa y lentamente un proyecto utilizando el método de cascada, tus competidores te dejarían en el polvo. La planificación y la calidad son importantes, pero no en aras de la velocidad. Comenzaría a leer sobre el desarrollo de software ágil. Comience a pensar en compensaciones cuando trabaje en proyectos. A veces es mejor liberar simple y rápido y luego iterar. Asegúrese de que las personas con las que se entreviste vean que comprende la compensación entre un enfoque puro y un enfoque práctico.
Amplíe su experiencia
Les digo a los nuevos programadores que para avanzar hacia un nivel experto realmente necesitan conocer 3 lenguajes de programación diferentes y únicos. Parece que tienes C ++ y Matlab. (No estoy tan familiarizado con Matlab, así que no puedo decir si cuenta como un “lenguaje”). Para esforzarte, volvería a entrenar en algo totalmente diferente. Elija un idioma móvil como dispositivos iOS o un lenguaje de marco web como Ruby on Rails. Puede obtener capacitación básica en línea de forma gratuita. Recoge algunos libros geniales de lugares como The Pragmatic Bookshelf.
Luego, dependiendo de cómo se sienta en sus habilidades, considere uno de los programas de capacitación pagados, encontrar a alguien que le permita contratar a tiempo parcial para la experiencia y capacitación o trabajar en algún código abierto en esa área. Además, busque grupos de desarrollo local en ese idioma. Lo que quiere hacer es ponerse en una posición en la que trabaje con expertos que sepan más sobre eso que usted. De ellos, aprenderá cómo hacerlo, pero también parte de la mentalidad discutida anteriormente.
Una vez que tenga un conjunto sólido de habilidades prácticas, puede comenzar a buscar trabajo. Serás nuevo en ese lenguaje pero viejo en el concepto de programación.