Introduction : Play and learn as a software developer

RubberDuckI first got into programming as a high-school kid because playing around with computers, creating games and understanding how things worked was fun and exciting. Likewise, I choose to study computers and programming in university because it was fun: I couldn’t believe my luck that people were being paid to play with computers all day. Even then, when I had to choose electives, I would choose the ones that sounded the most interesting, instead of the easiest ones or the one with the best job perspectives. I don’t regret any of this, even if those choices were not always the most optimal ones, since school is a time for learning and experimentation.

Playing shouldn’t stop after school: it’s an essential part of being passionate about software and programming and enjoying your job. We keep learning new skills after work and have side projects as a hobby because we love the code and the technology and want to keep tinkering with it.

I’m a fan of planning what you wish to learn instead of just reacting to change and jumping all over every new thing popping up. On the other hand, if what you planned sounds boring and dry, you’re not going to last very long even if it’s the logical and wise thing to do. You need some motivation to sit down at the keyboard and learn: if your brain shuts down as soon as you sit to write a line of code, it’s useless since you’re going to give up sooner or later. If your career is where you want it to be, you shouldn’t hesitate to integrate a lot of to play and experimentation in your learning schedule.

In the next few weeks, I’m going to write about play in the context of improving your skills, and things you can do to make programming fun again:

Environments made for learning

Going through a complex setup just to compile and launch your first program using a new language is a pain, especially if you only want to play around with it. At this point, you only want to tinker with new ideas and have quick results. Fortunately, there are many environments that are especially designed for this, such as the Arduino and Raspberry PI. You can take advantage of those tools when you have the urge to play with something new without taking on a huge commitment.

Playful learning

Free-form experimentation with a new tool or framework is a great way to get familiar with it before going more in-depth. To be able to play while learning, you need to have a good understanding of the subject or pick something simple. It’s hard to improvise if you don’t know enough. You need to understand what’s going on before going off the beaten path. For example, I would be very bad at playing around with big data concepts and tools, but I can play with new patterns, ideas and web frameworks without knowing all the details since I’ve seen many of them and know what to expect.

Gamify your goals

Another element of play you can add to your projects is playing with your goals themselves. Just planning on doing something each day and making a game out of it is a good way to gamify your learning. If you add a mark on your calendar every day you completed a learning session, you’ll loathe breaking the chain after a while. This works best if you define a period during which you want to work: if you focus too much on the result instead of the process, you’ll get discouraged if you get into unexpected difficulties and can’t reach your goal.

Go out and play

If you’re working on programming and software skills during your spare time AND your working hours, you need to find another hobby. Switching to another mode of thinking from time to time will help you understand what you have learned better and come up with new ideas. Your brain works best when you’re not close to a given subject all the time: you need to give it some space to process what you learned. Those activities should be a complete change of pace from programming, like art (offline!), doing something manual or moving instead of sitting down. They don’t say that you get your best ideas from the shower for nothing: you’ll get your best insights when you’re deep into something else.

It’s important to keep the enthusiasm you had about programming when you started out if you want to keep growing and learning new things, and play is crucial to this. There are phases when the passion will fade and playing with new technology may just be the thing you need to rekindle that love and motivation. For me, this blog has been a great project to help me find my passion about programming and software all over again and speak with interesting people. So go out and play!

Master each skill before moving on to the next shiny thing

Technology moves so fast, it’s easy to build a never-ending list of skills you need to learn to stay up to date as a software developer. Besides, learning a new technology from scratch is fun and rewarding since you’ve not seen its flaws yet, and you get to add a new notch to your belt. But, if you want to keep growing as a software developer and take on more challenging projects, accumulating knowledge about new programming languages, frameworks and technologies should not be handled like a game of Pokemon. The point is not to catch them all, put them on your LinkedIn profile and stash them away, never touching them again.

Software is valuable if it solves a problem for its users, and this is not related with the number of hot technologies you can cram in. You may not know everything you need to complete a particular project, but if the skills you do have are strong and you understand what you need, you can learn what’s missing. A good software developer is a good learner, since there will always be unexpected challenges and you can’t be ready for everything.

But, how to do avoid the trap of just skimming and build solid skills? A very important thing is to focus on mastering the subject you’re learning before moving on to a new skill. I’m not talking about understanding everything there is to know about a specific technology or framework, which could take a lifetime. But rather, you must understand what you’re learning before moving on to the next step. It’s not useful to gather a collection of half-baked skills and badly understood technologies. You want to have strong skills that you’re confident in. The sum of your skills is like a garden: if you’re only letting your flowers grow half-way before yanking them out and trying to grow something else, you’re going to have a pretty boring garden.

This approach doesn’t mean you must go in-depth with all the technologies that you’re touching. From time to time, I’ll spend some time with a new technology to understand what it’s doing and how it can be used. For example, I recently picked up a Coursera course about Bootstrap (Front-End Web UI Frameworks and Tools) to understand for which kinds of projects a client-side framework would be useful. I’m not aiming to be an expert, but I understood the parts of the course I completed well. The knowledge I have is complete in itself, but my level is that of a beginner. I wouldn’t do the same thing with many other frameworks for the sake of it, unless I needed to choose one for a project right now, but I know I could pick up the skill as needed.

So, the next time you pick up a new technology, make sure you’ve understood what you’re doing well before moving on. It’ll take longer for sure than just copy-pasting code and trying it out, but the technologies and skills you do learn will be a lot more useful. Having trouble making the skill stick? Maybe you should try teaching it!

Embrace the power of teaching to learn better

You’re learning a new programming paradigm, trying to understand functional programming and JavaScript. It’s going well and you’re completing tutorials and courses with ease but something is missing. Somehow, you’re having trouble making things stick in your mind and really using your new knowledge.

The most powerful way to master a new skill completely is to teach it to others. It’s not a technique to be taken lightly and is not easy to master, but it’ll supercharge your learning in a powerful way and help you become an expert in your subject of choice. Unfortunately, teaching takes a lot of time. You can’t share every last bit you learn. Rather, you should use this technique for subjects that are important to you or that you need to work on.

When you’re doing something, it’s a lot easier to fudge the bits that you’re not sure about. Indeed, everything will probably work fine even if there are a few parts that you completed by trial and error. When you’re teaching, you can’t skip steps: everything must be clearly laid out for the person learning. The process of teaching will help you how to structure your thinking and see where are the gaps in your knowledge so you can fix them.

You don’t need to know a lot to teach: you only need to be a step ahead of your students. Also, your English doesn’t need to be perfect, even if it’s not your first language. You’ll get better as you go along, and if your writing is clear and structured, the knowledge you’re sharing will still be useful to someone else. I’ve been blogging for over two years and my English has greatly improved if I dare saying so, but there is still a lot I can do to improve.

If you’re ready to jump in and teach what you know, how can you do it? There are many ways to teach that will give you the full benefits of this technique:

  • You can write blog posts, guides, and tutorials.
  • You can share your knowledge one to one at work or on open source projects.
  • You can record podcasts, screencasts and short videos.
  • You can give talks at your local user groups and at conferences.

Interacting with people is what makes teaching great. When you’re teaching, your students won’t have the same background as you: their questions will help refine and stretch your understanding of the subject. Everybody has their own strengths and their own way of approaching a problem, and you’ll learn from them as well.

So, go out and find people with whom you can share knowledge, volunteer to mentor people and don’t hoard all you’ve learned. You own knowledge will grow in leaps and bounds, and sharing knowledge is a joy in itself.