miércoles, 9 de noviembre de 2016

R o Python?


Durante una entrevista para postular a un cargo de Big Data, me hicieron varias preguntas rápidas dándome a eligir entre dos tecnologías.  A la pregunta, R o Python, respondí inmediatamente "R, por las estadísticas". Ahora, viene una respuesta un poco más larga.

Primero, si considero solamente por el lado de lenguaje de programación, no escojo ninguno de los dos y me quedo con Scala.  No solamente considero Scala un mejor lenguaje, pero ademas me permite apuntar a más plataformas: desktop, web en el servidor, web en el browser (scala-js), móvil (incluso iOS con scala-native pronto) y Big Data (Spark, Flink). En comparación, R sirve solamente para Big Data.  Python es un poco más versátil: se usa para web en el lado servidor y Big Data.

Pero tratar R solamente como lenguaje de programación es matarlo.  R es un ecosistema con varios productos open source como RServer, RStudio y packages que implementan todos los algoritmos estadísticos publicados. Finalmente, R agrupa toda la comunidad científica estadística.

Python es popular en el mundo científico en general donde parece que va a ser el nuevo Fortran.  Nota aparte, nunca me va a dejar de asombrar el lado ultra conservador de las comunidades científicas cuando elijen un lenguaje computacional:  Fortran sigue vivo y es de los años 60 y están adoptando recién Python que es del final de los 80.  Entonces, Python tiene muchas bibliotecas matemáticas que son la base de los algoritmos estadísticos, como los calculos matriciales. Pero, no se compara a R en cantidad de algoritmos netamente estadísticos.

Me podrán argumentar que Big Data no se trata solamente de algoritmos estadísticos, también hay pre-procesamiento de la data, lo cual requiere lenguajes mas tradicionales.  Es cierto, pero Big Data viene de empresas comerciales como Yahoo y Twitter, que son mucho más innovadoras que la comunidad científica, y estas empresas han elegido la JVM y lenguajes como Scala y Java. Cuando soportan a Python, es para atraer los programadores de esta comunidad, como lo hace Spark, pero no es su target primario.

No le veo ningún merito propio a Python para proyectos Big Data.  La única razón para escogerlo seria de gestión:  si para un proyecto con mucho procesamiento de data, no tengo programadores Scala o Java y, si al contrario, tengo programadores Python, escojo este lenguaje.  Si el proyecto tiene ademas estadísticas y Machine Learning, escojo R como complemento a Python.

En resumen, Python es un buen plan B.