Log in Page Discussion History Go to the site toolbox

En busca de la excelencia en la programación

From BluWiki

http://programmingzen.com/2010/07/04/the-pursuit-of-excellence-in-programming/

La búsqueda de la excelencia en la programación

Como escribí una serie de reflexiones sobre la búsqueda de la excelencia en la programación debo iniciar mi ensayo pidiéndole que olvide que escribí aquellas palabras. Lo invito a evaluar las opiniones e ideas presentadas aquí sin ad hominem, sino en base a sus propios méritos. Puede ser fácil, de otro modo, desestimarlas erróneamente con la infame pregunta planteada por Steve Jobs a un blogger: "¿que has hecho que es tan grandioso?".

Quiero decir; hablo de la meta ambiciosa y noble de conseguir la excelencia en la programación aunque soy plenamente consciente de no haber alcanzado dicha excelencia. Por el momento no creo que pueda señalar algo que vaya a impresionar a Steve Jobs (o a observadores menos críticos). Soy solo un viajero en la ruta del aprendizaje, con deseo de compartir sus experiencias y planes.

Dos visiones de la inteligencia

Dominar una disciplina compleja implica mucho aprender durante varios años, o décadas. Maximizar la habilidad para aprender es, por lo tanto, una inversión que puede recompensar rápidamente.

El mayor impacto en mi habilidad para aprender fue causado por un cambio en mi manera de considerar la inteligencia. Hay, principalmente, dos formas de pensar en ella: considerarla como una habilidad intrínseca y estática o como una característica más dinámica y cultivable del ser humano.

Científicos congnitivistas y psicólogos determinaron concluyentemente que la gente que percibe la inteligencia como una característica dinámica se supera y logra más éxito que aquellos que la internalizan como una habilidad intrínseca estática.

Vale la pena mencionar que la inteligencia puede realmente ser desarrollada a través de su aplicación. Este es el modo de percibirla que es base del método de aprendizaje del estudiante.

Esta diferencia de percepción es, muchas veces, condicionada en la infancia temprana. Los niños que son alentados a trabajar duro para alcanzar resultados, y son felicitados en base a sus esfuerzos, tienden a desarrollar una percepción dinámica de inteligencia y resultan siendo personas que pueden trabajar. Otros niños están condicionados para pensar que lo están haciendo bien porque son "inteligentes" y que su inteligencia probablemente los conducirá al éxito por si sola.

La sociedad tiene fascinación por los genios y a los padres les gusta presumir que sus pequeños son varias desviaciones estándar mejores que la media, pero condicionar a los niños de esta manera tiene consecuencias peligrosas y contraproducentes.

Los niños que son etiquetados y alabados por sus “capacidades innatas”, sufrirán de un exceso de confianza que afectará su habilidad para desafiarse a si mismos a través de las profundidades de lo desconocido porque sentirán que podrían poner en peligro su estatus. ¿Que sucederá si fallan? Significaría, a sus ojos, que tal vez no son las personas inteligentes que suponían ser. Todos vimos a estos niños fallar para, rápidamente, inventar excusas como “Oh, no lo estaba intentando en realidad”.

Un padre que cultiva el interés de un niño por el trabajo duro probablemente aliente a su hijo con palabras como “Está bien. Sigue estudiando y definitivamente lo harás mejor la próxima vez”. Un padre proponiendo un modelo de inteligencia estática puede justificar las fallas de sus hijos en determinado tema concluyendo que “quizás X no es lo tuyo”.[1]

Al enfrentar una derrota el chico de la “inteligencia estática” puede derrumbarse bajo el peso de su propia falla, como si el fracaso fuese un reflejo de su valor intrínseco en lugar de un tropezón temporal y una oportunidad para mejorar. Un chico de “inteligencia dinámica” simplemente se esforzará más la próxima vez. Genios o no, la excelencia y maestría en cualquier área requiere un gran esfuerzo y muchos chicos “inteligentes” fallan cuando el listón se levanta lo suficiente como para que la “inteligencia” baste por si sola. Esto usualmente coincide con el ingreso a la universidad.

Estoy muy familiarizado con todo esto porque fui uno de esos chicos. Fui etiquetado por mis padres y maestros de ciencias como “genio”. Incluso los psicólogos de la escuela, quieres vinieron para ayudarme a reconocer las carreras a las que mejor me adaptaría, terminaron diciéndome que yo podía seguir casi cualquier carrera (en ese tiempo estaba interesado en física nuclear) y de acuerdo a sus (casi sin sentido) pruebas de coeficiente intelectual yo era clasificado como "genio".

Hay que tener en cuenta que el problema no fueron las etiquetas. La mayoría de los chicos inteligentes se darán cuenta de que son inteligentes por su cuenta con bastante rapidez. El problema real fue que no me enseñaron el valor del esfuerzo intelectual a largo plazo. El esfuerzo en si mismo era considerado un detrimento a mi estatus. Solo solo se esperaba que yo tuviera éxito sino que se esperaba que debida lograrlo sin esfuerzo (un ambición “utópica”).

Uno de los primeros ejemplos de esto es que puedo recordar cuando mi padre “me sorprendió estudiando” por unas horas el mismo libro antes de un examen en la escuela intermedia. El me dijo algo así como “¿Porque necesitas estudiar? Un genio como tu debería resolver el examen sin tener que estudiar”. Esto es absurdo, ahora lo sé, y probablemente es una de las cosas más tontas que mi padre —por lo demás bastante lucido— me dijo. Sin embargo una oración así puede tener un fuerte impacto en un joven.

Otro ejemplo tiene que ver con Latín. Mi profesora era lectora de manos y la clásica loca de los gatos; no le tuve respeto desde el comienzo. Por eso no presté atención en clases, además de no estudiar latín en casa, yo gesté mi propio fracaso. Cuando llegó la primera evaluación, obtuve una calificación ligeramente negativa. Mi menos que profesional profesora me dijo: “Oh, pensé que eras muy bueno pero supongo que no”. Después mi padre puso su parte diciendo algo así como: “Bueno, no te preocupes, supongo que los lenguajes no son tu fuerte”.

Boom. Esto me bastó para dejar de interesarme en Latín e ignorar completamente una materia en la que no era excelente. Nadie podría decirme “eres estúpido porque no entiendes Latín” si yo no lo intentaba en absoluto. Entonces fui el chico del secundario que hacía cálculos avanzados por si mismo por diversión, mientras mi clase se complicaba con Álgebra, pero que apestaba en Latín. En retrospectiva, los patrones de pensamiento requeridos para la excelencia en Latín no son muy diferentes de los requeridos para la excelencia en matemáticas o para dominar el inglés como segunda lengua. Sospecho que de haberme esforzado un poco podría haber sido muy bueno y podría haber disfrutado la materia.

A través de los años debí reajustar esta percepción completamente. Al caer de bruces más de una vez aprendí que la excelencia solo se puede lograr combinando talento y esfuerzo. La verdadera genialidad es ser capaces de dedicar cientas de horas de estudio y practica a lo que se está intentando aprender y entender.

[quote=Miguel Ángel]Si la gente supiera cuan duro he trabajado para lograr mi destreza, no la encontrarían tan maravillosa en absoluto[/quote]

Bajo esta nueva definición fui un completo idiota que debió aprender de cero como apreciar el valor del esfuerzo para afilar y desarrollar su "talento" (que no es más que una semilla).

Aprendiendo a aprender

Estando muy interesado en la programación, ciencias de la computación, matemáticas y la ciencias en general decidí, en algún momento, que debía cambiar enteramente mi actitud hacia el aprendizaje si me quería encumbrar en alguna de estas disciplinas. El esfuerzo era ahora más importante que la inteligencia por sí sola y solo debo sentirme satisfecho si hago un buen trabajo intentando algo realmente desafiante; esto no puede ser alcanzado con solo "talento".

[quote=Calogero C’ Anello de A Bronx Tale]Lo más triste en la vida es el talento desperdiciado, y las decisiones que tomas marcarán tu vida para siempre.[/quote]

En el proceso, comencé a internalizar algunos principios y me ocupé de problemas sobre el arte de aprender y el arte de la programación.

Una sensación horrible

Hay un sesgo cognitivo conocido como el efecto Dunning-Krugerz[2], en el cual las personas que no tienen experiencia o son menos competentes en una disciplina dada tienden a sobrestimar sus habilidades (se ven, en otras palabras, afectados por una superioridad ilusoria[3]).

La contracara es que cuanto más estudias más te das cuenta de lo poco que sabes y de cuanto más te falta aprender (un concepto propuesto por Sócrates en la época de la Antigua Grecia). Esto es a la vez un placer y un malestar. Hay una gran cantidad de satisfacción en descubrir cosas. Pero vivir en la duda y ser consiente de lo poco que se sabe es un efecto desagradable con el que todos los aprendientes tienen que vivir. La duda es el agua que es fundamental para el crecimiento de la flor de la curiosidad intelectual[4].

Mi enfoque en este caso es abrazar y dominar mi ignorancia y mis miedos. Siempre que hay un concepto del que me siento particularmente ignorante, o que ronda por sobre mi cabeza, trato de hacerle frente como si mi vida dependiera de ello. Hay un sinnúmero de cosas sobre las que aún soy ignorante pero este enfoque realmente me sirvió con el paso de los años.

Si estás intentando aprender toda una rama de las ciencias de la computación o de las matemáticas te tomará un largo tiempo; entonces debes comenzar primero con los pequeños "temores” que pueden ser dominados, al menos a un nivel introductorio, en una pequeña cantidad de tiempo. En lugar de pensar “Oh sí, realmente debería aprender Git” por meses, comienza a aprender. El conocimiento esencial para trabajar con Git o Hg no toma meses en aprender (asumiendo que necesitas de estas herramientas en particular).

Pero si estás aquí para el largo plazo entonces no tengas miedo en mejorar tu arte estudiando temas avanzados que requieren un mayor compromiso en términos de tiempo. No hay atajos reales, la maestría de un arte requerirá cientos de horas de estudio dedicado y práctica.

Teoría y práctica

Los maestros en cualquier disciplina intelectual tienden a tener un buen conocimiento de los aspectos prácticos y teóricos. La búsqueda de la excelencia en programación requiere el estudio de muchos libros agudos que ampliarán tu vista del campo y como resultado. necesariamente, mejorarán tu arte.

Mi primera regla: Trabajar solo con libros no es suficiente. La programación requiere escribir y leer código todos los días durante años. Por eso me niego a irme a dormir si no he leído y escrito algún código ese día (esto no incluye el código que escribo por trabajo, por supuesto). Hasta ahora esta regla ha tenido un impacto positivo en mi habilidad para codear.

[quote=Mozart]Es un error pensar que la practica de mi arte ha llegado sencillamente a mi. Le aseguro, querido amigo, nadie ha dado tanto cuidado al estudio de la composición como yo. Hay apenas un famoso maestro en música cuyos trabajos no he estudiado con frecuencia y diligencia.[/quote]

Amplitud vs. Profundidad

Mientras progresamos en nuestro viaje en la búsqueda de la excelencia en programación, una pregunta que se volverá molesta en la mente de las personas es si uno debe buscar la amplitud o la profundidad de los conocimientos. Hay un sinnúmero de lenguajes de programación, paradigmas, metodologías, tecnologías, etcétera.

Lo cierto es que si nos convertiremos en grandes maestros de la programación no podemos ignorar ninguno de ellos. En la práctica la profundidad tiene un impacto mucho más fuerte en el modo en que construir software. Es a través del entendimiento profundo que podemos ver el conjunto a través de las partes. Por eso hay valor en especializarse en solo algunos lenguajes y tecnologías y dominarlos realmente en profundidad.

Tener el trabajo hecho en el desarrollo de software requiere cierto pragmatismo y capacidad para aprovechar las herramientas a mano. No hay escape. La profundidad es necesaria, aunque no suficiente.

Encuentro que la web es particularmente buena al cubrir el aspecto de la amplitud de temas. Siempre hay nuevas e interesantes áreas que puedes aprender y con las que experimentar. No necesitas todo un libro de 600 páginas para hacerte de una idea de, o para comprender mejor, ciertas tecnologías que no son cruciales en tu área de especialización.

Aunque hay algunas pocas excepciones que podría mencionar, yo diría que uso internet como una ayuda para el crecimiento horizontal de mi conocimiento y los libros para el crecimiento vertical. Y, de nuevo, la profundidad está más determinada por la cantidad de tiempo, practica y esfuerzo invertidos que por el medio usado.

Donde encontrar el tiempo

Una de las objeciones que oigo a menudo, particularmente a la hora de leer libros, es “¡No tengo tiempo!”. En unos pocos casos extremos esto puede ser realmente cierto, pero creo que la mayoría de la gente subestima enormemente cuanto tiempo "desperdicia" en sus costumbres diarias (incluso solo navegando).

Los descansos son extremadamente importantes, no estoy abogando por un régimen de incesante estudio. simplemente sé cuan crucial es el ser constante. Es una maratón, no una carrera corta.

Mi segunda regla: Me niego a ir a dormir ni no he leído, al menos, un capitulo de un libro ese día. Muchas veces cojo el libro que estoy leyendo o con el que estoy trabajando y termino leyendo mucho más que solo un capitulo (esto realmente depende del libro, claro). Pero para mi la regla es clara, no me está permitido dormir hasta que un capitulo haya sido leído cada día.

Intenta este enfoque y verás que leer libros no toma mucho tiempo, simplemente haciéndolo puedes leer varios libros (incluyendo técnicos) cada mes.

[quote=Aristóteles]Somos lo que repetidamente hacemos. Excelencia, entonces, no es un acto sino un hábito.[/quote]

Para ciertos libros es conveniente tener una copia en PDF en tu ordenador, así podrás saltar del libro a tu editor/consola ida y vuelta. Sin embargo, generalmente hablando, el ordenador tiende a ser un poco más distrayente y pensamientos como “chequearé mi mail rápidamente” pueden, con suma facilidad, conducir a horas gastadas haciendo otras cosas.

Por esta razón prefiero leer desde un libro de papel, lo que es también más cómodo para mis ojos en las lecturas largas después de un día frente al monitor. Incluso si estoy usando el ordenador al mismo tiempo para probar código, la presencia física del libro cerca de mi portátil es suficiente para recordarme que no debo distraerme con internet. Para mí, la profundidad y el enfoque requerido por los libros es también un antídoto para el re-cableado que la red tiende a hacer en nuestro cerebro[5].

A propósito, hace pocos días Amazon anunció el nuevo Kindle DX de grafito de color[6]. Creo que puedo hacer un desembolso y tenerlo para mi próximo 30 cumpleaños. La adquisición de numerosos libros de papel es caro, y dado el precio de los libros Kindle este movimiento terminaría por ser más barato a largo plazo. La gran pantalla e-ink se ve similar a un libro de papel y el dispositivo no es tan distrayente como un iPad (un Kindle es para leer, y eso es todo). Además, es más ligero que la mayoría de libros técnicos y seguramente ocupa menos espacio en casa.

Logrando el enfoque

Con tantas cosas que pasan en el mundo de la programación las distracciones llegan fácilmente. Mi método es enfocarme solo en la macro-tarea dada. Si estoy intentando aprender sobre procesos de calculo, por ejemplo, entonces durante los siguientes meses mi "tiempo de aprendizaje" estará principalmente destinado a ese tema, como si el resto del ecosistema de la programación se detuviera en el tiempo.

Luego está el enfocarse en un nivel de micro-tarea. Aprender sobre determinado tema siempre puede dividirse en una larga serie de pequeños pasos. Cuando me enfoco en uno de esos pequeños pasos todo lo demás deja de existir (o al menos en la teoría).

Un truco que uso para lograr el enfoque solemne en micro-tareas, leer código, escribir código o leer libros técnicos, es el uso de la Técnica Pomodoro[7]. En síntesis, uso software de cronometro[8] que me alerta cuando 25 minutos (un pomodoro) han pasado, y me da cinco minutos de descanso por cada pomodoro. Cada 4 pomodoros puedo tomarme un descanso más largo.

Cuando comencé a usar esta técnica pensaba que era sobretodo un truco y me costaba mucho tomar descansos. Solo quería seguir adelante y el “horario” me parecía tonto. Sin embargo, debo admitir que con él se logra un elegante balance entre el deseo de enfocarse durante periodos extensos de tiempo y la importancia de tomar mini-recreos regularmente.

Este método se convirtió en rutina para mi mente por lo que, aunque solo sea un truco, es una buena manera para mantenerme enfocado y “en la zona”.

En busca de la sprezzatura

La búsqueda de la excelencia requiere un gran manejo de uno mismo y una fundamental insatisfacción con ser solo bueno en una disciplina determinada. Creo que esto es verdad independientemente de la profesión que se tenga.

Mientras progreso en mi viaje voy descubriendo como la clave es hacer de la búsqueda de la excelencia un habito. Esto va contra mi naturaleza de ser un velocista intelectual, pero estoy aquí para el largo plazo y realmente estoy aprendiendo a disfrutar de la maratón como un proceso.

Mi meta a largo plazo es programar con sprezzatura[9], cuando el proceso está tan internalizado y es tan parte de mi subconsciente que parece casi sin esfuerzo (como si el acto de programar estuviera en la memoria muscular). Será un suceso sobre la noche, tras quince años de preparación.

Independientemente del nivel de mejoría alcanzado siempre tendremos el placer, privilegio y necesidad de continuar aprendiendo para el mejoramiento de nosotros mismos y de nuestro arte. Cuando no hay destino el viaje es lo que realmente importa.

[quote=Miguel Ángel]Ancora imparo. (sigo aprendiendo)[/quote]

Notas

[1] Estos conceptos son explicados, aunque en forma mucho más elocuente, en los primeros capítulos del excelente libro [El arte de aprender|http://www.puntaweb.com/cgi-bin/libros/consultar_libro_div.pl?cod=1277] de Josh Waitzkin.

[2] [El efecto Dunning-Kruger|http://es.wikipedia.org/wiki/Efecto_Dunning-Kruger] en Wikipedia.

[3] [Superioridad ilusoria|http://en.wikipedia.org/wiki/Illusory_superiority] en Wikipedia en inglés.

[4] Por más sobre la importancia de la duda en la ciencia, echa un vistazo al bello epilogo en [¿Que te importa lo que piensan los demás?|http://www.libros.universia.es/libro-%C2%BFQUE-TE-IMPORTA-LO-QUE-PIENSEN-LOS-DEMAS?-FEYNMAN-Richard-P/9788420696034/62654] por Richard P. Feynman.

[5] Por más sobre este fenómeno lee [Los superficiales: lo que Internet le está haciendo a nuestro cerebro|http://desequilibros.blogspot.com/2010/06/lo-que-internet-le-esta-haciendo.html] por Nicholas Carr.

[6] El nuevo [Kindle DX|http://programmingzen.com/recommends/?B002GYWHSQ] en Amazon.

[7] [La técnica Pomodoro|http://www.pomodorotechnique.com/].

[8] [Pomodoro para Mac OS X|http://www.apple.com/downloads/macosx/development_tools/pomodoro.html].

[9] [Sprezzatura|http://es.wikipedia.org/wiki/Sprezzatura] en Wikipedia.

Site Toolbox:

Personal tools
GNU Free Documentation License 1.2
This page was last modified on 14 July 2010, at 15:50.
Disclaimers - About BluWiki