“Todos podemos programar”

Cuando yo era chico, los cursos básicos de computación, consistían en aprender a programar en BASIC. El intérprete BASIC venía incluido en la ROM de las máquinas de 8 bits como el ZX-Spectrum o la Comodore 64, y en aquellos días se animaba a las personas (y especialmente a los niños) para que aprendieran a programar, mediante cursos que se daban en los colegios, programas que venían en las revistas para aficionados, etc..

Después vino la era del MS-DOS, y si bien el intérprete de comandos del MS-DOS ofrecía un lenguaje de programación muy pobre, al menos cualquier usuario de PC, estaba familiarizado con conceptos tales como comando, archivo y directorio. No había un salto tan grande de aprender el uso básico del sistema, a aprender un lenguaje de programación. si bien, a diferencia de lo que sucedía en la máquinas de 8 bits, o en los sistemas Unix (con el lenguaje C), el sistema operativo ya no venía con un lenguaje de programación de propósito general incorporado.

Después vino la era del Windows, donde los archivos ya no se guardan en el disco rígido sino en vaya a saber qué misterioso lugar llamado escritorio lleno de iconos (cómo dice un amigo, “El software consiste en crear una ilusión”), y ahora muchas personas toman cursos de computación que son un engaño: en vez de enseñarles los conceptos básicos de programación, o del sistema operativo; sólo aprenden a utilizar algunos utilitarios o programas de oficina como MS-Word. Las personas creen que “aprenden computación”, pero este tipo de cursos sólo forma “analfabetos de la era digital”. En la era del sistema de las ventanitas, pareciera ser que la programación es un arte hermético, reservado sólo para unos pocos iniciados (y además pareciera ser algo útil sólo para muy pocos).

En una sociedad donde las tecnologías informáticas están adquiriendo un rol cada vez más preponderante, aprender a programar debería ser considerado socialmente tan importante como aprender una lengua extranjera (y creo que aprender un lenguaje de programación como C o Python, es decididamente más fácil y lleva menos tiempo que aprender por ej. a hablar bien inglés o alemán.)

Por otra parte, la programación es un arte muy formativo para el desarrollo de las habilidades intelectuales, como el pensamiento abstracto y el razonamiento matemático. Y auque muchas personas no lo sepan, programar puede ser muy divertido. Por ello, creo que debería enseñarse a programar en la escuela, incluso desde los últimos grados de la escuela primaria.

El software libre ha venido a poner un poco las cosas en su lugar, derribando las barreras que separan “usuarios” de “desarrolladores” (Eric Raymond explica esto brillantemente en su libro The Art of Unix Programming del que ya hemos hablado).¿Quieres programar en tu lenguaje favorito, sea este C, C++, Python, Perl, Ruby…? No tienes que pagar por este privilegio, es más: no es siquiera necesario que busques en la red el compilador o intérprete, pues es muy probable que el mismo ya venga incluido con el sistema operativo. ¿Quieres ver algunos ejemplos de los cuales aprender? Aquí tienes el código fuente de cada programa que forma el sistema, para ver y tocar. ¿Necesitas ayuda, tienes algo para aportar? Ven, y comparte tus conocimientos con la comunidad de software libre. Con el software libre, todos podemos programar.

Spectemu: para los nostálgicos del ZX-Spectrum

¿Eres como yo un nostálgicos antiguo usuario del ZX-Spectrum? ¿ Añorás sus maravillosos juegos, que podían llegar a tener 200 pantallas tridimensionales, y que sin embargo cabían en los apenas 48Kb de memoria RAM disponibles (o en realidad en 41,25Kb pues 6,75 Kb se los llevaba la memoria de video), y que se cargaban desde un cassette? (Incluso recuerdo que los libros de assembler explicaban trucos para utilizar al máximo la memoria disponible, como por ejemplo usar los 256 bytes del buffer temporal de la impresora o usar parte de la memoria de video poniendo en un tercio de la pantalla el mismo color de frente o de fondo)

¿Te gustaría ganar vidas infinitas en base a algún mágico POKE en una dirección de memoria adecuada? [Esto era por cierto muy formativo, muchos adolecentes actuales juegan habitualmete a juegos con mucho mejores gráficos, sonidos y efectos tridimensionales, pero posiblemente ni sepan qué es la memoria RAM ni mucho menos una dirección de memoria]

¿Recuerdas los días en que programábamos en el ZX-BASIC (cuyo intérprete cabía en tan sólo 16K de ROM) o en el assembler del relativamente sencillo pero poderoso procesador Z-80 de 8-bits? (gracias a los cuales me inicié en el mundo de la programación y aprendí sobre cosas como el sistema de numeración hexadecimal, y la representación de números en punto flotante). Otra cosa para notar de la ROM del ZX-Spectrum es que practicamente no tenía bugs, sólo recuerdo uno: el código para la rutina de interrupción no enmascarable (nunca utilizada, donde un JR Z fue cambiado por un JR NZ)

Bueno, para los que sufran de esta misma nostalgia existe Spectemu, emulador de ZX-Spectrum que corre bajo GNU/Linux (tanto bajo X-windows como en la consola usando SVGALIB), escrito por Miklos Szeredi, y qye es software libre bajo la GNU/GPL (Por suerte Amstrad, actual titular del derecho de autor sobre la ROM del ZX-Spectrum, autoriza su uso en emuladores, sino esto sería legalmente imposible, bajo las actuales regulaciones del copyright, así que ¡gracias Amstrad!. Se me ocurre que sería razonable que las leyes de copyright incluyeran alguna excepción para abandonware)

Aquí pueden ver una captura de pantalla de Spectemu booteando bajo GNU/Linux: la ZX-Spectrum vuelve a saludarnos con el familiar mensaje de copyright de Sinclair despúes de 25 años!

spectrum_on_linux.png

Por cierto ¿te gustaría también volver a leer la legendaria revista Microhobby? Puedes hacerlo aquí Y hay todo un museo del ZX-Spectru aquí. (Bueno perdón que me puse un poco nostálgico hoy).

Sir Clive Sinclair: gracias por crear la que fue mi primer computadora, gracias a la cual jugué, aprendí y me divertí.(¡ Y gracias a mis padres por habérmela comprado!)

Sage (Software for Algebra and Geometry Experimentation) es un sistema de álgebra computacional, creado por William Stein profesor de la Universidad de Washington; que integra muchos otros paquetes de software libre pre-existentes (como Pari/GP, Gap, Singular, Maxima, NTL, GNU GSL, etc.) , ofreciendo una interface unificada para todos ellos en Python. El slogan de Sage es “Estamos construyendo el auto, no reinventando la rueda”. Sage está fundamentalmente orientado a problemas de teoría de números, álgebra y geometría algebraica, pero también integra paquetes para aplicaciones numéricas, álgebra lineal, teoría de códigos, etc.

Python es un lenguaje de alto nivel y orientado a objetos, del que ya hemos hablado hace un tiempo. Es particularmente adecuado para aplicaciones matemáticas como esta, por su sistema dinámico de tipos (objetos matemáticos tales como polinomios, grupos y anillos se pueden representar en Sage), y porque es relativamente fácil vincular código en Python con librerías pre-existentes escritas en C o C++. El uso de un lenguaje ampliamente utilizado para diferentes propósitos como Python (en lugar de un lenguaje propio, como hace la mayoría de los sistemas de álgebra computacional representa una enorme ventaja, ya que los usuarios que conozcan Python, no necesitan aprender otro lenguaje más a la hora de usar Sage, y por otra parte es fácil integrar sage con otros paquetes escritos en Python)

Sage integra también algunas herramientas de desarrollo como el intérprete de Python con mejoras para uso interactivo IPython y el sistema de control de versiones Mercurial. Otra característica interesante de Sage, es que es posible utilizarlo (en modoc mdo cliente-servidor) directamente con un web browser usando Sage Notebook (¡se puede probarla en linea!). Aquí pueden ver una captura de pantalla de Sage Notebook funcionando en mi computadora con Mozilla Firerox:

sage_notebook.png

A la hora de explicar porqué el software libre es crucial para la ciencia, William Stein cita una frase de Linus Torvals que me pareció muy pertinente:

“I think, fundamentally, open source does tend to be more stable software. It’s the right way to do things. I compare it to science vs. witchcraft.

In science, the whole system builds on people looking at other people results and building on top of them.In witchcraft, somebody had a small secret and guarded
it but never allowed others to really understand it and build on it. Traditional software is likewitchcraft. In history, witchcraft just died out.
The same will happen in software.

When problems get serious enough, you can’t have one person or one
company guarding their secrets. You have to haveeverybody share in knowledge.”

Y también cita a J. Neubuser:

” You can read Sylow’s Theorem and its proof in Huppert’s book in the library […] then you can use Sylow’s Theorem for the rest of your life free of charge, but for many computer algebra systems license fees have to be paid regularly […]. You press buttons and you get answers in the same way as you get the bright pictures from your television set but you cannot control how they were made in either case.


With this situation two of the most basic rules of conduct in mathematics are violated: In mathematics information is passed on free of charge and everything is laid open for checking. Not applying these rules to computer algebra systems that are made for mathematical research […] means moving in a most undesirable direction. Most important: Can we expect somebody to believe a result of a program that he is not allowed to see? ”

Sage es software libre y se distribuye bajo la GNU GPL. Sage es realmente una importante contribución al software libre para matemática. y merece todo nuestro apoyo.

El pasado 11 de marzo de 2006 se anunció la publicación de la versión 0.3.1 del proyecto React OS. Para los que no lo conozcan, React OS es un proyecto para crear un sistema operativo libre (distribuido bajo la GNU GPL) que sea compatible con MS-Windows.

Según aclaran sus desarrolladores, esta versión está pensada mayormente para ser utilizada en sistemas de virtualización como QEmu o VirtualBox, dado que no ha sido extensivamente probada en hardware verdadero.

Aunque se trata de un proyecto aún en “estado alfa de desarrollo” (o sea no utilizable para uso diario), es un interesante proyecto que muestra lo que la comunidad de software libre es capaz de crear, aún sin tener los enormes recursos financieros de una corporación como Microsoft (El proyecto React OS se financia mayormente en base a donaciones).

Además de qué obviamente escribir un sistema operativo completo, ya es una tarea titánica, uno de los mayores desafíos desafíos de React OS, es como esquivar las resctricciones legales que podrían significar ser demandados por Microsoft u otras companías por violaciones de copyright o de patentes, pero mantener al mismo tiempo la compatibilidad con Windows. Por ejemplo, los desarolladores de React OS deben evitar obviamente emplear la palabra (marca) “Microsoft”, y lograron hacerlo, en todas las partes de su sistema salvo en el registro:

“How will you avoid the inevitable “Microsoft” text throughout ReactOS?
We believe that this falls under fair use. It is also not needed except in the registry.”

(citado de las preguntas frecuentes sobre el desarrollo de React OS)

También obviamente, las tecnologías patentadas por Microsoft pueden ser un problema (ver el post “Las patentes de software no le sirven a nadie” en este mismo blog, para una explicación de los problemas que el régimen de patentes de software acarrea, tales como incompatibilidades forzadas entre los sistemas)

Si bien, yo personalmente prefiero el diseño de los sistemas tipo UNIX, este proyecto puede ser una puerta para que se acerquen al software libre personas que se sientan más a gusto en sistemas Windows, y especialmente los desarrolladores de esta plataforma, que ahora tienen a su alcance un sistema tipo Windows cuyo código fuente pueden leer y tocar. Creo que es ideal para quienes quieran aprender cómo funcionan la API o los drivers de Windows.