The past few months have been an ongoing adventure for me - an adventure in learning to manage the disorienting level of freedom I’ve had to face.

This might sound ridiculous - after all, many dream of having enough time for learning and growing. For focusing on whatever they want, not on what they are told to. Especially for programmers, it seems like a dream come true - a few months of working for the pure pleasure of it and contributing to open-source projects? Count me in!

It’s been great. I have never been this happy. To wake up every day and feel this is what I want to do, to think of code and in code with excitement. I sometimes still feel not good or smart or experienced enough, but I never feel it was the wrong choice.

Yes, and…

…and it’s very hard to stay on track. After all, programming is full of opportunities - every day there are new libraries, patches, languages and amazing projects created by someone on the Internet. It may seem that there is never enough time to learn and the endless possibilities can become suffocating. It’s extremely hard to stay creative when having total freedom.

Because of that I’ve had to learn more about myself and what rules and habits I need to set up for myself to keep growing.

Short-term satisfaction vs. long-term happiness

It’s always easy to do simple, well-defined tasks. But apart from the short-term satisfaction of ticking it off my to-do list or sharing my progress publicly, there is not much else to it.

In order to be happy I need to do hard things. Untangle ill-defined and fuzzy problems, navigate and unwrap spaghetti legacy code while implementing a new feature - that’s what keeps me going.

I still need to have some easy wins on my to-do list, but they can’t take it over. Working towards the long-term goal every day, regardless of my motivation level, should be prioritized.

Sources of inspiration

I get inspired all the time:

  • My inbox is full of newsletters and emails on programming, design, and MOOCs I’d like to take part in.

  • I answer many questions every day, ranging from workflow skills, through basic programming concepts and specific language issues, to intricate problems I’m sometimes not sure I even understand. This makes me constantly search for answers by using a lot of googling, skimming docs and StackOverflow, but also through asking the right questions.

  • Discussing any topic in the two realms I’m a user of can be a first step to an hours-long or even all-night journey into a world of new concepts.

  • Reviewing submissions and reading others’ code inspires my to constantly question my skills and look for answers - how did they do that? what’s the issue here? how do I even…?

  • Playing boardgames. The hardest time I’ve had recently with switching my creative mode off was after two hours of playing Dixit.

It’s wonderful to learn new things in a wide range of topics. Managing incoming inspirations and keeping myself from multitasking is a challenge. Which is evident even from the list of articles that inspired me to grow as a programmer in the past month.

Gathering scattered thoughts

I’ve tried many approaches for managing the influx of information and my creative output. At the moment I use a simple system:

  • Habitica for daily tasks and my to-do list.

  • OneTab to convert my tabs into a list.

  • A plethora of text files scattered around multiple folders to note incoming waves of ideas and save any emails or messages I particularly liked. They mainly consist of various lists.

Although I have been using GitHub and other tools when working with others, I haven’t found a better approach to managing my own workflow. I’ve tested many until I realized I’m spending more time on improving productivity than being productive.

How to grow

  • Set boundaries and a simple enough system that works for you.

    Have regular focused time and a dedicated space, even if that space is putting your laptop on your lap. Don’t lose your focus on distractions.

  • Work on your communication.

    Listen attentively and be fully in the moment whenever you decide to talk to someone. Try to understand other perspectives and think of them when communicating your ideas.

  • Get distracted in a controlled way.

    When it’s time to focus, try to eliminate distractions. If you can’t turn off notifications, allows yourself to quickly assess their importance. Take note of anything you want to investigate later.

  • Teach.

    You can rarely be sure you know something before you explain it to someone else. Teaching is an opportunity to learn.

  1. The term disorienting level of freedom is directly cited from Allison Kaptur’s talk on effective learning strategies for programmers. It’s a great talk to watch!

  2. Yes, and… is the most important rule of improvisational theatre. Should you ever get a chance to try improv, go for it! It was one of the best experiences during my batch at the Recurse Center.