What I learned after completing my first #100DaysOfCode

Is this the end or beginning of the race?

Learning to code is hard. Doing anything with purpose for 100 days straight is also hard. Putting these together would seem to be an exercise in failure but surprisingly, I found doing both simultaneously made accomplishing the other much easier. While I’m not big on making new years resolutions as I don’t tend to keep them — on Jan. 1st 2017 (just 100 days ago) I started #100DaysOfCode.

This (slightly cheesy) post is a summary of the last 100 days regarding the technical things I learned, take-aways/things I didn’t expect to learn, and tools/tips that helped me stay on track.

For those unfamiliar, the #100DaysOfCode project was started by Alexander Kallaway with some simple rules:

  1. Fork this repo to track your progress
  2. Code minimum for an hour every day for the next 100 days.
  3. Encourage others who are doing the same challenge on Twitter or elsewhere with the hashtag #100DaysOfCode.

Seems easy enough right?

Take-aways and things I didn’t expect to learn

When it comes to comprehension — consistency and momentum are more important than choosing the “right” curriculum

I have been working on and off again over the last 1.5 years trying to teach myself software development with the hopes of moving my career in that direction. While improvement has definitely been made — it hasn’t been at the speed that I would have liked and I had assumptions as to why but it wasn’t clear till now. I was not consistent enough.

A very scientific chart I made

Equating it to exercising— while you might be able to get into shape by going to the gym once a week, it’s going to take a long time. I know that I have made more progress in the last 100 days than I did the year before and it was all due to coding everyday. By not letting large amounts of time to pass and allow the concepts I was trying to learn get “foggy”, I instead was able to build on them. This created a much stronger foundation of technical knowledge. I found that while the quality of the curriculum is important, it is much more important that you stay consistent with it so you can understand it, build on the knowledge, and move on to the next thing.

Self discipline is daunting but it’s not as hard as you think

I remember thinking about what it would take to learn to code in my free-time just 10 hrs a week while being a dad and working a full time job and thought it was going to be near impossible.

I’m not going to sit here and tell you it was easy, because it wasn’t. My point is rather that we (or just me) tend to talk ourselves out of something before we even start. It’s like pushing a stalled car down the road — it’s way harder to get it moving from a stand still than it is to just keep it moving. If you are making an effort to do something more consistently, start small and try to focus on building behaviors first rather than trying really hard for 3 days and expecting to see results — you won’t.

“We are what we repeatedly do. Excellence is not an act, but a habit.” — Aristotle

I was almost certain that when I started this I wouldn’t finish it but, after around day 20 or so I started to think about the time I already put in and felt like I didn’t want it to be wasted. I started thinking about the “past me” and how hard I worked yesterday or the day before and that I didn’t want to let that person down. It was weird but it worked. Also, the cool part about that kind of thinking was that it built exponentially on itself (you bet your ass that “day 62 me” wasn’t going to let “day 34 me” down) .

Technical accomplishments

Here are a few of the cool things I was able to build or learn in the last 100 days.

1 — Michael Hartl’s Ruby on Rails Tutorial

This is an extremely comprehensive and lengthy tutorial that covered pretty much the entire front and back end of web development with Ruby on Rails. When completed, you will have a fully functional Twitter clone — live and deployed!

My app … it’s alive!

This is where I spent a large portion of my time during the last 100 days and I finished the whole damn thing (it was a beast). Walking away from it, I feel like I have a pretty good understanding of the MVC model for web apps, RESTful app design, generally how Ruby on Rails works, how and why you should use partials, Git, and a general level of comfort in the command line.

Feel free to check mine out.

2 — Treehouse: Learn Ruby Track

I really wanted to have a resource that was focused on core programming knowledge and Treehouse was recommended by a few of the developers I work with as they teach a lot of common practices used in modern dev shops. So far I have really liked the quality of the content they have and it’s been very thorough and split nicely into bit-size chunks. Currently, I’m about 85% done with the Ruby track.

3 — Personal site

I built and deployed my personal site using Jekyll and Github pages both of which I fell in love with! In a world filled with a ton of great template based website creation tools, I didn’t want to just skip over core HTML, CSS, and Javascript. I chose Jekyll after watching some of the tutorials on the DevTips YouTube channel and found it a lot of fun. You can view all the source code on my Github repo.

Seriously, I really can’t recommend Jekyll + GH-Pages enough for static site generation. ❤️

4 — Ruby Gem for Spotify Web API

During the last 2 weeks I started to dive into using the RSpotify ruby gem by Guilherme Sad. This my next major focus as I have a simple idea that I want to create — easily save my discovered weekly playlists into a separate playlist folder since Spotify doesn’t allow you to do this. I previously started to play around with the Spotify API but found a lot of the authentication stuff a bit difficult. This gem takes care of a lot of that so I’m planning on finishing this project in the next few weeks.

Tools and tips that helped me succeed

These are a few things that really helped me stay consistent and code every day.

Variety is the spice of life!

Make sure to have a few different projects or resources available — but not too many! This came apparent to me when I was stuck on some really tough bugs during Ch 10 of the Rails tutorial that I just couldn’t figure out. By about the 6th day in a row banging my head against the wall — I knew I needed to change things up or I would lose my momentum.

I had a good mix of projects/learning resources that ranged from needing high focus when I had the energy and attention to spare — to YouTube tutorials that were much easier to just consume when I was spent.

Keep a separate place to document time and notes

I still kept a more detailed log on my Github repo but I also had a Google spreadsheet setup as it was a quicker way to just jot down some basic notes and time entries. This made it easy to remember what I did a few days back if I didn’t get a chance to commit my log or if my time was split into smaller chunks throughout the day.

My actual spreadsheet I used for time tracking.

Recently I had a colleague recommend Toggle which looks pretty great at first glance so I might switch to that. Although sometimes, nothing beats a simple Google doc.

Make a plan on when you will work

Being a husband, father of two kids, and working full-time — it wasn’t always easy trying to find even just an hour everyday to put my time in. I had to be really diligent with when and sometimes where I worked on my development projects. Most of the time I worked during the evenings when the kids had gone to bed but a few days a week I got my time in on my lunch break so my evening was free to hang out with my wife and kids.

Surround yourself with people who will encourage you

I was lucky enough to have a small group of coworkers around me who were either already developers and interested in helping others learn or similar individuals wanting learning more about software development. We meet at least every Friday during lunch to go through things we are working on and have a dedicated Slack channel at work to share stuff. Shout out to Matt D. and Eric E. for helping me out so much!!

This combined with an extremely supportive spouse allowed me to really keep my momentum and pick me up when I wanted to give up.

I guess that’s it — a pretty high-level summary of my take-aways from my first #100DaysOfCode. Please reach out here, Twitter, or on Github if you have any questions, comments, or just anything you want to share!

Now that I’m done — I think to celebrate I might start another 100 days 😎. Keep on learning!

A special thank you to Celeste (the wifey 😘) for encouraging me throughout this whole process.