Archivo de Programación general

la ley de las 10.000 horas

Estoy leyendo el libro ‘Fueras de serie’ de Malcolm Gladwell y me está encantando. Si sus anteriores libros me gustaron este es realmente bueno, quizá el mejor de los tres. Yo siempre he pensado que existe gente con una capacidad innata para realizar alguna tarea, como por ejemplo la programación, y el libro me está haciendo replantearme esa idea. No voy a contar el argumento central del libro, porque creo que merece la pena leerlo, pero sí que voy a hablar sobre una de las teorías que plantea el libro: Para dominar una actividad con un nivel de maestría hace falta 10.000 horas de práctica en esa actividad.

Haciendo cuentas a groso modo, dedicando unas tres horas diarias a una actividad hacen falta 10 años para llegar a dominar una determinada actividad, tal como apunta Kirai en su post Aprender en 10 años. Volviendo la mirada hacia atrás, ese fue el tiempo que duró mi aprendizaje del entorno de programación con que están hechos los programas de alanit, es decir xHarbour y FivewinHarbour. En estos diez años he aprendido a hacer software de escritorio para Windows, y mis programas han evolucionado mucho. Primero quité los comboboxes, luego comencé a desarrollar mi  interfaz FSDI, hice mi guía de diseño de formularios, desarrollé Azeta y Findemes, y por último conseguí implementar un sistema de autocompletado de claves ajenas en los programas.

En esos diez años algunas veces sentía frustración ante ciertas personas. Siempre pensé que hay gente con unas aptitudes innatas para determinada actividad, como la programación. Ahora, leyendo el libro, estoy cambiando de opinión. Pienso que lo que realmente pasó es que todos esos programadores a los que yo admiraba habían completado sus 10.000 horas de aprendizaje mucho antes que yo. Esa era la diferencia real, no otra. Esto me hace afrontar de otra manera mi inminente aprendizaje de Java. De lo que se trata es de aprender rápido, dedicando mucho tiempo al estudio y llegar cuanto antes a completar las 10.000 horas de aprendizaje.

el rey ha muerto, ¡ viva el rey !

Por fin se ha resuelto uno de los temas que más de cabeza me han llevado en los últimos meses. En mi trabajo de día llevaba tiempo rondando la posibilidad de una restructuración del departamento donde trabajo, y por fin se ha producido. Esta restructuración supone entre otras cosas que el desarrollo se debe realizar en la medida de lo posible en el entorno corporativo, que está basado en Java con un framework propio. Así que toca aprender Java, y centrarse en todo lo referido a programación para entornos web.

Esto tiene una repercusión también en mi trabajo de noche. Mi intención es seguir manteniendo los programas de alanit, pero me atrae mucho la posibilidad de programar para Mac. Java es un buen lenguaje para programar en OS X, incluso hay look & feels de Java que simulan Aqua bajo Swing. Y muchas más cosas sorprendentes que iré contando por aquí poco a poco.

a vueltas con los libros de programación

El lanzamiento de StackOverflow, el nuevo proyecto conjunto entre los supergurús Joel Spolsky y Jeff Atwood ha recibido varios post de sus autores a modo de justificación. No cuentan exactamente en que va a consistir el sitio, pero si que es un sitio de preguntas y respuestas que va a estar relacionado con el aprendizaje de la programación. Según Spolsky los programadores hemos dejado de leer libros y el mercado de libros es muy pequeño comparado con el creciente número de programadores. Atwood da una vuelta de tuerca más, justificando ese bajo nivel de lectura en varios motivos como el bajo nivel de los libros que se editan actualmente, la inversa relación entre calidad y número de páginas, y el abuso de la formula aprende en 24 horas.Creo que problema no es tantp la mala calidad de los libros de programación, sino el tipo de libros que se editan. A groso modo ya hago la siguiente división entre libros relacionados con la programación:

  1. Libros específicos. Son los libros de lenguajes o de sistemas. Cuando los compras sabes que están destinados a quedar obsoletos en un cieto tiempo, pero los necesitas para el día a día o bien para aprender algo nuevo. La mayoría de libros que se publican pertenecen a esta categoría, y son los que se compran más habitualmente, pero también son los más facilmente reemplazables por tutoriales o por manuales descargados de internet. Los últimos libros que he comprado pertenecen a esta categoría, y son  Mac OS X Leopard y Beginning REALbasic aunque con este último se me ha ido la mano. En otro post contaré porqué.
  2. Libros de metodologías. Desde los clásicos de ingeniería de software a los de metodologías, UML o pruebas de software.
  3. Los libros de buenas prácticas. Aquí englobo desde los libros de diseño de interfaces, Peopleware, Pragmatic Programmer, No me hagas pensar y similares. Este grupo de libros es cuantitativamente mucho menor que los anteriores y se editan pocos libros de este tipo. Para mi la falta de este tipo de  lecturas es la gran carencia de la mayoría de los programadores.
  4. Libros de temas colaterales. Si quieres dedicarte a vender software debes aprender de cosas como economía, marketing e incluso sociología. Ultimamente se han puesto muy de moda libros de economía como Freakonomics o El economista camuflado. Precisamente estoy leyendo este último y el próximo que tengo ya comprado para leer es La economía Long Tail, que creo que es casi de lectura obligatoria para cualquiera que se dedique a vender algo en internet.

Yo no tengo nada claro cual es el problema con los libros de informática en Estados Unidos, pero si que hay cosas que me llaman la atención sobre el mercado de los libros de informática en España. Lo primero es que la mayoría de libros editados son del grupo 1 y 2 citados anteriormente. Apenas hay libros del grupo 3 editados en castellano, y si quieres leer alguno lo tienes que hacer inevitablemente en inglés, y esto es algo que no entiendo porque los libros de este grupo no tienen una caducidad tan acusada como los libros de lenguajes o metodologías. Los libros del grupo 4 sí se traducen en su mayoría, pero por editoriales que no editan libros de informática. Sobre las editoriales que editan libros de informática casi mejor ni hablar. No se quien elegirá los titulos a publicar pero desde luego a mi me parece alucinante la proliferación de títulos sobre Photoshop y otras herramientas de diseño gráfico. Se ve que se venden bien, porque todos los meses hay novedades sobre la versión 200X HIJK del programa de marras. Pero lo de traducir los libros de buenas prácticas ni se les pasa por la cabeza.Así que entre una cosa y otra no queda más narices que ir a morir a Amazon, donde por cierto en vez de ir a comprar libros a veces parece que vaya a pescar. Muchas veces puedes encontrar libros a menos de un tercio de su precio de tarifa, con lo que antes de comprar un libro siempre hago varias incursiones para ver su cotización. Ahora mismo mientras escribo esto he comprado un libro de 39,95$ por 11,95$, con lo que puesto en casa me cuesta al cambio menos de 16€. En España los precios de los libros son fijos, y no conozco ningún sitio donde hagan descuentos con lo que todavía te puedes encontrar libros de Windows98 a su precio original.

cleartype y fuentes para programar

Una de las cosas que me disgusta es ver un PC con Windows que tiene las fuentes borrosas. El motivo habitual es que se le ha cambiado la resolución de pantalla a mayor, porque con la resolución óptima las letras son muy pequeñas. Las letras en monitores LCD se ven en condiciones óptimas al máximo de resolución que admiten, y si les cambias la resolución a mayor entonces se ven borrosas. El motivo es que al cambiar la resolución a mayor el pixel no coincide con el tamaño de un punto de resolución y la tarjeta se las apaña a su manera para mostrar las letras de la pantalla con lo que aparecen los llamados dientes de sierra. La solución pasa por usar el sistema de anti-aliasing de Windows y poner fuentes grandes en el sistema. El anti-aliasing en Windows se ajusta mediante un powertoy llamado cleartype tuner. Con esto se consigue tener las letras más grandes y con una mejor calidad que cambiando la resolución de pantalla. En Genbeta explican como usar este powertoy.En el mundo Mac esto es mucho más fácil. Por defecto el efecto de anti-aliasing - que en algunos sitios se traduce por suavizado o alisado - de fuentes está activado, lo cual desde mi punto de vista es un acierto. En el mundo Windows el 80% de los usuarios ni saben lo que es el suavizado de fuentes, con lo que pierden la oportunidad de mejorar la visión de su sistema. Otra cosa que llama la atención es la diferente manera en que se aplica el suavizado de fuentes en Windows y Mac. Mi admirado Spolsky habló sobre ello y también se pueden encontrar otros post interesantes sobre el tema como este de CodingHorror.Para mi la personalización del entorno de trabajo es un tema capital, y como paso mucho tiempo con un editor el tema del tipo de letra es fundamental. No es sólo tener el anti-aliasing activado, sino usar una fuente que sea clara y que facilite la lectura del código. A raiz del post de CodingHorror sobre fuentes de letra para programar comencé a usar Consolas y para mi esta fuente es imbatible. La uso tanto en Windows como Mac y para mi es elegante, clara y bonita como ninguna otra fuente que haya usado antes para programar.

sobre comentarios y tipos de programadores

En variable not found han publicado un par de artículos muy interesantes sobre comentarios, titulados Problemas al comentar tu codigo fuente y 13 consejos para comentar tu código.En Coding Horror hay un artículo sobre programadores muy interesante titulado the two types of programmers del que se hacen eco en Picando Código y en La muchachada informática.

tips para ser mejor programador

Interesante serie de consejos para cualquiera de los que nos dedicamos a programar. Leyendo estas cosas aprendes como trabajan los demás y siempre sacas conclusiones válidas para tu propio trabajo. Siempre he pensado que programar no es unicamente dominar un lenguaje, sino que hay muchas cosas mas. Muchas veces no es mejor programador el que mejor domina un lenguaje, sino el que domina una serie de habilidades o destrezas en que el lenguaje de programación es importante, pero es igualmente importante la manera de hacer las cosas.

sobre objeto persistente

Uno de los blogs que leo habitualmente es Objeto Persistente, de mi amigo el troesma René Flores. René es uno de los grandes gurús de los lenguajes Xbase, colaborador habitual de los distintos foros de xharbour y de FivewinHarbour y Xailer. Tiene unos conocimientos enciclopédicos sobre Xbase desde los tiempos de Nantucket, que ya es decir, y sus contestaciones llegan casi al nivel de clase magistral sobre el tema. Tuve la suerte de conocerle personalmente en una reunión de Olivares2000 y es una personal que habla por los codos. Pero lo que me remató fue oirle la traducción simultanea al inglés que le hacía a Patrick Mast de las ponencias de la reunión.

Hay un par de post suyos recientes que me han llamado la atención. Uno es programar con Visual Basic es obsoleto donde le hace un repaso a las versiones de VB y expone que programando con Xbase y sus GUI tiene mejor tecnología que con VB. En el otro, divagaciones sobre el mundo linux da su visión acerca de linux, y expone el motivo por el que no hay aplicaciones empresariales para linux.

No es cuestión de ir punto por punto refutando lo que dice René, pero creo que se equivoca. No se si VB es obsoleto, pero si tengo claro que xHarbour no es un lenguaje innovador. La comunidad de desarrolladores de xHarbour, que es un lenguaje open source, ha hecho un trabajo impresionante en los ultimos años para modernizar el lenguaje, pero todavía le queda tela para ponerse al nivel de Java, Python o C# por poner ejemplos. xHarbour ha clonado los modelos de objetos de estos lenguajes, pero ni tenemos espacios de nombres, ni pruebas unitarias, ni patrones ni servicios web, ni otras características de los lenguajes modernos. Es cierto que tenemos GUI con IDE que si están a la altura de lo que hay por ahí, pero creo el mundo xbase ahora mismo copia de otros lenguajes, y no al revés.

Y sobre Linux… pues creo que hace falta ir cambiando el chip. Ahora mismo es Windows quien copia de otros entornos, y no al revés, lo que nos hace darnos una idea que quien va por delante de quien. Cuando dije que quería comprarme un iMac recuerdo que alguien me dijo si pensaba pasarme al otro lado. Ahora que estoy en los dos lados, me doy cuenta de que la luz está precisamente al otro lado, y que en Windows vemos las sombras de lo que hay en el lado de la luz. Recuerdo que fue precisamente René quien llevaba en su portatitl Windows un dock como el de OS X. Windows anda perdiendo terreno entre los desarrolladores, tal como publicaba hace poco InfoWorld. Casi todas las empresas que conozco que hacen desarrollo para la web usan Linux u OS X, y cada dia más gente se plantea dar el salto con los problemas que están teniendo con Vista. Mis CD de Ubuntu ya han pasado por varias manos y seguro que pasarán por mas.

no sólo de código vive el desarrollador

Tiene razón mi admirado Spolsky cuando dice que la escritura es un músculo, y que se atrofia si no lo usas habitualmente. Hay temporadas en que nunca encuentro el momento para postear, pero con la vuelta a la normalidad ( trabajo, colegio y demás ) me he propuesto postear al menos una vez a la semana. A ver si lo consigo.

La semana pasada compré el número 1 de la revista mscoder. El primero y el último. No se que futuro va a tener la revista, pero tengo claro que no me vuelvo a gastar 7,5 € - mil doscientas cincuenta de las antiguas pesetas - en una revista a la que no saco el provecho suficiente para lo que vale, y - sobre todo - cuyo contenido o artículos parecidos puedo encontrar facilmente en internet. Creo que vale la pena comprarse un buen libro al año - 6 * 7,5 € = 45 € - que la dichosa revistita, por mucho doble cd que traiga.

Hablando de libros, y aunque llegue tarde el comentario, me ha causado auténtica sorpresa ver la nomilación de La tierra es plana en los 2006 Jolt Awards. Es un libro que tenía en la lista de candidatos a comprar, pero esto me hace decidirme a comprarlo y de hecho ya lo tengo encargado en mi librería habitual.

Con esto de que ahora el termino de moda es developer, conviene tener clara la diferencia entre ser programador y ser desarrollador, y saber en que lado queremos estar. Para ser desarrollador hay que aumentar la culturilla y tener claro que no vivimos sólo de código.

hackers y pintores

hackear y pintar tienen mucho en común

las grandes compañías ganan al fracasar menos que las otras compañías grandes

una forma de escribir software genial es arrancar con tu propia iniciativa

el trabajo de día hace referencia al fenómeno presente cuando se tiene un trabajo que se hace por dinero y otro por amor

el software grandioso requiere una devoción fanática por la belleza

en la labor del hacker el trabajo viene en ciclos

parte de lo que debe hacer el software es explicarse a sí mismo

Paul Graham, Hackers & Painters - traducido aquí ;-)

xharbour and dotnet

La semana pasada participé en un debate en la lista de noticias de xharbour. El tema inicial era un anuncio sobre un lenguaje xbase para la plataforma .Net pero luego se volvió bastante interesante, y trata sobre el porqué de mi interés en mono.

Massimo Belgrano: Seem that vo is near to the dotnet version http://www.vulcandotnet.com/. Any plan for xharbour dotnet version also for commercial distribution?

Marek Paliwoda: It seems they have also a Linux version running under Mono … If that’s true it is very likely that Vo will become a “killer app” for all other xbase products :) .

I do not know about any attempts or plans to make xh for NET at this moment. I am affraid nobody is interested in such a version currently. Maybe something will change in a future …

Till that moment, all xbase developers interested in NET, can choose CuleNET or wait for an upcoming Vulcan.NET :) .

José Luis Sánchez: I apologize.

VO a ‘killer app’ ?

I think that VO was the app who killed the best programming language developed ever for personal computers. And we are lucky that [x]Harbour guy’s returned it to live.

Marek Paliwoda: Not VO - Vulcan.NET

> I think that VO was the app who killed the best programming language developed ever for personal computers.

Maybe - if you are talking about *old* VO. But it is an over-simplification IMO. Look at VO community - seems to be bigger than xh community. How can you explain this taking info account that “VO killed the best language” ?

> And we are lucky that [x]Harbour guy’s returned it to live.
Undoubtly.

However look around - how many *new* developers are deciding to enter the xbase world, either with xharbour or other Clipper like products ? My observations are - very, very few. xbase becames niche - smaler and smaler. And xh did not change much in this trend. Maybe Vulcan.NET or CuleNET (or xh.NET) will ?

Tim Stone: Perhaps … but .NET products are still struggling. I’ve been involved in testing several and performance is very slow. I know a lot of work is going into .NET development, but I’m not sure how many “end products” are being embraced at this time.

I can see it more for document sharing and processing, but true database work relies on fast performance.

Marek Paliwoda: You may or may not believe, but here almost *all* new products from firms I have contacts with, are NET based. I doubt elsewhere is differently.

> I can see it more for document sharing and processing, but true database work relies on fast performance.

This is a very personal point of view. Mine is that true database work depends on a good database engine and a very good database project. NET helps building modern and rich user interface. All the rest (well, almost all) is done on a backend (database engine).

Thanks for sharing your opinion.

José Luis Sánchez: I don’t know which community is bigger, but I’m sure that if CA didn’t buy Nantucket now we would have a big community.

I really think that .Net is comming a mature environment, and with mono you can do development for Windows and Linux. In fact, I’m beginning with .Net framework and my goal is develop with mono in Linux in a couple of years. But I will learn C# for this, once I decided to jump to mono I will play the game with their own cards.

Marek Paliwoda: I went this route years ago. It was an amazing journey and I never regreted. I had to learn *lots* of things about NET : CLR, ASP.NET, assemblies, code security etc. One of the things I’ve learned is that *it doesn’t really matter* what language you choose to write NET apps. Language in NET is mostly “a sugar”. That’s NET which gives you the power - not the language. You choose the language you preffer to utilise NET power. That’s why CuleNET and Vulcan.NET are important IMO. They open NET for us using our prefferd xbase syntax. While this does not guarantee that new programmers will choose xbase way to play with NET, it certainly opens new posibilites for those used to “old” Clipper, VO, Xbase++, etc. Xh gave us the hope for a very short amout of time unfortunately, due to amazingly quick technology progress.

The fact is that “old xbase world” is die-ing. And this process happens quicker and quicker. Will CuleNET and Vulcan.NET change this ? I don’t know … but I hope yes.

I wish I am wrong in my opinions.

Thanks for taking your time in this discussion.

José Luis Sánchez: I don’t think xbase world is die-ing. I develop shareware and for me xHB is the perfect lenguage, but I want to learn a new framework that give me new perspectives about my profession. I’ve decided learning mono but I will not leave xHB. I want to try for myself things like NAnt, NUnit that I can’t use with xHB.

Ron Pinkas: Can you please explain, what in your opinion is standing in the way of the xHarbour developers, prohibiting the support any new technologies?

IOW, what makes it so much easier, for the developers of any other development product, to support that “quick technology progress”, to the point that xHarbour will simply not able to compete, beyond a “very short amount of time”?

I for one, see xHarbour as an amazingly powerful, modern, open, development tool, which has a track record, showing how quickly it can embrace and support, new technologies, platforms, etc..

Marek Paliwoda: Complete lack of interes from those who would be able to keep xh “up to date” due to their enough knowledge and desire. Sorry Ron, xh is descendant of hb. Hb had around 30 developers (AFAIK), xh has around 50 developers. How many of them *really* develop xh ? How many of them can devote all their time for xh ? How many of them are familiar with
new technologies and with xh internals (I am talking about *deep* knowledge here) ?

Before you will try to answer, please consider the fact that lately you were looking for voluntiers to take care of orphan xh modules like regex, hashes, network funcs, etc … without success so far :( (hope this will change).

It seems to me those from other products had found talented individuals from which they created a development teams which work full time on their products. This is different than in xh.

Long ago I was conviced that OpenSource model of development is better than comercial. Now I think quite the oposite way. It is much easier for comercial companies to find talented individuals. This is a simple matter of economy :)
> I for one, see xHarbour as an amazingly powerful, modern, open, development tool, which has a track record, showing how quickly it can embrace and support, new technologies, platforms, etc..

Yeah … , like COM/OLE for example … This technology is more than 10 years old. I couldn’t call xh support for it even “basic” :) . No type information, no support (or wrong support) for some COM types (like SAFEARRAY’s), no support for parameters by ref, no support for events/callbacks, no activex support, no support for DCOM, etc.

Sure, You couldn’t write anything other than that. Besides everything, you sell xh :) .

Ron Pinkas: Marek,

People may be slow to take responsability, yet they are more than happy to contribute, as you well know. Additionaly, primary contributions seem to come from NEW Individuals, as they step forward to take advantage for new technologies that THEY NEED. This is how most great contributions arrived to xHarbour, and why we have some 50 developers.

Maybe you should ask yourself WHY is it, that I sell xHarbour, why are you here, and why are so many other tremendously creative developers [of
"main-stream" languages] here?

Marek: I mentioned about COM/OLE not because it’s something new (in fact I wrote it’s an old technology), but because having a working COM/OLE support would allow as at least using NET components thru NET/COM interoperability. Much like VFP and VO do. Sure it would be some kind of “hack” but better than nothing :) - I am not sure if you realise that having xh for NET will reguire to rewrite xh almost from *scratch* if you want to have pure NET solution … Taking into acount that even an old technology is not well supported in xh I think it’s quite resonable to assume that the new one will have similar problems. You may or may not agree with this. Please note I am not against xh - I am still going to play with it :) . But this does not mean I do not see xh problems (IMO),
and I am looking at other options also (CuleNET, Vulcan.NET).

El hilo completo se puede seguir en news://news.harbour.com