Prejuicios

Hubo un tiempo en el que comencé a pensar que en esta era marcada por las redes sociales, el streaming de vídeo, el tener como referente a los youtubersgamers, etc., se estaba creando de alguna manera una nueva generación algo «atontada», lo cual, por otro lado, ofrecería grandes oportunidades a la gente que se preocupase por formarse, ya que los profesionales serían cada vez más escasos.

Sólo había que salir a la calle o ir a cualquier bar para fijarse en la gran cantidad de gente que está siempre pendiente de su «atontaphone», invirtiendo casi siempre el tiempo en el WhatsApp, YouTube, Facebook, Instagram, etc.

Así es que me llevo una grata sorpresa cuando reviso el panorama actual de, por ejemplo, la programación, un área ardua que, pese a la creciente demanda de profesionales, creía que iría un tanto en déficit de programadores, y la sorpresa es comprobar que nada más lejos de la realidad.

El sector de la programación parece disponer de buena salud, con un interés creciente por parte de toda índole de individuos y edades, con o sin experiencia previa en esta temática. No sólo la gente elige esos estudios en edad escolar sino que existe mucha gente que está estudiando por su cuenta para tratar de cambiarse de profesión. Hablamos de gente autodidacta que se apoya en la documentación en línea o echa manos de los excelentes y accesibles cursos que gente con mucha dedicación pone a disposición global para quién esté interesado en aprender algo nuevo. También, por supuesto, existen cursos más caros, bien sean presenciales u online. El sueño de muchos es cambiar/mejorar su vida laboral; muchos lo han conseguido ya, a base de dedicar su tiempo libre a estudiar en lugar de dejarse llevar por el banal entretenimiento.

Por supuesto, también tengo contacto y conocimiento de mucha juventud que se esfuerza en sus estudios, que viaja al extranjero para manejarse mejor por el mundo y por otros idiomas, para liberar barreras… Barreras que, lamentablemente, tal vez algún día crucen para emigrar a un país donde sus esfuerzos sean mejor recompensados que en la, lamentablemente, achuchadora España con los mejores profesionales y emprendedores.

En todo caso, mis pREjuicios tornan en esperanzas de que, tal vez, estaba muy equivocado con el pERjuicio que el entretenimiento móvil/internet estaba creando en las nuevas generaciones, también en la sociedad en general. Otro tema ya sería esperar un uso correcto del idioma, bes y uves, haber/a ver, echo/hecho, por qué/porque/porqué… Pero bueno, a veces tampoco es lo más importante.

La verdad es que, el simple hecho de que existan multitud de canales en YouTube dedicados a la programación, a las ciencias, a las matemáticas… y que tengan grandes cantidades de seguidores, es ya de por sí muy reconfortante.

No se me malentienda, que nada tengo yo contra el entretenimiento digital, pero mejor si no es el centro de nuestras vidas, ¿no?

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.

Instalar Code::Blocks (nightly build) y C++ en Ubuntu 9.10

Vamos a ver cómo instalar del IDE y compilador de C++ bajo Ubuntu 9.10 (también vale para 9.04).

Lo primero, la instalación del IDE en sí, sale de la famosa dirección de Jens’, quien mantiene un repositorio del Code::Blocks nightly build para Debian siempre actualizado. Ahí aparecen las instrucciones necesarias para instalar el software, que voy a resumir aquí, aparte de añadir una pequeña modificación necesaria para Ubuntu.

Vamos al menú Sistema – Administración – Orígenes del software. Vamos a la pestaña «Otro software», pulsamos en el botón «Añadir…» e insertamos, una de cada vez, estas dos líneas:

deb http://apt.jenslody.de/ any main
deb http://apt.wxwidgets.org/ jaunty-wx main

Al cerrar la ventana, se nos pedirá recargar los repositorios. Pulsamos en recargar y nos dará un error final, al que no hacemos caso.

Abrimos un Terminal e insertamos estas dos líneas:

sudo apt-get install jens-lody-debian-keyring
wget -q http://apt.wxwidgets.org/key.asc -O- | sudo apt-key add -

que son las llaves públicas del software, motivo por el que nos dio error anteriormente el recargado de repositorios.

Ahora nos vamos al menú Sistema – Administración – Gestor de paquetes Synaptic y, desde el cuadro de búsqueda, buscamos y marcamos para instalar los siguientes paquetes (y sus dependencias):

codeblocks
codeblocks-contrib
build-essential

Pulsamos en el botón «Aplicar» y ya está.

En el menú de Aplicaciones – Programación, ya nos aparece el Code::Blocks para ejecutar sin problemas en su última compilación nightly build, y, al abrirlo, ya dispondremos del compilador de C++ listo para usar.

El saludable ejercicio de la programación

Muchos usuarios amateurs a menudo se encuentran con que les gustaría aprender a programar pero piensan que para qué les va a servir, si hoy en día el software está tan evolucionado y hay tantos programas para cualquier tarea que por ellos mismos no creen que puedan hacer nada… De modo que al final desisten de su intento.

Hay muchos motivos por los que aprender a programar nunca está de más, sobre todo si os interesa hacerlo. A continuación os doy un motivo más para animaros a no desistir.

Ni Brain Training ni leches: la práctica de la programación es un auténtico estimulador cerebral. El aprendizaje y la aplicación de las artes de programar, con cualquier lenguaje, requiere realizar un montón de actividades altamente estimulantes para nuestro cerebro, que ayuda mucho a mantenerlo «despierto» y evitar que se «oxide».

Por un lado, el aprendizaje de cosas nuevas siempre activa la mente. Además, en este caso, son bastante abstractas, con lo que la actividad para asentar los conocimientos y relacionarlos entre sí es ya de por sí alta. Por otro lado, enfrentarse a programar una aplicación real, supone enfrentarse a problemas y puzzles lógicos que habrá que solventar de la mejor manera que se nos ocurra, y siempre hay diferentes formas, a cada una mejor, de superar un problema. La imaginación ha de entrar en juego para dar con la mejor solución. También requiere ser ordenado y metódico, y llevar control de muchas cosas a la vez. Incluso la creatividad juega un papel muy importante, sobre todo en cuanto al aspecto visual que queremos dar a nuestra aplicación (de nuevo, el reto de conseguir obtener,  a base de líneas de código, la interfaz que tenemos en mente).

¿Crees que te gustaría aprender a programar? Pues no pienses en si te va a servir de algo o no, porque está claro que de algo sí te va a servir, y… ¡quién sabe cuánto!

Programación de videojuegos con SDL

Me he encontrado con un libro bastante completo (y en castellano) sobre programación de videojuegos con la biblioteca SDL, que trata un poco todo lo relacionado con el uso de esta famosa API multiplataforma para el desarrollo multimedia y su aplicación a los juegos a un nivel básico.

El manual nos enseña a manejar vídeo, sonido, eventos, etc., todo desde un punto de vista práctico, lo que se ve ayudado con la creación de un pequeño videojuego durante el transcurso de los diversos capítulos. El requisito para seguir el libro es saber C o C++.

Se puede bajar el ebook en PDF desde aquí, y esta es la página oficial del creador del libro.

De todas formas, para los interesados en usar toda la potencia de SDL, desde la página oficial del proyecto nos ofrecen acceso a tutoriales, artículos y libros (entre otras cosas), que tratan la API de una forma más específica y completa.

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.