Today marks precisely 3 months to the end of year 2016. Usually, at such a time, most of us remember that we set new year resolutions at the very beginning of the year and then forgot about all of them for several months. It is no secret that new year resolutions don’t really work for most people because they are set in the heat of the moment during year-end festivities.
When the new year begins, the excitement is gone and so is the energy and motivation to pursue any goals that were set. Then the vicious cycle continues, same old habits, same old inaction till such a time when we are hit in the face by the fact that we just wasted several months without any concrete, fore planned achievements.
Today, I thought long about what I would like to celebrate, as a software programmer, when fireworks fills the sky on 1st January, 2017. Apart from all the merry making, the beer, loud music, the barbeque, there has got to be more, right. Otherwise these year end celebrations have become quite boring and meaningless to me.
I thought it would be exciting to set some real goals worth working at for the rest of the year. Apart from making me a better engineer, they should surely give me something to celebrate. Sharing it with the world should add some accountability to myself and excitement to the grind.
I have been grinding at the terminal for quite some time now, so am definitely not a n00b (I hope). So I have chosen these 5 concrete goals strategically to put me on a different plane far beyond n00b’hood.
Goal #1. Complete Harvard CS50x
This is CS50x, Harvard University’s introduction to the intellectual enterprises of computer science and the art of programming for majors and non-majors alike, with or without prior programming experience.
If any of you have ever watched introductory videos of this course by Harvard Professor David J Malan, then the first paragraph should sound familiar.
When I read the course description back in April this year, I was blown away, sort of a God send kind of thing. I quickly signed up through EdX and 2 weeks down the road every thing was a breeze, I was literally nailing problem sets over beer on weekends. My base programming language is Java and the course is done in C. But this did not make any difference because I knew some C from Engineering School days.
Just take a look at the course description from the first paragraph. It implies that literally every one can nail it, I was excited. The problem sets are numbered based on a zero index, so the first problem set is 0.
On reaching problem set 4 (The 5th), funny things started happening, all resulting in missed deadlines. I had not foreseen the immense amount of drive and patience it would require to reach the finish line. In short, since around June, I paused work on CS50x to focus on my mainstream work and freelance gigs, talk about procrastination. A complete review of this course deserves it’s own article. Now back to goal setting.
As my first goal, I will put the pedal on the metal and work through the rest of the problem sets to completion.
Strategy and Timeline
I will give this course 2 hours after work monday to friday during the month of October, additional time may be given as and when I find possible especially on weekends. By the end of October, I plan to have completed Harvard CS50x.
I will post my score board on the CS50x Facebook group latest by the end of September since results can take upto 2 weeks to be released.
I will post my EdX certificate in the same group as and when it is released to me by EdX.
Goal #2. Complete Programming Challenges (Miguel and Skienna)
It was back in June 2014, I had just got my first programming job right out of Engineering school. I had been playing around with PHP, C and Erlang pretty randomly. I don’t recall gaining much.
I was self-teaching and focusing on a lot of theory. Simply put, programming was a nightmare. Everything was unbelievably complex. Where I come from, programming lectures are crap and 98% of engineering students hate it for this reason.
The only programmers that emerge out of this environment are the self-teaching and passionate type. For some reason, I kept boring myself with book after book, video after video, taking notes, trying things here and there and then retiring at the end of the day to the same point where I started, apparently, no progress.
When I got this first job with a startup, we were required to code in Java. How I got the job is another long story, the short version being, IT WAS THRU LEGIT MEANS, somehow am not cut out for short cuts and trickery.
I remember being in office at 5 am and leaving at midnight every day. I would use the extra hours before and after work to work through problems in this book. I realized how I had wasted about 2-3 years focusing on theory and not learning anything at all. Long story short, one and half months later and 5 chapters into the book, I started feeling the benefits flow through my system. I felt like a programmer for the first time and not a fraudster. The rest is history.
As my second goal, I would like to work through the rest of the problem sets in this book. I have sifted through the rest of the pages and there are many interesting topics I believe are worth exploring. I will be doing what I did while in Engineering school, only this time, it will be a problem based approach to studying Computer Science and programming.
Strategy and Timeline
I will give this book 2 hours after work monday to friday during the month of November, additional time may be given as and when I find possible especially on weekends. By the end of November, I plan to have completed all the programming challenges.
I will have each solution approved by the online judge at http://www.programming-challenges.com/pg.php?page=index. I will have all my solutions under a single project on github.
Goal #3. Study “Clean Code” (Robert C Martin)
Clean Code is a very popular book in computer science cycles, written by an authoritative computer scientist. I believe that programmers who have read it write much better code and are more respected for that. Evidence is all over the internet to prove that.
As my 3rd year end goal, I would like to study this book to completion. I plan to not just scheme through it but understand the principles discussed in it to a point that I can actively apply them or teach them.
Strategy and Timeline
I will give this book 1 hour each day before work monday to friday during the month of November, additional time may be given as and when I find possible especially on weekends. By the end of November, I plan to have completed all Chapters.
This is a tricky one as it’s difficult to find an objective judge of what the results of reading this book will be.
However, I believe that if I am able to change the way I code or judge another programmer’s code based on principles I have learnt in this book, then I will have achieved this goal.
Secondly, I plan to teach some of the content I learn, first through this site. If a fellow programmer is able to change the way they code or look at another programmer’s code due to what I will have taught them, then I will have achieved this goal.
Goal #4. Study “Effective Java” (Josh Bloch)
Another must-read for all Java programmers. This has been a long time coming and I would finally like to put the pedal on the metal for this book.
So my 4th goal is study this book and deeply understand the principles Josh tries to discuss here.
Strategy and Timeline
I will give this book 1 hour each day before work monday to friday during the month of October, additional time may be given as and when I find possible especially on weekends. By the end of October, I plan to have completed all Chapters.
Same as the previous goal.
If am able to change the way I write Java and change the way some body else writes Java due to the knowledge I have attained from this book. Then I will have achieved this goal.
Goal #5. Release an Open Source Project
In the programming community, your value as an engineer is measured by your contribution back into the community.
Maintain a blog and consistently write great articles, you may as well consider yourself on the right track. I would like to assume that this bit is covered on my part for now. By the way, I got inspiration to start a blog from John Sonmez of simple programmer and I used his course to start blogging on blogger over a year ago and only moved to this domain a few weeks back. Thanks John!
Give researched talks at programmer meet ups about important and trending topics, Voila! you are joining the league of the big boys. I haven’t personally done this but it’s on my to-do list for 2017.
Actively participate on programmer forums such as user groups and stackoverflow, help other programmers through their problems, BOOM! your blessings start multiplying. I am doing this on SO, though not very actively, I plan to up my game here with time.
Contribute important stuff to open source projects, my friend, I have no words to describe what great things are awaiting you. I have not done this yet, definitely on my to-do list for 2017.
Create an open source project other programmers find important and end up using and contributing to. You are in the league of the big boys.
My fifth and last goal for the end of 2016 is to release a well documented open source project. The releasing part will be quite easy. For a little over a year now, I have been consistently working on some USSD projects for clients. I ended up putting together a Java library to do over 80% of the work.
The first project took me about 2 months to do. With time I started developing prototypes in 2-3 days. Currently, the initial 2 month project can take me about a week or two to complete, thanks to this library. Repeated logic should be abstracted right? I call is ussd-menuserver.
The challenge is to get this library to work for other programmers that work on USSD projects.
Strategy and Timeline
I will give this project my saturdays and any other time I find possible. My main activity will be to document it properly and host it on github. I will also go ahead to make it available on Maven and put it into continuous integration with Travis CI.
Secondly, I will aggressively reach out to other programmers I know personally that may find it quite useful. My target will be to gain their cooperation so that they can start testing it out in their own projects.
If I get some pull requests on github from contributors, or if even 1 programmer learns how to use this library and actively starts to depend on it in a project. Then I will conclude that this goal has been achieved.
I am more than happy to have shared my year end goals in this article with any one who cares to read it out there. I believe it will give me additional discipline and drive too to see them to completion. If you are inspired by this post to take action or do something similar, don’t forget to drop me a comment and share your thoughts.
I have deliberately left our December because it’s a tricky month, there may only be 2 productive months in it which I reserve to do any “garbage collection”.