The importance of downtime

As I write this, it’s the day before I return to work after a sabbatical. I’ve spent the last two weeks in Europe, exploring castles in England and munching crepes and escargot in France. What I have not done is anything related to work.

Cat relaxing
By Kreuzschnabel (own work) via Wikimedia Commons

In fact, before I left home I did two things. I removed the sim card from my phone (I got a temporary one in Europe to provide a data plan there) and I shut off my work email, so I wouldn’t get any emails from work even when connected to wifi. In my last team meeting before I left, I made it clear that I would be unreachable while I was gone.

Over the last five years, once thing I’ve noticed is that even when I’m on vacation – whether I’m visiting my family in Colorado or an art museum in Chicago – I still end up answering work emails, which means some of my attention is still on work. It might not take that much time to respond to a few emails, but how much can you relax when you’re still thinking about the job?

Tomorrow, I’ll have many emails to respond to. Tomorrow, people will need my input on many things, and I’ll be busy all day. Today? When I finish this blog post, I’ll be diving into a pluralsight course, without worrying about what I need to do tomorrow. Today, I’ve freed my mind from work for two weeks, and I am relaxed.

 

Paying to Learn

Earlier this week, I was reading a friend’s blog post in which he argued that it’s silly to ever pay for education, given the vast number of free resources available online.

I disagreed. While I think it’s great that there are so many free resources – in fact, I’m trying to make this blog one of them – and I’m no fan of spending money when you don’t need to, I also know that sometimes you get what you pay for.

Sometimes the free resources really are the best. When I’m stuck with a technical problem, I search online to see how other people have solved it. If I want to know how a particular CSS property works, I again look it up online. I’m not sure I’ve ever spent a day at work where I didn’t use Google.

Reading On the other hand, when I’m trying to sit down and learn something, I usually turn to paid content. In particular, I like books. Yes, most technical books are providing the same information you can find with a Google search, but the author is providing an additional service: collecting what’s known about the topic, paring it down to what’s most relevant, and presenting it in a way that makes sense. (At least, if it’s a good book this will be the case.) Because there’s a financial incentive, someone who is an expert on the field can afford to spend a great deal of time sharing his or her expertise in a way that might not be possible on a free medium.

Similarly, while I know that many people have successfully learned material watching free videos on youtube, I haven’t been a fan of that method for two reasons: most videos on youtube don’t have subtitles (crappy automatically-generated subtitles don’t count) and if I’m trying to learn something, I’m presumably not knowledgeable enough about it to know which presenters actually know what they’re talking about. Lately, however, I’ve been trying Pluralsight, which has a ridiculous number of professionally produced videos, many with subtitles. Full disclosure: I probably wouldn’t have gotten around to trying them if I hadn’t gotten a free trial, as it’s hard to find enough time to justify the $25+/month – but now that I’ve tried it out I suspect I’ll want to continue once my trial runs out. Because I have limited free time, it’s worthwhile to me to spend money to increase my learning speed.

Of course, none of this is to say that you can’t do just fine with free resources, especially if you have more time than money. Although I’m no longer a starving student, I still feel the pull of getting something for cheap or free; just realize that you may be paying for those free materials with your time. Sometimes, spending money really is worthwhile.

Preparing for Microsoft exams: how and why

The value of certification is a constant hot topic for many people; a search for certifications on stack overflow alone returns over 27,000 results, and adding the exact phrase “worth it” still returns almost 800. I’ve never been responsible for hiring people or been asked about certifications, so I have absolutely no comment to make about whether they’re helpful for finding a job.

Where I find certifications helpful is in setting a deadline for myself. Since 2011, I occasionally needed to write SQL code and wanted to learn more about SQL, but I never did because it was never a priority. A few years ago, I signed up to take exam 70-461: Querying Microsoft SQL Server 2012; because I was paying for it (my company will reimburse exams only if you pass), I finally had the incentive I needed to sit down and learn the material. I never bothered with the other exams in the certificate, because the certificate wasn’t what was important to me; what I needed was to learn the material that was covered in that first exam.

So that’s my primary motivation for looking at certifications: as a way to encourage myself to study. After five years as a professional programmer, I feel like I still have a ton to learn, so I’m in favor of anything that helps me to focus.

Right now I’m looking at Microsoft’s exam 70-483: Programming in C#. Looking over the list of topics covered, I see some stuff I know reasonably well, and some stuff that I’ve never learned because it’s never been something I’ve needed to use. Here’s the key part, though: it all looks like stuff I would like to know, that could very well be useful to me at some point. So this is actually stuff I’m interested in learning; the test just helps me find the areas I need to know more about.

For example, I see that one of the topics covered in the exam is performing symmetric and asymmetric encryption:

Choose an appropriate encryption algorithm; manage and create certificates; implement key management; implement the System.Security namespace; hashing data; encrypt streams

The theory behind this is all stuff I studied in school, but I’ve never had any reason to use it in practice. As it happens, Pluralsight has a two-hour course called Introduction to Cryptography in .NET, which I expect will go into way more detail than the exam will. This is what I mean about focus: Pluralsight has just a ton of content that I find interesting, so having a list of topics that I need to cover helps me decide which courses to take first.

When I took the SQL exam, one thing that helped me relax was having the second shot offer, which lets you retake an exam for free; even though I didn’t need it, it was helpful to know that if I somehow screwed up and failed the exam it wasn’t going to automatically cost me $150. The most recent second shot offer expired a few weeks ago, so my plan is probably going to be to start reviewing this month and be ready to schedule the exam next time the offer comes around again. Or if it’s not available by this summer, I’ll probably take the exam then anyway.

In areas as diverse as finishing my PhD and learning to write a SQL query, setting a deadline is what helped me get it done, and that’s why I plan to pursue certifications.

Settings Goals in the New Year

I don’t believe in New Year’s resolutions.

It’s almost a cliché that these resolutions never work. We start off with good intentions, and maybe even keep them going for the entire month of January. Then something happens and we miss a day. We get frustrated. Having missed one day, it’s easier to miss another. And soon, the whole resolution is out the window and we’re mad at ourselves for again failing to meet our self-imposed obligations.

New Year's Resolutions

What I do believe in is small goals with deadlines, and systems. The goal “I’m going to finish writing my next book by the end of March” doesn’t work; the result is procrastination until the end of February, and then not doing anything in March due to guilt over wasting the first two months of the year and the impending sense of doom from knowing there’s not enough time remaining to actually finish.

Specific and Achievable Goals

The goal “I’m going to write at least 50 words for my book every day” is much more achievable. It’s not very much work, but more importantly, it doesn’t feel like very much work – how long does it take to write 50 words? It’s also specific – you know exactly what you have to accomplish (write at least 50 words) and when (before you go to bed each day). If you happen to write more than that, great, but as long as you write at least 50 words, you can go to bed feeding satisfied that you have met your goal. Eventually, this becomes a habit, so it doesn’t even use up your limited supply of willpower – writing 50 words is simply part of your daily routine, like brushing your teeth and (unfortunately) checking Facebook.

For the last few years, my goal has been to finish my PhD, which meant that I needed to finish writing and defend my dissertation. This is essentially the same problem as the writing a book goal above, with the added strain of being mentally challenging and requiring a lot of concentration. I often found myself looking at the desired end result – completing the dissertation – rather than setting small, specific goals, such as proving one lemma, and the result was that I never wanted to work on the dissertation; it simply seemed too overwhelming. Fortunately, I had an external deadline – the pending expiration of my earliest credits – which finally forced me to sit down, finish the dissertation, and complete the degree. So that was my big accomplishment in 2015 – after much procrastination, I finally completed one of my lifelong goals.

My Goal as a Developer

This year, I’m formalizing something I’ve been working on for a while – developing my skills as a programmer. I’ve been writing code professionally for the last five years, and lately I’ve moved into more of a leadership role on my team. This year or next, I expect to be promoted to Senior Software Developer, but I don’t yet feel like a senior developer; while I no longer feel like I don’t know what I’m doing, neither do I feel like an expert programmer.

The things I’ve been doing to develop as a programmer are not wrong – actually, I’ll be continuing to do them. Obviously, I’m getting more experience by going to work and coding every day. I read a lot – I’m currently working on Code Complete 2, which I somehow managed to avoid until now – and I recently signed up for a Pluralsight subscription. In other words, I’m getting the two things I feel like I need more of – knowledge and practice.

 

Code Complete 2 book cover

The problem here is that while these are good practices, they’re not specific. About three years ago, I picked up a copy of CLR via C#, and really enjoyed it. I picked up a better understanding of a few things that I was able to apply at work. One thing I never did, unfortunately, is finish the book; one day I just stopped picking it up, so I never got to some of the fun topics towards the end. Similarly, I had a free trial at Lynda, which I never really got around to using. I’m finding that I need deadlines to keep myself working on the things that I want to do, but that are less fun than, for example, watching Doctor Who or playing Tichu, or less urgent than feeding the dogs and doing the dishes.

So for this year, I’m going to give myself some recurring deadlines. They won’t be hard to keep up with – I don’t want to just miss one in January and then give up on the whole thing – but they will meet the following requirements:

  1. They will be specific. I will know exactly what I need to do, and when I need to do it.
  2. They will move me towards my goals. The goals might be nebulously defined (what does it really mean to be a better programmer?) but the deadlines will be for things that will point me in the right general direction. It might be more accurate to say that I’ll have mini-goals that will move me towards my main objectives.
  3. They will be small, to the point that it will be easier to do them than to berate myself for not doing them.

So, let me first start by defining my objectives for 2016. I’ll choose two: one long-term objective that’s work-related, and one short-term objective that’s not.

Objective 1: Finish planning for my trip to Europe. I’m taking sabbatical in a few months, and I haven’t yet figured out where I’m going to stay or exactly what I’m going to do in London. Thus, the first things I need to do to meet this objective are:

  • Select and reserve a hotel.
  • Determine how to get from London to Stonehenge. Make any required reservations.
  • Buy Oyster passes so we can get around.

None of these individually should take much time, but none feel urgent either – the trip was scheduled half a year ago, but they remain undone. So, this coming week, I will have the following deadlines:

Monday: Narrow down my hotel selection to no more than three (I already know the section of London I want to be in) and get my wife’s preference.

Wednesday: Make the hotel reservations. Determine how to get from the hotel to Stonehenge and make reservations for that.

Friday: Determine the rest of our transportation needs (most likely, this will be Oyster passes to get around London and then Chunnel tickets to get to Paris) and make those reservations.

Once these are done, I’ll set new deadlines for other things I need to do, like figuring out how to keep my devices charged and whether I can pack clothes for two weeks in a carry-on. Now for the long-term goal: becoming a better programmer.

Objective 2: Improve my programming skills.

The problem with this objective is that it’s hard to measure; there’s no test that says “you are 85% of the way to being a rockstar programmer!” Instead, I want to implement a system that will have me doing things which will tend to increase my programming abilities.

1) I will attend at least 10 development meetups or conferences in 2016.

Until 2015, I’d never been to a development meetup. This is partially because it’s inconvenient to get anywhere from where I live, partially because I’m very hard of hearing and tend to avoid group activities, and partially out of inertia. In 2015, I attended That Conference and one meetup each from the MADdotNET and Madision Mobile .NET developers groups and enjoyed all three, so this year I’m going to try to make it a monthly thing. At some point in the future I’d like to start speaking, but I don’t know yet what I’d like to talk about.

2) I will start updating my blog again.

I started whatwilliamsaid.com quite a few years ago, but I’ve never really been all that interested in blogging so I haven’t updated the site consistently. I’m going to start doing it regularly, for two reasons. First, explaining something is a great way to clarify your thoughts about it. Second, I’ll need to find things to write about; since the blog is going to have a software development focus, that means getting in-depth about lots of topics so I can write about them. For this goal, I’m going to say that I’ll spend a half hour working on the blog each week, and if a post is ready to go I’ll publish it. Further, I’ll publish at least two posts each month.

3) I will post at least one book review each month.

I’ve been posting reviews at Vulcan Ears Book Reviews since 2010, but never as much as I’d like, and I also don’t get as much reading time as I’d like; last year, I only posted two reviews. This year, I’m going to read and review at least one book (which may or may not be a technical book) each month; this will force me to stay on track with my reading, particularly since I have an easier time reviewing the type of book I should be reading (programming books) than the type of book I just read for fun (science fiction).

So those are my goals for the new year. They do sound a lot like resolutions, but have two advantages: they’re clear and specific, and they’re focused not on the end results, but on the concrete steps that I need to take to achieve my desired results. Next December, I won’t have a piece of paper that says I’m a 13% better programmer, but if I follow the plan, what I will have is more education and experience that will better equip me to meet whatever goals I might set in the future.