I’m not sure when I first started using social media but it was probably around the year 2004 or so with MySpace, Friendster and some of the other early platforms. By 2006 when Facebook opened up it’s registration to anyone with an email address I was pretty hooked up into the whole world of online persona. Twitter followed shortly thereafter, along with Reddit, Instagram and so on.

I didn’t really think about why I was using social media or the potential drawbacks of doing so. I pretty much just embraced it and in some ways got a bit addicted to it.

It’s hard to believe another 365 days have come and gone, the past year feeling like a blur and quickly becoming no more than a series of fading memories.

While I find value in keeping the shortness of life in perspective, I also try to not dwell on the passing moments but to focus on what I can do in the time that I have ahead of me. As such, one thing that I do appreciate about a new year is that it always gives a chance to reflect on the past year lived and plan ahead for the coming one.

One thing that these reflections can lead to are new years resolutions.

Did you make any this year?

If you did, how are you doing with them as the year comes to a close?

A common task that I encounter regularly in my Rails apps is needing to setup a background job that runs on a regular schedule. Essentially what we want is a cron job but the last thing I want to be doing is fiddling around with a crontab on the server. It would be much better if I could configure the scheduling within my Rails app itself and then I can keep the schedule configuration under source control. This makes makes it easy to update the schedule and have updates deployed automatically along with my app.

Thankfully we don’t have to build this functionality from scratch as there is a great Ruby gem called Whenever that allows us to set up cron jobs from within our Rails apps using Ruby code. In this blog post I’ll cover how you can schedule your background jobs in Rails using Whenever to set up your schedule, along with Sidekiq to run the actual background jobs.

A couple weeks ago I had the wonderful opportunity of teaching some basic coding to a class of Grade 5 and 6 students at a local elementary school. This was my first time doing anything like this and so preparing was difficult as I really had no idea what to expect. I had to come to the class with a fairly broad set of expectations and a flexible plan that could adapt to both the abilities and interests of the kids. I was preparing for the worst.

Thankfully all my concerns were unfounded and it ended up being much easier that I could have imagined. The kids were all excited to learn coding and they latched on to the material quickly. What was clear to me is that they loved it and they wanted more. What was also obvious is that coding is something that is currently missing from their elementary school curriculum. While I was glad to for the opportunity to share with the kids, it seemed unfortunate that they weren’t already getting taught these skills.

Coming away from this experience, not only was it obvious that the kids wanted more, but I also wanted more. It was a learning experience for me and a very rewarding one at that. If you are a developer, I would encourage you to look for opportunities in your local community where you can share your knowledge and expertise with kids.

One of the difficult parts in teaching kids how to code is figuring out exactly what to teach and how to teach it. When I was first learned how to program there were generally two programming languages that were used: Basic and Pascal. I learned both of those in my high school computer science classes and looking back I don’t think either of those options were really very good. Thankfully there has been a lot of research and development done in this area and today there are much better options.

Let’s take a look at some of the options that are available today.

I can’t remember when I first discovered the world of podcasting but it was around the time that Apple first added Podcasts to the iTunes store, so sometime around 2005. While I can’t recall the exact moment, looking back I find it incredible to consider the massive impact that discovery has had on me. A whole new world of knowledge and a whole new way of learning was opened up to me.

I’ve been a regular listener of podcasts ever since.

Lately I’ve had a daily routine of going for walks and listening to podcasts. It’s great way to get some exercise and learn new things at the same time. I specifically use the time for listening to podcasts related to my profession as a software developer. I have found that the time spent doing so is invaluable and through it I have been helped to stay on top of new technology while getting inspired and motivated to keep improving my craft. It keeps me learning and helps to guard against burn out and learning fatigue. As someone who works from home, it’s easy to feel isolated and get lost in your own echo chamber. Podcasts help me feel connected and I feed off the energy and excitment of the hosts and their guests.

Conway’s Game of Life is one of those foundational programming exercises that goes back to the early days of computer programming. If you haven’t heard of it before, I encourage you to read all about it at Wikipedia.

My interest in Conway’s Game of Life was recently piqued when I read Corey Haines excellent little book Understanding the Four Rules of Simple Design. I highly recommend the book to any software developer who is seeking to improve their skills in the craft of software design. The book details the lessons learned from applying the Four Rules of Simple Design (which were first articulated by Kent Beck) to Conway’s Game of Life.

In reading the book and going through all the examples, which were based around the Game of Life, I realized that I had never written an implementation of the Game of Life myself. I thought it was high time to and go ahead and do that. Since my current programming language of choice is Ruby, and also since the examples in Corey’s book use Ruby, I decided to implement my version in Ruby as well.

The quest for perfection is a tantalizing yet generally elusive goal.

As a software developer I feel a continual pull towards perfectionism in my craft. It comes down to wanting to produce elegant software designs that are executed with clean code, resulting in quality software that is easy to maintain and adapt to future requirements. Essentially I like to write code that I wouldn’t be ashamed to share with other programmers whose work I look up to and admire.

This desire to write good code doesn’t just appear natually. I think it is something has been developed and encouraged by having great mentors, reading good books on software development and listening to master programmers, those who have honed the art of software development. What I love about listening to great programmers is that I always feel the push to do better, to improve myself and the code I write. This is source of the pull to perfectionism for me and I’m very glad for it.

Overall this is a great thing because I want to grow and improve, I want to learn from my mistakes and know I can do better in the future. However, there is also be a dark side which can be debilitating.