Learning to learn
Shaping my learning into productive goals
The following is just my experience in learning new skills. It’s by no means a blueprint to follow or a exhaustive study into the psychology or learning, there are many better people who have actually researched that topic.
I’ve been a web developer for a while now. During that time I’ve seen the rise (and fall) of lots of different technologies, frameworks, and languages. Every couple months there often feels like theres a new language de jour that everyone is talking or writing about. The adoption rate swells: blogs, colleagues, recruiters and event clients start talking about it. This can make you can feel like you’re going to miss out, professionally, if you don’t rapidly get up to speed with something.
For years I struggled with this. I couldn’t understand how people picked things up so easily and quickly, whilst I struggled to find a way to make this stuff stick. My response was typically one of the following: avoid it, telling myself I’d get around to it, or more likely, blindly throw myself at some crude tutorial, get frustrated that I didn’t get it straight away and give up.
I realised that it was my approach to learning that needed to change. I needed to find a way that made things relatable to me in a productive way.
Learning can feel like a rabbit hole
The first thing I realised was that I was getting easily distracted by any additional concept that came along the way, assuming I need to master that at the same time, before I could carry on with my progress. This would inevitably lead to another concept or skill too. Eventually, I’d take on too much, get frustrated with the lack of progress and drop everything.
This needed to change if I were to make any progress. Instead of picking a language, progressing a bit and then discovering a side-skill, I decided to identify the blockers up front and lay them all out so I knew the scale of what was required. I also had to know just how significant these blockers were. For example, lets imagine I set myself the challenge of learning how to hit a golf ball, and someone tells me before I start that it’s a good idea to learn about which clubs to use and when. Whilst it’s helpful when I get on a course to know that, it doesn’t ultimate help me with perfecting a swing, which was I set out to do. In this scenario, I make a note that this is something that’s going to round out my knowledge, but doesn’t need tackling straight away and it certainly isn’t a blocker, I can come back to it another time.
In this scenario, a more realistic blocker might be buying a set of clubs (I’ve committed to this analogy, stick with me). I know now what I do need to know or do, and what I don’t really need to know or do before I even begin to practise. At this point, I still have planning to do, I need to set goals.
Stretch goals and simple goals
This biggest killer of my progress in learning was always getting frustrated with my lack of perceived achievement - I had high expectations and had set myself up to fail.
The key for me was in settings two very distinct type of goals: A stretch goal, e.g. the ultimate thing I want to do (Learn how to hit a golf ball), and a simple goal, or milestone e.g. something much more achievable in a shorter space of time that is a part of the process, but not the goal itself (Making contact with the ball, instead of swinging and missing, in my tenuous example).
By now, I’ve already worked out what my blockers are and have identified what the first thing I need to start with is. Before I begin I need to sit down and work out my goals. The stretch goal is simple, the milestones aren’t always easy primarily because I don’t know what I don’t know. When I’m new to something I try to only set one milestone goal. I start with what I do know about my topic, and what the most obvious question I want to answer is. For development, this has always been get a “Hello, world!” example up and running, so I start there — my milestone is “get a hello world program up and running”. Sure, it’s simplistic, but that’s the point, I know I can do that, I’ll make some progress and at the end of that process I might have more questions, a new milestone goal for later.
I use the S.M.A.R.T model of setting goals, which mnemonic acronym for: Specific, Measurable, Assignable, Realistic and Time bound. Put simply: Make sure the goal describes exactly what you intend to achieve (S), be able to quantify you achievement (M), who is doing is (A), make sure you’ve picked a task you can sensibly complete (R), and specify the time frame for your task (T). The “hello, world!” example write as a S.M.A.R.T goal would be:
“I am going to complete the ‘hello, world!’ demo of the ‘Learning Django’ tutorial, by the end of the day. I will be able to run the demo program.”
I’ve specified what I want to complete (S: the Django tutorial), how I can measure it (M: running the demo program), the assignee (A: It’s me, obviously), the reality (R: I’m only running the demo), and the time element (T: end of the day).
Working out how you learn
It took me a while to realise that in addition to setting goals, identifying blockers and being granular with my tasks, I hadn’t considered how I actually retain information. My attention span isn’t the longest, especially when I’m battling a tricky topic that’s making my head hurt. For me, just sitting down with a book, reading it and applying it wasn’t going to cut it, not if I wanted it to stick.
The author Max Brooks, describes this best when talking specifically about his dyslexia. Brooks relied on audio books to retain information, due to the problems he had with reading. Traditional methods led to low grades which his teachers put down to him not applying himself. With his mother help devised ways of working that played to his strengths and fostered his own learning style.
As touched on earlier, my own issue is an eagerness to make a lot of progress quickly and set high expectations. I can flick between learning resources quickly instead of completing one task at a time. With programming, I tend to skip ahead with learning material and try to build something right away, without always focusing on the foundations of the subject. To combat these issues, I incorporate the eagerness in to better goal setting — so that my expectations are more manageable. I also have discovered I respond better to more traditional, structured learning resources such as text books, better than I do blogs or tutorials. To ease my desire to just dive into code and get something built, I allow myself this time but in a structured way. I hold off, until I feel I am at a point where I can put some elements into practise and test the boundaries on my knowledge with no commitment on producing anything.
In his book ‘Outliers’, Malcom Gladwell references a study by Anders Ericsson that identified that 10,000+ hours of deliberate practise was the average amount of time spent before someone became an expert in a skill. In a 2016 interview with Freakonomics Radio, Ericsson discusses the importance of ‘Deliberate practise’. He sums it up nicely when he says:
Ericcson: “Deliberate practice relies on this fact that if you make errors, you’re going to find ways to eliminate those errors. So if you’re not actually stretching yourself outside of what you already can do, you’re probably not engaging in deliberate practice.”
This underlines the importance of setting realistic goals that guide us towards a stretch goal, a goal that pushes us to achieve those extra skills.
Keeping track of it all
My stretch goal started as “Be a better developer”. That’s vague and huge, but over time I worked to define what that meant. I looked at a mix of people I admired and worked out what skills they had that made them a well rounded developer. I added in the gaps in my own knowledge and from this build up a list of the skills I felt I needed.
Inevitably in doing this I found, smaller goals that supported this skills. I identified the blockers and prioritises the learning areas, one by one. I added all of this to a Google Spreadsheet and set columns for “Stretch goal”, “blocked by” (links to another task), “sample resources”, “status” (to do, in progress, done) and finally “confidence level” (as a percentage).
I’m currently working through this list, and every time I work on a new row in the spreadsheet I sit down and devise the immediate milestones and what ideal resources are out there to help me achieve the goal. It’s not perfect, and it’s time consuming. I freely admit that I’ve added a lot to the list which has made it pretty daunting, but it’s getting smaller as time goes by. Until I add more to it…