close

Day 12: I know Kung Fu

I asked on Twitter about what I should write about in this year’s final article of 12 Devs of Xmas. One reply I had said: “What’s the one thing you wished all developers knew?”.

Despite the title of the post, it’s not Kung Fu.

I spent a while thinking about this idea of the one thing all developers should know. To be honest, I’m a little stumped. There’s so much in the world of development to “know” nowadays that it’s really hard to pick out any single thing.

However, thinking about it a bit more, I realised that what I was concentrating on were hard skills. Things like programming languages, code design patterns, or what the latest JavaScript framework is you should be using. Instead I want to focus on something slightly different, a soft skill that I think will actually help with all those hard skills instead. So to me, the one thing all developers should know, is how to learn.

Or more importantly, how to continue learning in an industry that never stops growing and adapting and evolving.

How to learn

Now, this isn’t the first article we’ve had this series of 12 Devs of Xmas about learning. Jo’s brilliant post Managing cognitive load for team learning is an in-depth look at how we can managing our learning within development teams in this fast-paced industry.

In this post though I want to explore how we learn more as individuals and how we can make the most of our time and experiences as software developers. Because unfortunately it’s not quite as easy as just plugging in to the Matrix and downloading a program that means you instantly how to use everything there is in Angular 2!

In terms of how we learn as individuals, we need to understand what helps us to learn and cultivate that environment as best we can. Learning takes commitment sure; but learning isn’t a chore we need to complete like mowing the lawn or doing the ironing. Once we’re out of standardised and boring formal education and into the world of work, we become responsible for our own learning. And in an industry that needs us to keep up with the “proliferation of platforms, languages, frameworks, patterns, and practices”, constant learning is almost a requirement of the job. Therefor learning needs to be easy to achieve, part of our working day, and if it extends into our free time, needs to engage us in a way that doesn’t feel like the time is wasted.

There are two things I think we need in order to make our learning successful, which comes down to: mindset and situation.

Mindset

When it comes to education there’s no better person talking on the subject than Sir Ken Robinson. In his 2010 TED talk Bring on the learning revolution! speaking of learning and education, Sir Ken says:

It’s about passion, and what excites our spirit and our energy. And if you’re doing the thing that you love to do, that you’re good at, time takes a different course entirely.

Think of all the times you’ve stayed up until the early hours of the morning coding something without realising that hours have passed and you should have gone to bed already.

Sir Ken calls it passion, whereas as I like to think of it as a deep interest in what I’m doing. However you prefer to call it, having a passion or an interest in something almost always leads to a different approach to learning. I’ve done it ever since I was in primary school. I remember one of my teachers wrote in a report that when I was interested in something I would do as much as possible to learn and understand more about it. Whereas if something didn’t interest me, I would do just the bare minimum to make it through to the next class.

When you’re interested in something, learning becomes easier because it’s something you want to do. In a post talking about a year with a junior developer at Clearleft Jeremy Keith says:

I’ve done my best to support, encourage, and teach Charlotte but none of that would matter if it weren’t for Charlotte’s spirit: she’s eager to learn, eager to improve, and crucially, eager to understand.

That eagerness to learn comes from interest and passion in a subject. It’s what helps separate a good developer from an average one in my opinion. When a developer is interested, she will first try to solve a problem herself before asking for help. Or she’ll figure out where the error’s occurring by delving more deeply into the issue, working out what each part of the code is doing instead of just Googling for the quick answer. It takes time of course, but that’s where the interest comes in and helps to keep you motivated and eventually it all becomes learned.

Being able to ensure you’re always working on something you’re interested in isn’t the easiest thing to do. We all have to pay the bills somehow and that won’t always mean doing the things we have passion for. While that may be ok for the short-term, working on uninteresting things for any long period of time will have a serious effect on our motivation to continue learning and doing that job. Which brings us neatly on to the subject of situation.

Situation

While we may need to have a good mindset in order to cultivate a better environment for learning, we also need to be in the right situation to maintain that mindset. As I mentioned, when you lose interest in what it is you’re doing it can severely effect your motivation towards that learning mindset. However, we seem to have already figured out a remedy to this problem. In his talk Stables and Volatiles, Michael Lopp states:

Right now I’m pretty sure that whether or not you know it, you’re three years away from your next [job].

That’s pretty staggering, 3 years, why is this the case? Lopp goes on to say:

I’ll tell you why. Well we get bored easily. We bore super easily.

We get bored, we lose that interest that is need to cultivate the right mindset to enable us to learn effectively. I know this because I’ve done exactly this on multiple occasions. I left my first job after 3 years because I was getting bored and frustrated at doing the same things. I then went to another company where I found I wasn’t interested in what I was doing after just a few months, so I left and found a job that was interesting to me.

What I mean to say is that we shouldn’t be scared of changing our situation in order to stay interested in what we do. It doesn’t have to be as drastic as changing jobs like Michael or I have experienced. But if your situation isn’t helping you to feel interested or motivated towards learning you should definitely do something about it.

Modifying your situation

Instead of the drastic, I want to look at some examples for changing your situation to help increase your opportunity for learning. Whether in your current team or outside of your job, there might be things you can do in order to give you back that passion in what you’re doing and help you to learn doing something different.

Code reviewing and pair programming

Jo covered these back in their post earlier in the series, covering the process of code reviewing and pair programming as methods to help reduce cognitive load and strengthen learning. In my experience introducing code reviews to a team have been valuable not only for developers to get a sense of validation on their work, but also in terms of being able to read code written by others. Code reviews shouldn’t only be there as a check to make sure code has been written to a good standard, but also as a learning tool allowing a group of developers to learn from each others experiences and methods.

Pair programming is a similar but more direct route of learning. In this case you can ask to pair with someone on a problem you’re trying to solve or on something they’re working on. Pairing can be valuable for both sides in that you’re able to either show the other developer something they might not have known or experienced before or you’re able to learn from something another developer might have better knowledge of.

Side projects

Moving now to outside of your day-job, side projects are another change in situation that you might find are able to help cultivate that ideal learning environment. Side projects I’ve taken on over the past year include working on a small project for a talk I did that included some ReactJS and working with ServiceWorker for the first time (be sure to check out Day 2 and Day 9 for more about those two).

Another way to decide on side-projects is to think about the things you’d like to learn more about and interesting things you’d like to build. Someone that has done exactly that is Una Kravets:

When working like this, side-projects can be something you find really interesting and can be designed in such a way that they match up with the things you want to learn in the near future too.

Teaching

This last idea might seem a bit strange but bear with me. To me, trying to teach someone else something, is almost certainly the best way you can attempt to learn something yourself. To paraphrase Douglas Adams in his novel Dirk Gently’s Holistic Detective Agency:

What I mean is that if you really want to understand something, the best way is to try and explain it to someone else. That forces you to sort it out in your mind. […] By the time you’ve sorted out a complicated idea into little steps that [someone else can understand], you’ve learned something about it yourself

Over the last couple of years I’ve taken to try teaching in a variety of forms in order to achieve some learning about the subject myself. In fact the talk I gave a few times at the end of last year that had elements of working with ServiceWorkers in it, was chosen entirely because I wanted to learn more about them and it was a great way to force me to do so.

Speaking at conferences and meetups is a great way of putting yourself in the situation of teaching others things you’ve experienced and can be a great way to get you to experience these things as well. You don’t even have to go as far as trying to speak at an event, you can always speak to your colleagues and ask to give an internal talk on something you find interesting. This is something I’ve done in my last couple of jobs and it’s been extremely beneficial both when I’ve been speaking or listening.

If you find speaking to your peers a bit daunting you could always try teaching the next generation of coders how to get into being a developer. I was partly involved in Code Club in the very early days, helping to create and test projects aimed at children learning to code for the first time. While you may think speaking in front of your peers is daunting, working with 9-11 year olds is just as bad if not worse. However, it was extremely rewarding to be able to see that I was helping them to learn how to code. And quite an experience learning how to break down concepts that I had began to consider second-nature in order to teach them to someone who had not yet experienced anything like it.

As a change of situation, putting yourself into the shoes of the teacher is going to be one of the toughest you will experience. I’ve been working with a junior developer in my current role and although it’s been a very rewarding experience teaching someone so new to the field, at times it can be tough as well. Going back to Jeremy’s post, he says:

I haven’t always been good at [teaching]. Sometimes, especially at the beginning, I’d lose patience. When that happened, I’d basically be an asshole. Then I’d realise I was being an asshole, apologise, and try not to do it again. Over time, I think I got better. I hope that those bursts of assholery are gone for good.

I’ve definitely experienced this over the time of teaching as well, and I’m relieved to hear someone else admit to feeling similarly. Again it’s something to be learned through the continual process of doing so, but I think the benefits to you and to the person you’re helping to learn will majorly outweigh the downsides.

Conclusion

As web developers, with the constant change in our industry, learning becomes a necessary part of our jobs. However with the right environment I think we can make that learning experience easier and actually a fun part of what we do. Ensuring we have a good environment for learning with the right mindset and situations to maintain that mindset will help our continued learning be easier and more effective.

To ensure this I looked at a few ways that we can adapt our situation. While moving job is an option, it’s probably not the first thing you want to try. Instead think about working with your colleagues and doing things like code reviews and peer programming. Or look outside your work at doing fun side projects, while making sure they align with things you can learn through them.

Lastly, why not consider doing some teaching of your own. Choose a topic you’re interested in and propose a talk, or write an article about it. It will force you to take a deeper look into the subject and learn as much as possible so you can be able to easily explain those concepts to your audience.

That’s it for another year of 12 Devs of Xmas, thank you for reading and if you do like the idea of doing some teaching, why not send us an article suggesting for the site next year!