From time to time I’ve been recording voice memos. I find them to be valuable both when I record them, because I explore thoughts in a different way, and later, when I listen to them. It’s a convenient sort of diary for me. Here’s a snippet from a voice memo I recorded while I was driving from the Raleigh-Durham International Airport to the coast in a rental car, thinking about what I had just resolved to do, which was to learn things in depth, rather than just read web development news:

So, who shall I learn from? I guess, it doesn’t matter that much. What matters is that I learn, that I stick to learning, that I spend my time on real learning and that I don’t get lured into the kind of learning that isn’t that important. Now, it doesn’t help me to read Hacker News, and to poke around into every little thing that comes out…because, it’s rare that I learn about what comes out enough to use it on something, so what value am I getting out of it? Not much. And…it’s real easy to do that, because I’ve been lured into the idea that being a successful programmer is mostly about keeping up on learning everything new—not missing anything.

One poignant memory I have of not really learning something is when I read about rip on twitter. I went nuts about it, and I thought it was really cool that I had twitter and Hacker News so I could hear about it right away. Then, a couple of weeks later, I realized that I had done absolutely nothing besides read the article. I hadn’t even installed it. Meanwhile, in those same couple of weeks, I had spent maybe an hour a day reading articles I found on HN and twitter. I was really busy when I realized this, so I didn’t immediately go out and try it. Chances are, if I had any problems that could have been solved by rip, my knowledge of it would have got me nowhere. Because I hadn’t used it, I forgot almost everything in the article about it, except that rip is like virtualenv for ruby.

Now, a new one has surfaced: Node.js. I read some early articles about Node.js. I’ve downloaded it. I’ve even ran a couple of demos. But what I haven’t done is build anything with it. Now, everyone knows about Node.js, and many of the people who don’t pay attention to new developments like I did, know Node.js, while I don’t. What’s more, people who have been more proactive about learning and participating in open source projects, have people from other communities begging them to try Node.js. I’ve seen it happen. It seems that the information networks of those who genuinely participate in open source are fine without HN or twitter (though they may be enhanced by them).

One of my favorite web apps for finding news is TailRank. TailRank indexes thousands of blogs, and shows news that is that is being discussed by lots of legitimate bloggers. On their page, there are a bunch of stories, each with one main blog and a sampling of other blogs that reference the story. If you click on a link, it shows all of the articles that were grouped with that story. Usually, on pages that make the front page, there’s somewhere between 5 and 50 links to blog entries per story. Things that lots of bloggers comment on tend to be interesting. For example, today I found the following articles:

Each of these has links to a bunch of blog entries where different bloggers weigh in about the stories. Some of the stories attract blog posts where arguments are made. Others attract blog posts where people uncover different tidbits of information. Most are a little of both.

There are other things to like about TailRank — it has a great UI and is based on great technology. There’s a lot of information to be had on the front page. This is made possible because TailRank is well-cached. It’s very smart about which posts it lets into the system, and it keeps out many poorly-written and spammy blog posts. The UI is beautiful, from an aesthetic standpoint. The colors are great and it’s uncluttered. There are visual snapshots of each post. All around it’s an amazingly neat product. For what it does, it does a great job.

The founder has done a very good job of setting up infrastructure and putting together a programming team with a minimal investment. At first, according to him in a podcast he did (which also contains information on the caching), it was just him and he did some outsourcing. Now, according to an article linked to on the TailRank blog, he’s got one developer working with him in person in San Francisco. They’ve just released an API for using their blog search engine (short article).

Since I’ve been spending too much time on reddit, I have started using TailRank more, because a higher percentage of its articles are interesting. I think this is because reddit lets people frivolously increase the ranking of stories that they agree with, even if they aren’t interesting. To write a decent blog post about a subject takes time.

Another nice thing from a productivity standpoint is that it lacks comments in the reddit/Digg sense. It is in itself, focused on comments, though. It is a bit more difficult to write comments. You have to have a blog with interesting content and get it recognized by the search engines.

In my opinion it’s the best way to write comments, though. The person on whose site you’re commenting can’t delete your comment, since it’s on your on blog. They can delete a trackback, but they can’t delete it on TailRank. It also makes it easy for other people to find what you’ve written. And, of course, it’s better for marketing, since it brings people to your website.

Anyone who has poked around in the Scheme or Functional Programming community has no doubt heard about PLT, or at least one of its projects, which include DrScheme and the book How To Design Programs. PLT is a group of people spread across four universities that works on a number of projects, some of which involve making really cool software, and others which involve teaching programming.

They’ve created a complete graphical programming environment called DrScheme, which includes a Scheme interpreter, various Scheme libraries, and an IDE written in Scheme using their libraries. It even has its own HTML renderer that is used to implement the Help Desk feature of DrScheme.

They’ve used PLT Scheme (the umbrella name for the different distributions of their Scheme implementation) to build:

  • A PLT web server, which presumably is used to host their own website, which is well designed.
  • A Slideshow application, which Matthew Flatt uses for in-class presentations
  • PLaneT, a package repository for PLT Scheme

Four of them wrote a great introductory programming book, How To Design Programs, (HtDP) which covers a lot of practical programming concepts that were sadly skipped over in my C. S. program.

Using HtDP, they have a TeachScheme! project, which aims to “turn Computing and Programming into an indispensable part of the liberal arts curriculum” [1]. This is an important goal. Even if most people in other fields don’t program as part of their job, I think it’s a good idea for them to learn enough to understand the process of programming, as it often effects their work. HtDP starts at a level that most high school student ought to be able to understand, while still being interesting to a graduate of a state university’s C. S. program. That is an impressive achievment.

I think that in order to make a really good learning organization, you’ve got to have ambitious projects and invite all members to participate. PLT certainly has more than its share of ambitious projects – a Scheme compiler, language extensions, a portable GUI framework, a web server and application framework, a package repository, and an HTML renderer. The same could be said about MIT, with their wide variety of operating systems, graphics, and compiler projects. It should be possible for any school to work on something along those lines. The first step would be for a member of faculty to start an ambitious project, and invite students to participate (hopefully with pay for anyone who does substantial research).

To start an ambitious project, you need something to work on. Fortunately, there are a lot of ideas already out there, and it’s not that hard to come up with an idea. In the words of John Locke:

The acts of the mind, wherein it exerts its power over simple ideas, are chiefly these three: 1. Combining several simple ideas into one compound one, and thus all complex ideas are made. 2. The second is bringing two ideas, whether simple or complex, together, and setting them by one another so as to take a view of them at once, without uniting them into one, by which it gets all its ideas of relations. 3. The third is separating them from all other ideas that accompany them in their real existence: this is called abstraction, and thus all its general ideas are made.

John Locke, An Essay Concerning Human Understanding (1690)

A lot of programming projects are started by a programmer noticing problems that take lots of repetetive work to solve, and coming up with useful abstractions. Ruby On Rails was started this way. There’s a very good chance that the next big thing will as well.

[1] http://www.plt-scheme.org/