Gracias por A2A.
La respuesta que la mayoría de los desarrolladores probablemente darían a esta pregunta es su idioma favorito actual. Después de todo, están convencidos de que es la mejor ronda de idiomas y, por lo tanto, serán populares durante algún tiempo.
Puede ver lo que es popular en las juntas de empleo, sitios de contribución comunitaria, etc. Hay sitios que intentan dar clasificaciones para estos, como The Coding Standards Company, The RedMonk Programming Language Rankings: junio de 2014 y el índice de popularidad de programación de PYPL – pyDatalog . El hecho de que los diferentes sitios proporcionen imágenes bastante diferentes muestra que están midiendo diferentes secciones / vistas de la comunidad de programación, se están enfocando de manera desproporcionada en áreas específicas o simplemente malinterpretando los datos. Creo que puedes usarlos para obtener una imagen amplia, pero esto solo te dirá lo que es popular ahora, no en el futuro.
El objetivo de todo esto es demostrar que las predicciones específicas (idiomas, etc.) generalmente serán incorrectas a menos que tengan suerte. Después de todo, no podemos ponernos de acuerdo sobre qué es lo más popular ahora, y mucho menos en el futuro. Así que trataré de responder en términos más generales.
Lenguajes funcionales : hay una buena cantidad de rumores en torno a los idiomas funcionales (como Scala, Scheme, Haskell y Erlang). Muchos de los programadores que lo han intentado les dan su gran entusiasmo. Esto es suficiente para concluir que se utilizarán al menos en un grado razonable cuando el programador tenga cierta autonomía con respecto a su conjunto de herramientas, por ejemplo, en proyectos de código abierto y una pequeña proporción de empresas.
La principal ventaja que veo desde una perspectiva empresarial es la capacidad mejorada para construir software robusto debido a la naturaleza matemáticamente demostrable de la programación funcional. También puede haber algún beneficio de eficiencia si está contratando a ingenieros de élite.
En el lado negativo, la mayoría de las compañías no contratan ingenieros de élite (por definición, la mayoría de los ingenieros son bastante promedio) y los lenguajes funcionales no son conocidos por ser fáciles de aprender. La realidad es que puede haber una pérdida de eficiencia para el programador promedio y un grupo limitado de talentos experimentados para extraer de quién puede mandar salarios bastante altos.
En base a esto, asumo que los lenguajes funcionales experimentarán un cierto crecimiento donde los ingenieros que los favorecen tienen algo que decir y donde la robustez es crítica (y los tomadores de decisiones tienen el sentido de mirar la investigación o tomar un buen consejo). Vladislav Zorov también hace un buen punto sobre la paralelización. Sin embargo, como tantas empresas solo quieren que los trabajadores se pongan al día lo más rápido posible para dar la vuelta a sus productos “lo suficientemente buenos” a un costo tan bajo como sea posible, creo que es probable que se mantengan relativamente nicho (pero se sorprenderían gratamente si Me equivoqué sobre esto) .
Lo que sugeriría es tratar de estar familiarizado con una variedad de idiomas diferentes que sean buenos para diferentes tareas / enfoques. Java y C # son muy utilizados en este momento para aplicaciones empresariales. No son muy interesantes, pero podría argumentar que representan una buena compensación entre el rendimiento en tiempo de ejecución y la eficiencia del desarrollador. Muchas compañías continúan escogiéndolos porque son opciones seguras y probadas, y no veo que eso cambie en el futuro. Java tiene la ventaja sobre C # en ser multiplataforma, pero esto es un problema menor si está entregando aplicaciones a través de la web. Creo que el IDE de Visual Studio (para C #) está un poco más pulido que cualquier otro que haya probado para Java, por lo que puede ser una buena opción
si está apuntando a la plataforma Windows o si está entregando la aplicación a través de la web y no le importa. ejecutandolo en servidores de Windows.
Es probable que C / C ++ esté disponible por un tiempo para aplicaciones de rendimiento crítico (aunque usted ve intentos en esto en idiomas de nivel superior). Otros idiomas que intentan alcanzar el mismo nivel de rendimiento, como GO, no parecen haber logrado mucha tracción todavía (quién sabe si lo harán).
Python, Ruby y otros lenguajes de scripting son excelentes para la productividad del desarrollador y tienden a ser más populares entre sus usuarios. Las aplicaciones pueden ser menos robustas en algunos casos debido a que se escriben e interpretan dinámicamente (menos errores detectados en el momento de la compilación) y obviamente hay un impacto en el rendimiento de la ejecución de un intérprete. Sin embargo, esto no es suficiente para ser un gran problema en muchas aplicaciones. Incluso en aplicaciones críticas para el rendimiento, todavía se pueden utilizar para crear prototipos o secuencias de comandos.
Si puede aprender uno de cada uno de estos tres grupos (o quizás solo un lenguaje de scripting dinámico y uno compilado de forma estática) y ver la programación funcional si tiene una inclinación matemática, creo que estará preparado para el corto. a medio plazo.
Para ser honesto, los aspectos más importantes son bastante atemporales e independientes del lenguaje:
- Elegancia: si es complejo de seguir, entonces no has hecho lo suficiente para abstraer la complejidad (es decir, no deberías tener que leer cada línea para descubrir qué está haciendo);
- Sencillez: no reinvente la rueda, si existen buenas bibliotecas, úselas;
- Transferibilidad: documente sus principios de diseño / estructura general y utilice comentarios cuando sea necesario;
- Rendimiento: en cualquier lugar en el que se encuentre utilizando bucles, calcule una aproximación de la cantidad de veces que ingresará al código (en relación con el tamaño de las entradas relevantes) y pregúntese si puede hacerlo mejor. Si encuentra que está golpeando algún código> = n² veces (para alguna entrada n), entonces probablemente podría y debería hacerlo mejor (por ejemplo, n * log (n)). Esto supondrá una diferencia mucho mayor para el rendimiento que la elección del idioma.