What Chess Has Taught Me

I have often expounded IRL about the beneficial lessons that chess teaches us but, oddly, I don’t seem to’ve written down any of those thoughts before. I’ll skip the obvious benefits of concentration and patience and such; here are some less obvious benefits:

Strategic planning
Everyone knows that chess teaches strategy. What I think many people don’t fully appreciate is how important strategy is in our lives. From anticipating what people will do in traffic to advancing one’s career to reasoning about foreign policy, strategic thinking is ubiquitous. The “if I do this, then he’ll do that, then…” thinking that guides chess play is also useful in a thousand other contexts. Many of the other capabilities in this list are really just refinements on the basic idea of strategic planning.
Accepting reality
Chess is very unforgiving. If you lose a piece, or a positional advantage, you can’t plead to get it back. It’s just gone. Chess players quickly learn how to accept a setback and move on, instead of pining after what might have been. On the flip side of that, a common mistake among chess beginners – especially younger ones – is to hope or assume that your opponent doesn’t see something that you’re planning. One quickly learns not to rely on that assumption, because they often find their pieces out of position when the assumption is proven false. Neither optimism nor pessimism is rewarded in chess; realistic assessment of a situation is.
This is really part of accepting reality, but it’s an important part. Anyone who plays chess regularly has no choice but to accept two facts. No matter how smart you are, you will always make stupid moves quite often, and there will always be players better than you.
Risk/resource management
One of the trickiest decisions that a chess player is often forced to make is whether to use a piece for attack in one part of the board, or defense in another. Incorrectly decide for the attack, and you might get a very nasty surprise in the vicinity of your king…checkmate, game over. Incorrectly decide for the defense, and you may be hanging your already-committed attacking forces out to dry…same result, but slower. A very acute sense of exactly how seriously to take a threat and what resources to deploy in defense against it quickly develops, and that same kind of evaluation can be very important in other endeavours.
Time management
This might come as a surprise to many people who don’t play chess competitively, but the most important resource in chess often turns out to be time. Competitive games are times, anywhere from one minute per game to several per move, and allocating that time is a critically important skill. Another common mistake among inexperienced players is to respond to the loss of a piece by trying to see how the loss might have been avoided. A more experienced player will know that what’s done is done, and analysis of the error can wait until after the game. Time must be spent on considering the next move, not the last one. Chess players also learn to recognize when something deserves a second look, and when it can or should be disregarded. This sort of prioritization of one’s thinking time is, again, broadly applicable in other areas of life.
This is probably the hardest part to explain. There’s a kind of time advantage in chess that is not measured in seconds but in tempi. That’s the plural; the singular is tempo. One tempo is one move that you can make that’s not responding to your opponent’s move; a common rule of thumb is that three tempi are worth one pawn. Putting your opponent in check, or threatening (perhaps very indirectly) to gain a piece often gains this sort of time, because your opponent must expend their own time responding instead of furthering their own plans. Many games are decided on the basis of initiative alone, especially in endgames where there are very few pieces left; if you can occupy a cutoff point just before your opponent does, it might well be your pawn that becomes a queen instead of theirs.
This same knowledge of how to gain and keep initiative, universal among good chess players, can be very useful in other contexts as well. Being able to put a competitor off balance and force them to respond to your actions instead of vice versa, can make a whole host of other possible disadvantages in your situation utterly irrelevant.

ertainly a danger in overstating or overgeneralizing these lessons from chess. The world would probably not be a better place if everyone treated every situation as a game to which strategy should be applied. However, much of our world does represent a kind of game, and for the reasons detailed above I think chess provides some of the best lessons for how to handle game-like situations.

Lafayette Pictures

I’ve put up some pictures from this weekend’s trips. Sharon’s pictures are here, and my own are here; clicking on a picture on either page will load a larger version. For those with slow connections who need to be careful about large images, here are some stats:

  • Sharon’s images: 1024x768x24, 100% quality, 213-584 KB each
  • My linked images: 800x600x24, 90% quality, 64-221 KB
  • My originals (send me email): 1600x1200x24, 100% quality, 1062-1712 KB each

I’ll post the crab-dip recipe when I get home. Thanks, all, for making this a great trip, and for helping Cindy and me celebrate our sixth anniversary (even if you didn’t know that’s what we were doing).

The crab-dip recipe is the last one on this list from last year. I figured people might like some of the others as well.

Brief Announcement

I’ve updated my links section. That is all.

Tangled Webs of Conversation

There seems to be a new form of debate popping up on the web nowadays, in which people each armed with their own blog1 fire rhetorical salvos at one another. I already added my own little piece to the Paul Graham “Revenge of the Nerds” debate, which involves at least the following people/articles (and almost certainly many more):

Another war, in the same format, is brewing around shadow economies, corruption, and open source. Again, here’s a guaranteed-incomplete list of relevant people/articles:

  • As near as I can tell, it started with Joshua Allen’s Why I Don’t Love GPL article on March 23, in which he refers to the “exchange” of open-source reputation/karma/mojo (my words, not his) as a sort of shadow economy.2.
  • Later, Joshua followed up with this email about the hidden agendas and the believability of claims of alruism.
  • Wes Felter took exception to Joshua’s comments, with a tone that comes across as “I’m in, you’re out, neener neener neener” to me.
  • David McCusker >went totally ballistic over it3.

This thread is actually very interesting me, and I hope to weigh in myself when I have more time. I’m not sure if I agree with Joshua, but I find his ideas quite interesting and extremely well presented. There is a certain cliquishness in the open-source and P2P communities that I find disturbing even when I’m its beneficiary. Perhaps I’ll try to tie together Joshua’s ideas about the desirable explicitness of monetary exchange with other ideas such as the explicit reputation system of Advogato and/or David Brin’s ideas about transparency. It’s an interesting idea complex, and I suspect there’s more violent agreement here than people realize.

The previous thread actually branched off from another one, that started with Aaron Swartz’s Standards Manifesto on the www-talk mailing list and is in the process of leaping over into Blogistan. Raph Levien has already posted a lengthy response in his Advogato diary and (as with much of what Raph says) others are likely to follow suit.

1Like everyone else I hate the word, but in the absence of better words it seems to’ve gained sufficient acceptance to be considered part of the official jargon. In any case, typing “log/journal/diary/whatever” all the time was getting tiresome.

2Josh, most linkage is to current articles, not to stuff old enough to be in the archives; a way to link to a particular still-current article would be really nice.

3Dave, good job on the per-article links, but I for one would appreciate it if you’d follow Joey’s excellent example and move the IronDoc-specific stuff to a separate blog where its sheer technical tedium doesn’t drown out the other interesting things you have to say.

Sole Survivor

The reason for the lack of updates here is very simple: Cindy and I spent the weekend hiking and backpacking in the White Mountains, far from any computers. In fact, other than offering to host pictures here on the website (soon), I pretty much didn’t even think or talk about computers at all. Yes, it felt weird once I realized it.

So, you ask, how was the trip? Well, Saturday was awesome. We hiked, with full packs, up the Falling Waters trail and along the Franconia Ridge to Mt. Lafayette, and then down to the AMC Greenleaf hut. Carrying a load over that kind of distance and elevation gain can be a bit of a chore, but we had a really good group of people and the weather was wonderful – an amazing thing, in an exposed place notorious for constant wind and sudden rain – so it wasn’t too bad. The weather was also excellent for yesterday’s hike out. In between, though…well, to be frank, Sunday kind of sucked. The plan was to go back over the summit of Lafayette (there’s no summit-bypass trail on this one) and across another ridge to Mt. Garfield. This is a particularly challenging up-and-down bit of trail even by White Mountain standards. In our case, we were walking on soft post-holey snow about half the time, without the level-terrain benefit that usually comes with hiking on snow, and we got pretty well soaked very early on the trip. That’s the point where I discovered that some of my gear – most notably my boots – was not nearly as waterproof as it should have been. “Gore-Tex, my ass” was a frequent refrain as I squished along. When we got to Garfield there was pretty much nothing to see, so we just turned around and trudged back. It’s one of those days where the journey is most assuredly not the reward; the reward is looking back after you’ve done it and feeling that warm glow that can only come from knowing that yes, you are most assuredly one damn tough son of a bitch.

Tough or not, though, my feet hurt. A lot. Not so much that I can’t kick any simpering desk-potato’s ass with them, but quite enough thankyouverymuch. Ow.

Mr. Balloon, meet Mr. Needle

Joey deVilla’s Happiest Geek on Earth has an amazingly funny little bit today entitled “Lisp is a good language…for me to poop on!” You might have to scroll down a bit to see it, because there doesn’t seem to be a good way to link to just that entry. Anyways…it’s a response to an article by Paul Graham about how Lisp programmers have bigger dicks than anyone else. Errr…or something like that; it’s hard to read the message through all the sneering. Whatever good points he might have made along the way, Paul definitely had it coming.

Problems with Government

The problem is not with our Constitutionally-defined system of electing representatives, who appoint civil servants, etc. That is as it should be because, as someone else already pointed out, we can’t give everyone a checklist with their 1040. Representative democracy is a way to cope with the many conflicts that arise between different parties’ interests, and even in this age of advanced communications we don’t have another method that can handle the numbers of such conflicts present in even a small nation. Direct democracy barely works at the town level.

The problem, rather, is with our implementation of that system. Specifically, accountability has been lost. Government has become so big that delegation is the primary rule of government. There are so many people to whom some level of policy authority has been delegated (often unconstitutionally, IMO) that neither congress nor the president can even keep up with the appointments – let alone the individual decisions of the appointees. Whole departments escape any elected person’s attention for years at a time, until some random event brings them to someone’s attention. Even then, there’s a certain reluctance on the part of the elected folks to meddle with a department or panel whose function and political allegiances they do not fully understand and can’t afford to take time learning about. The net result is that the chain of accountability between the people making decisions and the voters/taxpayers affected by those decisions has broken.

What’s the solution? Somehow, that accountability has to be restored. The paths from voters to decision-makers must be shortened. The problem actually bears some similarity to those that arise in distributed computer systems, but I’ll spare you the detailed analogies. Suffice it to say that the only way to decrease the depth of a tree is to increase its width, which means that any solution will probably involve individuals partipating in more elections. That might be hard to reconcile with the constitutionally mandated form of government, but then again we’ve drifted pretty far from that already.

original context

Y P2P?

If the goal here is really to eliminate the “Slashdot Effect” a much more effective solution would be to set up a network of load-balanced caching proxies on geographically distributed fat pipes.

Who pays for all that equipment and bandwidth? The idea here is not to solve problems by throwing resources at a problem, but rather to solve them by using existing resources as effectively as possible. The technology involved can be applied to any resource base. The technology-intensive approach using almost-zero-cost resources might well make significant headway against the Slashdot Effect, even if you still think your capital-intensive approach based on older technology is even better.

Another factor you seem to’ve overlooked is that software like CAW or BitTorrent are distributed for reasons beyond scalability. For example, consider the inherent attack-resistance characteristics of a highly distributed P2P network, vs. your centrally-administered servers. There are other goals as well, such as avoiding legal culpability or financial dependence on corporate benefactors to provide the systems and bandwidth. Whether you agree or disagree with those goals, the fact remains that many people believe in them. Networks like you describe are old hat, dozens have been deployed already, and yet a lot of people still want something different. You’ve proposed a solution to a different problem than the one Onion Networks et al seek to solve. There’s a term for that; we call it missing the point.

original context

Comments about Comments

The most important thing wrt to commenting code is to put yourself in the reader’s shoes. What would that reader need to know that’s not obvious from the code? One useful exercise is to pretend that you’re leaving your job and you’re doing a brain-dump for the (reasonably bright) person who will inherit your code. Your goal is to anticipate every question they ask or suggestion they make, in the form of a comment. If they’re likely to ask what something does or how it works, add a comment. If you add code to fix a specific bug then add a comment; obviously you didn’t recognize the need for that code at first, or else there wouldn’t have been a bug, so the next person probably won’t either unless you comment it. If they’re likely to say “this would be better if xxx” but you already tried xxx, put in a comment that says “we already tried xxx but it didn’t work because…” IMO that last is the single most useful kind of comment because it saves someone from going down a blind alley. BTW, the same “role-playing” approach works really well for specs too.

Another important skill is knowing when not to comment something. If it’s blazingly obvious what something does and how/why it does it, don’t comment it. If there are too many comments, the person reading the code will often decide that reading the comments is a waste of their time and they’ll just start ignoring them. Then they’ll miss the one comment that really does matter. If you must be verbose in your commenting, at least use some sort of visually obvious marker for really important “you’ll break it if you ignore this” kinds of comments, to distinguish them from the less important stuff.

Lastly, don’t be afraid to spice up your comments. Be totally candid about stuff – yours or someone else’s – that you think is brain-dead. Make wisecracks and in-jokes, within the bounds of good taste and brevity. People are more likely to read your comments if they can occasionally get a chuckle out of them. They’re more likely to enjoy working on your code, and speak well of it/you when asked. These are all good things – for you, for them, for your employer or client. Coding can be dreary enough without robotic comments.

original context

Slow Times at Platypus High

I know I’ve been bad about adding stuff here lately. Funny thing, though, is that I have been writing plenty on the web, it’s just been other places. I need to get back in the habit of recycling the stuff I write elsewhere into articles here, which used to be the backbone of the site. Right now I’m going to spam all of you with a flurry of such imported articles.