Filed under Programming

Salvaging Dead Time and Procrastiworking

The last few weeks have been another continuous episode of “too much to do, too little time”. Graduate school is a very interesting environment from a work and productivity standpoint. On the one hand I don’t really have a fixed schedule (outside of a few hours of class a week) and can work whenever I want. I also live close to campus so commuting isn’t a issue. However distractions abound. I’m not meeting with professors on as regular a basis as I was, but there are still lots of talks, colloquia and seminars that I find really interesting and want to go see. It’s very easy to have the day be perforated by lots of little things and never get anything done. However, there’s one trick that I’ve learned that in the past week or so that can mitigate this fragmentation and helps me get things done: salvaging dead time.

Salvaging Dead Time

I currently have a class that runs from 10:10am to 11:25am. Then I go to a lunchtime talk at noon. Taking out the 5 minutes or so to get back to my office that leaves about half an hour that would normally be wasted on Hacker News or Twitter. As a graduate student I need to have pretty long blocks of time to sit, think and get work done. Thirty minutes generally isn’t a lot of time to get brain-work done and hence this would be “dead time” – time that is just lost.

However half an hour is more than enough time to knock off errands. Today I filed two helpdesk tickets, processed email down to inbox zero, paid my power bill and wrote out my rent check. Not only did I get actual work done (and a little high from crossing them off my checklist) it means I don’t have to take out time for them later. I don’t have to devote separate time chunks to errands later and I can allocate that time to actual research work. I think that counts as an all-round win.

Procrastiworking

While knocking off errands works great to salvage small blocks of dead time (up to about half-an-hour) sometimes there are sometimes larger blocks of 1-2 hours that also needs salvaging. This generally happens around dinner – I don’t have a fixed dinner time. Hence there’s often this awkward state where I won’t be having dinner till a little later, but don’t have anything planned before. Normally that time would evaporate into nothingness, but I’ve been trying out a different technique to salvage it.

While an hour isn’t enough time to do real research work, it definitely is enough to do some programming exercises or go through a few more pages of Real World Haskell. Earlier this week I decided to finally sit down and learn Haskell seriously. I’m familiar enough with Haskell at the moment that I can get up and running in a few minutes. Doing exercises is challenging enough that it takes brain work and requires thinking and learning. However at the same I don’t feel bad about leaving in the middle for dinner (I can generally finish the program I’m working on before leaving). This is classic procrastiworking: I’m slacking off on what I really should be doing (research) but instead of digesting Twitter I’m doing something beneficial.

There’s also a small matter of me being lazy and using dead time as an excuse for slacking off. Even though I know I could use an hour for programming exercises I’m tempted to slack off anyway. I’ve been trying to use procrastiworking for that too. I start off doing something that is really not work: like updating all my git repos or cleaning up my Emacs config. But once that’s over, since I’m already at the computer in a terminal, dealing with scripts and code I just quietly move myself over to a Haskell file and start hacking. It helps if I leave an unfinished function that I can then fill in (or a TODO note).

In Conclusion

Salvaging dead time and procrastiworking isn’t a catch-all solution for time management but I’ve found that it works great for the small blocks of time that I would have been wasting otherwise. Of course, you can’t fill in the blanks unless you have things to fill them with. Personally I use OmniFocus to keep a list of errands that I can go through in sequence. I also have a “project” for the longer blocks – working on Haskell – that easily decomposes into blocks of just a few minutes in length that can be taken up and put down without too much buildup. Finally I hope that in this case practive makes perfect and I get better at making use of dead time the more I consciously do it.

Tagged , , , ,

Is programming a creative pursuit?

It’s becoming clear that we, as a society, are placing a larger and larger emphasis on innovation and creativity while at the same time bemoaning the lack thereof. There are some activities that we instantly recognize as creative pursuits: painting, music, writing, theatre. And also more modern ones: graphics, web design, info graphics and industrial design, font design and lettering. But when it comes to modern acitivities and professions one of the elephants in the room is programming. The question that’s been on my mind: is programming a creative pursuit?

Programming is problem-solving. It’s about coming up with ways to do things that couldn’t be done before (or at least doing them better). But that’s just the beginning. Once you figure out a way to solve the problem you then create something – a program – that embodies your solution. The program is what goes ahead and solves the problem, hopefully correctly and repeatedly. A program that only works once isn’t very useful. If you’re not creating anything, then you’re not a programmer.

That being said, I think there are some significant differences with typical creative work that needs to be made clear. For one thing, there’s lot less waiting around for inspiration to hit. There isn’t anything really analogous to writer’s block – once you have a problem to chew on you can get going. That’s not to say that you can’t get stuck or that it’s smooth sailing. Far from it, your typical programmer is pretty experienced in applying head to desk. When you don’t have a definite problem to solve it’s a different matter. Luckily there’s lots of interesting software that needs building and problems that need solving. To get out of the rut you just need to do a little Googling (or keep a little stash of side projects to hack on).

Perhaps one criticism of programming as a creative endeavor is that the products aren’t instantly identifiable as creative works. Perhaps if you spent a lot of time crafting GUIs you can make some comparison to the visual arts. If you’re writing server software or building programming languages the end results are far more abstract and invisible. But I’d make the argument that a programmer produces a work of art in the same way that a novelist or a poet does. Understanding that art requires the use of some more mental faculties — understanding symbols, structures, mathematics, semantics and their inter-relation. The process is perhaps harder than looking at a painting. But the payoff to the observer is no less than listening to, and appreciating a piece of music.

All that being said, one of the coolest things about programming is that you can use your programs to produce obvious art work, or write programs that will create art for you. As I’ve been exploring programming and computer science I’ve been thinking of programming as a medium for expression in the same way that music or art is a medium for expression. But more on that later.

Programming has some of the other hallmarks of other creative pursuits. You need lots of practice to get any good. When it’s time to actually create you need to isolate and separate yourself from the rest of the world or you just keep getting distracted. I think there’s an image of programming being dry and interesting only if you’re already into it while the classic creative arts are supposedly fun and energizing. I would argue that’s an unfortunate by-product of our social evolution. If you consider a creative person (or want to become one) I would say give programming a try. There are lots of ways to get started. Though the learning curve is certainly steep (and probably steeper than it needs to be) it’s probably not that much harder than learning to draw or play the violin.

UPDATE: Thanks to Jason Yosinski for pointing me to Hackers and Painters – a far more detailed essay on similar considerations by a far wiser person. Learn from the masters.

Sunday Selection 2011-09-25

Unfortunately work-related activities having been taking up a lot of my time and energy over the past couple of weeks. On the good side I’m gradually making progress towards figuring out this grad school thing. While work on a funny and insightful blog post to blow you all away I leave with you a brief tour of the Intertubes.

Society

It’s not gender warfare, it’s math Being a computer science graduate student I’m regularly confronted by the fact that there are not enough women in our field (and that doesn’t seem to be changing any time soon). Here’s a look at why and that needs to change and some work in the right direction.

The Fraying of a Nation’s Decency Sometimes we just need a reminder that we’re all human after all.

Web Technology

10 best @font-face fonts I think embeddable web fonts are one of the best things to have happened to the web in recent years. Think of this article as a good “getting started” guide if you’re trying to figure out what fonts to use for your own projects.

How to make a simple HTML5 Canvas game The canvas element is an even bigger improvement than web fonts. Like the name suggests, it gives you a general purpose drawing element on a web page. Combine that with fast JavaScript engines and you have a pretty decent game engine on your hands.

Video

QuakeCon 2011 John Carmack keynote If you’re interested in gaming engines or high-performance, down-and-dirty programming then you should take the hour and half to listen to John Carmack — the brains behind the Doom and Quake game engines.

deck.js lite: modern HTML presentations

Taking a page out of Don Stewart’s book I’m planning to release a project to the Internet every week or two. Most, if not all, of them will be open source and hosted on Github. I’ll be posting blurbs about them on this blog filed under a new category – Projects. Feel free to follow along or fork away.

Deck.js is a very cool project that provides a set of CSS and JavaScript templates that let you create clean, elegant slideshows using HTML. I’m becoming increasingly attracted to HTML as a general purpose documentation format so seeing like deck.js makes me really happy.

I’m currently using deck.js to put together a presentation for a class I’m taking, but while at it I thought I’d do some reorganization of the deck.js codebase to make things a little easier. The files that you need to include to use deck.js are currently spread out between a number of different folders meaning that as a user it might take you a while to figure out where everything is and what you need to include. So in the spirit of open source I decided to fork the repo on Github and create a ‘lite’ version.

This version (also available on Github under the same license) packs all the files into a single folder, shortens some names and paths and removes some things (tests and SCSS files) that users might not care about. I’ve also updated the introductory presentation to point to the new files so you can use that as a template for making your own slides. I’ve been talking to deck.js’ creator, Caleb Troughton and I plan to keep the ‘lite’ version in sync with the main repo so that you’re always using the latest and greatest.

If there’s anything else you’d like to see in a lite version (or just in deck.js in general) please let me know. I think the best days of the web are just ahead and having web-native slideshows is definitely a step in the right direction.

PS. In case you’re wondering: no, The ByteBaker is not going to become just an announcement board for my projects. However, graduate school is taking up a lot of my time and energy right now. Also I think it’s important that I keep to releasing one project a week. The best I way I can think of keeping to that is by documenting my progress online. Normal programming will resume soon.

Tagged ,

Bluebot: a simple HTML template

Taking a page out of Don Stewart’s book I’m planning to release a project to the Internet every week or two. Most, if not all, of them will be open source and hosted on Github. I’ll be posting blurbs about them on this blog filed under a new category – Projects. Feel free to follow along or fork away.

Over the weekend I took a few hours to set up a simple webpage on the Cornell CS department servers. While doing that I realized that I didn’t have a template in store for the occasions where I needed to throw together a page without fiddling for hours. I cobbled together a simple design for my page based on my personal website.

The result is Bluebot: a simple template designed for creating HTML5 webpages. It provides a set of CSS styles and web fonts along with some example HTML for writing clean, decent-looking webpages. It’s designed to be used for standalone pages, i.e. single webpages that are complete in and of themselves. That’s not to say it couldn’t be used or adapted for full websites.

Though the template is mostly black and white, there is a little bit of blue used for the borders and blockquotes, hence the blue. It also makes use of the Droid family of fonts provided via Google Web Fonts, hence the bot.

You can see what Bluebot looks like on the Bluebot project page. You can clone the Git repo or download a tarball from the Github page. I plan on continuing to add styling for the remaining HTML5 elements gradually. Feel free to fork, edit and send me a pull request.

Tagged , ,
Follow

Get every new post delivered to your Inbox.

Join 287 other followers