Lastweek I set out to see how many hours of programming work I could do in one week on CodeCombat, our multiplayer programming game for learning how to code. I clocked in at 120.75 hours. Here's the epic time-lapse video I generated from Telepath (watch in 1440p if you can):
I usually sleep for 8.5 hours a night. I thought that for this week I could be tricky, starting at 04:00 and sleeping later and later so I'd only have to sleep six times for maybe eight hours a pop. Not only did it totally work, but my wake times didn't advance as fast as my bedtimes, so I only lost 6.38 hours per day to sleep.
I thought this would make me tired and unable to concentrate on difficult programming, but energy and focus were actually really good except for one hour early Sunday night. I blame it on epic Viking metal and other super-energizing music, plus maybe the seven bars of 90% dark chocolate I ate. I had one or two cups of tea but no other caffeine, and I woke without an alarm every morning.
I hadn't realized I how much more I enjoy coding when I don't have to answer emails for a week. (Note the unread emails climb to 402 by the end.) Even fixing bugs, supporting Internet Explorer, and struggling with algorithms I don't understand are all fun when I know I'm going to win--that I'll solve the thing before anything can distract me. And listening to music is one of my favorite things, so having a week filled with just code and music? Wonderful!
Normally, I work a focused-but-relaxed 60 hours in a week. I doubled that last week, but I feel like I was perhaps three times as productive. I could keep the problems in my head without cache eviction due to memory pressure. (I mean, there wasn't anything else to think about.) With ever-deepening focus, I felt unstoppable. It was like getting 4.5 40-hour weeks' worth of work done in one.
Most nights last week I programmed in my dreams, with vivid Tetris effect one night of doing CSS tweaks. (One night I had a nightmare of watching a YouTube video and then panicking upon realizing I wasn't working.) Being that deep into my CoffeeScript, I found myself writing terser and terser code, since why do in five lines what you can obviously do in one? But as I coded, I didn't realize until too late that "obvious" is different between just-spent-120-hours-coding me and just-went-skateboarding me, let alone people are not me and may not even know CoffeeScript if you can believe that. Here's an example from spell_view.coffee:
I don't even want to show you what the old code was, because it was uglier than a cowbear. But it was three times this long and did half as much. To me, this new code is luscious. But can a sane coder really understand this? Where are all the commas and braces and parentheses clarifying the operator and method call and array precedence?
I had the idea to do this week a few months ago, but I wanted to wait until I could buy a freshly updated MacBook Pro to do it, since the old one was three years old and, though capable, pretty slow. After the laptop upgrade, I was surprised by how much more I wanted to work. The simple friction of slow builds and poor CodeCombat level simulation performance had been weighing down my enjoyment and efficiency this whole time. I'm never waiting three years to upgrade my gear again.
Man barely moves for a week, staring at patterns of light on a flat object and trying to make the patterns change. Every 2-4 hours, a stimulus is presented and he records how happy he is. He eats and sleeps as fast as he can so he can go back to looking at the lights.
(I have been tracking happiness for over three years, and this week's average of 7.03 / 10 is a full 0.22 points higher than the week I first started writing my book and learned to skateboard. Now, probably the best weeks are weeks when I wasn't at my computer consistently recording happiness pings, like the week I got married which was pretty much the best ever.)
I think it would be much harder if I was under any stress (like deadlines), but this was just fun, and there were never any points when I wanted to stop working. I don't think I could hit these kind of hours without trying to set a personal record, though. (My previous record was only 87.3 hours.) I doubt I could have focused on only coding, rejecting all other activities, if I wasn't making a public precommitment and time lapse video of it.
I talked about my preparations and planning in the previous post, which is exactly how it went down except that I kept waking up early. I asked for predictions as to how much I could do; friends guessed I'd do anywhere from 87.3 - 113 hours, with an average of 99.4. My wife Chloe wins the competition by guessing 113 (which was even higher than my own secret prediction of 112). So getting to 120.75 feels like an epic victory to me. Although my workweek offcially ended at 03:59, I couldn't go to sleep until 04:45 because I was so excited.
Oh, and if you're wondering about the videos showing while I'm sleeping: it's just my screensaver. I extracted still frames from some other YouTube videos with ffmpeg at 705 frames per second so that when played back in real time at three frames every seven seconds split across three screens, the main screen would produce a thirty-frame-per-second rerendering of the videos in time-lapse time.
I do not usually review any platforms or tools which come with a cost, but Code Combat offers a free Introductory Unit which can be used as a stand-alone unit of work so I will set my scruples aside! My school has purchased a Code Combat license which includes 11 Units of work in either Python or JavaScript with some web development units using HTML and CSS. The platform has students create games by typing in code, and progressing from one level to another once they have completed a previous level. Each unit varies in length from about an hour to complete to several hours of work. The units introduce basic programming concepts such as For loops, While loops, nested loops and so on. Concepts are introduced incrementally and learning can be very rapid. I use it for my grade 8 & 9 Computer Skills classes. A solid diet of Code Combat is not a very good idea, so I intersperse it through the year with applications and information literacy assignments.
This movement between abstract and complex and concrete and simple, and hopefully back again is described in the research literature as a semantic wave. Research into good practice in the classroom suggests that good teaching and learning requires a full range between abstract and concrete, complex and simple, and repeated waves over time. My own research interest lies in looking at what affordances technology may offer for meaning making practices in the classroom.
I have recently done an analysis of the lowering or strengthening of semantic gravity and density in one of the Code Combat units which taught web design skills (HTML and CSS). What emerged was a pattern not too unfamiliar in the classroom with traditional face-to-face instruction. The software was very good at explaining concepts, introducing an idea, such as a mark-up tag, and giving concrete examples so that students could understand what an HTML tag looks like, and what it does. Across the thirteen levels of the unit there were repeated movements between abstract and concrete as the software unpacked each of the concepts involved. Very little opportunity was given for students to explore the examples and try to reconstruct knowledge by, for example, creating novel tags. Only in the final two lessons was there any emphasis on encouraging students to build knowledge themselves.
This happens more often than we would like to admit in classrooms, but with digital platforms it is even more common. In fact this unit of work offers quite a decent nod at constructivist pedagogies with a fairly open ended final set of units in which the student is invited to use the knowledge they have gained to create their own web pages. When students construct knowledge, sound educational practice is to carefully scaffold this to help students draw valid conclusions. Experienced teachers are skilled at doing this, but educational software is not. Perhaps developments in Artificial Intelligence will render it more effective, but currently machines do not respond to what students are doing with much insight or facility. This makes the Instructional Design absolutely vital. If all the software does is help explain concepts to students, but never give them an opportunity to use that knowledge to reconstruct it in their own understandings and voice, that knowledge will never be internalized. Machines are ill-suited to this task. In this Code Combat unit of work the Instructional design does in fact give some opportunity to take knowledge of one tag, for example, and try it with another, or see what happens when the properties of tags are changed. There are in fact partial upward movements of the wave. part of the reason I chose Code Combat as a platform was that it does a reasonable job of explaining and giving an opportunity to practice skills, but it is clearly not enough.
Peer mentoring and collaboration is a powerful way to bridge the gap between the instructional power of e-learning software, and its somewhat less potent ability to foster constructivist learning practice.
Last year, my school ran our first family coding day to celebrate the Hour of Code. We had over 200 people show up for two hours on a Sunday to explore programming in many different forms. During most of this event, we had 12 separate sessions running at the same time, like a professional development conference. Our audience consisted of families with students in K-8, and our main computing platform was the iPad, although we did have two labs of desktop computers and some great offline computing sessions.
One of our guiding principles was 2:1 computing. Since this is a family coding day, we wanted parents and kids coding together on the same device. We capped the rooms at 24 and deployed 12 iPads per room. This was very important because the magic of discovery was shared between the paired coders. It warmed my heart watching grandparents and grandkids working together to solve coding puzzles in Kodable.
3a8082e126