Archive | Uncategorized RSS feed for this section

“Coders at Work”

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.

Mas sobre el iPad

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.

Leyendo código fuente

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.)

Buen diseño

Dieter Rams es una de las personas que mas han influido en la práctica del diseño industrial. Muchos de los productos que Rams ha diseñado durante su trabajo en la empresa Braun son admirados mundialmente. Rams ha resumido su pensamiento sobre el diseño en los siguientes principios:

  • Un buen diseño es innovador
  • Un buen diseño hace un producto util
  • Un buen diseño es estético
  • Un buen diseño no obstruye
  • Un buen diseño ayuda a entender un producto
  • Un buen diseño es honesto
  • Un buen diseño no envejece
  • Un buen diseño es coherente hasta en el mas mínimo detalle
  • Un buen diseño tiene en cuenta el medio ambiente
  • Un buen diseño es tan poco diseño como sea posible

Powered by WordPress. Designed by Woo Themes