Apprenticeship Patterns Parte 3/3

2015-09-16

Por último, los patrones contenidos en los capítulos 5 y 6 (Perpetual Learning y Construct Your Currículum):

EXPAND YOUR BANDWIDTH

“Aprender sobre lo que no conocemos es más importante que hacer cosas que ya conocemos cómo hacer” – Jim Highsmith. Como aprendices tenemos que ser capaces de absorber nuevos conocimientos con el objetivo de interiorizarlos para poder practicarlos. Hay varias formas de permanecer actualizado: unirse a comunidades e incluso ayudar a la organización, suscribirse a blogs, seguir a los mejores desarrolladores por twitter, participar en listas de correo…

Un aprendiz tiene que entrenar la habilidad de identificar cuándo debe expandir sus conocimientos y cuándo debe interiorizar lo aprendido. Habrá momentos en los que es mejor asentarse con las herramientas de las que dispones, aprender de ellas, dominarlas y centrarte en el proyecto actual.

PRACTICE, PRACTICE, PRACTICE

Una de las partes más importantes de nuestro aprendizaje es practicar todo lo que vamos aprendiendo. Practicar debemos hacerlo en un entorno seguro donde tengamos la seguridad de poder estamparnos y levantarnos. No sólo por el hecho de no romper lo que no debes sino también porque la mejor forma de aprender es cuando te caes y aprendes a levantarte. Podemos practicar haciendo katas, pet projects, koans… Además plantéate añadir dificultad a una kata cuando buscas un objetivo concreto. Con el tiempo tenemos que desarrollar la habilidad de saber elegir con qué ponernos cada día. También sería ideal que te apoyes en tus mentores en la elección de tus siguientes pasos y qué ejercicios resolver para agilizar tu aprendizaje.

BREAKABLE TOYS

Trabajar en proyectos propios que podamos romper sin ningún tipo de problemas ya que el objetivo principal de este proyecto no es otro que aprender. La ventaja de hacer proyectos en lugar de katas es que te harán enfrentarte a problemas del “mundo real”. Un solo proyecto contendrá muchas tareas de las cuáles podrás aprender. Por ejemplo: tendrás que tener una base de datos, una API Rest, una vista, desarrollar la lógica… Además también puedes plantearte practicar habilidades más concretas o tecnologías como: diseño, Outside-in TDD, DDD, JavaScript, MongoDB… Lo importante de este tipo de proyectos es que debe gustarte en lo que estés trabajando. Si te gusta el surf puedes buscar hacer una aplicación relacionada con el surf (Por ejemplo: una red social para puntuar las playas o algo así). Si no sabes muy bien por qué proyecto empezar siempre puedes hacer herramientas que luego aprovecharás como aprendiz como por ejemplo desarrollar tu propio blog.

USE THE SOURCE

Para mí este patrón fue uno de los más reveladores a nivel técnico ya que nunca lo había puesto en práctica. Básicamente está enfocado a que mejores tu habilidad de leer y entender código de otros. Gran parte de nuestro tiempo como desarrolladores lo vamos a invertir en leer código. Para entender cómo funciona una pieza de software, la mejor documentación que tendremos será el código ya que podemos estar 100% seguros de que nos expresa exactamente que hace. Además de mejorar en esta habilidad, leer código de otros nos permite aprender de otros programadores. No solo nos permite aprender de su forma de programar sino también de las decisiones que toma o de la tecnología que usa.

Podemos practicar esto uniéndonos a un proyecto Open Source e intentar entenderlo. Podemos intentar refactorizarlo y jugar con él para ser capaces de entender por qué se han tomado ciertas decisiones. Podría pasar que algún día te des cuenta que aparte de aprender del proyecto y sus desarrolladores también puedes aportar algo al proyecto.

REFLECT AS YOU WORK

Como desarrollador es fundamental que reflexionemos sobre cómo trabajamos. Auto evaluarse suele ser una tarea complicada y debemos ser honestos con nosotros mismos. En el libro se expone una práctica propuesta por Joe Walnes: Personal Practices Map. Esta práctica consiste en hacer un mapa de todas las prácticas que cada uno solemos utilizar. Después de haber dibujado es muy buen ejercicio debatir sobre todas las prácticas que hay escritas. Descubrir cómo hacen las cosas otros compañeros puede ser un gran punto de partida para reflexionar sobre cómo lo haces tú.

RECORD WHAT YOU LEARN

Guardar lo que aprendes en un blog, una wiki, una libreta… La principal ventaja de escribir lo que aprendes es que te ayuda a interiorizarlo mucho mejor. Cuando escribes lo que has aprendido el objetivo es no olvidarlo sino practicarlo hasta adoptarlo como práctica habitual teniendo la ventaja de tener un recordatorio que puedes consultar. Con el paso de los años quizás habrá cosas que no apliques tanto porque puedes haber cambiado de tecnología, trabajo o inquietudes. En cualquiera de los casos, cuando tengas que volver a consultar sobre lo que has aprendido previamente ¿Quién te lo va a explicar mejor que tú mismo?

En mi opinión, escribir también te ayuda a mejorar cómo te comunicas a nivel general. Otra ventaja es que el escribir te da confianza para poder hablar o incluso compartir con alguien lo que sabes.

SHARE WHAT YOU LEARN

Aquí se destaca la importancia de que compartas lo que aprendes con los demás. Formar parte de una comunidad que cree en la importancia de compartir conocimiento es un buen paso para empezar a compartir lo que sabes. En ocasiones sentirás que tú no tienes la experiencia suficiente para compartir algo, pero no debes preocuparte por eso. Muchas veces lo poco que tú sabes sobre algo puede servir de ayuda a muchos.

Compartir lo que aprendes también es una buena oportunidad para aprender. Principalmente por dos motivos. Por un lado, aprendes a comunicarte y a mejorar la forma en la que te expresas para llegar a los demás y hacerte entender. Esto es muy valioso en el desarrollo del Software. Por otro lado, puede pasar que compartas algo con alguien que sabe más que tú sobre el tema. Podrá darte feedback sobre lo aprendido e incluso darte consejos sobre cómo seguir.

CREATE FEEDBACK LOOPS

Es importante crear mecanismos con los cuáles darnos cuenta de nuestros fallos. Muy probablemente no somos conscientes de ellos y sin ser conscientes no podemos hacer nada para revertirlos. Debemos tener en cuenta que para que el feedback sea efectivo debemos recoger datos que nos permitan actuar de cierta manera para mejorar en algún aspecto. Este feedback tiene que estar directamente relacionado con nosotros y no con otros. Comunicarnos bien y ser capaces de escuchar aparte de asumir nuestros errores son habilidades que debemos entrenar para ser capaces de sacarle el máximo partido a los datos obtenidos.

LEARN HOW YOU FAIL

No solo tenemos que ser capaces de aprender a corregir fallos sino también a identificar digamos los “patrones” que nos llevan al fallo para evitarlos. Para esto es muy importante reflexionar sobre cómo hacemos las cosas y por qué fracasamos en algunas vías. Muchas veces será necesario reflexionar también sobre la forma que tenemos de pensar. Para ello podemos llevarnos a situaciones desconocidas que nos permitan analizar nuestros procedimientos de aprendizaje.

READING LIST

Planificar con una lista los libros que quieres leerte. Apóyate en mentores, Kindred Spirits y otros desarrolladores para descubrir más libros importantes para tu aprendizaje. Personalmente me gusta separar mi lista de libros de mi lista de artículos. El libro me aportó una idea muy buena que es la de publicar tu lista de lectura. Esto puede ayudar a otros desarrolladores con intereses similares a los tuyos. Otra ventaja de publicarla es que podrían leerla desarrolladores más experimentados que pueden recomendarte otros libros o incluso que priorices más unos u otros. Pero recuerda que son recomendaciones y eres tú quien conoce mejor tu situación, por lo tanto, eres tú quien debe valorar las recomendaciones y tomar decisiones sobre tu lista.

No tengas miedo de no llegar a un libro que está al final de tu lista, si está al final de la lista es por algo. Preocúpate de seguir leyendo los que consideras más prioritarios.

READ CONSTANTLY

Te impresionará la velocidad a la que aprendes y entiendes conceptos del desarrollo del Software leyendo todos los días. Si lees constantemente no tendrás que preocuparte por leer los libros más avanzados. Ya llegarán. No cometas el fallo de leer libros para los que aún no estás preparado. Si estás leyendo un libro que no te está gustando o no estás entendiendo no tengas miedo de dejarlo y continuar con otro. Leyendo constantemente te darás cuenta que habrán algunos que simplemente no te aportaban y otros para los que aún no estabas preparado.

STUDY THE CLASSICS

Hay libros que nunca caducan y los conceptos recogidos en él han permanecido hasta nuestros días. Estos libros contendrán conceptos que quizás no terminas de entender en tu trabajo y probablemente tus compañeros los han conseguido afianzar gracias a leerlos. Estos libros te enseñarán cosas que desconocías y te abrirán la mente. Después de leer estos libros cambias incluso tu forma de pensar ante determinados problemas. Recuerda que cuando lees este tipo de libros no debe darte la sensación de que está desactualizado constantemente.

DIG DEEPER

No te conformes con conocer las herramientas que usas solamente por encima para protegerte y hacer lo mínimo que se requiere que hagas. Conocer algo en profundidad nos evita problemas. Este es un patrón difícil de aplicar. Pero también debemos tener el coraje de dejar claro que es importante para el desarrollo del proyecto que conozcamos en profundidad las herramientas y prácticas utilizadas. En muchas ocasiones la documentación oficial es la única que nos dará el conocimiento que estamos buscando y además obtenemos la información de su origen. Lo cuál la hace mucho más fiable.

FAMILIAR TOOLS

Como desarrolladores tenemos también las herramientas en las que nos sentimos más cómodos y estas son esenciales. Si entramos en un proyecto donde todo lo que usamos es desconocido no podríamos ser capaces de estimar una tarea y, por tanto, el cliente no confiará en nosotros. No obstante, no debemos caer en el lado opuesto de la balanza de querer aplicar en todos lados sólo aquellas herramientas que nosotros conocemos. Habrá ocasiones en las que tendremos que sacrificar nuestra productividad pensando en el bien del equipo de desarrollo y el proyecto.

 

Primer post Apprenticeship Patterns

Segundo post Apprenticeship Patterns