Daily Coding Practice
I’ve mentioned before that I’ve begun what I call “daily coding practice.“1 My inspiration for this comes directly from Mike Acton by way of HandmadeCon2. Mike said that we as serious, professional programmers should be dedicating some slice of time every day to practicing our craft, even if it’s as little as 30 minutes. Now, Mike also emphasized small, throw-away practice, similar to doing scales if you were to practice guitar. You don’t do part of your scales then pick up the next day and continue. I have yet to fully come to terms with this, but I have at least taken inspiration from the “a little bit every day” part of it.
It is not easy to do this.
I’m managing 3-4 times per week. It’s not easy to do, but it is rewarding, and I think I can keep this going for a long time; perhaps even indefinitely. Like I said, I’m not doing throw-away practice like Mike suggested, so sometimes I end up spending 2 or more hours trying to finish off what I’m working on. A couple of times I’ve spent more than 4 hours in the evening. I don’t recommend this - it wears you out very quickly. I am, however, not only working on side projects. I did a little bezier curve rendering on the Pico 83, and I fully intend to do similar projects in the future. I also have plans to work through Project Euler in Rust and other languages. Heck, just take a look at my wiki page!4
There are a lot of ways you can tackle daily coding practice. It depends on how much free time you have, how engaged you are in other projects, what other responsibilities you have, whether you even want to do it. My situation is this: I have family responsibilities and I’m typically thoroughly engaged for the full work day. I have a solid two hours to spare in the evening. This is completely unaccounted for time. There are three really big, obvious things I want to focus on in this two hours:
- Health and Fitness
I’m not perfectly efficient, however, and do find myself unable to concentrate or otherwise unmotivated with some frequency. Note, also, that I’ve also ordered this list in terms of how I value each item’s relative importance. I will always prioritize time with my family if the need is there, and often if the opportunity presents itself. In actuality, I always prioritize #3 over #2, but that’s not what I desire to keep doing and will hopefully be able to report otherwise soon. What I’m ultimately trying to say here is that two hours is not a lot of time in which to perform all three tasks. It’s doable, but it requires good discipline. I lack that discipline but am working on it.
I find it difficult to make really good progress on side projects by divvying up this 2 hour chunk of time. I also spend this time on videogames, and sometimes boardgames. (At least I used to do boardgaming somewhat consistently.5) I align myself with Cal Newport and his thoughts on deep work6 and have found my best progress has come when I’ve been able to dedicate 4+ hours to a project. On a weekday this requires sacrificing something else like my evening stretches (Yes, that #2 above is in addition to stretching) or having a “proper” goodnight routine. A viable alternative I’ve been inadvertently using is to focus on one or two items on a given day, shuffling the remaining items to other days. Maybe I’ll do 2 hours of fitness on Monday, then 2 hours of programming on Tuesday, then 2 hours of programming on Wednesday. Like anything worth doing, it’s not always easy to do and the benefits aren’t obvious or immediate, but I do think it’s a worthwhile endeavor and will see where it leads me.
Footnotes1 Previous post of mine mentioning daily coding practice. 2015-12-12: Ludum Dare
2 Mike Acton speaking at HandmadeCon
3 Bezier Curves on the Pico-8
4 BitBucket Practice repository wiki page
5 My posts about boardgames
6 About Cal Newport