Si a la mayoría de los programadores les encanta aprender nuevos lenguajes de codificación (ver enlace), ¿cómo se convierten en expertos cuando las tecnologías son abundantes y profundas?

Descargo de responsabilidad: Los puntos de vista y opiniones en esta respuesta son míos y solo míos, y no representan los puntos de vista u opiniones de mi empleador o cualquiera de sus subsidiarias.


Hay algo que debes entender primero, que realmente no se menciona en la pregunta que vinculaste. Si bien los ingenieros de software pueden disfrutar aprendiendo nuevos idiomas, tienden a gravitar hacia un idioma o conjunto de idiomas “favoritos” o “preferidos”. Sin embargo, esto generalmente se debe a la estética. Pueden preferir la sintaxis o la facilidad de uso de ciertos conceptos de programación, etc., en un idioma sobre otro. Por ejemplo, en mi rol actual, escribo principalmente Java, pero prefiero escribir C #. Y cuando tengo la opción de elegir entre Ruby y Python, prefiero Python, pero otros prefieren Ruby.

Dicho todo esto, la razón por la cual la mayoría de los ingenieros de software pueden aprender tantos idiomas es que los conceptos de ingeniería de software trascienden el lenguaje. Aprender un nuevo idioma suele ser solo una cuestión de sintaxis. Básicamente “¿Cómo hago X en Y?” Después de buscar en Google algunos de esos tipos de preguntas, un ingeniero de software podría construir un sistema completo, solo volviendo a Google para preguntar algunos detalles que pueden no ser fácilmente detectables con el idioma / herramientas que tienen disponibles.

Esta es la razón por la cual las grandes compañías tecnológicas generalmente no publican ofertas de trabajo con “se requieren 5 años de experiencia en Java” y en su lugar publican ofertas con “Debe tener un conocimiento sólido de algoritmos y estructuras de datos”. Las grandes empresas tecnológicas no están preocupadas si tienes experiencia escribiendo Perl. Si entiendes los algoritmos y las estructuras de datos, saben que puedes buscar en Google “¿Cómo hago X en Y?” unas pocas veces y comenzar a ser productivo con bastante rapidez.

Entonces, ¿cómo se convierten en expertos?

Bueno, sinceramente, no lo hacen. Al menos no de inmediato. Antes de tomar mi posición actual (hace aproximadamente un año) no había escrito Java en más de una década. Cuando comencé este trabajo por primera vez, no podía recordar nada sobre Java. Pasé mucho tiempo “traduciendo” cómo haría algo en C # a Java. A veces eso es difícil porque los diferentes idiomas tienen diferentes características “integradas” que hacen las cosas más fáciles o más amigables. Pero después de un tiempo te sientes cómodo con un idioma y puedes escribirlo de forma bastante natural.

Sí, pero ¿cómo se convierten en expertos?

Experiencia . Diferentes idiomas / plataformas comparten diferentes rasgos y / o características. Por ejemplo, Java y C # son lenguajes “administrados”. Si bien tienen implementaciones muy diferentes, el concepto general de un lenguaje “administrado” es el mismo. Según mi experiencia, sé cómo funciona CLR bastante bien, algunos de esos conceptos se aplican directamente a la JVM, y otros no. Cuando necesito, o quiero, conocer esas diferencias específicas, puedo buscarlas y entenderlas.

Para agregar a la respuesta de Tony Li. También es incremental en el sentido de que aprender otro idioma también puede hacerte mejor en los idiomas que ya conoces .

Después de aprender Erlang, aprecié la transmisión de mensajes mucho mejor que cuando lo hacía con MPI y C simplemente porque la semántica C no hace que sea fácil representar un mensaje concurrente que pasa bien en comparación con Erlang.

Después de aprender Python, aprecié las funciones del mapa lambda mucho mejor que cuando estaba usando mapas asociativos en Java (principios de Java 1.0.2).

Cada nuevo idioma trae una nueva perspectiva que normalmente es útil sin importar el lenguaje de computadora que use.

Aprender un nuevo idioma siempre es incremental. Comienza a usarlo, lee otro código y encuentra desafíos que superar. Cuantos más idiomas conozcas, más rápido será elegir uno similar al que ya tienes.

La respuesta simple es que ya no hay “expertos” en el sentido tradicional. Pero esto está extremadamente simplificado. (Y hay un cisma bastante problemático en la comunidad de desarrollo de software).

Se dice que para convertirse en un experto, se necesitan aproximadamente 10,000 horas para hacer algo. Por extraño que parezca, esto coincide con 2K / h por año en una semana laboral de 40 horas, 5 años de experiencia. Me recuerda a las profesiones de aprendiz de oficial. Alrededor de 5 años de sólida experiencia es cuando puede comenzar a postularse y ser considerado para puestos de desarrollador de nivel Senior. Interesante.

“Experto en HTML5”: no todos adoptan de inmediato, y HTML5 no es maduro, las especificaciones aún se están definiendo y resolviendo.

Ese es el cisma problemático: empresas que buscan “expertos” en nuevas tecnologías, donde no hay expertos (y personas que mienten en su currículum).

“Necesitamos un experto en algún marco que se lanzó hace dos días y decidimos usarlo ayer”.

Siendo realistas y pragmáticos: un experto en “desarrollo web” con 5 años de experiencia no tiene 5 años sólidos en una sola habilidad, después de haber dividido esos 5 años entre HTML (5), CSS, JavaScript, cualquier marco JS, generalmente un lenguaje dinámico o dos (PHP, .NET), SQL de algún tipo o variante, y a veces incluso la configuración / administración de algún back-end de despegue (como WordPress), con muy poco conocimiento acerca de “experto” en ninguno de estos.

==========

Cuando se trata de la adquisición de un nuevo idioma por parte de expertos, él o ella puede ser capaz de flip-flop rápidamente debido a su profunda experiencia y comprensión. Después de un tiempo, diferentes metodologías de programación y lenguajes son solo herramientas en una caja de herramientas. Entra en la tienda de otra persona para ayudar, y las herramientas pueden estar en un orden diferente, o diferentes (unidades británicas vs métricas), pero siguen siendo herramientas. Un mecánico oficial podrá entrar en cualquier tienda y funcionar en un corto período de tiempo. Un aprendiz que generalmente solo hace los cambios de aceite puede marchitarse y confundirse.

Para mí, la respuesta no es centrarse en depender de marcos o herramientas específicos, sino en el lenguaje central detrás de las herramientas. Sé que para alcanzar una bujía en cierto ángulo, necesito dos juntas de extensión y girar la llave de tubo en una dirección determinada con cierta fuerza. Experiencia.

==========

Una vez entrevisté a un chico para un puesto de desarrollo de sistemas de Python y MySQL. Se centró en “ORM”, y el proyecto ya tenía problemas. Estaba seguro de preguntar y repetir: “Puede trabajar con Python y bases de datos sin un ORM, ¿verdad?” – El dijo que sí. Meses después, coloca entradas NULL en una base de datos de producción y se va a casa antes de validar y verificar su trabajo. Pensó que esto estaba bien a través de su experiencia principal en el desarrollo de aplicaciones móviles / web utilizando ORM; estaba bien porque el DB lo permitía, y ni siquiera se molestó en verificar qué estaba haciendo el código antes o después de la entrada. Eventualmente escuché que su razón para saltar trabajos no era un salto, pero simplemente no era capaz ni tenía la experiencia de hacer la transición de Python a Scala como lo hacía su antigua empresa: un desarrollador junior en el mejor de los casos. Solo una de esas malas actitudes cotidianas “hey, conseguí amigos y aprendí un poco de Python y esto me hace empleable”, como los desarrolladores web cuando piensan que son expertos en SQL por trabajar con JavaScript y PHP (pero nunca habiendo diseñado una base de datos, y mucho menos el almacén de datos para la velocidad).

==========

La respuesta es convertirse en un experto en una variedad de tecnologías de programación CORE, no en los marcos extraños y demás … de esta manera puede adaptarse a la abundancia y profundidad.

Algunos programadores (como yo) disfrutan aprender en general. Termino siendo (por ejemplo) “una persona C #”, porque la gente lo ve en mi currículum y es más probable que me contraten para ello; cada trabajo donde lo uso lo enfatiza al próximo empleador. Puedo jugar un montón de otros idiomas en mi tiempo libre, pero la experiencia que cuenta para los empleadores es en gran medida C #.

Otros programadores se centran. He trabajado con personas que solo conocen Java y no trabajarán en un proyecto que requiera algo más.

Asimismo, algunos programadores trabajan en diferentes industrias, mientras que otros serán “programadores financieros”, por ejemplo.

Pero hay un punto importante perdido en la pregunta: los lenguajes de programación no son como los lenguajes humanos. Si me dejas en China, me tomaría semanas incluso comenzar a formar parte de la sociedad. Mientras tanto, tendría que estudiar el idioma y la cultura, practicar constantemente y convencer a las personas con las que valgo la pena hablar.

En la programación, los lenguajes son intercambiables en el límite, y hay muchas señales, en forma de formato, que le indican qué papel cumplen las piezas. Es posible que no comprenda los matices de un nuevo idioma y que pueda haber meses de búsquedas ocasionales en la web para encontrar mejores formas de hacer algo, pero un programador decente generalmente puede escribir código viable en casi cualquier idioma en una tarde, por lo que no es una gran carga .