Another new site

I didn’t get round to writing anything in September, not least because I was working on a new web site. It came about by coincidence, but since I started working on the first day of September I decided to give myself just a month to do it, from zero to usable product. Given my time budget for side projects, this is about 16 hours of work in total, so I’m quite pleased that I managed to get the project completed to a reasonable standard. Though I’m writing this in mid-October, I finished the project to schedule and then failed to write about it for a couple of weeks.

The site is called TaskMaster, and it’s a simple to-do list app. Unfortunately one of the things I didn’t fit into the month was work on documentation and usability, so it’s pretty much undocumented at the moment. One of the things I noticed in doing Anonymarks was how long the help text took to write: 2 hours wouldn’t be unreasonable for writing the copy, doing screenshots and basic layout work, and this is a substantial fraction of the time budget for the project as a whole. I don’t know whether this means I’m a good web developer or a poor copywriter, but it’s a lesson I’m going to take forward to the next project I do.

The TaskMaster concept is something I’ve used for some time, and I even had a web app that worked in much the same way a couple of years ago, written in Ruby on Rails. I had to ditch the web app when there was a Rails security scare and I couldn’t remember enough to make the dormant project safe. I’ve recreated it in Django, using Bootstrap to make the design less time-consuming.

The to-do list concept is something I’ve been refining for a while, very loosely inspired by ideas from Agile software development. It’s unusual in that every task on the list has to have a deadline, and once you’ve set it you can’t alter it in any way (except for a 1-hour cooling-off period). Tasks have importance weights added, which is intended to measure importance (impact of not doing the task) rather than urgency. Most unusually, the target isn’t to get every task completed by its deadline, but to get 90% (weighted by importance). The idea is that if you’re hitting 100% then you aren’t being ambitious enough with your goals, so 100% is regarded as a failure.

This isn’t an approach I’ve tested on anyone other than myself, but for me it works well. I like that it takes the pressure off having an enormous list of tasks to do and keeps the focus on honestly predicting what you’re going to achieve. The system rewards people who honestly appraise what they’re capable of and punishes people who load up the list with every conceivable task and then fail to complete many of them. It seems to me that people use to-do lists as if forgetting tasks was their biggest risk, when in fact I think that truly forgetting a task is rare. The real problem is that people procrastinate and use busywork to avoid unpleasant tasks, and traditional long to-do lists make this worse, not better.

I’ve made a new web site

For once, one of my side projects has been released to the public in a usable state. It’s a simple service that provides anonymous cloud bookmarks that you can access from any device, using only a passphrase.

I mainly came up with this as a way to try out using some Amazon web services, most notably DynamoDB. I’m pretty happy with the scalability story for DynamoDB, at least in simple cases like this where the model is a good fit for what I’m doing. The site seems pretty quick (I haven’t done any load testing yet), and the non-scalable Django portion of it is quite small. For moderate loads, it should just be a matter of cranking up the provisioned capacity in AWS. For larger loads, I could easily split across a couple of nodes and do some trivial load-balancing, because the only application state is in the DB.

I still don’t think I would be able to figure out how to do any more advanced modelling of data using DynamoDB. I’m used to thinking of data in terms of relationships between facts, and DynamoDB doesn’t make that easy at all.

As it stands, I’m suspending work on this project to do something else. I actually end up using it for myself, as something like a substitute for Delicious or Mozilla’s cloud bookmark service. There’s a lot more features I could put in to it, but I’m only going to put more work into it if people seem interested in using it. Contact me with any thoughts.

Kid’s can’t use computers—and it doesn’t matter

This article by Marc Scott on the state of computer knowledge among young people got me angry. All the more angry because, among all the bits I disagree with, I think he has a point.

In summary, he is arguing that the widespread belief that the young people of today are knowledgeable about computers is wrong. In Scott’s view, which I largely share, there’s a mistaken conflation of being able to operate a computer with having an understanding of computers. Although the next generation of people are comfortable using computers in their daily lives, they are helpless when it comes to performing non-routine tasks or anything technical. Any abilities they do have are spoon-fed to them and they have no ability to self-teach.

The first thing that bothered me about the article was the arrogant tone. There’s nothing wrong with a good blog rant, especially on a site you own. I know I’ve done a few myself. But the article seems to aim to right some of these misunderstandings, and if so the tone is working against this by being dismissive.

Combined with the arrogance there was a vein of mind-reading being applied to the author’s opponents. It makes for good writing to tell a story involving emotional colour, but the inferred (or rather guessed-at) thoughts of one’s antagonists can’t be used as a part of your argument without further proof. In the anecdote that leads the article, Scott eviscerates the character of a young woman who asked for help with her computer, just because he didn’t like the look on her face. His characterisation may be true, but it would be a stronger argument without this.

Putting aside these reservations, I find myself agreeing with the content but somewhat disagreeing with the prescriptions. I certainly agree that there’s a lot of ignorance out there, but I don’t think there’s ever been a golden age where understanding of computers was any better than it is today.

I think things look worse than they used to for two reasons. Firstly, there’s more broad exposure to computers as thus more opportunities for people to reveal ignorance. When I was growing up, people who had no affinity for computers simply didn’t use them. Nowadays, school and jobs and so on force people constantly into situations where they have to fix WiFi problems or display a PowerPoint with the wrong version of the software.

The other problem is something that I think Scott pretty much nailed: there’s a complacency in the way older people judge the skills of younger people. If you’ve never deeply understood computers yourself, then someone who can change the WiFi password probably looks pretty similar to someone who can program a WiFi driver—hence the tedious requests to fix printers that all software developers receive. Again, while this is a problem (and a particular problem when the complacency lies in the teachers who should be educating our children), I don’t see a reason to suppose there’s a decline here.

As to the proposed solutions: clearly anything that spreads knowledge is a good thing. Parents should encourage their children to investigate the world around them and teach themselves, in computing as in anything. But I’d prefer to emphasise teaching everyone the basics rather than trying to produce a few more people with advanced skills while demotivating the rest.

A future where everyone can program is a theoretical possibility, but not with the current state of technology. If it can work at all, I think we’re missing some advance that will make it possible for people to build customised solutions with far lower cognitive load than it currently involves. And while we’re speculating about such future advances, we can probably equally well imagine that the whole concept of programming as an activity will become as outdated as scribes copying books by hand.

In lots of fields of human endeavour there are purists with deep expertise who decry the lack of knowledge among the amateurs. The same thing is true of cooking, tailoring, home repair and car maintenance. Realistically, we won’t all become experts in these things, and I don’t see why programming should be any different.