¿Cual es el mejor lenguaje de programación para inteligencia artificial?

 

Frecuentemente recibo la pregunta acerca de cuál es el mejor lenguaje de programación para crear aplicaciones de inteligencia artificial. Otras veces, directamente la pregunta es si lenguajes como Python o bibliotecas como TensorFlow son los adecuados para crear este tipo de aplicaciones.

Así que el objetivo de este artículo es aclarar algunos conceptos para poder elegir un lenguaje de programación u otro para desarrollar aplicaciones que hagan uso de la IA.

¿Qué es la IA?

Este concepto no es fácil de explicar. La inteligencia artificial no es un conjunto de instrucciones, ni un nuevo tipo de datos. Consiste en una serie de metodologías en las cuales podemos dotar a nuestros desarrollos de comportamientos percibidos como inteligentes. En definitiva, son metodologías, y no instrucciones.

Es por esto que, a priori, cualquier lenguaje de programación es válido para realizar aplicaciones de inteligencia artificial.

¿Qué lenguajes de programación existen?

Haciendo referencia al listado TIOBE, que muestra los lenguajes de programación más utilizados en el mercado, el listado para enero de 2019 muestra los siguientes datos:

https://www.tiobe.com/tiobe-index/

Jan 2019

Jan 2018

Change

Programming Language

Ratings

Change

1

1

 

Java

16.904%

+2.69%

2

2

 

C

13.337%

+2.30%

3

4

 

Python

8.294%

+3.62%

4

3

 

C++

8.158%

+2.55%

5

7

 

Visual Basic .NET

6.459%

+3.20%

6

6

 

JavaScript

3.302%

-0.16%

7

5

 

C#

3.284%

-0.47%

8

9

 

PHP

2.680%

+0.15%

9

 

SQL

2.277%

+2.28%

10

16

 

Objective-C

1.781%

-0.08%

Cualquiera de los lenguajes de programación de esta lista podría ser perfectamente válido para desarrollar aplicaciones de IA, a excepción probablemente del lenguaje SQL, que está orientado a consultas en bases de datos, en lugar de a desarrollo de aplicaciones.

Poríamos clasificar estos lenguajes en tres grandes grupos:

-Lenguajes de bajo nivel, que son aquellos que tienen mejor rendimiento, pero en los que el programador debe tomar muchas decisiones, de forma que puede optimizar la ejecución del programa, pero la probabilidad de cometer fallos es mayor. Ejemplos de estos lenguajes son C, C++ y Objective-C

-Lenguajes de alto nivel, que son aquellos que ofrecen una serie de abstracciones, de forma que el propio compilador toma algunas decisiones, liberando al desarrollador de tomarlas. De esta forma, estos lenguajes suelen ser menos eficientes en la ejecución, ya que las decisiones que se toman automáticamente por el compilador no suelen ser tan inteligentes como las que toma un ser humano. Sin embargo, dado que el desarrollador tiene que tomar menos decisiones, las probabilidades de fallo son menores. Ejemplos de estos lenguajes son Python y Javascript

-Lenguajes de nivel intermedio: Encontramos dentro de este grupo aquellos lenguajes que buscan un balance óptimo entre rendimiento y dificultad. De esta forma, ponen muchas decisiones en manos del usuario programador, pero a la vez ofrecen una serie de facilidades y herramientas para prevenir y arreglar los errores de código. Un ejemplo de este tipo de lenguajes es Java.

Eligiendo el mejor lenguaje:

Antes de elegir un lenguaje u otro, teniendo en cuenta que todos los lenguajes de la lista son perfectamente válidos, deberemos establecer un criterio para la elección, y no todos tenemos por qué tener el mismo criterio.

Por ejemplo, un criterio podría ser el rendimiento. Es decir, que nuestras aplicaciones se ejecuten lo más rápido posible. Este criterio es importante, ya que muchas aplicaciones de inteligencia artificial deben funcionar y proporcionar resultados en un tiempo aceptable, ya que, en caso contrario, podría considerarse que nuestras aplicaciones son inteligentes, pero lentas (y por tanto podrían ser percibidas por los usuarios finales como aplicaciones “no tan inteligentes”, aunque la velocidad no tenga que ver directamente con la calidad de los resultados)

En este caso, podríamos elegir aquellos lenguajes de más bajo nivel, como C o C++

Evidentemente, en este caso, puesto que el propio aprendizaje y puesta en práctica de las metodologías de inteligencia artificial en un lenguaje concreto es complejo, tendríamos que tener un nivel de partida bastante fluido en estos lenguajes.

Otro criterio posible sería la facilidad de uso del lenguaje de programación. Esta es la opción que suele elegirse para formación relacionada con la inteligencia artificial. De esta forma, el alumno se preocupa únicamente por las complejidades derivadas de la implementación de la IA, y no de las complejidades propias del lenguaje de programación. Esta es la razón por la cual los lenguajes como Python son tan famosos en los cursos de formación relacionados con este ámbito, en contra de la creencia popular de que es debido a su potencia, es por su facilidad y su flexibilidad.

Un ejemplo más concreto del rendimiento entre los diferentes lenguajes de programación podemos encontrarlo en comparativas como la siguiente:

https://www.instagram.com/p/BQTe7NegeSq/

Esta es una de las comparativas que suelo realizar en todo tipo de formaciones relacionadas con la programación en múltiples lenguajes. El objetivo es proponer el mismo reto a resolver a diferentes lenguajes de programación, y observar los resultados.

En esta comparación podemos observar como, para un mismo cálculo, donde lenguajes de un nivel bajo tardan entre 24 y 25 segundos en completar su tarea, los lenguajes de alto nivel como Javascript tardan 38 segundos (aproximadamente un 52% más lentos), pero otros lenguajes como Python pueden llegar a tardar 157 segundos (es decir, un 650% más lentos que los lenguajes de bajo nivel). Por tanto, estos lenguajes no se eligen por su rendimiento sino por su facilidad de uso.

El lenguaje de programación R: Ventajas y desventajas

Existe una serie de lenguajes que suelen considerarse más aptos para el desarrollo de aplicaciones de inteligencia artificial. Uno de ellos es el lenguaje estadístico R.

La diferencia de este lenguaje con respecto a los genéricos es que incluye una serie de herramientas y librerías que facilitan tanto el cálculo como la presentación de resultados de análisis estadísticos (área que tiene una gran importancia en la inteligencia artificial).

Esto a la vez es bueno y a la vez no tanto. Desde un punto de vista del desarrollo, añade productividad permitiendo a los desarrolladores crear presentaciones de resultados de una forma muy sencilla.

Podemos encontrar dos grandes ejemplos de esto en la propia pagina de la Wikipedia:

https://es.wikipedia.org/wiki/R_(lenguaje_de_programaci%C3%B3n)

Repasando los dos ejemplos (tanto en su código fuente como en los resultados), veremos que la inclusión previa de las librerías correspondientes minimizan el código que tiene que desarrollar el ser humano, y automatizan al máximo la tarea de generación de gráficas.

Sin embargo, desde el punto de vista de la formación, realizar tantas abstracciones, en ocasiones puede no resultar tan conveniente, ya que si delegamos todos estos cálculos en el propio lenguaje de programación y sus librerías, no estaremos realmente aprendiendo a realizarlos, y si el día de mañana estamos obligados a cambiar a un lenguaje de programación más genérico, podremos darnos cuenta de la dependencia que habremos desarrollado con respecto al lenguaje de programación R

Aún así, por supuesto es recomendable que cualquier formación en inteligencia artificial contenga algún apartado que muestre a los alumnos el uso del lenguaje de programación R

Matlab y Octave:

En la lista TIOBE, el lenguaje que ocupa el puesto número 11 es Matlab, lo cual es igual de interesante como el lenguage R.

Matlab es un sistema algebráico presentado dentro de un entorno de desarrollo integrado, que desde hace muchos años facilita el desarrollo y la realización de múltiples tipos de cálculos a científicos que no tienen por qué tener conocimientos especialmente profundos de programación. De la misma forma que el lenguaje R provee una serie de facilidades y bibliotecas de presentación de resultados, MatLab realiza lo propio en un nivel todavía superior (el IDE consituye una forma muy asequible y agradable de aproximarse al desarrollo de proyectos que requieran cálculos)

En definitiva, tanto Matlab como software comercial, como Octave como alternativa de código abierto, son excelentes alternativas para personas que desean cumplir con el objetivo de acercarse al mundo de la inteligencia artificial, intentando facilitar o al menos abstraer las complejidades derivadas de los lenguajes de programación duros.

Diferentes niveles:

Dentro de las múltiples alternativas de las que disponemos como entornos de desarrollo para implementar proyectos de realidad virtual, dentro de que cualquier lenguaje de programación con unas mínimas capacidades es viable para implementar este tipo de proyectos, podríamos resumir:

Entornos como Matlab u Octave: Mayor facilidad y abstracción, eliminando o minimizando las dificultades de la programación. El propio entorno que nos facilita el trabajo es el que puede hacer que nuestras aplicaciones no sean posteriormente aplicables y portables en todas las plataformas. Aptos para desarrollar prototipos y en definitiva para que personas que no sean programadores puedan aproximarse a desarrollos de inteligencia artificial.

Lenguajes de programación específicos u optimizados, como R: Buena proporción entre esfuerzo y resultado, herramientas específicas para la tarea concreta. Sin embargo, son lenguajes tan específicos que luego no podemos usarlos para otros tipos de proyectos.

Lenguajes generalistas de programación de alto nivel: Buena proporción entre esfuerzo y resultado, y buen balance entre rendimiento, facilidad, y portabilidad del código en la implementación entre diferentes plataformas. Aptos para el aprendizaje y la implementación de aplicaciones reales de inteligencia artificial donde el rendimiento no sea un factor clave pero el éxito y la facilidad de la implementación si que lo sean.

Lenguajes generalistas de programación de bajo nivel: Alto rendimiento, exigen extensos conocimientos del propio lenguaje de programación ya que son propensos a cometer fallos humanos en la escritura del código. Aptos para la implementación final de aplicaciones en  las que el rendimiento sea un factor clave.

Un par de criterios más: facilidad de compilación y generalidad del lenguaje

Hay otra explicación por la cual los lenguajes de programación de alto nivel, como Python y Javascript, son ampliamente utilizados en formaciones relacionadas con inteligencia artificial, no es solo por su facilidad de uso sino también por la facilidad de puesta en marcha.

La puesta en marcha consiste en la serie de operaciones que deben realizarse para, desde cero, comenzar a desarrollar y ejecutar programas con un lenguaje de programación determinado.

En el caso de Python, todos los prerrequisitos pueden descargarse rápida y gratuitamente desde la página https://www.python.org/

Además, contiene instaladores para todo tipo de sistemas operativos y arquitecturas de hardware, lo que posibilita poder instalar y ejecutar programas en todo tipo de equipos informáticos, incluso en aquellos que están muy desactualizados.

El caso de Javascript es todavía más curioso, ya que cualquier navegador web de los que tenemos ya de por sí instalados en nuestro ordenador, llevan YA incorporados los intérpretes que permiten ejecutar programas realizados en este lenguaje de programación.

Únicamente en ese caso es necesario descargar algún editor de código para crear programas, como por ejemplo el archiconocido Notepad++:

https://notepad-plus-plus.org/download/v7.6.2.html

Conclusiones:

El desarrollo de aplicaciones de inteligencia artificial no se realiza de forma exclusiva con un lenguaje de programación u otro. Prácticamente cualquier lenguaje de programación es apto para realizar implementaciones de IA. Lo que si que es importante es conocer las ventajas y las desventajas de cada uno de los lenguajes, para escoger la mejor alternativa según el criterio o los criterios que se adapten a nuestras necesidades.

Quieres saber más?

Ya estamos inmersos de pleno en la era de la inteligencia artificial, que cambiará nuestras vidas y la forma en la que trabajamos. Pero, ¿estas preparad@ para estos cambios? El objetivo de este curso es proporcionarte las herramientas necesarias para que la inteligencia artificial sea una oportunidad y no una amenaza.

Con este curso, aprenderás las técnicas más punteras que empresas como Google, Facebook o Microsoft ya están utilizando para mejorar sus algoritmos. Cualquier dispositivo móvil, ya esté basado en Android o en iOS, ya está utilizando este tipo de tecnologías para mejorar tu experiencia de usuario. En breve, tus propios usuarios y tus clientes darán por hecho esta tecnología y esperarán que los servicios que tu les ofrezcas contengan inteligencia artificial. ¿Está preparada tu empresa para este reto?

Este curso se divide en tres módulos:

IA para todos – primer módulo del curso pensado para que todas las personas, aún sin conocimientos de programación, puedan entender y aprovechar las oportunidades que nos ofrece la inteligencia artificial


Programando aplicaciones de IA – segundo módulo del curso, en el cual ponemos en funcionamiento los conceptos principales del curso, permitiéndote desarrollar aplicaciones prácticas que usan inteligencia artificial


IA hasta el límite – Tercer módulo del curso en el que te mostramos cómo sacar el máximo partido a la inteligencia artificial desarrollando aplicaciones de visión artificial, procesamiento del lenguaje, y combinación con Big Data, entre otros


Visión estereoscópica e inteligencia artificial

Proyecto de visión stereo.

En este desarrollo se aplica un algoritmo de cálculo mediante el cual, a partir de un par de vistas estereoscópicas, se obtiene un cálculo de la profundidad de cada uno de los puntos de la imagen. En este proyecto se presenta el cálculo de las distancias como un mapa de profundidad, una imagen en la que los puntos más claros son los más cercanos a la cámara, y los más oscuros son los más lejanos.

La visión estereoscópica es importante en el contexto de la inteligencia artificial, ya que permite a los sistemas inteligentes conocer su entorno y saber con precisión qué es lo que tienen delante, de forma previa a su procesamiento y toma de decisiones.

Este proyecto forma parte de los ejercicios del curso de inteligencia artificial – https://jocarsa.com/curso-de-inteligencia-artificial

Desarrollo de aplicaciones de realidad virtual

Desarrollamos presentaciones, aplicaciones y proyectos utilizando las últimas tecnologías de realidad Virtual disponibles en el mercado.

Estas tecnologías permiten a nuestros clientes, en prácticamente cualquier sector, previsualización tanto productos como servicios, y de esta forma, ahorrar costes y ahorrar tiempo de desarrollo.

La realidad Virtual es uno de los elementos clave en el futuro tecnológico a medio plazo en nuestro país, y por tanto es de vital importancia utilizar estas tecnologías para asegurar la competitividad de nuestros clientes

Desarrollo de proyectos de realidad virtual

Desarrollamos proyectos de realidad virtual de realidad aumentada utilizando el estado del arte de la tecnología. Las presentaciones de realidad virtual permite a nuestros clientes generar contenido vanguardista y ahorrar tiempos y costes de desarrollo, simulando el estado del proyecto final y pudiendo realizar correcciones tempranas.

Testeando aplicaciones de realidad virtual

Las aplicaciones de realidad virtual no sólo están basadas en el uso de gafas estereoscópicas, sino que también incluyen dos mandos, que nos permiten interactuar de una forma mucho más íntima con el mundo 3D en el que nos movemos en ese tipo de presentaciones

 

estos mandos son de una importancia vital, ya que son nuestras manos dentro de la realidad virtual, y nos permiten no solo ser espectadores, si no interactuar realmente con el entorno virtual que nos rodea

 

en esta foto un alumno me ha capturado en el momento en el que estaba mostrando cómo realizar ese tipo de interacciones en una presentación de realidad virtual

Creación de interfaces de usuario en realidad virtual

En el momento en el que empezamos a trabajar con presentaciones de realidad virtual, muchas veces echamos de menos metodologias de interacción que nos permitan introducir información, y por tanto, controlar el entorno con el que estamos trabajando

 

por ejemplo, muchas veces acabamos echando en falta dispositivos de entrada tales como teclados y ratones

 

sin embargo, nuestro objetivo no es replicar estas interfaces de entrada pensadas para un escritorio, sino diseñar interfaces de usuario completamente innovadoras y que exploten al máximo el potencial y las posibilidades que nos brindan los nuevos medios inmersivos e interactivos

 

en este vídeo y en esta fotografía muestra un ejemplo del desarrollo de una interfaz de usuario basada en algo parecido a la paleta de un pintor, mediante la cual los usuarios pueden interactuar y pueden realizar elecciones en un mundo virtual de una forma muy sencilla

Desarrollos con realidad aumentada

Entre la realidad virtual y la realidad mixta, encontramos un paso intermedio consistente en el desarrollo de proyectos de realidad aumentada

 

la Realidad Aumentada permite a nuestros clientes mezclar presentaciones o elementos en 3d, con formas y fondos de la vida real

 

es de esta forma como la propia realidad, se ve aumentada y mejorada incluyendo elementos tridimensionales virtuales qué tal forma que la parte virtual obtiene un retorno mucho más rápido, al verse completamente integrada con la parte real, en el mismo momento

 

estos tipos de presentaciones permiten a nuestros clientes evaluar sus diseños, y realizar correcciones en fases tempranas de desarrollo, con el consiguiente ahorro en costes y en tiempos

Aplicación de la realidad virtual al sector de los videojuegos

Las tecnologías de realidad virtual no solo tienen aplicación en el campo empresarial, sino que también pueden ser aplicadas a campos relacionados con el ocio, como por ejemplo el desarrollo de videojuegos y otros tipos de aplicaciones interactivas orientadas al sector lúdico

 

esta mañana he estado desarrollando un proyecto en el cual realizaba una integración de las tecnologías de realidad virtual, con un juego basado en la aniquilación de zombies en una nave espacial futurista

 

es una pena que la imagen no haga justicia al efecto inmersivo y tridimensional que hemos podido encontrar durante el desarrollo del proyecto

Desarrollo de presentaciones interactivas con realidad virtual

Utilizando el estado del arte de la tecnología podemos generar presentaciones vanguardistas de realidad virtual.

 

estás presentaciones permiten a nuestros clientes interactuar con sus productos mucho antes de que hayan sido fabricados, siendo capaces, de esta forma, de generar un número mucho mayor del que anteriormente eran capaces de prototipos y soluciones, ide, en definitiva, ahorrar costes y tiempos de desarrollo

Reconocimiento de gestos de mano con Leap Motion

Esta mañana hemos estado testeando el uso de un dispositivo llamado Leap Motion, que nos permite interactuar directamente con los 10 dedos de nuestras manos en las aplicaciones de realidad virtual y realidad aumentada que podemos desarrollar

 

este dispositivo tiene una relación entre prestaciones y precio bastante beneficiosa, ya que por menos de 100 € podemos introducir nuestras manos dentro de los proyectos de realidad virtual y realidad aumentada, y de esta forma, podemos obtener una interacción con el mundo virtual mucho más precisa y mucho más basada en lo que podríamos realizar en la vida real