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.