Ten Months of Programming

November 11, 2012

Hacker School is a three-month program in New York focused on becoming a better programmer. My goal is to participate in the October 2013 batch of the school. In this post, I will outline my plan to become a solid programmer over the next ten months. I also expect that it will allow me to submit great application a year from now. 

I’m starting my schedule today – Monday, November 12, 2012 – and will end it on Friday, September 13, 2013. What are my goals exactly with this?

  1. To become a strong programmer.
  2. To develop an effective process to learn good programming fast.

I will be doing lots of public self-tracking to monitor my progress and keep me on track. (Mostly using Beeminder.)

I’ve broken these larger goal down into the goals below. At the core is the idea to spend a large amount of time programming and do so in a continuous, daily fashion. I will complement those goals with some productivity principles that should help me get a large amount done in general.

1. Spend 500 Hours Programming 

My most important goal is to spend 500 hours programming (or doing closely related activities as defined below). On its own, that should enable me to make a huge progress in my programming abilities. I have been working in 25-minute blocks with 4-minute breaks for a while, so this goal converts to 1000 blocks. A nice (and slightly intimidating) number!

I will be traveling for roughly five weeks in December and give myself three weeks off in 2013 until September.

This leaves the following goals. I will work Monday to Friday every morning (if possible) and do the following number of blocks:

- Do 4 blocks (2 hours) per day in November (W1 – W3; 12/11/12 – 30/11/12)
- Do 4 blocks (2 hours) per day in January (W4 – W7; 7/1/13 – 1/2/13)
- Do 5 blocks (2.5 hours) per day in February (W8 – W11; 4/2/13 – 1/3/13)
- Do 6 blocks (3 hours) per day from March to September (W12 – W40; 4/3/13 – 13/9/13)

(Note: I will some flexibility with this. For example, I can work on Saturdays if I don’t have the time on some other day. I can also work in the afternoon or evening if I have something in the morning. Finally, I’m allowed to work longer on some days to make up for other days. In general, though, I will aim to stick to this schedule as much as possible)

Hours spent on programming (including reviewing and writing technical blog posts):

some_text

2. Write Technical Blog Posts

Effort is one things, results are another. What will I have to do to make sure I learn as much as I can?

Taking a step back to reviewing concepts, solutions and problems I run into will be huge part of that. To force myself to really understand some of the issues I run into deeply, I will write regularly write blog posts about these issues. I will publish those posts on a separate blog which you can find here.

My goal is to write a minimum of ten such posts, but I hope to write more than that. The time I spend writing these blog posts will also count toward the 500 hours.

Number of technical blog posts written:

some_text

3. Schedule Review and Assimilation

Every day, the last block (25-minutes) I will use to process the information I learned in some way. This could be by drawing, diagraming, or some other learning method. I may also use spaced repetition to solidify concepts. How exactly I will go about this I don’t know. Part of the experiment will be to figure out the most effective learning strategy so I’m not setting too much structure at this point. I will, however, track separately these review blocks.

Hours spent reviewing and assimilating what I learn:

some_text

EDIT: I had a very hard time distinguishing between reviewing, learning something new and coding. I discontinued tracking this.

4. Attend four technical conferences, hackathons or similar and four startup-focused events

I also plan to attend at least four technical conferences, hackathons or similar events. At the moment, I’m thinking of the following two conferences:

  • DjangoCon Europe 2013 – Warsaw, Poland – 15/5/13 – 17/5/13 - Bought tickets
  • EuroPython – Florence, Italy – 2/7/13 – 8/7/13 - Bought tickets

In addition I will attend a few more startup focused events such as

  • Lean Startup Machine – London, England – 18/1/13 – 20/1/13 - Attended
  • Launch48 – London, England – spring 2013 – Not going anymore
  • Startup Weekend

5. Get Up at the Same Time Monday to Friday

To follow through with this schedule is going to be a challenge as I also have to finish my MSc at University College London and do my dissertation project next summer. A key thing to do this successfully will be to have good supporting habits.

The first of these will be to get up early and at the same time each weekday. I will set my ZEO wake time to 6.45 with a 30-minute wake window. (This means I will be woken up every day between 6.15am and 6.45am depending on sleep stages.) When possible, I will do the programming first thing in the morning, before eating breakfast.

I set up a rate on Beeminder of 4.5/week, thus allowing missing the getting up once every two weeks. (I can also adjust it in advance for vacation).

Days I got up between 6.15am and 6.45am:

some_text
6. No Computer Sundays

With all that programming and sitting in front of a computer I will need some good rest and recovery. As a powerful way to do this I will disconnect completely on Sundays. Every Saturday night I will pack away my computer and not take it out until Monday morning. Sundays will mainly be reserved to take my very cute and silly girlfriend to the park and watch her run around. If there is any time left, I can also read books, be outside, meet friends, cook and do anything else that doesn’t involve a screen and a keyboard.

(The one exception is if I attend a conference, hackathons or similar event.)

I’m also aware that at some point I may have to break this rule if something comes up that requires me to use the computer on a Sunday. With proper planning I should be able to avoid this most of the time, though. If something urgent does come up I’m allowed to do only that thing and then have to add it as a comment when I add the Beeminder data.

No Computer Sundays:

some_text

EDIT: I didn’t feel I got a lot out of this and decided to stop doing this in January.

7. Email: Inbox Zero and in one daily block

I’m also continuing two habits that I find super useful. The first is Inbox Zero (I empty my inbox completely each time I log in):

some_text

The second is timeboxing my email. (I only check email once a day, if possible late afternoon, and keep it to under 40 minutes):

some_text

8. Monthly Update Post

Finally, once a month I will write a short post on how I am doing with this project

Month 1

Next post: