Last weekend I was lucky enough to attend Socrates UK 2015, an annual international software craftsmanship gathering set in the scenic surroundings of Farnham, Oxfordshire. If you have not done so, I definitely recommend checkout out this conference, either in England or the other Socrates events taking place across Europe (Germany, Belgium, France ...).
At the time of writing this post I am a software apprentice at Codurance. My 'things to learn' list grows every day. Java fundamentals, SOLID principles, TDD practices, oh wait … some of the new developers on the project are now using Scala... I want to at least be able to understand their code. Terraform has been coming up in a number of discussions... I want to get my head around that. You get the idea right?
Given the volume of learning required, and having limited time available to do it, I was really grateful to Matieu Adsuara from 8th Light, who lead an awesome workshop on Extreme Learning at the Socrates UK event this year.
If you want to get more bang for your buck when you study, then have a shot at this. The method outlined below is adapted from the workshop along with my own additions.
Adopting the user story pattern will help you here. For example:
As a [Student? Experienced developer? Scrum Master?]
I want to [Learn Scala? Learn the Adapter Pattern?]
So that I can [Define your outcome here]
Defining a learning outcome ties all your hard work to something tangible. You can look back at the end of the process and decide whether the outcome was achieved or not and why. There is a great quote from Lewis Carroll's Alice in Wonderland that sums this up nicely.
Cat: Where are you going?
Alice: Which way should I go?
Cat: That depends on where you are going.
Alice: I don’t know.
Cat: Then it doesn’t matter which way you go.
― Lewis Carroll, Alice in Wonderland
Give yourself 30 minutes to learn everything you can about the subject you have chosen. Bear in mind, attempting to learn a language in such a short space of time is perhaps asking a little too much. If your learning objective is substantial, break it down into smaller increments. Rather than learn a whole language in 30 minutes, instead narrow the scope of your learning objective. Perhaps get to grips with a particular library, API or even a few select methods.
How does time-boxing help? If you are time-poor, you are more likely to find 30 minute slots during your day (e.g. your lunch break, commute, before you go to work etc) to dedicate to study than say, an hour or more. Remember also, that the key to Extreme Learning is quality of learning, not quantity. 30 minutes of intense, uninterrupted high quality study is far better than 1 hour of unfocused, interrupted study (How many times do you catch yourself switching off and checking your emails?). That said, 30 minutes is not a long time. If you set a timer, the pressure of the ticking clock should help you perform that much better.
The time you spend learning needs to result in some sort of output. At the workshop, Mathieu had us present a lightning talk to the group. This is a great option in a work situation - perhaps you can do something with colleagues over a lunch break. If you are flying solo, then a worthy alternative is to create a blog based on your findings.
How does creating an output help? I can’t stress enough this aspect enough. Presenting a talk, a demo or writing a blog will allow you to verbalise your thought processes, help you retain information, and share your new-found knwoledge with other developers. The act of creating an output is advice regularly seen in a lot of self-help and technical books out there (e.g take a look at the The Lean Startup and the recommendation around creating a minimum viable product). The key is not to get too fixated on creating the perfect blog or presentation. Just get something out there, get feedback and improve as required.
If you develop a habit of learning in this way, you will find your abilities should improve over time.
Software is our passion.
We are software craftspeople. We build well-crafted software for our clients, we help developers to get better at their craft through training, coaching and mentoring, and we help companies get better at delivering software.