Debe diferenciar “poder leer en uno” de “poder escribir con fluidez en uno”. Actualmente (en 2017) dos lenguajes que son completamente ubicuos y que le permitirán obtener un trabajo al 100% son C ++ x11 y Javascript ES6. Si puede construir software con ellos, tiene una posición bastante estable. Tenga en cuenta que no solo necesitará conocer el idioma en sí, sino también la infraestructura, las bibliotecas de terceros y los enlaces.
Para cubrir completamente todos los paradigmas, conceptos, técnicas y modelos de diseño existentes, la siguiente lista de idiomas será suficiente:
Haskell: fuerte inferencia de tipos estáticos, tipos definidos por el comportamiento, datos inmutables, funciones de primera clase, conjunto completo de medios funcionales de combinación (mapa, reducción, curry, memorización), enfoque generalmente “funcional”, funciones puras e impuras.
- ¿Cuál es la tasa de éxito de la programación funcional en comparación con otras estrategias de programación?
- ¿Debo dejar mi trabajo porque no estoy obteniendo suficiente conocimiento?
- ¿Cuál es la mejor manera de encontrar clientes en los EE. UU. Como una empresa de outsourcing de desarrollo de software?
- ¿Cuáles son las cosas más esenciales que un programador autodidacta debe aprender para ser un gran ingeniero de software en el menor tiempo posible?
- ¿Cuáles son los salarios para los ingenieros de software al principio?
Javascript: implementación basada en prototipos de enfoque orientado a objetos, cierres, inferencia dinámica de tipo débil.
C ++: lenguaje tradicionalmente compilado con un enfoque clásico para la creación de binarios nativos (preprocesamiento, compilación, ensamblaje, etc.), manipulación de detalles de hardware, aritméticos de punteros y punteros, hilos, enlace DLL sin procesar, implementación tradicional de enfoque orientado a objetos.
Common Lisp: macros de escritura de código, notación de prefijo, código como datos (es decir, compilar código en tiempo de ejecución, ejecutar código en tiempo de lectura, etc.), implementación de protocolo de metaobjeto del enfoque orientado a objetos (las clases son objetos mutables de primera clase, etc.).
Erlang: código distribuido, agentes, implementación de paso de mensajes del enfoque orientado a objetos.
Prolog: retroceso, modelo no lineal de ejecución del programa, coincidencia de patrones (puede hacerlo allí en Haskell y Common Lisp con bibliotecas, pero en Prolog es esencial para el lenguaje en sí).
Lenguaje ensamblador (para cualquier familia de procesadores): mapeo directo del código a las instrucciones del procesador, programación sin estructura y sin procedimiento (básicamente, haga cualquier cosa que pueda programar), acceso a memoria sin procesar.
Esto le proporcionará los conceptos más útiles e importantes que probablemente usará todos los días en su trabajo.