¿Cuántos lenguajes de programación son suficientes para saber para un ingeniero y cuáles?

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.

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.

No funciona así.

Probablemente aprenda dos o tres de los lenguajes más comunes en la universidad (JavaScript, Python, C ++ y Java son candidatos probables); luego, cuando comience a trabajar, pronto encontrará uno o dos más que necesita y aprenderá esos también.

Después de un par de años, su proyecto puede cambiar de dirección, o necesitar ser trasladado a una plataforma diferente, tal vez cambie de proyecto u obtenga un trabajo completamente diferente, y es probable que necesite aprender otro idioma.

De vez en cuando, si eres un buen programador y (como la mayoría de nosotros) tan obsesionado con la tecnología que comienzas “proyectos paralelos” en casa, entonces tal vez te marches y aprendas un lenguaje extraño que te fascina – pero tú que no necesitas para trabajar.

Repita esto durante algunas décadas y ahora conoce una docena de idiomas, algunos con fluidez, algunos “lo suficiente como para sobrevivir” y algunos que se ha oxidado irremediablemente y que tendrá que comenzar de nuevo para usar de nuevo.

Piense en esto como un mecánico de automóviles: ¿ha trabajado alguna vez su mecánico de automóviles en un Mini Cooper? ¿No? ¿Eso lo hace incapaz de cambiar el aceite de un Mini Cooper? ¿Tiene que ir a clases para aprender a trabajar en ese tipo de automóvil? ¡No! Sabe lo suficiente sobre los automóviles en general como para descubrir qué necesita hacer, y tal vez tenga que abrir el manual si es algo más complicado que cambiar el aceite.

Cualquier programador decente puede aprender suficiente lenguaje nuevo durante un fin de semana para “sobrevivir” y modificar los programas existentes o escribir uno nuevo a partir de uno de los programas de ejemplo. Cualquier programador decente sería bastante fluido en un nuevo lenguaje en un mes … a excepción de los locos y complicados lenguajes como C ++ … pero casi nadie (¡probablemente absolutamente nadie!) Sabe todo C ++ “con fluidez”.

Hay al menos 200 lenguajes de programación por ahí … nadie los aprenderá a todos … nadie querría aprenderlos a todos … nadie podría aprenderlos a todos. Incluso creamos nuevos idiomas tontos como “Whitespace” y “BrainF ** k” en los que nadie escribirá nunca un programa sustancial.

No existe una “insignia de honor” entre los programadores por conocer muchos idiomas. No es como si estuviéramos sentados en la sala de descanso haciendo un seguimiento de quién sabe más y de estar asombrado del tipo que sabe 20 idiomas cuando el resto de nosotros solo sabe 12. No funciona así … al igual que ningún mecánico de automóviles enumeraría todos los tipos de automóviles en los que trabajó.

Incluso para solicitudes de empleo y entrevistas, no tiene sentido incluir esta lista de una docena de idiomas en su currículum.

Iba a decir uno, pero honestamente no creo que eso sea cierto en la práctica, así que voy a decir dos.

Un lenguaje que es principalmente un lenguaje de secuencias de comandos interpretado (ya sea Python, Groovy, Ruby, PHP, Bash, Perl o incluso R; lo que sea)

Un idioma compilado y adecuado para aplicaciones que distribuye o empaqueta de alguna manera.

La mayoría de las personas aprenden primero el lenguaje de secuencias de comandos, son más fáciles de enseñar y, francamente, son más útiles. Puedes juntar algo para revisar tu correo electrónico y enviarte un mensaje de texto si recibes algo de Sheila mientras estás fuera.

El lenguaje compilado tiende a ser más pedante, más utilizado en la industria, y se utiliza para grandes proyectos de software donde decenas de cientos de desarrolladores comparten código, modelos, lo que sea. Los ejemplos aquí están fuera de la lista TIOBE casi exclusivamente, pero C, C ++, C #, Java, Scala, COBOL y muchos otros lenguajes de casos de negocios.

La razón por la que los divido de esa manera es por la misma razón por la que generalmente se espera que un ingeniero tenga un conjunto de herramientas específico con el que sea un experto, ese es su idioma de negocios y otro conjunto de herramientas con el que pueden arrojar algo contra la pared, su lenguaje de secuencias de comandos .

Teóricamente puedes sobrevivir con solo uno, pero creo que la diversidad de idiomas es algo bueno para aprender y conocer.

Como el OP no mencionó qué tipo de ingeniería, primero voy a sugerir MATLAB (oratorio de laboratorio mat rix), ya que casi todas las ramas de la ingeniería requieren muchas matemáticas y, en particular, operaciones de matriz en las que MATLAB sobresale. Existen alternativas gratuitas, como FreeMAT y GNU Octave (ambas tienen una sintaxis similar pero no idéntica).

El lenguaje R también se usa ampliamente en ingeniería para el cálculo estadístico.

Si va a trabajar con microcontroladores, necesitará saber C, ya que la mayoría de los sistemas integrados están programados en ese lenguaje. Aquellos que generalmente no usan C ++ (por ejemplo, el subconjunto utilizado por la plataforma Arduino).

Como otros han mencionado, es bueno saber una secuencia de comandos de propósito general. Me gusta y recomiendo Python. Si no ha programado antes, puede ser un buen lugar para comenzar.

Dependiendo del campo de la ingeniería, podría ser de 0 a 4 o 5 mínimo. Algunos ingenieros hacen la mayor parte de su trabajo en computadoras, y tienen que escribir una pequeña utilidad de vez en cuando, pero BASIC o Python serían excesivos. Algunos tienen que hacer un análisis exhaustivo utilizando programas que aún no se han escrito, algunos tienen que ejecutarse en Android o iPhone, algunos en Windows, otros en Linux; no hay forma de predecir con qué se encontrarán. (Un primo era ingeniero químico. Hace muchos años, le mostró a su jefe que, si intentaba resolver el problema en el que estaban trabajando por papel y regla de cálculo, podría llevar años, pero había una clase Fortran de 3 meses), y pudo resolver el problema usando fortran en unos días. Pasó de ingeniero químico a estudiante de programación en un instante. [Y resolvió el problema en un par de horas].

Jajaja Welll Comencé en BASIC, FORTRAN, ALGOL, PL / I, PASCAL y Assembler.

Luego C, PHP, SQL, Bash, HTML.

Luego PERL, Java, Applescript.

Ahora estoy tratando con Python y Groovy.

Entonces, la mejor respuesta es … enfóquese en los que le darán el trabajo que más desea HOY, y espere que necesite adoptar un nuevo idioma cada 3–5 años para seguir siendo comercializable.

No se trata de cantidad, se trata de amplitud. Probablemente deberías estar aprendiendo idiomas todo el tiempo, pero ser bueno en 2–3 es probablemente suficiente. Aprendería un lenguaje tradicional compilado como C o Java para que entiendas cómo funcionan. Aprendería un idioma interpretado o un lenguaje “web” para que pueda ver cómo funcionan. personalmente elegiría un OO puro, lenguaje moderno como Ruby, pero no te equivocarás con Python, Perl, Javascript (como Node.js). Y finalmente, aprendería algo que te obliga a cambiar totalmente tu forma de pensar en lenguajes de programación como Lisp, Haskell, R o Erlang.

En serio, no se trata de la cantidad de idiomas o de los que conoces.

Se trata de su capacidad para comprender el espacio del problema y la variedad de soluciones disponibles para abordar un problema determinado de manera efectiva.

¿Qué diablos pasó con el concepto de abstracción que tan au courant a finales de los años 70? Parece que todos quieren ser un mono código y se preguntan qué estilo de monos deberían estar haciendo.

Sí, me siento cínico esta noche. Demasiadas décadas, muy poco progreso. Estoy perdiendo mi entusiasmo por mi querido campo.

Raramente lo sabrás de antemano. Principalmente los aprendemos según sea necesario.

More Interesting

¿Cómo encuentra un software un error en palabras mal escritas, especialmente en Android?

¿Está bien que un ingeniero senior con 7 años de experiencia trabaje continuamente en un campo técnico durante 3 años más?

¿Cómo debería uno comenzar su objetivo de convertirse en ingeniero de software y trabajar en las principales empresas tecnológicas como Google?

¿Por qué los asistentes de configuración del programa se llaman 'asistentes'? Hay alguna razón para esto? ¿Qué programa usó primero el término 'asistente'?

¿Cuáles son buenos ejemplos de expresiones regulares?

¿Cuál es el mejor software para probar las mismas estrategias en diferentes instrumentos como acciones, forex al mismo tiempo?

¿Qué es un buen modelo de datos para una cartera de acciones?

Con (casi) todas las revistas de programación desaparecidas, ¿cuáles son algunas fuentes de información de calidad para leer para mantenerse al día con las tendencias y herramientas de desarrollo de software?

¿Qué es post-ágil, cuando se refiere al desarrollo de software? Entiendo los conceptos básicos de ágil, pero ¿qué pasa con un lugar de trabajo describiéndose a sí mismos como post-ágil?

¿Cómo puede el probador de software adquirir conocimiento de dominio de seguro?

Profesionales: ¿Qué separa a íconos como Steve Jobs y Bill Gates de sus empleados o competidores que trabajan tan duro como ellos o tal vez incluso más?

¿Qué características del software de gestión de proyectos son las más importantes para usted?

¿Cómo difiere el ciclo de vida de desarrollo de software (SDLC) en Google versus Microsoft?

¿Desde dónde empiezo si quiero ser ingeniero de software?

¿Qué debo aprender primero cuando me uno a una compañía de software para acelerar mi crecimiento?