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.
I recently worked a Rails project in which I had to automate the process of filling out a PDF form from the app. To do so I utilized a gem called pdf-forms which worked great. If this is something that you need to do, I would recommended checking out the article Pre-Filling PDF Form Templates in Ruby-on-Rails with PDFtk which gives some code examples on how to structure your code when working with pdf-forms.
The key dependency which pdf-forms utilizes for working with PDF files is PDFtk which is a command line tool for interacting with PDFs. As such, in order to use pdf-forms you’ll need a binary of PDFtk which pdf-forms can access. On my local dev environment this was no problem, just a matter of downloading and installed the binaries for my platform. However it was a different story when it came to deploying the app on heroku and getting it working there.
It took a bit of digging but I eventually got it working and thought it would be worth sharing here in case someone runs into the same issue.
I’ve always had an interest in education and learning. This has naturally fit well with my profession as a software developer / programmer. These days most professions require some level of continual improvement and ongoing education, however with programming ongoing “professional development” is our bread and butter.
To some (and I would fit into this category), this is an attractive element of the job as it keeps things challenging and the work rarely gets boring. To others it is a wearying trend, knowing that what you learn this year will most likely be obselete by the next year, or at the very least, will have gone through significant evolutionary development. If that’s you, then you probably want to find another career because it’s not slowing down anything soon.
My interest in the field of education is not limited to my own self improvement, but rather it extends out into a passion of mine, which is to teach others about technology, and specifically programming. As such, I take a keen interest in various websites, courses and tools which have been created to teach programming. Throughout the years of using and interacting with various educational materials, I’ve found that I’ve always been left wanting, but I never felt I could express what exactly was missing. Thanks to Bret Victor’s incredible article Learnable Programming, that has now changed.
About a year ago I took a class entitled Advanced Object Oriented Software Development, a significant portion of which was spent drawing UML (Unified Modeling Language) diagrams for the software we were designing. I needed to get up to speed with UML in short order and the materials given by our professor were painfully obtuse. To the rescue came this fantastic book UML Distilled, the contents of which are indeed true to the title. It takes a very large and dense subject like UML and distils it down to the essential aspects. If you are a working software developer and want to start utilizing UML in the design of your projects, then this is the book you should get.
I had great hopes that I would be writing regularly on this blog and yet I’m looking at it now and realize that I haven’t written anything for 4 months. 4 months. It all feels like a blur to me these days. This is indeed one of the busy seasons of life.
I can’t remember a time of life when I have been more busy than the last year or two. It certainly has been a self-inflicted form of busyness, but it is busyness none the less. This is what you get then you work full time, go to university part time to finish off a degree, have a growing family that you want to spend time with, and yet still have interests, hobbies and somewhat of a life.
What does 5 years feel like? That was the question that I found myself pondering this morning.
Today my eldest son Jonathan turned 5 and one of the first things I did after he woke up was to sit him on my lap and tell him the story of when he was born. It’s one of his favourite stories, and he loves to hear how that day transpired. From the time that my wife entered into labour at about 5am up until when we held our precious newborn in our arms around 10pm. It was a long and wonderful day. One of the best days of my life.