Comprueba por ti mismo la potencia de Python frente a C++

pc

Muchos son los programadores o futuros programadores que se enfrentan al momento de elegir lenguaje para su proyecto. Es bastante habitual la duda entre C++ o Python.

La respuesta siempre es: C++ = potencia, Python = facilidad de uso.

La verdad es que, leyendo un poco el lenguaje, se puede entrever que la facilidad de uso de Python y ahorro de tiempo va a ser sustancial. No obstante, saber cuanta velocidad vamos a perder en nuestra aplicación a menudo no se ve clara a simple vista.

Pues bien, futuro programador, haz este simple ejercicio. Vamos a crear un programa muy simple en C++ y en Python.

Código C++:

 

#include <iostream>

using namespace std;

int main()
{
    int t = 0;

    while (t < 100000000) {
        t++;
    }

    cout << t << endl;

    return 0;
}

Código Python:

 

#!/usr/bin/env python

t = 0

while t < 100000000:
    t = t + 1

print t

El programa es muy simple y el problema habitual en ciertas áreas, como la programación de juegos, por ejemplo. Simplemente hemos creado un bucle que, uno a uno, suma cien millones (dicho así parece más de lo que es) a una variable y sale del programa.

Ejecuta ambos. ¿Qué notas? Comprobarás que C++ realiza la tarea de manera instantánea a la vista, mientras que Python se toma alrededor de 10 segundos (depende del procesador que tengas). Concretamente, el comando «time» de Linux me muestra un tiempo de ejecución del programa de 0,003 segundos para la versión en C++ y de 12,873 segundos para la versión en Python.

Visto esto, sirva para esclarecer al futuro programador la elección de lenguaje. Si el programa va a ser sencillo y no vas a usar este tipo de cálculos, seguramente Python será la mejor opción. En caso contrario, C++ puede ser la elección más acertada.

ACTUALIZACIÓN DE LA ENTRADA 8/01/11

Dicen que de sabios es rectificar y yo a menudo he de hacerlo. Este post es una clara muestra de un pensamiento pasado que ya no comparto.

Primero: el pequeño programa de muestra no demuestra casi nada. Un programa en C++ va a ser más eficiente que en Python siempre y cuando escribamos nuestras propias rutinas y algoritmos nosotros mismos. No obstante, Python incluye «pilas», rutinas para múltiples funciones que nos van a ahorrar un montón de tiempo, pero mucho mucho, y que en muchas ocasiones serán más eficientes que las que nosotros pudiéramos llegar a codificar, sobre todo como programadores noveles. Total, que una aplicación que realicemos en Python puede terminar siendo más veloz que la que realizaríamos en C++, y, además, la tendremos lista en menos tiempo. A mayores, Python incluye recolección de basura, lo que nos evitará problemas de memoria, sobre todo cuando un programa comienza a crecer demasiado, y también nos libera mucho tiempo que podemos emplear en centrarnos en lo realmente interesante que ha de hacer el programa.

Segundo: con todo, me he dado cuenta de que este post no esclarece, en absoluto, la elección de lenguaje para afrontar un proyecto. Lamentándolo mucho, creo que es un tema más complicado de lo que parece. Según lo que un programador quiera crear, va a necesitar un lenguaje u otro. El tema es aprender, al menos por encima, a usar unos cuantos lenguajes antes de ponerse manos a la obra. Un segundo tema es que, a menudo, un proyecto se va a basar en algún framework determinado (un motor de juegos en concreto -como puede ser SDL, XNA, Irrlicht, etc.-, una API concreta -GTK+, QT, Win32, WxWidgets, etc.- u otros). El framework elegido tal vez ya nos condicione el tipo de lenguaje a utilizar, aunque algunos permiten trabajar desde diferentes lenguajes; en realidad, llegados a este punto, la potencia de la aplicación la marca el framework, y no tanto el lenguaje que usemos, por lo que, simplemente, deberemos escoger el que más cómodo nos parezca. Por último, a veces, incluso la mejor opción pasa por crear la mayor parte del proyecto en un lenguaje y usar otro para determinadas funciones.

Tercero: estamos hablando de la creación de programas tradicionales, de ejecución en local. La programación web tiene sus propios lenguajes que van mejor que los comentados para su cometido (PHP, ASP, Java, JavaScript…) y así otras áreas. Cada tipo de aplicación y destino tiene su o sus lenguajes que facilitan el trabajo, cuando intentarlo con otros sería toda una odisea.

Ha pasado el tiempo y a día de hoy, para un programador novel, recomendaría comenzar con un lenguaje con recolección de basura y una sintaxis clara. C#, al que siempre tenía manía, resulta que ahora me gusta bastante. Muchos de los programadores experimentados creen que se debería comenzar con un lenguaje como C antes de pasarse a uno más «automático», para aprender bien las bases de como funciona un programa y el sistema operativo internamente. Sin embargo, ¿acaso cuando aprendemos matemáticas comenzamos por las integrales? No, comenzamos por lo sencillo, sumas y restas, y vamos ampliando conocimientos gradualmente. Creo que con la programación ocurre lo mismo. Podemos empezar por un lenguaje de sintaxis clara y sin preocupación por punteros y gestión de memoria, y más tarde, una vez dominado lo básico (bucles, funciones, objetos, etc.), profundizar en otros aspectos tanto si lo necesitamos como si nos parece conveniente. Si bien Python es un lenguaje sencillo, usado actualmente por muchos para iniciar a la gente en programación, me gusta más uno con sintaxis similar a C, ya que hay muchos lenguajes que se basan en la sintaxis de C, de cerca o de lejos, tales como Java, C#, JavaScript, C++, PHP…, y esto facilita el futuro cambio de uno a otro.

Como instalar PyDEV en Eclipse

pc

Últimamente estuve buscando un editor integrado para Python. Después de analizar varios productos, me había convencido el SPE (Stani’s Python Editor), aunque al final fue Eclipse, con el plugin PyDEV, el que me convenció del todo, al tener función de autocompletado de código y una interfaz más intuitiva y clara. No obstante, tuve algún problema chorra para instalar el PyDEV, así que paso a contar cómo hacerlo.

Suponemos que tenemos instalado Eclipse desde los repositorios de Ubuntu, por ejemplo. El paso para instalar el PyDEV es el siguiente.

Abrimos un terminal y ejecutamos Eclipse como administrador:

sudo eclipse

Ahora, dentro del IDE, abrimos el menú «Help – Install New Software…» y en la pantalla que aparece añadimos la dirección

http://pydev.org/updates

Sólo nos queda marcar PyDEV para instalar y aceptar. Se descargará desde internet y se instalará el solito.

Ahora, nos queda configurar PyDEV para su uso. Abrimos, en Eclipse, el menú «Window – Preferences», abrimos la sección «Pydev» y nos vamos a «Interpreter – Python». Aparecerán unos campos vacios. Pulsamos el botón «Auto Config», marcamos todo (ya estará marcado) y aceptamos. PyDEV ya estará listo para funcionar.


Dentro del menú «Window – Preferences – Pydev» encontraremos la zona «Editor», donde prodremos configurar el estilo visual del código. Y poco más necesitamos para comenzar a usar el editor.

La primera vez que pulsamos en ejecutar el código se nos preguntará qué intérprete queremos utilizar (Python, JPython, etc.) pero tras la primera vez que lo escojamos la opción será recordada y no nos volverá a molestar.

Para más información, consulta el manual oficial de instalación y configuración de PyDEV.

Python, el lenguaje divertido

Un lenguaje de programación nunca es divertido para quien no le gusta programar, o casi siempre, para quien le gusta. No obstante, califican a Python como un lenguaje ameno, en el que da gusto iniciarse a la programación, o al que da gusto cambiarse.

Muchas veces he trasteado con lenguajes de programación: Pascal, C, C++… El último al que quise «meterle mano» fue Java. La primera impresión: horrible. No ha sido así con Python, lenguaje al que le he venido dedicando atención la última semana.

Python es un lenguaje de alto nivel interpretado, es decir, es lento. Esto no es preocupante. En los ordenadores de hoy en día sólo queda desaconsejado en el caso de escribir drivers o tareas críticas que necesiten la máxima velocidad en su ejecución. En cambio, para la mayoría de aplicaciones, es un lenguaje sencillo de aprender y de usar, que simplifica los pasos necesarios para desarrollar un programa y acorta el tiempo de desarrollo. Donde un programador no profesional dejaría de lado un proyecto, Python ayuda a que se llegue a su finalización. Aparte, como dicen ellos mismos, Python viene con pilas incluidas. Esto es, tiene una gran biblioteca de funciones predefinidas que nos liberan de la tarea de programarlas.

Como decía, Python es un lenguaje interpretado. Quiere decir que no se compila, por lo que para ejecutar un programa escrito en Python se requiere tener el software python instalado, que ejecuta el programa a medida que lo lee. De todos modos, tampoco nos debe preocupar, ya que existe una forma sencilla de hacer que nuestro programa Python sea distribuible y ejecutable (o autoejecutable) en un ordenador que no tenga Python instalado.

Pero Python no sólo se reduce a usuarios noveles o no profesionales. Sitios como YouTube han proclamado hacer uso intenso de Python. En palabras de Cuong Do, arquitecto de software de YouTube: «Python es suficientemente rápido para nuestro sitio web y nos permite producir características fáciles de mantener en tiempo récord con un mínimo de desarrolladores».

Lo que a mí me interesa, de cara a un usuario no profesional, es que nos permite hacer programas de manera sencilla. Y como alguien decía: «un programa es mejor que ningún programa«. Como programadores aficionados, nos interesa más desarrollar un programa que sea funcional que uno que sea ultraeficiente pero extenuadamente latoso, o que ninguno.

Por tanto, y como decía, en los últimos días he trasteado con él y he buscado enlaces y utilidades de interés, que pongo a continuación.

Imprescindibles.

www.python.org
Página web oficial, desde donde podemos descargarnos el software necesario para ejecutar un programa en Python.

Un buen tutorial de Python, así como el tutorial oficial escrito por el autor del lenguaje.

Notepad++
Este es un editor de código que me ha gustado para Python, aunque puede haber otros muchos mejores.

Guía de estilo del código Python.
Una vez nos hemos familiarizado con el lenguaje y antes de realizar ningún proyecto, es conveniente aprender a escribir usando un patrón universal.

Herramientas de interés una vez dominado lo anterior.

wxPython y un tutorial.
wxPython son unas bibliotecas para la creación de interfaces gráficas o GUI (estilo Windows, Gnome, KDE, etc.), que es como toda aplicación debería ser mostrada hoy en día. Funcionan tanto en Windows como en Linux, por lo que no habrá que preocuparse por conversiones.
Aunque también se pueden usar las librerías Qt, GTK++ o Win32 (entre otras), parece que en Python las más famosas son las anteriores, y a mí me han parecido sencillas, dentro de lo que son las APIs de desarrollo de interfaces gráficas. Además, usan el tema de ventanas del sistema operativo en el que se ejecuta la aplicación.

wxGlade, su tutorial y Boa Constructor.
Diseñar interfaces gráficas con texto es un coñazo. Estos editores visuales, al estilo del editor de interfaces de Borland o Microsoft, hacen sencilla e intuitiva esta tarea.
Boa Contructor es, además, un completo IDE de desarrollo que podemos empezar a utilizar desde el primer paso con Python (aún sin usar sus funciones gráficas), ya que así nos vamos familiarizando con la interfaz.

py2exe y su tutorial básico
Este es el programilla que nos permitirá crear un programa autoejecutable y autónomo (sin necesitar tener instalado el intérprete Python en la máquina), facilitando la redistribución de nuestro programa.

www.pygame.org
En este sitio encontraremos librerías y documentación para programar juegos en 2D con Python. El software está basado en las famosas librerías SDL.

Datos de interés.

Python y su autor en la Wikipedia.

He comprobado que todo el software anteriormente expuesto funciona. De todas formas, eso es sólo una pequeña lista de todo lo que hay y todo lo que se puede hacer con Python a día de hoy.