For 2017, I have decided to set quarterly focuses instead of quarterly goals. A focus and a goal very similar, but a focus is a step back from a goal; it’s less concrete. I’m doing this because I found when I set goals, some did not age well. I was laying out specific steps of what I thought would be most important for me to accomplish in a quarter. But as weeks went by, those steps didn’t always line up with changes in my life. Some quarters it worked out, but in others, life threw curve-balls that changed up my priorities, putting a goal like “Finish the Intro to Algorithms book” on the back-burner. When I would not accomplish a task that was no longer important, there was still a tinge of failure.

In that light, I’ve decided to step back and look at bigger picture focuses. Rather than saying “I want to complete this Ruby course”, I’m setting a focus on “Improving my knowledge on Ruby”. A focus is broad enough for me to know that it will still be relevant in 3 months. With each focus, I write:

  1. Where I’m currently at
  2. Why the focus is important
  3. What I see myself gaining from the focus in 3 months
  4. Clear actions that I currently know I can take. I may find a better approach in a month or two, and that’s fine. I’m not mentally tied to any of the actions, and they’re interchangeable.

As an example, I have shared the technical focuses that I set for myself in Quarter 1 of 2017.

Focuses

Ruby

Ruby is the primary programming language that I use both at work and on personal projects. I’m comfortable digging into open source Ruby projects, but there is still a lot that I have to learn. I would like to better understand the structure of a gem-like application, improve my knowledge in refactoring, and improve on writing consistent and robust tests. Understanding Ruby better will help me write and understand the design of Ruby applications and help in contributing to open source projects like Ruby on Rails and Bundler. It will also improve my ability to build and improve Rails applications.

Steps I can take

  • Read Sandi Metz’ Practical Object Oriented Development with Ruby - This book has been recommended so many times that it’s a shame I’ve put it off for this long. It will help fill in knowledge gaps for both Object Oriented Development and refactoring.
  • Write more Ruby code. - My knowledge improves tremendously by getting out there and doing it. I need to continue building and improving on Coffee-Bot and turn Git-Context into a Gem.
  • Read more Ruby code. - Watching Ruby on Rails on Github and reading the source code has helped me learn new Ruby methods and Ruby best practices. Also, the more foreign code I read, the easier it has become to read code other than my own. There are always great takeaways from reading other people’s code and it’s also a first step in contributing more to open source.
  • Improve my knowledge in Minitest - I’ve been an Rspec tester since the beginning of my Ruby programming days, but it’s good to branch out.

Ruby on Rails

I use Rails for several applications at work and for personal projects. As a Rails developer, learning more about how its internals work and how other people use it will help me immensely. Doing so in the last year has already taught me a lot of cool tricks. This focus is continuation of what I have already been doing.

Steps I can take

  • Finish Reading Jose Valim’s Crafting Rails 4 Applications - This book was recommended to me by Rafael França of the Rails Core team as a first step in understanding how Rails works. That says enough about this book.
  • Continue to dig into the Rails source code - Helpful steps to continue doing:
    • Reference the Rails source code for questions on methods and errors
    • Create Exploration scripts using Byebug
    • Continue the Weekly Rails Devotion - Choose a class to study weekly
  • Triage issues on Github - Trying to Triage Rails issues has improved my debugging skills and Git skills. I have learned a lot of cool Ruby methods and Git tools like Git Bisect. It’s also a way to take some work off of the maintainers.
  • Dig into other Rails applications - Open source Rails projects like GitLab and Shopify’s plugins are interesting to look at. Again, a lot of cool takeaways to be found.

MySQL

My SQL knowledge mostly consists of what I’ve needed to know to build applications and maintain a database. It would be good to have a more rounded understanding of the database that I use the most often. A better knowledge of databases and MySQL will also help me understand ActiveRecord internals more.

Steps I can take

  • Read High Performance MySQL - This book seems to have a solid reputation for learning more about MySQL’s architecture.
  • Read the MySQL documentation - MySQL has a pretty good range of documentation, from administration to security to optimizations.

For funsies focuses

There are a few things that I want to look into and have fun with. These are more of pick and choose focuses when I’m looking for something to play around with.

neo4j

I find graphs very interesting and a tough but rewarding way of thinking. neo4j is a graph database that has been pretty easy to pickup. I think learning how to create and maintain a graph database will give me a new way of looking at and tackling problems.

Go

I’ve wanted to pick up an up-and-coming language just for the fun of it, and I have heard lots of good things about Go. Reading Github’s Engineering blog, I see that they use it a lot which is a plus for me.

Steps I can take include:

  • Completing the Tour of Go
  • Doing some exercises with Go on Exercism and Hackerrank
  • Look into some projects built with Go like Hugo

Erlang

Erlang because I want to delve into the world of Functional programming. I know that Elixir is very popular, but I think that the vast difference in Erlang versus anything that I’ve done before will give me more opportunities to think outside of what I know.

Steps I can take include:

Do You Have Any Recommendations?

I’d love to hear any thoughts you have on focuses or on setting goals. You can tweet me at @alexcameron89. I hope you have a happy and productive 2017!