Thursday, January 19, 2006

I don't do New Year's resolutions. I don't believe in them 1 . Consider that people generally come up with these resolutions well before the New Year, but delay implementing them until that time. Why is that? Surely, if the resolution is a beneficial change in their lives, they would benefit most from implementing it as soon as they decided to do it. Then there's all the baggage that comes with calling it a New Year's resolution. That's just asking to fail, because nobody keeps their resolutions. In those apparent contradictions are the answer. People make New Year's resolutions for things they think they should do but don't actually want to do. Waiting till the New Year delays doing something they don't want and allows them to join a crowd of people all failing at once, reducing their guilt. It's win-win; they get the satisfaction of trying to do something positive without actually having to do it or feel bad about not doing it.

All of that is a long-winded, roundabout way of saying I have resolved to do a new thing, but this resolution is not of the New Year's kind. The main thing I took away from Paul Graham's latest essay was the idea that one should constantly be producing something. I've spent a lot of time thinking about various ideas, but little time in either following through on them or laying the groundwork for doing so at another time. I find it very easy to let a day go by without having accomplished anything productive (code-wise), and it's similarly easy to let a single wasted day become a wasted week. I won't have that luxury if I'm on my own; days and weeks like that could be fatal to an attempt to go independent. As a result, I've resolved that I must write some useful code every day. Always Be Creating 2 . It could be for my day job. It could be for some noodling around on my own. What doesn't matter so much as long as it happens.

There are several clear advantages to doing this:

  1. Self discipline and good work habits.
  2. Being a doer, not a dreamer. I've spent a lot of time thinking about things I could do and very little time actually following through.
  3. Experience and knowledge beyond what I might get through my job. This is especially important because the languages and technologies that will be most useful for me aren't ones I use at work. For example, if I want to create a client-side application, C# looks to be the best language to use. For building many kinds of web applications, the Java that I know is useful, but I suspect a more dynamic language such as Python will be better suited for the scale of what I'm more likely to attempt.
  4. Building a library of useful parts from which I could build other things. When the time comes to go off to try whatever fool idea I seize upon, I cannot allow myself to start from scratch. I need to have all my building blocks and tools ready. Otherwise, I just won't have enough time or energy. 90% of most software projects is plumbing, and most of that is the same with similar projects.

1 Which is to say, I don't agree with them, not that I deny their existence.
2 "First prize is a Cadillac Eldorado. Anybody want to see second prize? Second prize is a set of steak knives. Third prize is you're fired."

( me | longshot | software )

Monday, February 13, 2006
As I plot my escape from the rat race, it's essential to remember that world domination is not a goal. At best, it should be a happy side effect. A common characteristic of the big-talking blowhard who never gets anything done is that they will talk about how awesome what they're going to do will be. They'll talk about how much money they'll make, how famous they'll be, and all sorts of other things that focus on the desired effects rather than actual features of the product. I'm all for having your head in the clouds some of the time, but your dreams should be about how to make your product better. As soon as you focus on the effects you desire, they'll slip out of your fingers. That's important for me to remember, because I want a lot of stuff, and I think faster than I produce. What matters is making something good and useful, putting one foot in front of the other to make it better and more useful day after day. If that leads to a big payoff, that's wonderful, but I'll never get to the pot of gold if I ignore the rainbow.

( longshot )

Tuesday, April 25, 2006

I have restarted a side project that has been dormant for years. I'm taking a different approach this time. A lot of that is just plain knowing more than I did then. That means using better tools and techniques. It also means I'm taking a more deliberate approach. Partly for that reason, it's going to be longer before I have something to show, but it'll be of much higher quality if/when I get there. I've also had a few years to mull over what I want it to be, so I've come up with an idea or two that take it from a neat concept to something that might actually be useful.

The other reason it will take longer is that I don't have as much time as I used to. Really, though, the lack of time doesn't matter that much. The first time around, I had nothing but time, but I have nothing to show for it today. For most of us, it's not about finding time to do something. Just start doing it, and you'll find the time. There's a lot of slack in your daily schedule that you can squeeze out. Even an hour a day can go far. Constraints can make you more productive because you want to have something to show for the time. They can also make you more creative.

I don't know that it will amount to anything, either in terms of being either a finished or valuable product. That doesn't matter so much because at least part of the goal is just to do something. The sort of success that I want in the long term is not likely to come on the first try. Nor the second. If it was that easy, someone else would have gotten there first. It's not about any specific thing, but about making steady progress on something that is real and my own. I read an apropos Chinese proverb today: "Great souls have wills; feeble ones have only wishes."

( longshot )

Tuesday, August 22, 2006

Take a look at this trivial web application. It's just sort -fgu -t, -k2. I do something like that manually when I'm transcribing our shopping list, so I don't have to hunt through the list for the next item every 30 seconds. It's just a lot more efficient to go down a list. Even numbering the list is a big improvement.

I take two lessons from this. First of all, I've already had this idea. I've had the idea to make it a web-based application as well. In fact, I've had ideas built on this basic concept that would be enough to keep me working on it for years. I've elaborated the base concept so much as to make the end product fundamentally different. I've also made it big enough that there's no way I'll even start it, because what I'd be able to do in any short amount of time would fall so far short that I'd consider it useless. The above may be a trivial effort, but I have no doubt it will be useful to a number of people. It forms a nucleus for growing something more.

The other lesson is how obvious this idea would be in a slightly different context. Imagine you were programming a robot to do your grocery shopping for you. Any solution that didn't involve the robot fetching items in a similarly sequential order would announce your incompetence as a programmer. It's so obviously the right thing to do that any halfway decent programmer would do it. That to me suggests a business opportunity, or, more precisely, a whole category of them. Computing has lots of useful algorithms for efficiently sorting, searching, collecting, packing, etc. that can apply well to the real world. Most people, however, are not programmers, and even those that are can be distressingly narrow-minded about applying their knowledge to optimize their daily activities.

Now, you could easily say that I'm a software guy and so I see everything as a software problem. When all you have is a hammer, everything looks like a nail, right 1 ? You would be quite right, but you'd also be missing the point. What matters is that computing concepts can effectively solve problems people have in the real world. There's something special about computing in its broad, nearly universal applicability to just about any problem that can be coherently described. Besides, having a perspective that differs is a benefit rather than a handicap when trying to come up with novel businesses.

There's an example of this that you've probably already heard of: Getting Things Done by David Allen. Now, he's not a computing guy. That's not really relevant. A key part of GTD, as I understand it 2 , is keeping track of the status of all of your tasks. Every task is either:

  1. In process right now
  2. Waiting for you to advance it
  3. Waiting for some condition to happen (time, other input, etc.)
  4. Done
  5. Future
Those aren't quite the categories Allen uses, but it's pretty close. Along with this, you need some method for prioritizing what task to work on and how to handle the appearance of a task more important than the one you're currently working on. This sounds a lot like the process model that operating systems use to multi-task. There are a number of programs running at once with a single CPU 3 . Only one can be running at any given time. The rest are either waiting for input from the user, or sleeping in the background pending some event, like 3pm or the completion of a download. The solutions are similar because the problems are similar.

There are a million examples that I could come up with 4 . The principles are universal. That's obviously not the entire formula, else I'd be typing my letter of resignation instead of a weblog post, but it's certainly a start. What remains to be determined is which real world problems map well to which computing concepts; some of them are obvious, but I'm sure there are many surprising and subtle ones. Furthermore, though an algorithm may map well conceptually to a real world problem, turning that into a useful product or service is hardly obvious. There's a lot to mine there, and I'm certainly going to be keeping these ideas in the back of my mind.

1 Or, when all you have is a gun, everyone looks like a criminal, but that's a tangent too far even for me.
2 Caveat: I've only read the first couple of chapters. Jessica, who has read more, assures me that it's not all obvious from there (unlike many "life method" books).
3 In the general, personal computer case, though this is rapidly becoming obsolete. The general principles are the same, however.
4 Or, more accurately, discover.

( ideas | longshot )

Wednesday, August 23, 2006
Some time back, I mentioned that I restarted a project that had been dormant for a while. My interest lasted a few weeks before I dropped it again. There were a couple reasons behind it. It was an interesting project, but I just couldn't convince myself that it was useful. I saw too little benefit in sinking my time into a project whose main value would be as a curiosity. The other was that I just didn't want to take the time for this or any other project with such a low chance of amounting to anything. Uma's only going to be young once. I realize I may be closing a door forever (dramatic, I know), but she's worth it.

( longshot )

Tuesday, September 12, 2006

It occurred to me that detecting cheating as I just described could make for a fine business. You run it over the web, where professors, instructors, teaching assistants, etc. could upload their students' work 1 . There would be a remote API that allowed custom front ends on the submissions, for example to perform scanning and OCR on hand-written work. The service would be paid for directly by the institutions using it based on the volume of material submitted. They could also get added value from paying for comparisons across institutions and against sources like Wikipedia or published works pertinent to the topic. The general approach could probably be extended to check student work other than written essays, such as computer programs.

I like this because it's a real business solving a real problem that relies on none of the trendy "Web 2.0" features. There are no tags, no social networking, no mashing up, etc. The business model is simple and brings in money from the beginning. There are many ways to extend the core idea as well as integrating with related jobs such as grading. Of course, just because I like it doesn't mean I'm going to do it. It's too much work for too low a chance of success, and I have a little girl to play with.

1 Eventually, the students could just submit their work electronically through the site itself.

( ideas | longshot )