Recomiendo esta entrevista a Richard Stallman, fundador del movimiento del software libre. Hay varias preguntas buenas. Fueron formuladas y escogidas por los lectores de reddit. En particular hay unas preguntas que tratan sobre las posiciones políticas de Stallman en un contexto mas general que el de la creación y la distribución de software.
Trabajo con gente que lleva años acumulando experiencia sobre técnicas bastante especializadas en un campo preciso de la programación. Son programadores extremadamente competentes que podrían trabajar en cualqueir cosa pero que además son expertos en algo bastante especifico. El camino que he seguido como programador no me ha hecho especializarme en niguna rama particular de la industria. No se hacer nada que un programador recién graduado (o un programador no graduado, de hecho) no pueda aprender a hacer en máximo unas cuantas semanas teniendo la documentación adecuada. La experiencia me ha hecho ganar una cierta intuición sobre la manera adecuada de escribir tal o cual programa. Nunca he intentado darle cuerpo a ese conocimiento. Me considero un programador apto, pero he trabajado con suficientes personas para saber que hay gente con mucho mas talento que yo para escribir programas sólidos. Creo que soy bueno encontrando ideas sobre cosas interesantes para programar. El software me interesa antes que nada como un medio para crear cosas nuevas. Las caracteristicas del código fuente me interesan también, pero menos.
Continuará…
La teoría de las ventanas rotas sostiene que mantener la pulcritud de un vecindario ayuda a prevenir el vandalismo y otras formas de mal comportamiento. La idea es que una persona se sentirá mas culpable de romper una ventana de un edificio en perfecto estado que de romper una ventana en un edificio que ya tiene varias ventanas rotas. De esto se desprende entonces que para mantener un vecindario en buen estado hay que reparar rapidamente los pequeños daños que aparecen constantemente, por mínimos que parezcan.
He notado que lo mismo es cierto con el código fuente de un programa, es importante mantener pulcro el código aún en sus pequeños detalles (por ejemplo la indentación, etc) para evitar su degeneración en una masa de código dificil de mantener.
En las pasadas elecciones muchos nos ilusionamos con la posibilidad de un cambio en Colombia. Desafortunadamente, terminamos decepcionados. El domingo en la noche vimos a Santos, el candidato del actual gobierno, imponerse facilmente sobre todos sus adversarios. Nada deja pensar que los resultados vayan a cambiar en la segunda vuelta. Miremos con calma que significa esto.
Es importante ir mas alla de los nombres de los candidatos y profundizar en cuales fueron las póliticas por las que votaron los ciudadanos. Pensando de nuevo en los debates, me parece que Santos y Mockus (así como el resto de los candidatos salvo Gustavo Petro) presentaron propuestas muy parecidas, por no decir las mismas. Estuvieron de acuerdo sobre el TLC, sobre las bases norteamericanas, sobre los secuestrados de las FARC y una posible negociación, etc. En retrospectiva, creo que los ciudadanos se limitaron a decidir quién, entre “el candidato de Uribe” y “el candidato decente”, era el hombre adecuado para poner a funcionar una política en el fondo muy parecida a la que ya existe.
En resumen, la batalla de las ideas ya la habia ganado Uribe desde mucho antes del 30 de mayo. Es como si una empresa ya tuviera un dirección definida y hubiese simplemente que poner a un nuevo gerente. Tal vez uno del que se sabe que es eficiente para ir en la dirección escogida, pero asociado a ciertos intereses particulares y a ciertas feas practicas, o a otro que parece más honesto, mas comprometido con la meritocracia que con la gerencia pasada.
Todo esto hace la derrota de Mockus aun mas deprimente. Entre dos candidatos de la misma política los ciudadanos escogieron a aquel más asociado al clientelismo y al servicio de las elites que tienen al país en su estado actual. Y todo por un curioso miedo a perder los mil veces cacareados frutos de la “seguridad democática” (los cuales yo nunca veo cuando voy a Bogotá, dicho sea de paso).
Me parece que Gustavo Petro (aunque un poco Pardo, también) fue el único candidato que propusó políticas diferentes. El problema es que las ideas en las que estas propuestas se fundamentan han sido tan estigmatizadas en Colombia que no tendrán posibilidades de ganar durante mucho tiempo. De esto se han encargado los medios con la ayuda de las FARC. Por lo demás, no tiene nada de raro que los ciudadanos no confien en el partido de Iván y Samuel Moreno para llevar a cabo grandes transformaciones en el país.
Un efecto nefasto que podría traer a mediano plazo el triunfo de Juan Manuel Santos podría ser el fortalecimiento en Colombia de grupos políticos de esos cuyos miembros escriben “lider” con “L” mayuscula y admiran a Castro. Ojala que no. Aunque lo más probable es que el país entre en una especie de PRI-ización.
En todo caso, yo votaré por Mockus en segunda vuelta. Que al menos quede el precedente de que muchos nos opusimos a la situación actual.
La programación me interesa mas como un medio de exploración de nuevas ideas que como la disciplina de crear programas con cualidades especificas (buen diseño, robustez, eficiencia, etc). La construcción de prototipos es una práctica muy ligada a la exploración creativa que consiste en crear “falsos” programas con el fin de obtener información sobre programas “reales” que se quieren construir.
En este reporte se discuten algunos conceptos claves de la práctica de la creación de prototipos y se proponen algunas ideas para la creación de un ambiente de creación de prototipos.
Como aca la coherencia nos importa poco, me compré un iPod (alfabravoteam puede dejar de leer). Eso sí, me compré el mas pequeño (8 gigas). Aca van unos comentarios sobre el aparato.
Primero que todo, hay que reconocer que la interfaz de usuario está muy bien hecha. La prueba es que en pocos minutos uno aprendé todos los gestos necesarios para usarlo sin necesidad de leer ningún manual. Las aplicaciones de base son una delicia de usar. La duración de la bateria es aceptable. La navegación de la web con Safarí es excelente, a pesar del reducido tamaño de la pantalla y de la ausencia de teclado físico.
A pesar de todo, el aparato tiene sus fallas. De vez en cuando, una que otra aplicación “muere” sin mayor explicación, dejandolo a uno con el dedo sobre la pantalla, preguntandose que hace el menu principal ahi. El sistema operativo del iPod no puede garantizar que una aplicacion no falle, claro, pero creo que visualmente podrían tratar esas fallas de manera un poco mas elegante.
Otra cosa de la que me di cuenta luego de jugar con el iPod por un rato es que lo realmente chevere comienza cuando uno está conectado a internet todo el tiempo (lo cual solo se consigue con el iPhone). Por ejemplo, luego de mirar la aplicacion de mapas (que usa el GPS) es obvio lo util que es tenerla disponible en cualquier momento, no solo en lugares que cuenten con una conexión wi-fi.
Ahora ando con ganas de escribir una aplicación para el iPod. Pero para eso se necesita un macintosh.
Acabo de terminar “Coders at Work” de Peter Seibel. Esperaba bastante de este libro y desafortunadamente quedé un poco decepcionado. El libro transcribe entrevistas a varios programadores famosos, por ejemplo Ken Thompson (uno de los padres de unix), Guy Steele (uno de los padres de Scheme, Common Lisp y otros lenguajes), Jamie Zawinski (netscape), Knuth (tex, the art of computing programming) y otras estrellas. Todas las entrevistas se desarrollan alrededor de un puñado recurrente de preguntas que las conducen alrededor de la carrera, la manera de trabajar y en general la visión de la programación del entrevistado.
La parte que me gustó más del libro fueron las historias de cada programador: como aprendieron a programar, que caminos tomó su carrera, que proyectos forjaron sus estilos particulares de programación, etc. El libro reune programadores muy jovenes (el creador de livejournal, que tiene, creo, veinti-tantos años y empezo directamente en internet) hasta aquellos que empezaron programando con tarjetas perforadas. La variedad de historias es interesante.
Mi primer problema con el libro es que la mayoria de los temas de fondo se tocan de manera un tanto superficial y poco organizada. Esto era tal vez inevitable ya que los entrevistados no se han preparado para discutir un tema en particular. Seibel es un programador que sabe de lo que habla, así que me parece que peca de timidez al confrontar los puntos de vista de los entrevistados. Ha debido ser más agresivo, en el buen sentido; eso le hubiera dado mas sabor a las conversaciones.
El segundo problema es que siendo el formato de las entrevistas casi identico, el libro se hace un poco monótono a medida que se va avanzando. Una excepción se da por ejemplo en el caso de Fran Allen, la única mujer entrevistada, en el cual una parte de la entrevista trata el asunto del bajo número de mujeres en el campo de la programación y de los problemas profesionales particulares que tienen las mujeres programadoras. Eso me pareció interesante. Hay una entrevista en la que el personaje es (no recuerdo el nombre) uno de los creadores de ARPANET, quién hoy en día vive criando cabras en un lugar donde ni siquiera hay proveedores de internet, hubiera sido muy interesante que hubieran hablado de ese cambio de modo de vida.
Tal vez lo que más me decepcion es que realmente hay pocas sorpresas en las cosas que dicen los entrevistados. Hay varias diferencias entre sus puntos de vista preo creo que casí todas esas diferencias hacen parte de diferencias generales bastante conocidas y de las que ya se ha hablado y escrito mucho. Desafortunadamente las conversaciones del libro no me parece que aporten mucho a esas discusiones. Creo que una confrontación entre los diferentes puntos de vista hubiera dado un resultado mucho más rico.
Ayer un amigo me estuvo dando consejos para mejorar la posición de mis páginas en el indice de Google. Escuché estas recomendaciones con atención porque:
- Una página solo es visitada si tiene una buena posición en Google
- Para tener una buena posición en google hoy en día, una página modesta necesita valerse de todas las astucias posibles.
La mayoria de estas recomendaciones tienen que ver con detalles de cuando, como y donde usar diferentes elementos de las páginas HTML, es decir, detallitos menores cuya única importancia es la de tener influencia en los algoritmos que se ejecutan secretamente en los servidores del titán de internet.
Hay toda una industria millonaria alrededor del SEO y se me ocurre que de cierta manera se parece a la industria de los anti-virus hace unos 15 años. Representan un gasto de recursos y energias que no crean ningun valor intrinseco otro que el de llenar un hueco abierto por las falencias del sistema dominante del momento.
Sobre este tema, que se conoce como Search Engine Optimisation, ya había escrito en el pasado.
En otra ocasión escribí que no creo que el futuro de la computación este en las plataformas como el iPhone/iPad y la AppStore. Como si no fuera ya una plataforma terriblemente cerrada, hace poco se conoció otra restricción más: está prohibido escribir programas para el iPad en lenguajes diferentes a C++ y Objective C.
Según entiendo, Apple busca atacar a Adobe, quien van a incluir un programa que traduce aplicaciones Flash en aplicaciones iPhone/iPad en su proxima suite de desarrollo.
Ha habido toda clase de blogs en contra de esta restricción y unos cuantos blogs en su defensa. Estos últimos argumentan casi todos que esta medida tiene mucho sentido desde el punto de vista de Apple pero no explican por que es buena para los desarrolladores de aplicaciones. La idea detrás es que lo que es bueno para Apple y el iPhone/iPad es bueno para los desarrolladores.
Otros defensores de Apple pretenden que solo a hackers hermitaños y otras criaturas de poca importancia les interesa escribir aplicaciones en otros lenguajes, y que a los desarrolladores de verdad lo que les interesa es ganar plata y que una plataforma cerrada es la mejor manera de hacerlo. Ya veremos.
Aun cuando el poder desmedido de google me produce desconfianza, espero que Android (que segun entiendo es libre) se imponga en la guerra de los mobiles.
Sería chevere si uno pudiera leer un programa de computador tal como se lee un libro: en linea recta del principio al fin. Esto casi nunca es posible porque los programas no suelen estar organizados linealmente. Lo que hay, frecuentemente, es un manojo de archivos regados en directorios. Casi siempre me cuesta trabajo encontrar que pedazos del programa hay que leer, y en que orden, para entender globalmente su funcionamiento.
Las diferentes técnicas que he usado son:
- Si hay suerte, el autor del programa ha escrito un archivo donde explica la estructura del programa y la responsabilidad de cada modulo. Eso da una idea de qué pedazos hay que leer, según lo que uno quiera entender del sistema. Si la documentación es suficientemente buena, el problema está mas o menos resuelto.
- Mirar el sistema de “build” del programa (el Makefile, el archivo ant, .asd etc) e intentar deducir algo de la estructura del mismo.
- Mirar los directorios en los que estan repartidos los archivos para deducir algo de la estructura.
- Leer “de arriba a abajo”. Comenzar leyendo la función que arranca el programa (el “main”) e intentar identificar las funciones de alto nivel. Luego intentar leer “hacia abajo”, haciendo diagramas que muestran como se encadenan las funciones.
- Si es un programa “orientado a objetos”, a medida que se lee el programa de arriba a abajo, se va haciendo el diagrama de clases.
Lamentablemente, salvo por los programas cuya estructura está bien documentada, la lectura de un programa escrito por otra persona tiene mucho de una actividad a ciegas.
Sospecho, por su nombre, que la técnica de literate programming de Knuth produce programas que se pueden leer como un libro. Nunca he intentado practicarla ni he leido programas escritos así. Que alguién me confirme.
P.S. Muchas veces el problema es que uno esta haciendo dos cosas al tiempo: intentando entender un programa e intentando aprender el idioma en el que esta escrito, es decir la manera particular en la que el autor del programa usa el lenguaje de programación subyacente. (Esto es mucho menos problematico cuando uno es mucho mas familiar con el lenguaje de programación y conoce estilos mas comunes con los que se usa.)


