Quantcast
Channel: Planeta Código
Viewing all articles
Browse latest Browse all 2699

Koalite: Sé consciente de lo que sabes (y de lo que no)

$
0
0

He dicho muchas veces que uno de los motivos por lo que escribo este blog es para aprender cosas nuevas. Me gusta aprender. Y me gusta enseñar. Por eso a veces, en un alarde autorreferente, me gusta aprender sobre aprender y, aunque no soy ningún experto en la materia (no soy un experto en casi nada), creo que en una profesión como la nuestra, donde la necesidad de aprender es constante, merece la pena pensar un poco sobre cómo aprendemos. Concretamente, en este post vamos a ver distintas fases por las que pasamos al aprender algo, lo que en ocasiones se denominan fases de la competencia.

Puede que sea éste un post raro para un blog sobre desarrollo, pero considerando lo importante que es el aprendizaje en esta profesión, podemos dedicarle un poco de tiempo. A fin de cuentas, le dedicamos mucho tiempo a escribir sobre herramientas para desarrollar software y, la capacidad de aprender, junto con la de resolver problemas, son seguramente las dos herramientas más importantes que tenemos, muy por encima de IDEs, editores o librerías.

Incompetencia inconsciente

Es la primera fase. No sabemos hacer algo, pero es que ni siquiera sabemos que es posible hacerlo. Por ejemplo, en esta fase se encontraría alguien que no sabe que existe la programación funcional: no sabe utilizarla y ni siquiera se lo plantea porque no la conoce.

Pero no hace falta irse a un caso tan extremo. ¿Habéis visto alguna vez una clase con métodos de 800 líneas, con nombres de variables poco descriptivos, fragmentos de código comentados porque ya no se usan y responsabilidades entrelazadas? Seguro que sí. Posiblemente sea otro caso de incompetencia inconsciente, en el que el desarrollador no sabe que hay formas mejores de estructurar y escribir el código, por lo que dentro de su marco de conocimiento, está haciendo lo correcto.

Desgraciadamente, me atrevería a decir, y ésta es una estimación sacada de la nada, que más el 75% del código que hay en producción ha sido escrito por alguien que se encuentra en esta fase de conocimiento.

Incompetencia consciente

Un paso natural. En algún momento, ya sea por curiosidad, por necesidad o por el sufrimiento que nos causa nuestra propia incompetencia, empezamos a ser conscientes de que hay cosas que no van todo lo bien que deberían. Que debe haber algo más. Y comienza nuestra búsqueda.

Nuestra clase con métodos de 800 líneas se había vuelto inmanejable y no podíamos ser los únicos con estos problemas. ¿Qué hacen los demás? Y ahí empiezas a investigar sobre clean code, patrones de diseño o principios SOLID, aunque todavía no sabes muy bien cómo aplicar eso a tu código.

Es un paso importante, porque es el primer paso hacia la mejora, pero también es un paso que nos puede producir cierta ansiedad. Ser consciente de la cantidad de cosas que no sabemos puede resultar abrumador. Es lo que algunos llaman developaralysis y hace que nos pongamos nerviosos en lugar de dedicar el tiempo necesario para aprender bien las cosas realmente importantes.

No siempre es necesario superar esta fase. Hay muchas ocasiones en las que nos basta saber que existe algo, tener unas ideas generales sobre lo que nos puede aportar, y dejarlo estar hasta que sea necesario. Un aprendizaje más Just In Time y menos especulativo. Por supuesto, no quiero decir que no merezca la pena aprender cosas “porque sí”, sino que no debemos agobiarnos intentando aprender los 8 frameworks de Javascript que han salido en las últimas 2 horas o los cambios del último SDK de Azure.

Competencia consciente

Por fin. Después de darnos cuenta de que necesitábamos aprender algo y dedicar tiempo a ello, ya somos competentes y nuestra situación mejora. Lo malo de esta fase es que aplicar los conocimientos adquiridos requiere un esfuerzo consciente por nuestra parte, y eso hace que resulte más tedioso y cansado.

Ya no diseñamos clases con métodos de 800 líneas. Nos ha costado, pero ahora somos capaces de pensar detenidamente en las responsabilidades de cada método y, con paciencia, acabamos generando diseños con los que resulta más cómodo trabajar.

Tenemos que estar constantemente pendientes de no volver a caer en los métodos de 800 líneas, y a veces supone tanto esfuerzo separarlos en distintas clases, gestionar las dependencias entre ellos, o buscar nombres apropiados para las variables, que acabamos obteniendo el mismo resultado que en la primera fase, ya no por incompetencia, sino por dejadez o hastío.

Aun así, esta fase supone un avance importante porque por fin podemos aplicar mejoras, aunque nos cueste.

Normalmente habrá un montón de cosas que sepas en las que no hayas pasado de esta fase, sobre todo cosas que no utilizas a diario. Seguro que muchos sabéis usar expresiones regulares, pero en cuanto se complican un poco, tenéis que dedicar un rato a pensar sobre los grupos de reemplazo o el greedy matching, y eso hace que a veces acabéis por emplear soluciones menos eficientes (volviendo a la primera fase) sólo por no tener que pensar.

Competencia inconsciente

Es el nirvana. El maestro Jedi de los estados de consciencia. Es conseguir que te salgan las cosas sin pensar, tenerlas tan interiorizadas que te salgan automáticamente.

Puede parecer imposible, pero en realidad ya hay un montón de cosas que haces así. Andar, sin ir más lejos. No creo que seas muy consciente de los movimientos que haces para desplazarte de un sitio a otro, te sale natural. Lo mismo pasa con el lenguaje, o si quieres ejemplos menos básicos, con conducir. Cuando me estaba sacando el carnet de conducir me parecía muy complicado tener que estar pendiente de tantas cosas a la vez (la marcha, la velocidad, las señales, el tráfico, …), sin embargo, 20 años después, prestar atención a todo ello me resulta natural y no me supone ningún trabajo adicional.

Para dar el salto desde la fase anterior a ésta, el único camino que conozco es la práctica y la repetición. En serio. Me gustaría decirte que a base de leer libros sobre clean code vas a hacerte un experto en el tema, pero si no ejercitas lo que estás aprendido, ya sea con programas reales, con katas, con proyectos para jugar, o con lo que sea, como mucho conseguirás quedarte en la fase de competencia consciente (y eso siendo bastante optimista).

Como te puedes imaginar, llegar a esta fase requiere tiempo y esfuerzo. Mantenerse también, aunque hay ocasiones en que si llegas a interiorizar algo lo suficiente, luego es difícil olvidarlo, o al menos es fácil recuperar el nivel después de haber estado un tiempo sin practicarlo. Todos hemos oído la expresión montar en bici nunca se olvida.

Es imposible alcanzar un grado de competencia inconsciente en todas nuestras habilidades, por lo que es necesario seleccionar en cuales queremos invertir el tiempo necesario para lograrlo. Cuando son habilidades que utilizamos en nuestro día a día, llegar a un punto de competencia inconsciente es una evolución lógica, pero si son cosas más esporádicas, puede ser muy complicado.

Si realmente quieres llegar a este nivel con algo, mi consejo es que intentes involucrarlo en tus actividades cotidianas. Si, por ejemplo, has decidido hacerte un experto en vim o en shortcuts de Visual Studio, haz el esfuerzo consciente de usarlos siempre que puedas en lugar de recurrir a lo que fuese que hicieras antes. Es la mejor forma de ir interiorizando esa forma de trabajar y conseguir que te salga sóla.

Conclusiones

Conocer los distintos estados de consciencia y competencia nos puede ayudar a enfocar mejor la manera en que aprendemos y a ser conscientes, valga la redundancia, de nuestro nivel en una materia determinada.

Para mejorar en algo, el primer paso es ser consciente de los problemas que tenemos.

Por ello es importante estar siempre replanteándonos lo que sabemos y asumir que, tal vez, estemos en esa fase de incompetencia inconsciente y haya cosas que nos estamos perdiendo. A partir de ahí, paciencia y trabajo. A base de aprendizaje y práctica podrás mejorar hasta dominar esa materia, pero el camino es largo y hay que estar preparado para ello.

Tampoco debes obsesionarte con todo lo que no sabes. El mero hecho de ser consciente de que no sabes algo ya te coloca en una buena posición para aprenderlo.

No hay posts relacionados.


Viewing all articles
Browse latest Browse all 2699