by JS

Lessons from my month-long GitHub commit streak

s6v2hZ0536zmU5Ra9tnF4TSeANDZ5Veo00yf
“I want to learn JavaScript. Like, really learn it. Like, truly understand it.” — me in November 2016

A lofty goal, for sure. Especially for someone who’s only been programming for about six months, decidedly in not-JavaScript (Ruby, if you must know). A particularly daunting task after you’ve been told over and over again how weird JavaScript is. But I can be stubborn.

About two months ago, I wrapped up a stint at The Firehose Project, where I studied part-time while holding down a day job as an attorney. It was a great experience. I learned about building complex Ruby on Rails applications, test-driven development, and more. But once the program ended, I wanted to learn more about JavaScript — the language powering so much of the web.

I turned to freeCodeCamp, the resource I initially used to learn basic HTML and CSS before enrolling in The Firehose Project. freeCodeCamp has a robust, project-driven, JavaScript-oriented curriculum that seemed like the perfect option to master the basics.

Without the structure of a paid program, however, I feared that I would fall victim to procrastination or otherwise come up with some excuse as to why I should stop when things got hard.

I came up with a solution: work through the freeCodeCamp projects and make at least one commit to GitHub every single day for at least one month. No matter what. No matter whether I felt like coding. No matter how I was feeling on any particular day. And I’m happy to say I accomplished my goal. And what I learned surprised me.

Lesson one: even on days when I didn’t feel like coding, I often happily worked for hours once I forced myself to get started.

OCzJfpSvhUSzygLCAJOkI4LhSK57nnQFsQMI
30 days (and counting) of commits!
“The pleasures of not writing are so great that if you ever start indulging them you will never write again” — John Updike.

It’s an awful idea to just sit around waiting for the right moment or inspiration to strike. While this idea of waiting for one’s muse mostly comes up in creative fields, a variation of it can take hold in other disciplines.

Don’t wait until you’re “in the mood to code” or until you’ve thought of a great idea for a new app. Don’t wait for inspiration. Just start.

If you don’t have any active projects, log on to Code Wars and do a few kata. Make a simple implementation in that framework you’ve been meaning to check out. This field is vast enough that there is always something you could be working on.

Besides, the simple act of starting might inspire you to continue.

During the last month, there were more than a couple days where, after a long day at work, the last thing I wanted to do was sit down at my desk at home and struggle with some coding problem. But more often than not, once I started working, I found it easy to keep going.

The mind has a terrible way of making mountains out of molehills. Don’t fall for it.

Lesson two: I learned that I was able to commit to something for a period of time — not because I was paying a lot of money for it, or because I was required — but because I set a goal that I wanted to achieve.

QE0He3W7yKcXM1zVowZRVhNVejkUc4Pit489
Don’t let Shia down.

I have trouble staying committed to things I don’t actively find fascinating.

There’s a brief honeymoon phase with every new hobby I pick up where it’s the only thing I can think about during the day. This lasts for about a month and it goes something like this: I’m progressing at a rapid pace, learning something awesome every day. I’m feeling more confident. I start have delusions of grandeur. “I will be a master [pianist / photographer/ artist / songwriter] soon,” I whisper to myself.

And then, all of a sudden, I stop noticeably improving. It gets hard. I hit a wall. The magic goes away. I wonder if maybe this thing isn’t for me after all.

Unless you’re a prodigy, you’ve probably experienced something similar. It’s so easy to quit (as anyone who ever briefly saw me with a DSLR around my neck or a sketchbook in my hands can testify). But this is a terrible way to ever get good at anything.

Learning to program is not easy. And anyone can tell you it’s certainly not always fun. There have been times when I have wanted to give up because I felt I wasn’t progressing quickly enough. But learning to program is more akin to a marathon than a sprint, and it’s important to keep this in mind when you think about your goals, and where you want to be in a few weeks, or a month, or a year. Nobody becomes an expert in this stuff overnight.

With that in mind, it’s really important to just gut it out and persevere through the tough times.

I have long thought my tendency to stop doing stuff when it got boring or difficult was just a personal defect. Something I was bound to live with for the rest of my life. Me, the guy who likes to dabble in everything but is not actually good at any one thing.

It’s true that there’s never been a better time to learn a new skill or hobby — there are so many free resources, and the barrier of entry is often so low, that there’s basically no limit to what you can learn. It’s really incredible and I wouldn’t have it any other way.

But it’s also not so great if you’re like me and have a wandering eye when it comes to interests and hobbies. In 2016, it’s incredibly easy to jump from topic to topic when the going gets tough or the spark fades. If you want to get good (at anything), it’s important to resist this temptation, however strong.

Coding and pushing daily commits to GitHub for a month-straight helped me realize that I have the power to stick it out through the tough times and keep going, even when it’s not fun or exciting.

Lesson three: consistent practice is the best kind of practice.

ZtlOjXGMMdGFvQD1YqXRWyJLPy0alLQrXt5V
?

Consistent practice of a moderate or even short length is better than having a couple marathon sessions once or twice a week. There are tons of studies on practice and training that confirm this, but you will see the evidence for yourself if you take this challenge.

With consistent practice, you have the opportunity to reinforce what you learned in days prior, before you forget everything. This reinforcement is key to understanding tough programming concepts. It’s not enough to sit down for a few hours, read about how this or prototypal inheritance work and then walk away for a week. If you haven’t completely forgotten what you read by then, well, congratulations on having a better memory than me.

The far better tactic is to read, take notes, practice some implementations, and then go back the next day and review what you’ve done. By practicing consistently, and structuring your sessions so you are in a cycle of constantly reviewing old material while also learning new material, you ensure progression while solidifying a foundation of knowledge.

Lesson four: keeping a journal helped me stay motivated.

ydXK3Y9apvg01AOjVs44atvOcaUznDfWq3fP
“Dear Journal…”

Seeing all those green boxes on my GitHub profile is awesome, but I chose to also keep a journal of sorts so I could look back on my accomplishments in detail. My journal also allowed me to keep track of all my non-GitHub work, of which there was plenty (because, like I said earlier, once I got started I often did not want to stop).

Your journal can be anything — a Google Doc, a blank notebook, or a notes app on your phone. I chose to go with a small, daily planner that has a calendar laid out for each month and then on subsequent pages, space for writing about each day. At the end of every night, I would check off the day in the calendar section and then write some notes about what I did that day. Let me tell you, it feels incredible to check those boxes.

Whenever you’re feeling discouraged or down, you can look back into your journal and see how far you’ve come. I was really surprised at how empowering this turned out to be.

What’s next? Join me!

Looking ahead to the new year, I want to keep this streak going as long as possible. While I’m nowhere near where I want to be in terms of skill-level, I’ve already learned so much in the past month, and I am completely sold on this admittedly not-so-revolutionary method (shout out to #100DaysOfCode, a slightly more structured and significantly longer version of my personal challenge to myself).

I don’t see why it wouldn’t work for anyone, at any skill, in any topic.

If you feel inspired to start your own #CommitMonth, hit me up on twitter. I’d love to hear from you.

“Amateurs sit and wait for inspiration, the rest of us just get up and go to work.” — Stephen King