Take a break, go out and play

There is so much to learn and so many cool things I can make as a software developer that I can stay on my computer all day without getting bored. It gets a bit hard to concentrate after a few hours, but nothing that a cup of coffee can’t fix. If I feel stir-crazy, I can always take my laptop to a coffee shop or meet other developers and talk about code. Sounds familiar?

You can learn a lot about programming this way, and this lifestyle brings back fond memories of cramming on exams and student projects at university, but you won’t be at your best if all you do is code. You need to put in the time to become a good programmer, but this is a phase in your life: if you let it take over, it will limit you in the long term. Software is a way to solve problems for people, but to do this you need to be able to relate to many different kinds of people. If you only speak with are thirtysomething programmers working at startups and your barista, you’ll have a limited scope of problems you can solve. You need to live it up a little and try other things.

Programming during all your waking hours is also hard on your brain and your overall health. To be at our best, we need to switch to various modes of thinking and give ourselves space to assimilate what we learn. If you stay too close to a given subject, you won’t give yourself the occasion to get your best ideas and you’ll waste your potential. It’s no accident that the shower is known as a place to get great ideas: it’s a moment to slow down, relax and process everything that went on earlier.

But what can you do if you’re getting too much of a good thing, and need more perspective in your life? You need to find a hobby that you can enjoy so you’ll disconnect completely from your computer and the Internet for a few hours. It needs to be something completely different that gets you moving and playing in a different way. You could for example create art, play music, take up a sport or cook your own food instead of calling for pizza. If you stick too close to what you’re already doing, you won’t see the same advantages: I like writing, but it doesn’t count since it’s still solving problems in front of a computer.

If you’re not sure where to start, you can get books or watch YouTube videos to explore new prospective hobbies, but the best solution is to take a course or join a club to meet real people. At first you won’t be at your best, but over time you’ll have another way to play and create in your life, one that doesn’t involve computers or electronics. You’ll be more productive when you go back to your computer, and have fresh ideas you can use to make your software better.

Go back to the introduction of this series : Play and learn as a software developer

Gamify your learning goals

Learning a new programming language or framework is hard work, even if you love doing it. You can’t get around this: to complete a course or a side project, you have to put your head down and do the work to reach the finish line. How do you motivate yourself when there are so many interesting skills and projects catching your attention?

The systems that keep you playing your favorite games again and again can be used to help you complete your goals. When you play World of Warcraft, everything is built to keep you gaming. There is always a quest to finish, a level to complete or a new weapon to try out. Even later, when you reach the end game, you can’t stop: your friends are counting on you to come and play. You always have the instant gratification of small wins and of seeing your character progressing.

You can create the same kind of system for your goals so you keep coming back until you finish them. You need to have short and well-defined objectives so you can see steady progress and be able to imagine yourself reaching the end, and a way to track this progress and see your growth.

Your objectives should be based on a process like coding or writing, and not on a specific result. It’s counter-intuitive not to focus on the goal itself, but you must be able to predict how long each learning session will take. If you fall behind because you’ve focused on a goal and don’t believe you can catch up, it’s likely that you’ll give up on your goal.

Once you have a clear objective, such as coding on a side project for X hours every night, you need to bring in the game aspect to complete the process. Here are some popular systems you can use to make a game out of your goals:

Don’t break the chain

This system is the most powerful one if you wish to build a habit of learning. You commit to working on something regularly, usually every day, and you put a mark on your calendar every time you complete your task. After a few weeks, the habit will kick in and breaking the chain will be painful to you. I followed a similar process for this blog: last summer, I committed to shipping a blog post once every week for the next year. It’s been over 6 months, and it would now take something catastrophic to break a streak that’s been going on for so long.

Create a chart

With this system, you’ll create a visual representation of your goal so you can see your progress instantly. Make a chart or a progress indicator that you can color and hang it in a visible place. You get the satisfaction of checking off items, like a todo list, and you’ll want to keep going once you have some momentum so you complete your chart. The chart on GitHub is a good example of this: it’s an instant snapshot of how active you are, pushing you to commit more.

Here is a great example of such a chart that was used to complete a different kind of goal (eliminating debt), with pretty swirls and colors: http://mapyourprogress.com/blog/how-i-paid-off-more-than-26000-in-debt-by-coloring-this-in/

Friendly competition

If you can get your friends to work on a project with you, the pressure of your friends counting on you and comparing your progress can motivate you to reach your goal faster. You won’t want to fall behind and make everybody late. If you can’t find a project everybody agrees to, you can at least agree to track your progress on your respective projects together and motivate each other.

You can also sign up for Habitica, which rewards your good habits with RPG-like progress and allows you to work on goals in a group setting. It works for some people, but I must admit I was pretty bad at this: if you wish to kill monsters and complete quests, you must enter your progress on the same day it happens or it will harm you. Ironically, that’s a habit I was not able to build even if the task itself was completed.

Go back to the introduction of this series : Play and learn as a software developer

Playful learning: play while programming

The easiest way to get started learning a new framework or language is to go through a course or a tutorial explaining it. Someone has broken down the subject into its most important parts, and you just need to complete the exercises and do the reading or watch the videos. This method of learning is essential when you know nothing about a subject, but it’s usually dry and boring, and doesn’t leave much space to experimentation.

Learning only from a book or course is also an incomplete way to learn a skill. If you want to create a complex piece of software later on, there are many things you need to figure out on your own. You won’t find the perfect tutorial for every use case: even if you did, the result would be a copy-pasted mess that’s hard to maintain.

The solution is to learn more playfully and not being afraid to break things. Once you’re more at ease, you need to set aside some time to explore what are the possibilities and how you can use it for your projects. When you try out things for yourself in a low-pressure environment, you can see which ideas are worth pursuing and learn about parts of the framework you wouldn’t have discovered otherwise.

There are a few strategies to do this: you can do a small but self-contained project purely for the fun of it, or prototype parts of a larger project that you know are trickier. If you try to jump in a large project right away and just get going without giving yourself time for play, chances are that you’re going to introduce patterns and practices that will stick around in the long term, even if they are a bad choice. Once a project has momentum, it’s hard to turn around even if you find better solutions.

Being able to explore this way won’t come to you instantly. To be able to do something interesting, you have to build a basic understanding of the skill involved. When you play and explore, you combine your existing knowledge and experience with the new tool you wish to learn: you can’t do this if you don’t have any prior knowledge of the subject. Being playful also means being in the flow, which is hard if you stay stuck on every little thing.

To use an analogy with art, I wouldn’t be able to play with painting since I don’t have any experience painting and know very few techniques I could use to create an original painting. I would need to know more about the basis techniques and copy good painters for a while before being able to go on my own. On the other hand, an artist familiar with drawing would be able to pick it up a lot quicker and start experimenting.

The same applies to programming. If you wish to be a better web developer and want to play with new patterns, tools and frameworks, you need to be familiar with how the web works and which patterns are commonly used to build applications. Once you have this experience, you’ll be able to pick up many subjects with only a short introduction and just play. You’ll have seen many similar things before and will have a basic mental model of how things work. Even if your first impression turns out to be wrong, you won’t be completely in the dark and you’ll understand how to debug something that doesn’t work as planned.

The phase when you need to understand a skill before being able to play with it may be boring, but if you stick with it and master it properly, you’ll reach the point where the real experimentation and innovation start.

Go back to the introduction of this series : Play and learn as a software developer