30 November 2007

On programming


Who doesn't talk to his colleagues about programming?.

Sometimes it's more interesting to talk about the human aspects of programming than about the technological issues that techies are talking about all the time (a thread here, an interface there, let's add some reflection...).

There are ideas that my most respectable colleagues agree on but that unfortunately seem to be forgotten (or unkown) by a vast number of people working in the field.

They can be summarized in the following sentences:

If you're a software engineer, your basic building material is human intellect and your primary tool is you.
A leader has the expertise of a competent programmer and recognizes that programming is only 15 percent communicating with the computer and 85 percent communicating with people.
Programming is communicating with another programmer first and communicating with the computer second.
Some creative programmers view the discipline of standards and conventions as stifling to their creativity. The opposite is true. [...]. Without standards and conventions on large projects, project completion itself is impossible. Creativity isn't even imaginable.
A programming masterpiece requires just as much discipline. If you don't try to analyze requirements and design before you begin coding, much of your learning about the project will occur during coding and the result of your labors will look more like a three-year-old's finger painting than a work of art.
By all means, get excited about programming. But excitement is no substitute for competency. Remember which is more important.

Opps... wait! I forgot to say something before you just discard this post: these sentences are not ours. They're Steve McConell's.

19 October 2007

Software Practices - Sandwich Design


Today, I was reading a colleague's blog. In his last post (in Spanish) he defends the programmer as a software professional and provides a great outlook of its generally misconceived role, duties and difficulties. That immediately reminded me about the opposite figure: the architecture astronaut as described in Joel Spolsky's article. At some companies both roles officially exist (software astronauts not being desing as such but in other pompus terms). Sometimes they even group them into separate buildings, Kilometers away from each other.

What does all this has to do with this post's title?. Well, I dare say that officially separating both roles warps each individual's mind towards two software design approaches. Top-down and bottom-up. Analysis and synthesis.

Astronauts deal with ideas, designs and hopes. They analyse a problem. They concieve a view of the solution and try to put it somewhere, somehow. Call it a UML diagram or whatever. They generally don't care too much about technological or programming issues, as every difficulty can be overcome, and think the hard work is done. Remember, top-down. Once decomposed it should be easy.

If you ever wrote a line of code in a medium-sized project —which you might not if you're in the Cosmo Team— and you're humble and honest —scarce virtues— you know that, at this point, the process just reverses and it's not easy at all.

Programmers need to deal with lines of code and machines. They are forced to syntethise, given their circumstances. They take some sort of specification, design —when lucky—, a technological environment in form of software and hardware and need to combine all this to produce something that works —or, at least, appears to—. In some way, it's pure bottom-up. The programmer's materials for the building process are existing technologies, libraries, language primitives, etc. that must be mixed together "upwards" to match the design, functionality or specification. The same materials that might have been overlooked during the analytical process.

This is the main reason why, when left alone —probably by inertia—, most programmers take the bottom-up approach. The bad news is that they generally forget that the bottom-up approach is also a design approach that also involves an analytical process. But they generally rush to code. When the main program and some tricky parts are outlined the hard work is done. Remember, bottom-up. Design will magically arise and every piece will fit. Once a few things are outlined or coded it should be easy.

Same dog, different collar?. Sure. Now a different set of problems arises: forgotten functionalities, huge refactoring efforts, this-is-not-what-I-expected user dissatisfaction, etc. but that's another story.

So, why don't we take the best of both worlds and use 'Sandwich Design' practices?. Let's analyze the problem without overlooking or ignoring the building materials, skills or details. Let's take a wider point of view and try to provide a solution from both sides, from the top and from the bottom.

In the software development world you'll often see architecture astronauts proposing completely absurd, complex or already solved solutions. You'll often see programmers who excel at programming and know about tiny pieces of technology that could potentially solve complex problems but who don't care at all about what the general problem is.

I think that working from both ends, analysis and synthesis will converge more easily, also mitigating friction among teams and processes and providing a shorter schedule.

This is much easier to achieve in small or medium-sized companies that take a more integrated approach in Software Development. In fact, I believe the best ones really forget about prejudices and myths, roles and methodologies and, aware or not, are using Sandwich Design all the time.

03 August 2007

"Cosas", por Paul Graham


Tras muchos meses de parón propongo una nueva traducción. Como es habitual, casi siempre hay alguien que se adelanta y/o escribe las cosas mejor de lo que uno lo haría. En este caso se trata de Paul Graham hablando sobre la acumulación de "cosas".

El artículo original se titula "Stuff".

Tengo demasiadas cosas. Le ocurre a la mayoría de los americanos. De hecho, cuanto más pobre es la gente, más cosas parece que tiene. Poca gente es tan pobre como para no poder permitirse llenar su jardin de coches viejos.

Esto no siempre ha sido así. Las cosas solían ser escasas y valiosas. Todavía pueden encontrarse evidencias si se buscan. Por ejemplo, en mi casa de Cambridge, construida en 1876, las habitaciones no tienen armarios. En aquellos tiempos las cosas que tenía la gente cabían en una cajonera. Incluso hace sólo unas décadas, la gente tenía muchas menos cosas. Cuando veo fotos de los 70 me sorprendo de lo vacías que parecían estar las casas. Cuando era niño tenía lo que creía que era una flota enorme de coches de juguete, una cantidad ridícula comparada con la cantidad de juguetes que tienen mis sobrinos. Todos mis Matchboxes y Corgis (coches de juguete) juntos ocupaban un tercio de la superficie de mi cama. En la habitación de mis sobrinos la cama es el único lugar que queda libre.

Las cosas se han abaratado muchísimo pero nuestra actitud hacia ellas no ha cambiado. Sobrevaloramos las cosas.

Esto era un gran problema para mí cuando no tenía dinero. Me sentía pobre y las cosas parecían valiosas, así que las acumulaba casi instintivamente. Los amigos se dejaban algo cuando se trasladaban, veía cosas en buen estado abandonadas en la basura alguna noche, me encontraba con algo casi nuevo por una décima parte de su precio que alguien vendía en su garaje. Y, zas, más cosas.

En realidad estas cosas gratuitas o casi gratuitas no eran ninguna ganga porque valían menos de lo que costaban. La mayoría de las cosas que acumulé no valían nada porque no las necesitaba.

Lo que yo no entendía era que el valor de una nueva adquisición no era la diferencia entre su P.V.P. y lo que yo pagaba por ella. Era el valor que yo obtenía de ella. Las cosas son activos extremadamente ilíquidos. Si no se tiene un plan para vender esa cosa tan "valiosa" comprada tan barata, ¿qué es lo que la hace valiosa?. La única forma de obtener algún beneficio de ella es usándola. Y si no se le da un uso inmediato es probable que nunca se le dé.

Las empresas que venden cosas han invertido enormes sumas de dinero en hacernos pensar que las cosas todavía son valiosas. Pero sería más cercano a la verdad tratar las cosas como si no valieran nada.

De hecho, es peor todavía, porque una vez acumulada una determinada cantidad de cosas, las cosas empiezan a poseerle a uno, en vez de ser al revés. Conozco a una pareja que no pudo retirarse a su pueblo favorito porque no podían permitirse una casa lo suficientemente grande como para albergar todas sus cosas. La casa no es de ellos, es de sus cosas.

Y, salvo que uno sea extremadamente organizado, una casa llena de cosas puede resultar muy deprimente. Una habitación desordenada y revuelta mina el espíritu. Una razón, obviamente, es que hay menos sitio para la gente en una habitación llena de cosas. Pero hay más. Creo que los humanos examinamos constantemente nuestro entorno para construirnos un modelo mental de lo que nos rodea. Cuanto más difícil de analizar es la escena, menos energía queda para los pensamientos conscientes. Una habitación revuelta es literalmente agotadora.

(Esto puede explicar por qué el desorden no parece molestar tanto a los niños como molesta a los adultos. Los niños son menos perceptivos. Construyen un modelo menos elaborado de su entorno y esto consume menos energía.)

La primera vez que me di cuenta de la carencia de valor de las cosas fue cuando viví un año en Italia. Lo único que me llevé fue una gran mochila llena de cosas. El resto de mis cosas las dejé en el ático de mi casera en Estados Unidos. Y, ¿sabes qué?. Sólo eché de menos los libros. A final de año ni era capaz de recordar qué más tenía almacenado en el ático.

Y cuando volví sólo me deshice de una caja de cosas. ¿Tirar un teléfono de disco?. Puede que algún día lo necesite.

Lo realmente triste de todo esto no es que acumulara toda estas cosas inútiles, sino que generalmente me gastaba dinero que necesitaba desesperadamente en cosas que no necesitaba.

¿Por qué lo hacía?. Porque la gente que se dedica a vender cosas es realmente buena en su trabajo. Un joven de 25 años no es rival para empresas que han invertido años investigando cómo hacer que te gastes dinero comprando cosas. Hacen de la experiencia de comprar cosas algo tan agradable que "comprar" se ha convertido en una actividad de ocio.

¿Cómo protegerse de estas personas?. No puede ser fácil. Soy una persona bastante escéptica y aun así sus trucos han funcionado conmigo hasta bien entrado en la treintena. Pero algo que puede funcionar es preguntarse, antes de comprar algo, "¿esto va a hacer que mi vida sea notablemente mejor?".

Una amiga mía se curó de su hábito de comprar ropa preguntándose a sí misma antes de comprarse algo "¿voy a ponerme siempre esto?". Si no era capaz de convencerse a sí misma de que lo que estaba pensando comprar era una de esas cosas que siempre se pone, no lo compraría. Creo que esto funciona para cualquier tipo de compra. Antes de comprar algo, pregúntate: ¿voy a utilizar esto constantemente? ¿o simplemente es algo bonito? o, todavía peor, ¿es simplemente una ganga?.

Las peores cosas a este respecto son las cosas que no se usan mucho porque son demasiado buenas. Nada posee más a uno que las cosas frágiles. Por ejemplo, la "porcelana" que tantas familias tienen y cuya cualidad que la define no es que sea divertida de utilizar, sino que uno tiene que ser especialmente cuidadoso para no romperla.

Otra forma de resistirse a comprar cosas es pensar en el coste total de poseerlas. El precio de compra es sólo el principio. Hay que pensar en esa cosa durante años
quizá durante el resto de la vida. Todo lo que uno posee resta energía a un mismo. Algunas cosas proporcionan más de la que restan. Ésas son las cosas que merece la pena tener.

Yo ya he parado de acumular cosas. Excepto libros
—pero los libros son diferentes. Los libros se parecen más a un fluido que a objetos individuales. Tener varios miles de libros no es un inconveniente especialmente grande, mientras que si poseyeras miles de cosas aleatorias serías famoso en tu vecindario. Salvo libros, ahora intento evitar activamente las cosas. Si alguna vez quiero gastar dinero en darme algún capricho, lo emplearé en servicios y no en bienes.

No alego esto porque haya alcanzado algún tipo de indiferencia tipo zen acerca de las cosas. Hablo de algo más mundano. Ha habido un cambio histórico y ahora soy consciente. Las cosas solían ser valiosas, pero ya no lo son.

Pasó lo mismo con la comida a mitad del siglo veinte en los paises industrializados. Conforme la comida se abarataba (o nos enriquecíamos; es indistinguible), comer demasiado comenzó a ser más peligroso que comer poco. Ahora hemos alcanzado ese mismo punto con las cosas. Para la mayoría de la gente las cosas han llegado a suponer una carga.

La buena noticia es que, si llevas una carga encima sin saberlo, tu vida puede ser mejor de lo que imaginas. Imagina que has estado andando
con pesas de dos kilos en los tobillos durante años y que te las quitas de repente.