At the outset let me just say that this is one book that every serious programmer must read at some point in their careers, preferably sooner rather than later. Coders at Work is a collection of interviews with 15 of the most brilliant programmers on the planet. You can find the full list of people and some excerpts on the book’s website. As a teaser, the book includes such names as Donald Knuth, Jamie Zawinski, Guy Steele, Brendan Eich and Ken Thompson. It’s a impressive list and what’s more each interview is very well conducted giving a deep insight into both the person’s general ideas on programming and their particular area of expertise.
The book is the brainchild of Peter Seibel, the author of the very well written Practical Common Lisp which I can safely recommend as a good starting point for people starting to learn Lisp. Seibel’s interviewing style is very effective, the questions are always short and to the point but they help guide the person in question into providing a lot of very interesting and useful information. They are also fairly open ended allowing the interviews to flow in interesting directions, unique to each person. He asks some general questions to all 15, things such as how they learned to program, what were their hardest problems or bugs, how they go about debugging and what their idea of the current state of programming is. But he also asks them things about their particular area of work. For example, with Jamie Zawinski he talks a lot about Netscape and Mozilla while with Donald Knuth the obvious topics are his masterpiece The Art of Computer Programming and literate programming. There are also some questions that you wouldn’t always think about, such as how to spot programming talent.
What makes the book very accessible is that it keeps technical jargon to a minimum. Anyone who has programming computers for a significant amount of time will have no problem in understanding most of the content. For areas that are more esoteric the programmers themselves provide very lucid explanations making it quite easy to follow along. A lot of the matter is about things that each programmer encounters: how to read someone elses code, how to debug programs, how to collaborate and pass on projects, how to improve as a programmer, what educational/personal qualifications are most helpful, etc. The book isn’t just about how awesome these people are: it’s about understanding how masters of the craft rose to that position and how us mere mortals might follow in their footsteps. Seibel does a pretty good job of asking the same question that many of us programmers would like to ask them if we had the chance.
Beyond the structure of the interviews, the book is made amazing by the stellar choice of programmers. Not only are they master programmers, they have very diverse experiences and interests resulting in lots of very interesting and powerful opinions. I particularly enjoyed Guy Steele’s interview which contains a fair amount of philosophy regarding programming and computer science and Fran Allen’s call for computing to become more socially relevant. At the same time, Zawinski and Thompson embodied what can be best described as the classic hacker mindset: coding for the pure joy of creation and problem solving. Many of the interviews are humorous in some way or the other and none of them degenerated into holy wars or religious diatribes.
There is absolutely no reason why you should not read this book. There are some areas for improvement, but these are of a presentational nature (I wish the interviews were broken in segments so that I didn’t have to read a full one at a sitting). Content wise there is nothing I have to say. Will this book help you become a master programmer? Well, not in any tangible, measurable sense. This book is not a howto or a handbook. Each person had their own ideas of how to do things and many of them disagree with what could be called ‘industry standards’ (in particular how code should be formatted or structured). What this book will do is give a window into the minds of some of the legends of our culture. I’ve found it most useful to compare what these people have done and how they think to what I do and think myself. Essentially, read the book the same way you would read Benjamin Franklin’s autobiography. You won’t learn how to become a great statesman, inventor or Founding Father of a nation, but you can figure out some ways to live a better, more impactful life.
Coders at Work tells the stories of people who might be very well be considered heroes of our times. If you have an interest in becoming a better programmer, go buy this book, read it cover to cover, think about everything they say about their programming practices and experiences and see how you can use that to make your own experience better. And above all else, remember and act on what you read.
I really like Firefox. Despite the new slew of browsers showing of some very impressive competing technology, Firefox is still my browser of choice. I love it because it offers a consistent experience across platforms and the large ecosystem of extensions makes it a snap to bring parts of the web (Twitter, email) directly into the browser, cutting down on time spent and tabs used. Until some other browser grows a similarly impressive set of extensions I’ll keep to Firefox. With the Portable Apps versions, you can even take your personal, fully tricked-out Firefox with you wherever you may go.
Despite its general awesomeness, the one thing that continues to irritate me is the fact every now and then I have to stop work and restart. It’s probably not as bad as I make it sound, especially with the session management which makes it very easy to pick up where you left off. Of course, the restarts are for legitimate reasons: there’s a security update or I installed a new extension. Firefox is otherwise rock stable. However, even the once in a while restart can be very irritating, especially if like me, you are prone to the occasional bout of extension shopping. I went extension shopping when I started using Twitter a lot (to look for a good Twitter extension) and I went theme shopping to find something minimal when I got a netbook. There’s a lot of interesting stuff out there, but the problem was that every time I installed something I had to restart. That made browsing new adds-on a slow and rather painful experience.
I like the progress Firefox is making and commend the developers for making an awesome piece of tech but I really think that they should buckle down and just spend one point release on getting rid of the need to restart every time you install something. Some other extensible platforms (Emacs in particular and I think Eclipse too, to some extent) have support for installing extensions on the fly. Admittedly, Emacs is essentially a Lisp machine with a bunch of text editing primitives and I have no idea how Firefox is actually built. For all I know it could be a very difficult problem and might involve a significant rewrite and redesign. But difficult problems can be solved and I’m pretty sure much harder rewrites have been done in the past.
There is the possibility that I’m a lone minority and this restart problem doesn’t really bother anyone else. But I feel that this is more a result of people having gotten used to restarting than not really caring about the problem. Back in the day when I actually ran a Windows machine, frequent restarts were a part of everyday life. Things got considerably with Windows XP which wouldn’t suddenly freeze up at irregular intervals, but I still had to restart every now and then for a variety of reasons (mostly related to installing or updating software). Having been a full time Arch Linux user for the past 3 years, I’ve gotten used to not being forced to restart. I’ll only seriously considering rebooting my Linux laptop after doing a kernel upgrade and even then, I’ll wait for things to start not working right before I actually do restart. It’s far more likely that I forget to plug in my laptop and the battery slowly dies. Similarly, I often put off updates on my Mac Mini because I can’t stand the thought of waiting around for it download, install updates and then restart.
I will admit that things are probably easier to do when you have the freedom to tell the user to stop doing something and then restart. It means that you don’t have to worry about things getting overwritten or conflicts happening from trying to run the program while rewriting. As a developer, that peace of mind is something you’d be willing to pay a high price for. But that doesn’t change the fact that it is a nuisance to the user. And nuisances to users are by and large a bad thing. As developers I think we have a responsibility to give the user the best possible experience. Solving the problem of restart-free installs and updates is certainly a hard problem, but I think it’s one that is worth solving.
I got a tumblelog. Domain wise it’s part of my static site at Basu::shr. Behind the scenes it’s a basic Tumblr weblog with a nice looking theme and little else. I already have a proper weblog (this one) and a static website. I also have Twitter and Identi.ca accounts and I have a Friendfeed which pulls in updates from lots of different services that I use. So why yet another weblog?
The answer is that the web, especially the so-called Web 2.0 has been becoming more UNIX-like as time goes on. There are lots of different webapps out there, and the best ones focus on doing one thing and doing it well. It’s up to others to pull these webapps together via their APIs in a manner similar to the way UNIX shell scripts work. While this is in general a good thing, it can be a hassle for someone like me who would like to keep together all his/her online activity.
For a while I really wished there was One Great Webapp to Rule Them All. It would be this one great system into which I could put all my status updates, my pictures, videos, links, conversations and it would automatically send them out to whichever specific webapp they needed to go to. And much to my delight I found one just like that: Posterous. You send an email to Posterous containing whatever you want to post and Posterous can be setup to direct to a number of different webapps. This is a really cool thing, using email as a web equivalent of UNIX pipes. I tried it for a few days, and while I was happy for to start with, I came to realize some interesting things.
The first thing that I realized was email for all it’s flexibility and usefulness, it can be a bit tedious for some activities. If all you want to do is send out a 140 character update or post a video, it’s just a bit too much to switch to a mail client, copy/paste a link or type a message, select a recipient and then hit ‘Send’. Secondly, for conversation oriented media like Twitter, sending out your message is only half the problem and it makes no sense to use one tool to send out a message (email) and another to see incoming messages (another app or webapp). Add in the fact there are lots of small applications or browser extensions that do a really good job of putting on an easy-to-use layer on top of web services and email starts to lose its silver lining.
However, the greater realization I had was I that I didn’t necessarily wanted all my online activity pulled into one place. For example, this blog is about technology and my experiences with it and it’s not something that my liberal arts friends particularly care about. On the other hand, readers coming to this site to read about my adventures with programming languages probably don’t want to know all that much about what how the dining hall food is today or how tired I am after my creative writing class (things that go into my Twitter stream). I wouldn’t want to mix those two because the result would simply be a mess. I also don’t want to add things like cool videos, art or articles I find to either of these two unless I do want to blog about it (in which case I will write a post about it) or I really want my friends to know about it (in which case I’ll twitter it). By yesterday morning I decided that I still wanted to have an online, accessible record of stuff I found interesting (if anyone else really wanted to see) but I didn’t want to just dump it into the other streams.
Thus came about the tumblelog. I could have just stuck to my Posterous but I like Tumblr better, in part because of the gorgeous themes (which I hear can be used with Posterous, but I couldn’t find an easy way to do it) but also because it seems that Tumblr, especially the bookmarklet, processes excerpts from websites in a smarter way than Posterous. And I already had a Tumblr account that I started a few months ago, but I really didn’t use till now.
The way things stand now, here is how I currently use my multiple web services:
- The ByteBaker for long-form tech-oriented articles
- Twitter and Identi.ca for really short observations, ideas and messages
- Basu::Shr::Weblog as a tumblelog for recording interesting things I find online, mostly videos and images
- Diigo for interesting links that I want to keep a record of, but don’t care to actively share
- Friendfeed to pull together everything about (plus a few others) for anyone who’s interested
Considering that this isn’t the first time that I’ve done this dance, I won’t be too surprised if I changed this setup again soon. At the current moment, the services and the tools around seem stable and useful and I’ve been able to use them with very little mental overhead (which is very important for me). Only time will tell if this works out, but I hope it does. On a related note, I’ve also started decoupling Facebook from my online presence because I’m growing increasingly uncomfortable with their “Walled Garden” approach, but that’s a matter for another article.
Reading
Your Blog is Your Mothership With the rise of social media, tumblelogs, vlogs, Twitter and the like, it’s easy to think that the time of full-length blogs is over. This article takes the position that your blog is still very important if you want to make the most of the internet
Media
I’m a Technical Woman A simple but thought provoking video that came out of the latest Grace Hopper Conference.
Required Viewing for All Teens and Young Adults All I’ll say about this is that the title is self-explanatory
Software
Portable Firefox The browser scene has heated up recently up with browsers like Chrome and Safari making an appearance, but Firefox is still my browser of choice. A large part of it’s appeal comes from its extension and I find its functionality reduced if I need to be at a public computer. Thankfully Portable Firefox for OS X and Windows lets me take all my customizations with me.
Yesterday I started my first (and hopefully recurring) Geek Week. So whats this Geek Week I speak of? As a computer lover and technology geek there are a lot of things that I would love to do, but more often than not don’t actually get around to (for a number of different reasons). But it’s that time of year when colleges in the United States decide that they want to get rid of all their students for a few days and so declare Fall Break. While my fellow students will by and large be sleeping in and spending time with the folks, I’m going to totally geek out.
I have a number of projects on hold that I really want to make some progress on. Some, but not all of these projects are related to computers and code. Others are things which aren’t related to technology, but just that I would like to do. I wan to make it clear that this isn’t just another catch up on backed work time, I will be doing absolutely no school work (aside from implementing some algorithms) and will think as little about school as possible.
Another aspect of Geek Week is that I’m not working to a fixed schedule or deadline. While I want to get a lot done, I do want to enjoy myself while I’m doing it, so I won’t kill myself to be productive. I’m not ruthlessly scheduling or setting up extremely precise. Rather I’m just making a list of projects and I’ll be moving between them as I have the inclination. While working on a demanding project (especially a creatively demanding one) I’ve found that it helps to able to mode-switch to something else, if only for a while. So having a number of interesting projects at hand should be a way to get things done without burning out.
As you can imagine, this will also be an experiment in seeing how my creative process works. Since I’ve almost always worked in a school environment, I’ve never really been in a situation where I have the chance to do focused creative work around the clock (and even when I did I was generally more interested in relaxing or something like that). I’m going to try to keep an eye on how I’m working and see if I work best in bursts, or in long ‘flow’ modes or something in between. Ideally I would like to do this on a time scale longer than a week, but we do what we canwitht the time that is given to us.
I’ve already started on one of my projects and done some preparation for another. Before I go back to geeking out, here’s the mostly complete list of what I’ll be doing:
- Working some more on the problem analysis that I worked at over summer
- Building a static site generator (a la Jekyll) in Python
- Starting on a interpreter for a BASIC-like language to explore programming language design
- Reading Orson Scott Card’s ‘Shadow Puppets’
- Catching up on some TV thanks to the wonders of the Internet
Did I mention that I love Fall Break?
