1. Introducción

Autores:José María Herrera Fernández, Luis Miguel Sánchez Brea

1.1. Precedentes

El manejo de aplicaciones informáticas, actualmente generalizado, no conlleva realmente el dominio de las nuevas tecnologías informáticas. La programación y simulación se ha convertido en una tarea necesaria en la sociedad y en el ámbito científico-técnico, y por supuesto en el ámbito académico. Sin embargo, la gran mayoría de los alumnos que llegan a los primeros cursos universitarios no tienen ninguna experiencia en programación. Incluso en cursos superiores, un porcentaje demasiado alto no han ido más allá de los ejercicios propuestos en las asignaturas obligatorías de cálculo numérico.

Dentro de la asignatura “Óptica” del grado en Física de la Universidad Complutense de Madrid, Luis Miguel Sánchez Brea y José María Herrera Fernández (profesor de la asignatura y alumno-tutor respectivamente) incorporaron en el curso 2011 - 2012 una serie de seminarios de “Computación científica de fenómenos ópticos basados en el lenguaje de programación Python. Los seminarios se enfocaron como apoyo al aprendizaje de Óptica utilizando la programación como medio de resolución de ejercicios en Óptica y fueron la semilla para este proyecto docente donde pretendemos presentar ejemplos sencillos y de fácil comprensión del uso de Python como herramienta en diferentes ámbitos.

1.2. ¿Por qué Python?

Python es un lenguaje de programación moderno, de alto nivel, ideal para pequeñas aplicaciones así como para proyectos de gran envergadura. El código de Python es similar al pseudocódigo utilizado para esquematizar la programación. Permite realizar todo lo necesario para una programación completa: diseño orientado a objetos, unidades de testeo, generación de documentación en el código, sencilla interacción con el sistema operativo, etc. Es compatible con la programación basada en objetos, así como la estructurada y por eventos. Tiene un excelente conjunto de librerías para extender su funcionalidad, incluyendo librerías científicas que permiten realizar numerosas tareas de tratamiento de datos, visualización, cálculo numérico y simbólico y otras aplicaciones específicas. Además, existe una comunidad muy grande de usuarios que, debido a la filosofía “open source”, son mucho más proclives a compartir su código.

A la hora de empezar a trabajar en computación lo primero que nos sorprende es la gran cantidad de lenguajes de programación, por lo que se debe realizar una selección cuidadosa. Una lista de los lenguajes de programación más utilizados se puede encontrar en la Figura 1.

../_images/estadistica.jpg

Figura 1. Lenguajes de programación más utilizados en el mundo. Python se mantiene estable como tercer lenguaje de programación después de la familia de C y de Java. Además comparándo con un lenguaje de ámbito científico como MATLAB, su posición es notablemente superior (4,3% de uso frente a 0,6%). Fuente: TIOBE Programming Community Index for November 2013, http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html .

Por un lado existen lenguajes de uso muy extendido. Actualmente Java es el lenguaje más utilizado, pues se utiliza para aplicaciones corporativas. El segundo lenguaje es C en sus diferentes versiones, un estándar en la programación durante muchísimos años. La mayor parte de las más famosas aplicaciones de escritorio están escritas en C++. Estos dos lenguajes dominan el negocio de la programación. PHP domina en la red. Mientras Java lo utilizan las grandes organizaciones, PHP lo utilizan empresas más pequeñas e individuos para crear aplicaciones web dinámicas. Por otro lado, hay numeros paquetes numéricos como Matlab, Mathematica y Maple que se utilizan en centros de investigación.

La gran mayoría de los alumnos que llegan a los primeros cursos de Física no han programado nada o casi nada. Es por ello que hemos elegido un lenguaje de programación lo más sencillo y completo posible. Python nos ofrece una gran sencillez de programación, una gran cantidad de librerías en las que basar nuestros programas y una importante comunidad de usuarios y desarrolladores que lo soportan. También tiene la ventaja de ser “open source”, por lo no nos vamos a tener que asumir ningún coste debido a derechos de autor. Otra ventaja es ser un sistema multiplataforma, así que podremos programar en cualquier sistema operativo como Windows, Linux o Mac Os.

Veamos resumidas algunas de las ventajas del lenguaje de programación Python.

  • Python es un lenguaje de programación de alto nivel que permite una rápida implementación de aplicaciones con muy poco código. Es ideal para prototipado rápido, pero tambien permite el desarrollo de grandes aplicaciones.
  • El código de Python es legible, muy similar al pseudocódigo utilizado para esquematizar la programación.
  • Python es un lenguaje interpretado por una máquina virtual, no compilado, por lo que es multiplataforma.
  • Python permite realizar todo lo necesario para una programación de código moderna: diseño orientado a objetos, unidades de testeo, generación de documentación en el código, sencilla interacción con el sistema operativo, etc.
  • Tiene estructuras de datos de alto nivel, como las listas, tuplas y diccionarios
  • Permite la programación basada en objetos, aunque tambien soporta la programación funcional y la programación estructurada.
  • Es un lenguaje dinámico, pudiendose añadir nuevas funciones y clases a un objeto existente, incluso en tiempo de ejecución.
  • Existen librerías científicas escritas en Phython maduras y con gran capacidad.
  • Permite extender trivialmente su aplicabilidad con módulos escritos en C, C++ y Fortran, de los que existen numerosas librerías científicas. Al ser los procedimientos más rápidos y eficientes para desarrollo de algoritmos matemáticos (aunque a veces mucho más complicados para otras tareas), se pueden programar las partes más sensibles en C y realizar el resto de la aplicación en Python
  • Tiene un enorme conjunto de librerías para extender su funcionalidad: para acceseo a base de datos, para almacenamiento de datos, para procesamiento de imágenes, de sonido, para programación con GUIs (Interfaces gráficas de usuario, ventanas), y otras muchisimas más.
  • Permite el acceso a toda la funcionalidad del sistema operativo (sobre todo en Linux).
  • Python se puede utilizar como software “glue” para combinar distintas aplicaciones en una sola (sobre todo el Linux).
  • El uso de la indentación en lugar de los paréntesis permite una mayor legibilidad del código.
  • El código Python se escriben en archivos .py. Estos archivos se pueden agrupar en módulos, y se pueden importar los elementos de los módulos a otros archivos.
  • Para sistemas Unix, se puede utilizar código para hacer el archivo autoejecutable indicando al sistema que programa que el es un ejecutable (no hace falta que sea un archivo .exe). utilizar (#!)
  • El código es extraordinariamente sencillo de comprender.
  • Existen módulos de gran calidad y repositorios de código donde se puede encontrar numerosas aplicaciones. En linux, gran parte de los módulos están en los repositorios estándar, por lo que su instalación es tán sencilla como pulsar un botón.
  • Existe una comunidad muy grande de usuarios y debido a la filosofía open, los desarrolladores son mucho más proclives a compartir su código con otros. Además no suelen existir problemas de uso del código de otros, siempre que cumplas los requisitos de la licencia GLS.
  • Al ser Python un lenguaje de propósito general, el código que se genera se puede aprovechar de las ventajas de otros módulos (como comprimir archivos, enviar datos, automatizar procesos, enlazar nuestros datos con bases de datos, con servidores web....
  • Python se puede ejecutar en bastantes IDEs (editores), desde algunos muy sencillos, como IDLE, hasta otros tan completos como Spyder, Eclipse o NetBeans.
  • Existen diversas técnica para creas sistemas de ventanas (Tkinter, wx, QT, etc.) de una forma sorprendentemente sencilla en comparación con otros sistemas operativos. Si se nos da bien el curso, intentaremos ver QT4, a través de la herramienta de creación de ventanas QT Designer 4.

1.3. Python vs. Matlab

MATLAB (abreviatura de MATrix LABoratory, “laboratorio de matrices”) es un software matemático que ofrece un entorno de desarrollo integrado (IDE) con un lenguaje de programación propio (lenguaje M). Está disponible para las plataformas Unix, Windows y Apple Mac OS X. Entre sus prestaciones básicas se hallan: la manipulación de matrices, la representación de datos y funciones, la implementación de algoritmos, la creación de interfaces de usuario (GUI) y la comunicación con programas en otros lenguajes y con otros dispositivos hardware. El paquete MATLAB dispone de dos herramientas adicionales que expanden sus prestaciones, a saber, Simulink (plataforma de simulación multidominio) y GUIDE (editor de interfaces de usuario - GUI). Además, se pueden ampliar las capacidades de MATLAB con las cajas de herramientas (toolboxes); y las de Simulink con los paquetes de bloques (blocksets). Matlab tiene ventajas muy interesantes para la programación científica.

  • Las sesiones interactivas permiten “jugar” con los datos de una forma muy sencilla.
  • La sintaxis está muy bien desarrollada para trabajar con vectores y matrices.
  • La capacidad de visualización de datos y modificación de figuras es excepcionalemente buena.
  • Existen librerías (normalmente propietarias) de gran calidad y existe una comunidad muy grande de usuarios.

No obstante, la mayor parte de estas ventajas también las tiene Phython. Además, tiene una serie de desventajas que lo desaconsejan como primer lenguaje de programación.

  • En primer lugar no es un lenguaje de programación “verdadero” ya que está muy dedicado al cálculo numérico, aunque su funcionalidad se ha extendido con numerosas toolboxes (control de bases de datos, interacción con el sistema operativo, etc...).
  • Adicionalmente, es un lenguaje propietario que requiere de licencias excesivamente caras para estudiantes.
  • No se puede ejecutar código de forma independiente (standalone). NOTA: Recientemente se ha proporcionado una herramienta adicional llamada MATLAB Builder bajo la sección de herramientas “Application Deployment” para utilizar funciones MATLAB como archivos de biblioteca que pueden ser usados con ambientes de construcción de aplicación .NET o Java.
  • Es horrible hacer un código largo, pues cada función debe estar en un único archivo. Esto significan miles de archivos y hace más complicado que varios programadores trabajen en el mismo código.

También Python tiene algunas desventajas respecto a Matlab:

  • No es tan sencillo manipular las figuras en tiempo real.
  • Al existir una cantidad ingente de programadores que aportan su código de forma libre, a veces es dificil determinar cuales son los módulos “mejores” para una cierta aplicación. Hay más posiblidades donde elegir.

1.4. Python en el ámbito científico

Python es un lenguaje de programación de propósito general que, en un principio, no se pensó para aplicaciones científicas. Con los años, siguiendo la filosofía GNU, se han desarrollado multitud de módulos científicos, que permiten realizar numerosas tareas de tratamiento de datos, visualización, cálculo simbólico y aplicaciones científicas específicas. Nosotros utilizaremos fundamentalmente los siguientes módulos científicos:

Existen asimismo otros muchos módulos bastante maduros escritos en Python como OpenFilters para el diseño de filtros interferenciales, http://www.polymtl.ca/larfis/English_Version/OF/OF_English.htm y Empy donde se implementa la técnica de RCWA, http://empy.sourceforge.net. Para más información el lector puede consultar el siguiente enlace http://www.scipy.org/topical-software.html donde podrá encontrar otros modulos de interés.