I've finally done it! Achievement unlocked. Roll up curtains and play funfares. Today is exactly 366 days since I'd made my first commit to GitHub, marking the beggining of A Year of Commitment.
Moving Forward, One Step at a Time
It all started as a chessy little challenge to my willpower that popped up into my mind after reading a post of a guy who was dragged into 30-day GitHub contribution challenge by his friend and ended up commiting for 177 consecutive days. "What if I did the same?", thought I. "Would I be able to keep up for at least as much? Can I do it longer? And what would I be able to achieve this way?", I asked myself. And since there was no one but me to answer that question, a silent agreement arose between my mind and my willpower, stating that I should participate in "GitHub as long as you can" challange (as soon as I finish watching that hilarious video with cats on the YouTube).
The idea is simple -- you have to commit something every day. The quality of commit is subject to your own conscience and commitment to the excercise (see what I did there?) But overall rules can be summarized as:
Don't miss a day and make some progress.
It doesn't matter if you add a new feature, refactor a piece of code, work on some tests or even start a brand new project. What matters is consistency.
And exactly one year later I can without any doubt say that it was one of the greatest descisions in my life. And I totally challenge you to do the same.
In that year I wrote more code, than I had ever written in my free time before, learned a handful of frameworks and libraries and got significantly better in quite a few languages as well, not to mention software development as a whole. That challenge showed me how small changes can amass to a significant body of work in a long time and that everyday practice can make you better at anything.
As we know from physics all objects tend to resist motion
and remain in relaxed state, preferable watching Netflix and having pizza delivered for dinner. We often tend to waste our precious free time doing something absolutely worthless for us in a long term, even if we realize that it can be spent better. (Have I showed you that video about cats by the way? It's hilarious.) But by challenging yourself to do a little something whenever you have free time, you can slowly develop a habit of spending it with more use.
For example, I always thought it would be a nice idea to ditch a pre-cooked compilation of plugins and configurations I was using for vim and develop my own. But whenever I had time to do it I would fall victim of "maybe another day" syndrome and never actually get it done.
One day I had been short on ideas and though: "Well, why shouldn't I work on vim configuration than and put it into a repository as well?" A couple of hours later I commited a minimal vim configuration, which would become a skeleton for my very own distribution. And the best thing is that I can easily access and install it on any computer, while refining it to further increase my productivity.
Coding every day makes you constantly look for new ideas to implement. Ideas, aside from being a great excercise for your mind, usually require learning new things and experiment with what you already know. And there's nothing more important in the blazing fast world of IT, than to keep learning and experimenting.
My first goal was to reach at least 30 consecutive days of commiting. At the beggining I didn't really knew what to work on and how to keep up the pace. I was learning Haskell at the time so I just created a new repository and started porting a little raytracer project that I'd previously done in C++ and Scala to it. Off to a good start I made my first 3 commits to the newly born project. Yay. Commiting is easy.
But doing it every day is hard. Especially when you are working full time and getting through graduation year at university. It takes time to make it into a habit and a good amount of willpower not to drop out. Escpecially when you don't seem to have enough time or have no ideas whatsoever. And that is where GitHub has a way to help you.
The great thing about GitHub, is that it has a contribution calendar on a front page of every user, which visualizes amount of commits made within last 366 days as a neat heat map.
Every little square is a day. If you commit during the day a square will become green. The more you commit -- the darker shade of green will be displayed.
Day after day, commit after commit my contribution calendar started to fill up with green squares. In a sense it formed a chain or, in terms of GitHub, a streak of commits. And seing the chain grow every day is a very powerful way of motivating yourself as well as tracking progress. It challenges you to keep going, because even a single missed day would break the chain and put you at the beggining. It also gives you a feeling of achievement, which is crucial to develop a habit of commiting every day.
Working on something every day, however little time and effort you can actually allocate to it, is an incredibly powerful tool of self-development. But as with any habit, once it is established it becomes almost automatic and requires less and less effort over time. And once effort leaves the equasion, you start descending back into a comfort zone, where you feel that you don't need to learn anything new.
Next year I plan to adjust rules a bit, focusing on contributions to projects other than my own. Writing code by yourself is easy -- there's no need for lengthy debates about architecture, disputes about code style, etc., etc. But communication and teamwork is essential for modern software development, so it is important to learn to work as a part of community. It also makes it harder to slack from time to time by making small and less significant changes.
I am also planning to challenge myself in similar ways with other skills, especially non-technical. For example writing or drawing every day to see what I can achieve in those fields.
Choose a challenge of your own. Keep going and maybe one day you'll deserve an honorary badge made of cardboard and tin foil too: