Crítica de los IDEs (segunda parte)

Inspirado por un buen comentario de Manuel Cerón, estuvé pensando un rato sobre las verdaderas razones por las cuales usar eclipse no me llega a parecer del todo placentero. El primer comentario de Manuel es bastante acertado: el tiempo de arranque de eclipse es irrelevante dado que arrancar eclipse es algo que se hace muy raramente. En mi caso, por ejemplo, usualmente lanzo eclipse el lunes en la mañana y lo vuelvo a cerrar el viernes en la noche. Al trabajar en java en eclipse, uno hace todo a partir de eclipse, todo el tiempo, por lo cual tiene sentido que eclipse permanezca abierto todo el tiempo, dominando toda la pantalla.

Creo que este último punto esta en la base de mi principal problema con eclipse (y en general los IDEs): para cumplir su promesa de facilitar la tarea de escribir codigo, eclipse exige una especie de entrega total. Parafraseando al Duce Mussolini, Todo en eclipse, nada por fuera de eclipse. Eclipse se hace cargo de todos los detalles peludos del asunto, a cambio de que uno renuncia a la posibilidad de meterle mano en la mitad a la cadena de herramientas y pasos involucrados. Por la misma razón, es dificil introducir una herramienta externa al manejo de un proyecto sin introducir perturbaciones que eclipse es incapaz de tratar correctamente.

Manuel señala correctamente que el refactoring es solo una de las facilidades de edición que ofrece eclipse, al lado de otras estilo auto-expansión del código o el navegar a la definición de una función desde una referencia a ella (esto ultimo lo ofrece emacs en C desde tiempos inmemoriales). En mi opinión las funciones de refactoring son tal vez las funciones de edición mas sofisticadas de eclipse y se me ocurre que es posible que para Python (el lenguaje de preferencia de Manuel) sean menos avanzadas que para java. Esto me conduce a pensar en otro punto, de bastante menor importancia y por el cual no se puede culpar a eclipse, y es el hecho de que en general me parece que los paquetes oficiales son de muchisima mas calidad que los no-tan-oficiales. Por ejemplo, el soporte a CVS es brutalmente bueno, mientras que para GIT no existe nada siquiera aceptable.

  • Share/Bookmark
 

Crítica de los IDEs

Durante los últimos dos años he usado eclipse constantemente en mi trabajo. Aca van un par de reflexiones sobre esta herramienta de desarrollo y en general sobre todas las herramientas de ese estilo (conocidas como IDEs, por las siglas en inglés de Ambiente de Desarrollo Integrado).

Poco ligero: Eclipse no es una herramienta ligera. Lanzarla, aun en un computador reciente, toma un tiempo considerable. Mas vale tener un equipo con bastante memoria.

Facilidad de uso: Los entusiastas de las interfaces de usuario gráficas defienden las IDEs por su supuesta facilidad de uso. A mi en cambio me parece que eclipse es todo menos facil de usar.

La programación es un proceso relativamente complejo que involucra diversas actividades (edición, compilación, debugging,…). Cada una de estas actividades involucra diferentes pequeñas acciones y una gran cantidad de parametros. En suma, se trata de una enorme cantidad de elementos que el programador debe conocer. En eclipse, todos estos elementos inundan la pantalla al tiempo, logrando más confundir que simplificar la tarea global.

Refactoring: Por otro lado, las herramientas para hacer refactoring de eclipse me parecen muy utiles. Eclipse “entiende” el código que se esta editando y permite automatizar cosas como convertir un pedazo de código al interior de un método en un método separado, o actualizar todas las referencias a una clase a la que se le cambió el nombre.

  • Share/Bookmark
 

Jack of all trades (master of none)

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á…

  • Share/Bookmark
 
Antanas Mockus, elecciones 2010

Antanas Mockus

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.

  • Share/Bookmark
 

SEO: el nuevo anti-virus

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:

  1. Una página solo es visitada si tiene una buena posición en Google
  2. 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.

  • Share/Bookmark
 

Los usuarios de computador necesitan conocer cada vez menos la manera como un computador funciona. Si las tripas de la máquina se vuelven cada día más invisible, esto se debe a que el usuario puede ahora controlar el computador usando interfaces gráficas avanzadas. Estas interfaces permiten controlar el computador usando imagenes que representan objetos fisicos (botones, ventanas, etc).

Comparemos esto con lo que había hace un par de decadas. En ese entonces, el usuario controlaba el computador escribiendo comandos que la máquina ejecutaba. Pienso por ejemplo en el Commodore 64 en el cual para cargar y ejecutar el primer programa de un diskette había que escribir:


load "*", 8, 1

… algo que parecía (y parece) brujería.

En los primeros PCs, que usaban el sistema operativo DOS, los usuarios tambien tenían que escribir comandos. También había que entender, más que ahora, detalles sobre los archivos y los directorios.

Aunque uno puede encontrar primitivas esas interfaces, algo bueno que tenían era que exponían el computador como lo que es: una máquina programable. El commodore 64 por ejemplo venía con un interprete de basic a disposición del usuario apenas éste prendía el computador. A punta de jugar con los diferentes comandos que aparecían en el manual, un niño podía comenzar a intentar cambiar una o dos cosas y luego a leer mas a fondo los manuales para entender como hacer cosas mas avanzadas. Creo que gracias a eso, miles de niños y jovenes aprendieron los rudimentos de la programación. Todo a punta de “cacharrear” la maquina, urgando aquí y alla. Eran máquinas que no intentaban esconder gran cosa, todo lo opuesto a, digamos, el iPhone.

La claridad que tenía la gente del computador como una máquina programable se veía reflejada también en los libros. Algo chevere por ejemplo erán los libros que contenian juegos en basic para que los niños los copiaran en sus commodores 64. Creo que ya no existe nada parecido. Ahora la noción de programador y usuario están claramente separadas.

El mundo del “cacharreo” informatico hoy en día se ha desplazado (como todo) de los computadores personales a la web. Debe haber mucha gente que a aprendido a programar siguiendo el siguiente camino: copiar un manojo de HTML para crear una página web. Cambiar una o dos cosas. Aprender un poco mas de HTML y finalmente aprender PHP para poder generar páginas dinámicas.

P.S.: Acabo de leer este excelente artículo de Cory Doctorow sobre el iPad. Es relacionado con los temas que toca este post.

  • Share/Bookmark
 

twitter

Personas como Dave Winer creen que definitivamente hay algo en twitter que vale la pena pero que twitter, tal como lo conocemos, será reemplazado en el corto o mediano plazo por algo “parecido pero mejor”. Una de las razones por las que Winer considera que twitter no puede seguir siendo el sistema de “twitting” es su arquitectura centralizada (mas bien anti-web). Otras personas consideran que es demasiado limitado y que le faltan X, Y y Z funcionalidades.

Yo tengo la sospecha de que Twitter va a seguir siendo el sistema que es, con muy pocas variaciones, y que no será reemplazado por nada “mejor” durante un buen tiempo. Mi sentimiento es que twitter está en un punto perfecto de simplicidad, un punto tal que el usuario le perdonará inconcientemente cualquier limitación siempre y cuando siga siendo tan facil de usar.

Me ha gustado la manera como ha evolucionado twitter. Practicamente solo ha añadido al sistema conceptos que ya habian surgido de manera espontanea entre los usuarios, como la referencia a otro usuario (usando “@”) o el concepto de “retweet” (“RT”).

Otra cosa buena de twitter es que a pesar de ser centralizado, ha ofrecido interfaces de programación tremendamente sencillas para construir aplicaciones independientes sobre twitter, lo cual ha dado lugar a un gran ecosistema alrededor que va a hacer dificil de hacer migrar a otro sistema.

En fin, twitter es un ejemplo de como la simplicidad y las APIs abiertas pagan.

  • Share/Bookmark
 

Hace cerca de 15 años, en la Universidad de los Andes, la programación se enseñaba usando “C“, un lenguaje de programación muy popular desarrollado en los 70, en paralelo con el desarrollo del sistema operativo UNIX.  En los 90, lenguajes de programación como Java fueron reemplazando al lenguaje C tanto en la empresa como en las aulas. Hoy en día, según me dicen, la programación se enseña usando Java y los estudiantes simplemente no aprenden C.

Este cambio preocupa a ciertos de mis colegas quienes consideran que, aún si no se va a usar este lenguaje, un programador debería saber programar en C. Muchos de estos colegas se quejan de los programadores más jovenes acusandolos de “no saber que es un apuntador”, lo cual parece ser, por el tono de la queja, algo muy grave. Qué tan realmente es importante saber programar en C para un programador? Cual es el realmente el fondo del asunto.

Yo supongo que lo que deploran mis colegas es el hecho de que al no haber tenido contacto con un lenguaje con manejo explicito de la memoria, aritmetica de apuntadores, acceso directo a ciertas funciones del sistema, etc, los programadores de hoy en dia sean menos concientes de qué es lo que ocurre con los recursos de la maquina cuando un programa es ejecutado. El verdadero debate es entonces sobre que tanto necesita conocer un programador sobre la manera como sus programas actuaran en terminos de los mecanismos de base de un computador. Personalmente creo que es importante. Por esta misma razon, creo que es importante tener idea de como está implementado un compilador.

Por otra parte, recordemos a Edsger Dijkstra, quién dijo: “computer Science is no more about computers than astronomy is about telescopes”.

  • Share/Bookmark
 

Sobre la metida de pata de Buzz

Google metió la pata en su lanzamiento de Buzz (una especie de servicio de mensajeria estilo twitter): los contactos mas “cercanos” de un usuario quedaban visibles para todos justo después de activar la cuenta y hasta no cambiar las preferencias para evitarlo. Esta información hace parte de lo que mucha gente considera como información personal y es dificil entender como en Google pudieron decidir que era una buena idea exponerla de esa manera. Siendo malicioso uno podría pensar que es un cálculo acertado de la parte de Google, a la mayoría de la gente esto le parece un detalle sin importancia y en cambio la conveniencia de tener una “red social” estilo facebook/twitter armada sin ningún esfuerzo hace el servicio atractivo inmediatamente. Digo “siendo malicioso”, pero en realidad ese sería el juicio que todo el mundo haría de tratarse de Microsoft y no de Google. Desconfiemos.

  • Share/Bookmark
 

Dos herramientas recomendadas

Hay dos herramientas que uso desde un buen tiempo para organizar mis cosas. La primera es simplemente un wiki, usado como una libreta de notas. No deja de ser curioso escribir documentos de uso personal usando una herramienta concebida para escribir documentos abiertos de manera colaborativa. Funciona muy bien, es como usar una libreta de notas con la ventaja de poder re-escribir cualquier parte. El software que uso es dokuwiki.

La segunda herramienta es un programa para administrar listas de cosas por hacer (to-do lists). Inicialmente intenté usar un plugin para dokuwiki que sirve para editar to-do lists pero me parece que la interfaz de edicion de texto de un wiki no es optima para llevar to-do lists. Ahora estoy usando mytinytodo que siendo bastante minimalista es perfecto para mis necesidades.

  • Share/Bookmark