Python científico: argumentos e hipótesis para su adopción en la ciencia y la tecnología

in #steemstem6 years ago


💻 🔭 🌡Si hay algo que caracteriza a la ciencia y la tecnología es la reutilización. Este es un principio universal según el cual las cosas deben y pueden erigirse a partir de otras ya establecidas. Los conocimientos alcanzados se utilizan para la consolidación del mismo y/o para la construcción de nuevas teorías, y lo mismo pasa con las técnicas desarrolladas que son aplicadas para la producción de nuevas tecnologías.   

Tal ocurre con la computación, la informática y las tecnologías de información, que al día de hoy han favorecido considerablemente el quehacer científico diario al proveer las poderosas herramientas del sistema computacional, como las aplicaciones especializadas (software) y toda una variedad de dispositivos genéricos y especializados (hardware). 

Con estos recursos, los investigadores repotencian sus capacidades para el almacenamiento y análisis de datos, el procesamiento y la recuperación de ingentes cantidades de información, la simulación y el control del experimentos, la realización y depuración de toda serie de cálculos especializados y mediciones, el diseño de modelos, entre otros tantos usos que pueden derivar posteriormente en el diseño y fabricación de productos de ingeniería. 

En este ensayo se presenta un caso de aprovechamiento de la informática en la ciencia y la tecnología a través del lenguaje de programación Python, haciendo contexto sobre lo que Python representa actualmente y algunas reflexiones y análisis teórico sobre los recursos y cualidades de este lenguaje aprovechables en un ulterior planteamiento y solución de problemas técnicos y disciplinares. 

En concreto, Python es un lenguaje de programación de alto nivel, interpretado y multiparadigma. Esto por una parte significa que esencialmente está clasificado como un “software de desarrollo”, puesto que está destinado a la producción de programas de computadoras.   

La manera como Python trabaja es como un lenguaje interpretado, dado que ejecuta los programas compilándolos a lenguaje de máquina durante el tiempo de ejecución y/o en la medida que sea necesario. Por ello se dice que tiene fuerte énfasis por la facilidad de uso a través de la semántica dinámica, lo que combinado con sus estructuras de datos de alto nivel, lo hacen especialmente atractivo para el desarrollo rápido de aplicaciones. 

Asimismo, Python es multiparadigma, esto es, soporta distintos paradigmas de programación, tales como la programación imperativa, la programación orientada a objetos, la programación funcional, entre otras. 

Python como completo lenguaje de programación es bastante popular. De hecho, según estadísticas del 2017 de GitHub, la más grande forja o red de trabajo para desarrollo de software en el mundo, Python es el lenguaje con más pull requests (evidencias de uso) en todo el sitio, superado sólo por Javascript, lo que muestra la creciente adopción de este lenguaje para proyectos de software (véase imagen 1). 

(Imagen 1:Captura de pantalla de las estadísticas de Github del 2017 en la métrica "Los quince lenguajes de programación más populares". Python superó a Java desde 2017. Fuente: el autor con base en el sitio indicado. Licencia: dominio público)

Los usos de Python son variados y comprenden diferentes campos de aplicación, tales como el desarrollo web, desarrollo para escritorio, desarrollo de vídeojuegos, web scrapping, automatización de tareas, e incluso se usa mucho en ciencia de los datos y la inteligencia artificial, en influyentes proyectos como la librería de código abierto "TensorFlow" de Google. 

Asimismo, un estudio realizado por el profesor Phillip Guo de la University of Rochester que describe el uso de lenguajes de programación en 39 Universidades de los Estados Unidos, promovidos desde departamentos de Ciencias de la Computación, demuestra que Python es el lenguaje mayormente usado para los cursos introductorios, por delante de Java y MatLab.

Ahora bien, dada la aceptación y difusión de Python en el mundo de desarrollo de software, en el aprendizaje de la programación y en la informática aplicada, ¿por qué  puede resultar ser Python apropiado para científicos e ingenieros? 

Python tiene una serie de características que parecen tornarse en ventajas atractivas para estas labores. Incluso, puede constituir una  alternativa viable frente a otros software y lenguajes especializados como MatLab.   

He aquí algunas de esas características esgrimidas como razones para su adopción, en un ejercicio de argumentación y reflexión que puede dar origen hipótesis de investigación construidas con base en la revisión de bibliografía y artículos que abordan esta temática y de constructos de la teoría unificada de aceptación y uso de la tecnología de Venkatesh, Morris, Davis y Davis (2003).

En primer lugar, Python puede generar expectativas de esfuerzo favorables, relacionadas con la facilidad de uso y la facilidad de aprendizaje, algo que es muy valorado por los usuarios de productos tecnológicos (Venkatesh et at, 2003). Para entender bien esta cualidad, hay que remitirse a los tipos de lenguajes de programación.   

Se dice que un lenguaje de programación es de alto nivel si con ellos se es capaz de representar muchas funcionalidades en pocas líneas de código. Las expresiones formuladas con estos lenguajes son usualmente de débil tipeado, por lo cual no hay que especificar los tipos de datos de las variables y demás objetos. Además poseen muchas cláusulas que reducen el código necesario para denotar ciertas tareas y abundantes librerías que se integran fácilmente. Python entra en esta categoría, así como otros lenguajes como Perl, R, IDL, etc. 

Por el contrario, C, C++ y su familia son lenguajes generalmente considerados de bajo nivel, los cuales pueden presentar un mejor rendimiento de velocidad de ejecución que los lenguajes de más alto nivel, pero a expensas de un mayor grado de dificultad a la hora de codificar. Posee reglas sintácticas menos flexibles y obligan a detallar más aspectos del código, lo que lleva a que el código fuente crezca considerablemente. 

Los lenguajes de programacion de alto nivel han sido considerados “inadecuados” para efectos de computación científica exploratoria, puesto que su uso conlleva barreras de acceso para los científicos que no sean especialistas en programación. Su mayor curva de aprendizaje requería más esfuerzos y recursos para su adopción y puesto que también su código es más difícil de comprender, escribir y mantener, esto podría ralentizar el desarrollo y las labores de investigación que dependan de ello (Prechelt, 2000).

El lenguaje de alto nivel como Python, por otra parte, es más fácil para leer y escribir código, en mérito de sus enriquecidas pero flexibles reglas de sintaxis. También tiene una capacidad intrínseca para la interacción con estructuras de datos y objetos complejos con más variedad de funciones incorporadas.  El siguiente es un código demostrativo de la poderosa pero a la vez simple sintaxis de Python:

def cuadrados(valores, limite=10):
 """
    Devuelve una serie de cuadrados si no superan un `limite` dado.
 """
 serie = [v ** 2 for v in valores if v <= limite]
 return serie
# Llamada a la función previa:
cuadrados([2, 3, 4], 16) 

El código muestra el estilo pythoniano a través del uso listas de compresión, lo que a su vez remite al paradigma de programación funcional que Python soporta. Simplemente crea un arreglo de cuadrados de los elementos de un arreglo dado, siempre y cuando estos elementos no excedan el límite dado. 

Puesto que la sintaxis de Python tiene una mejor proximidad con el lenguaje natural, los programadores pueden invertir más tiempo en razonar qué es lo que el código hace en lugar de qué escribir. Esto tiene como consecuencia mayor rapidez para desarrollo de prototipos y más facilidad a la hora de experimentar nuevas ideas. También la naturaleza interactiva de Python como lenguaje de alto nivel permite a los científicos la exploración de data con mayor facilidad.

En segundo lugar, Python posee elementos objetivos que pueden aumentar las expectativas de desempeño (utilidad) para quienes ejercen la labor científica y técnica apoyada en la computación. Se trata la amplia disponibilidad de módulos y paquetes (librerías) de Python. Estos son colecciones de código de infinidad de propósitos, los cuales son rápidamente importables y aprovechables para el desarrollo de nuevas aplicaciones o para su utilización directa. 

No sólo la biblioteca estándar de Python resulta ser bastante completa y aprovechable, sino las bibliotecas ya desarrolladas por quienes forman la extensa comunidad multidisciplinaria de desarrolladores y contribuidores; bibliotecas que cubren casi todas las áreas de las ciencias. Para conocer algunas de ellas, se presenta a continuación el esquema titulado el “Ecosistema científico de Python” (véase imagen 2). 

(Imagen 2: Ecosistema científico de Python. Fuente: Jake VandePlas @jakevdp Licencia: CC BY).

De este compendio de librerías, podrían reseñarse algunas a continuación: 

NumPy: paquete por excelencia para la computación científica. Es útil para el álgebra lineal, las transformaciones de Fourier y los números aleatorios. Provee estructuras de datos de vectores y matrices, funciones sofisticadas para la difusión, herramientas para la integración con C, C++ y Fortran. Cubre casi todas las funciones básicas de software especializados y privativos como MatLab.

SciPy: como librería es similar a NumPy, un paquete fundamental para la computación numérica operando a través de vectores y matrices (arreglos) como tipos de datos especialmente diseñados. SciPy también se refiere a un ecosistema de aplicaciones de software libre para la computación científica en Python y se refiere también a la propia comunidad que desarrolla este stack

IP[y] IPython: provee una arquitectura para la computación interactiva mediante el uso de un atractivo y versátil shell interactivo, un kernel para Jupyter (un software para la creación de documentos y presentaciones con código interactivo), el soporte para la visualización de data interactiva mediante interfaces gráficas de usuarios (GUI); etc. Es fácil de usar y tiene herramientas de alto rendimiento para el cálculo paralelo. 

SymPy: es una biblioteca de Python para matemática simbólica. Está pensada para convertirse en un sistema completo de álgebra computarizada (CAS), manteniendo el código lo más simple que se pueda para que sea comprensible y fácilmente extensible.  

Empero, este compendio de librerías podría pecar de 'resumido' para todos los módulos que Python provee. Si se quieren conseguir librerías especializadas en determinadas áreas de las ciencias, un vistazo al Indexador de Paquetes de Python (PIP) puede ser alentador (véase imágen 3).

(Imagen 3: Captura de pantalla de Indexador de Paquetes de Python PIP. Muestra un total de 297 proyectos librerías relacionadas con el área de "física". Fuente: el autor. Licencia: dominio público)

Otra razón que hace a Python atractivo para la investigación científica es el hecho de que sea software libre y de código abierto (FLOSS en inglés). Esto significa que es un producto distribuido con una licencia que otorga a los usuarios un conjunto de prerrogativas en torno al uso, estudio, distribución y modificación de Python como software, lo que implica necesariamente el acceso a su código fuente.

La licencia bajo la cual Python es distribuido se denomina “Python Software Foundation License”, que resulta ser compatible con la “GNU General Public License”, que es la licencia estándar del software libre. Adicionalmente Python resulta ser completamente gratuito.

El hecho de que Python sea software libre y de código abierto aporta ventajas prácticas, principalmente en términos de economía. Software especializados como MatLab se distribuyen bajo licencias comerciales y de código cerrado que suelen ser altamente costosas para un investigador promedio. La imagen 4 muestra el costo actualizado de estas licencias (véase imagen 4).

(Imagen 4: Captura de pantalla del sitio web de MatLab en la sección "Pricing and Licensing". Fuente: el autor con base en el sitio indicado. Licencia: dominio público).

El ahorro económico es una motivación para el uso de Python y para evitar la práctica de adquisición de copias ilegales de software (piratería informática), ampliamente difundida en Latinoamérica, según estadísticas históricas de la Business Software Asociation (BSA), algo que podría repercutir negativamente en la calidad de la difusión de las investigaciones. 

Aunado al aspecto económico, la disponibilidad de suficiente documentación y grandes comunidades para el soporte pueden ser estar relacionadas con las condiciones facilitadoras para la adopción de una tecnología por parte de usuarios de organizaciones.

En resumen, Python se presenta como una opción factible y atractiva no solo para desarrolladores de software sino para los profesionales que recurran a la computación científica, frecuentemente ingenieros e investigadores. Python ofrece ventajas frente a otros lenguajes y software comerciales, algunas de las cuales se han planteado como razones para su adopción:

-La sintaxis de Python (simple pero poderosa) se traduce en facilidad de uso y aprendizaje, lo cual es valorado positivamente por los usuarios en el campo de la investigación científica y la tecnología. 

-La alta disponibilidad amplia de librerías de propósito general y librerías especializadas para todas las áreas de las ciencias hace a Python atractivo para su uso por ingenieros y científicos.

-La posibilidad de integración de Python con otros lenguajes, especialmente con C/C++, lo que potencia su rendimiento, hace de este lenguaje apropiado para la labor de los investigadores que recurren a la computación científica.

-Las cualidades de licencia de software libre y de código abierto; con oportunidades de soporte y extensa documentación, son condiciones facilitadoras para la adopción de Python por parte de grupos de investigación científica y desarrollo de tecnología. 

Estas razones argumentadas por la literatura y experiencias disponibles se presentan como potenciales hipótesis de investigación para ser convalidadas en un respectivo estudio. En próximos post se profundizará en usos concretos de Python científico.



REFERENCIAS

Business Software Alliance (2016). "La Piratería del software en el mundo". Estudio anual.

Documentación oficial de Python publicada en python.org

Koeptke, Hoyt (s/f). "Python se lanza a la investigación" publicado en washington.edu

Prechelt (2000). "Una comparación empírica de siete lenguajes de programación". Computer, 33(10):23-29, CODEN CPTRB4.  ISSN 0018-9162  versión impresa:  1558-0814

Venkatesh,  M. G. Morris, G. B. Davis, and F. D. Davis (2003). "User Acceptance of  Information Technology: Toward a Unified View" MIS Quarterly (27:3),  p. 447.


NOTA: la imagen de portada es de Patricia Adam y es distribuida bajo dominio público.

Sort:  

Coin Marketplace

STEEM 0.17
TRX 0.16
JST 0.029
BTC 60768.35
ETH 2411.12
USDT 1.00
SBD 2.60