
(or: Why Everyone Should Learn Some Basic Programming)
I am an organisational disaster area. I just can't remember "event
oriented" information (like "I need to do $foo" or "I need to do $bar at
$time"). I think I've accumulated such a huge collection of technical
trivia that it's taken over the event planning part of my brain --
although, since I've
never been able to remember event oriented
information, even before I became a computer geek, it's more likely that I
was just built without that bit of the brain.
So I guess I'm the perfect target market for some sort of external brain
pack (a la "Ratbert the Consultant"). I've tried paper-based organisers
(the mighty Filofax), a few pre-written apps, and I even bought an SL-C3200
Zaurus a while ago (although, to be fair, that was really just for the hack
factor, regardless of what justification I may have given to others at the
time). None have worked, for various reasons. I can't grep paper, and
Other People's Apps bug me because they've got their idea of workflow, and
I've got mine, and when they don't match up (and they never do) I just get
irritated -- not to mention the fact that the ubiquitous relational
database, while wonderful in some ways, does tend to get in the way of
ad-hoc faffing with your data.
But this article is a success story, not a rant (gasp!), so it's safe for
you to assume that I've got something that's working for me.
My method is real simple -- plain text files, managed by
vim-outliner and a simple shell
one-liner I've named 'pda', which just runs
vim ~/pda/$1.otl. At
the moment I've got a monster
todo.otl, which is my world's todo
list, and a deeply underused
calendar.otl. I'm also using
vim-outliner to do some project planning, which has been moderately
successful, although I'm a bit freaked out by the idea of trying to manage
a large-scale project using it.
The really, really cool part of this whole shebang, though, is that because
all of my data is (structured) plain text, writing little programs to parse
the data and do funky things with it is dead simple.
For example, in my project outlines, I put estimated, actual, and remaining
times in for all tasks (a la Joel Spolsky's
Painless
Software Schedules) so I can keep track of my estimates and where they
differ from reality (because one day I'd like to not Suck at estimating
times, and feedback is the only way I'm going to do that). So, about an
hour's worth of Ruby gave me "
estimator", a script that reads all
that data and does a pile of mathematical gubbins about how far over my
estimate I am so far (or under estimate, if that were to ever happen), the
percentage of the project complete (based on the estimates and number of
tasks completed), and things like that.
Similarly, today I wrote a small script (run out of cron in the wee hours
of the morning) to read my calendar and send me an e-mail if I've got
anything in there for today. Since I practically live in mutt, a morning
e-mail is going to be far more effective than my trying to remember to
check my calendar every morning (especially since, at present, I'm not
using the calendar as often as I should, so there's even less motivation to
check it).
This, in my opinion, is why everybody (literally, every single person)
should learn to program at some fairly simple level, like learning to read
and write. By using plain text and small scripts, I've got a workflow that
works for me, and it's cost me less time than I'd spend learning some large
pre-written app and putting all my data into it. Being able to manipulate
data like this is, I think, a fairly important tool in the modern world,
and I don't think it should be left to any sort of priesthood of developers
-- it should be as universal as most countries try to make literacy and
numeracy.