Video: ¿Qué lenguajes de programación necesitas saber para ganar más?
Discutir sobre qué lenguaje de programación es el mejor es un pasatiempo favorito entre los desarrolladores de software. La parte complicada, por supuesto, es definir un conjunto de criterios para «lo mejor».
Con la redefinición del desarrollo de software para trabajar en un contexto de ciencia de datos y aprendizaje automático, esta pregunta atemporal está cobrando una nueva relevancia. Veamos algunas opciones y sus ventajas y desventajas, con comentarios de expertos en dominios.
Lea también: Reglas de JavaScript pero los lenguajes de programación de Microsoft están en aumento
Aunque, al final, la elección es, al menos hasta cierto punto, subjetiva, algunos criterios vienen a la mente. La facilidad de uso y la sintaxis pueden ser subjetivas, pero cosas como el soporte de la comunidad, las bibliotecas disponibles, la velocidad y la seguridad de tipos no lo son. Sin embargo, hay algunos matices aquí.
Velocidad de ejecución y tipo de seguridad
En las aplicaciones de aprendizaje automático, las fases de entrenamiento y operativas (o de inferencia) para los algoritmos son distintas. Entonces, un enfoque adoptado por algunas personas es usar un idioma para la fase de capacitación y luego otro para la fase operativa.
El razonamiento aquí es trabajar durante el desarrollo con el lenguaje que sea más familiar o fácil de usar, o que tenga el mejor entorno y soporte de biblioteca. Luego, el algoritmo entrenado se transfiere para ejecutarse en el entorno preferido por la organización para sus operaciones.
Lea también: Los 5 peores lenguajes de programación para aprender en 2018 – TechRepublic
Si bien esta es una opción, especialmente al usar estándares como PMML, puede aumentar la complejidad operativa. Además, en muchos casos las cosas no están claras, ya que la programación realizada en un lenguaje puede llamar a bibliotecas en otro, diluyendo así el argumento sobre la velocidad de ejecución.
Otra cosa a tener en cuenta es la seguridad de tipos. La seguridad de tipos en los lenguajes de programación es un poco como el esquema en las bases de datos: si bien no tenerlo aumenta la flexibilidad, también aumenta las posibilidades de errores.
En este hilo iniciado por Andriy Burkov, líder del equipo de aprendizaje automático de Gartner, Burkov se opone al uso de lenguajes de escritura dinámica como Python para el aprendizaje automático.
«Puede ejecutar un experimento durante varias horas, o incluso días, solo para descubrir que el código falló debido a una conversión de tipo incorrecta o una cantidad incorrecta de atributos en una llamada de método», dice Burkov.
Java
A pesar de tener lo que podría decirse que es la huella más grande en la implementación empresarial, Java no está recibiendo mucho cariño en estos días. Algo de esto puede tener que ver con el «factor de frescura», ya que Java ha sido desafiado por nuevos lenguajes de programación, pero también hay algunas preocupaciones muy reales aquí.
Lea también: Los 10 lenguajes de programación que odian los desarrolladores – TechRepublic
Lo que ha ayudado en gran medida a Java a establecer su huella, es decir, la JVM, también es una razón por la cual las personas se muestran escépticas sobre su uso para el aprendizaje automático. De manera similar, una característica famosa de Java, que ayuda a lidiar con las complejidades de C++, la recolección de elementos no utilizados, puede plantear problemas en los entornos de producción.
Cuando discutimos las tendencias en el desarrollo de software con Paco Nathan, socio gerente de Derwen y experto en ciencia de datos y líder de pensamiento, surgió el tema.
Nathan señala que la tendencia que ve es hacia las aplicaciones en tiempo real, y esto no es algo para lo que crea que la JVM sea adecuada, ya que es una abstracción sobre el hardware. Agregar una capa entre el código y el hardware proporciona portabilidad multiplataforma, pero también ralentiza la ejecución.
Nathan también cita a Ion Stoica, el iniciador de Apache Spark, que se usa mucho para aplicaciones en tiempo real. Nathan mencionó que una de las reglas que Stoica ha establecido recientemente para su equipo de investigación en Berkeley es abolir Java.
Nathan comentó que espera que eso se extienda de la investigación a la industria en un período de cinco años, como es típico en las direcciones iniciadas en entornos de investigación. Pero tal vez no deberíamos ser demasiado rápidos en descartar Java.
Lea también: Lenguajes de programación de más rápido crecimiento en 2018 – TechRepublic
Los altibajos que han seguido a Java durante su gestión por parte de Oracle pueden haber contribuido a su caída en desgracia. También pueden tener algo que ver con el punto muerto percibido en la evolución de la JVM.
Sin embargo, con la entrega de Java empresarial a la fundación Eclipse, existe la posibilidad de que Java y la JVM se revitalicen. También hay iniciativas, como Gandiva, cuyo objetivo es optimizar el código Java para hardware especializado, lo que podría convertirlo en una opción competitiva para el aprendizaje automático.
Además, esa gran huella ha dado lugar a iniciativas, como DeepLearning4J, cuyo objetivo es brindar a los usuarios de Java acceso a las mismas bibliotecas que se utilizan normalmente en otros lenguajes.
Pitón
Según una encuesta reciente de KDNuggets, Python es el líder indiscutible en el uso de la ciencia de datos y el aprendizaje automático. Algunas de las razones citadas a menudo para esta preferencia son la amplia variedad de bibliotecas y el hecho de que se considera un lenguaje fácil de usar.
Ashok Reddy, gerente general de DevOps en CA Technologies, señala que Python fue el lenguaje elegido en su maestría en IA y aprendizaje automático recientemente completada en Georgia Tech.
Reddy agrega que Python está ganando popularidad en las universidades debido a su simplicidad, por lo que es más probable que los graduados conozcan Python que Java. Más allá de la simplicidad, también cita la abundancia de bibliotecas como una razón clave para esto.
Lea también: El lenguaje de programación Mozilla Rust ofrece seguridad en Internet – CNET
Reddy señala que, desde una perspectiva de rendimiento, C también es una opción popular para su uso en aplicaciones de IA e IoT integradas, pero Java no va a desaparecer. Reddy también ve un patrón en el uso de Python para el desarrollo y luego otros lenguajes para la implementación de algoritmos de aprendizaje automático.
Esto también se aplica internamente en CA, ya que Reddy señala que, además de tener un código heredado en C y Java, la portabilidad multiplataforma que ofrece Java es una prioridad clave para CA.
«Muchas empresas emergentes utilizan inicialmente Ruby o Python y, cuando crecen, cambian a Java», dice Reddy.
R
En la encuesta de KDNuggets, la participación de R parece estar cayendo en comparación con la anterior. R, sin embargo, ha ido ganando adopción empresarial en los últimos años.
Lea también: ¿Qué lenguajes de programación pagan mejor?
De alguna manera, R no es un lenguaje de programación típico, ya que no es uno de propósito general. Las raíces de R se encuentran en las estadísticas, ya que se ha desarrollado específicamente para hacer frente a tales necesidades.
Eso, y el hecho de que es de código abierto, lo convierte en una gran cantidad de bibliotecas listas para usar para tareas relacionadas comunes y no tan comunes. La otra cara de esto es que R ha estado plagado de problemas como la gestión de la memoria y la seguridad, y su sintaxis no es muy sencilla ni disciplinada.
En los últimos años, R ha visto entornos de desarrollo creados a su alrededor para llenar los vacíos necesarios para sacarlo del laboratorio de ciencia de datos y llevarlo a implementaciones empresariales.
Uno de ellos, creado por Revolution Analytics, se ha integrado en la oferta de Microsoft (Visual Studio, SQL Server, Power BI y Azure) tras su adquisición por parte de Microsoft. Otro, R Studio, se integró inicialmente con Apache Spark y ahora con Databricks.
La forma en que se hizo esto es indicativa de otra fortaleza de R: su sistema de paquetes. Es a través de esto, y de sus vínculos con la comunidad académica, que R se mantiene actualizado con los últimos desarrollos en ciencia de datos y aprendizaje automático.
Si bien R puede ser una buena opción para el desarrollo, su valor en la producción depende en gran medida de su ecosistema de apoyo.
Lenguajes Julia, Golang, Rust, Swift y JVM
¿Y qué pasa con aquellos que no quieren el tipeo dinámico de Python, o el bagaje lecagy de Java o C/C++? Bueno, aparte del hecho de que Python 3.6 y versiones posteriores admiten escritura estática.
Lea también: ¿Qué lenguajes de programación ganan más?
Burkov señala que Scala y Kotlin, dos lenguajes más nuevos basados en JVM, tienen escritura opcional, pero una curva de aprendizaje pronunciada y una baja adopción por parte del usuario, respectivamente. Y, al final, podríamos agregar, también vienen con las mismas restricciones impuestas por la JVM.
Swift, señala Burkov, tiene escritura estática y baja disponibilidad de bibliotecas de aprendizaje automático/análisis de datos. Otras opciones sugeridas por los colaboradores en el mismo hilo son Golang, Julia y Rust.
Se ha señalado que Golang es rápido, listo para subprocesos, fácil, limpio, compilado y simple. Y tiene un soporte cada vez mayor para bibliotecas para NLP, aprendizaje automático general y análisis, extracción, procesamiento y visualización de datos.
Se ha señalado que Julia es flexible con el uso de tipos y JIT cumple de manera similar a Java, pero tiene una velocidad de ejecución comparable a C. Es un lenguaje relativamente nuevo, por lo que su comunidad no es la más grande. Sin embargo, Julia tiene cierto soporte para bibliotecas de aprendizaje automático.
Lea también: Estos cinco lenguajes de programación tienen fallas
Se ha señalado que Rust compila de forma nativa y eficiente como C/C++ simple, carece de recolección de basura y es rico y seguro. Es cierto que, incluso por sus defensores, no está realmente listo para ML debido a la falta de bibliotecas específicas de ML.
La elección del lenguaje de programación no es sencilla, y al final puede que ni siquiera sea la más importante. Como señaló Luiz Eduardo Le Masson, líder de ciencia de datos en Stone Co.:
«Para el ‘aprendizaje automático ordinario’, no importa qué idioma use. Pero cuando necesita tener algoritmos e inferencias de aprendizaje en línea reales en tiempo real para millones de clústeres simultáneos y responder en menos de 500 ms, el tema no solo involucra lenguajes, sino arquitectura, diseño, control de flujo, tolerancia a fallas, resiliencia».
Inteligencia artificial innovadora, proyectos de aprendizaje automático para ver
Historias relacionadas: