Starting at the middle
This blog is intended to document the development process of a software product I have written. The product is the Tarrasch Chess GUI. I may as well admit upfront that if you are not interested in chess and you are not interested in software or programming there won’t be much here to interest you.
I’ve called this first post “Starting at the Middle” because I am starting the blog in the middle of the development process. Ideally I would have started at the beginning (of course) but sometimes life isn’t like that.
I have been working on the Tarrasch Chess GUI for a little over two years. I have an acute memory of the decision to start out. Basically, I had broken my jaw (it’s a long story) and I decided I needed something to take my mind off both the pain and the food I wasn’t allowed to eat.
I had dabbled with chess software off and on for years, but never really developed anything of substance. I decided that had to change. I would build a general purpose chess workbench (that’s my personal definition of what a Chess GUI is by the way). It would be something I would be proud of, and something I would use a lot myself. In fact the basic inspiration was that this should be a chess GUI that worked the way I thought such a tool should work. I was not a big chess computing guy (chess yes, computing yes, chess computing no). One reason for that was that the existing tools did not make much sense to me. I just didn’t find them intuitive, and I hadn’t got over the hump needed to become expert with them.
How did I think a chess GUI should work ? Well you should start it and see a standard chess board in the opening position (existing tools do that). By default the piece design should be the same design used in most books (existing tools don’t do that). You should be able to move the pieces around freely making legal moves without other constraints (some existing tools allow that). From now on I’ll list just things that existing tools don’t do, or don’t do as well as I think they should.
It should always be obvious what is going on and what my main options are. Its should be so obvious that a help file is not even needed, let’s be honest they’re so rarely any help. It should always be obvious which side is to move. It should always be easy to abandon the current position and set up a new one. Setting up a new arbitrary position should be as easy as it can possibly be.
There should be a default opening book in place that has the main lines in main openings. Right from the start I should be able to immediately see how many book moves are available in any position, and also see what those moves are without having to do anything that isn’t completely obvious.
I should be able to start a game against a decent chess engine at any time from the position on the board, irrespective of how I got to that position on the board. It should be absolutely obvious how to play either as white or black, and that decision should certainly not have anything to do with whether white or black is to play in the current position.
Once I am playing against the engine it should be as much like playing a human as possible. I don’t want to know what the engine thinks of this position unless I specifically ask! On the other hand it is nice to know when the engine has actually thought about a move and when it has come out of the book, it’s a distraction if you find yourself guessing based on whether the engine takes its time or not. In fact the instantaneous nature of book move replies is itself a distraction, and should be disguised with a small delay. That is consistent with the idea of making it as much like playing a human as possible.
There’s more, much more!
The engine should not only let me know whether it has played a book move or not, it should let me control whether it always plays book moves when available. And if not, I should be able to control just how often book moves are played with some easily understood and modified metric.
Given there’s a book available, I want it to help me not just the engine! If I play a move that’s not in the book when a book move is available, I’d like the opportunity to reconsider, with a list of book moves, in order of decreasing popularity.
Making a move should be as easy as possible. If I don’t slide the piece into place my choice may be ambiguous. I don’t want the GUI to guess though, I want it to smoothly offer me a menu, with some rudimentary ordering at least. For example most popular book moves first, blunders last. After the move 1.e4 if I click on c6 why would a GUI guess 1…Nc6 ? (Chessbase 9 I’m looking at you). If it’s going to guess surely 1…c6 is a more sensible selection. But preferably it won’t guess at all and 1…c6 will be listed in a menu ahead of 1…Nc6.
Now playing an engine can be a little daunting these days. The best engines will beat up just about anybody. How can we make it more fun? Well for a start don’t give the engine as much time to think as the human! By default, give the human more. Furthermore the chess GUI should be a tool that’s totally under the control of the human. Please, let me change the time on the clocks any time I want, in a very easy way. Like clicking on the onscreen clocks! Let me control other things about the game too. Let me label the players names any way I want, by say, clicking on those names and simply editing them.
In the spirit of making the game more fun, why not let me swap sides when I am getting beaten up badly? The engine should just be a slave. Let’s see how it likes this horrible position I’ve ended up in!
Finally a word about the engine as kibitzer. I want to easily start this up at any time, even when I am in a game, so that the engine will effectively give me advice as well as commentary about its own thought processes. Very importantly, I want to be able to stop the kibitzer without clearing the kibitz commentary. That way I can take a breath, sit back and look at that commentary without fear of it being overwritten by new insights from the engine.
As it happens the diatribe above serves as a fair description of the first version of the Tarrasch Chess GUI. I released that version (V1.00a, more recently V1.00b, Tarrasch V1 for short) more than a year ago now.
I think it’s fair to say Tarrasch V1 has been well received. Many thousands of people have downloaded it. I get a steady stream of feedback from all over the world, most of it very positive. The people behind Rybka host Tarrasch V1 on the demo page of their website and indicate there that it is absolutely the easiest way to try out Rybka.
Unfortunately I haven’t yet met my goals. I am not (sufficiently) proud of Tarrasch and I use other GUIs more than I’d like. The problem is that there are some very important features missing from Tarrasch V1. I took some shortcuts in order to deliver something reasonable in a reasonable time span.
This blog is about delivering Tarrasch V2. Tarrasch V2 is intended to allow me to reach my goal by remedying those shortcuts. The goal is to deliver a more complete and useful tool, a really good chess GUI.
Subsequent posts are intended to describe in broad terms what is complete, and what is still missing, and to document the painstaking task of completion.
But for now I think I should write some more code…