I think the honest way to think of this is that: Playing chess is a really good way of figuring out who is good at playing chess.
But, the abilities and aptitudes that often help aid being good at chess can be valuable assets in becoming a good programmer. Strong sense of logic. Able to think multiple steps in advance and the consequences. A strong memory can be useful.
Where it might frustrate a chess player, is that chess lacks an element of imperfect information. Real world programming isn't a perfect self-contained world where everything is known. It is impossible to know every aspect of programming as well as the rules of chess. You'll write bugs, and bugs in other software will create unpredictable problems. Users will add a random element into how your software breaks. Malicious attackers will find holes in what you've written. Things will just break.
It's so much more than an abstract problem.
To airframeng: if you are interested in games with imperfect information, consider:
* bridge
* poker
* Twilight Struggle board game
These games hide competitor's positions and force you to reason about what your opponent's position could be, and not just what it is.
edit #2
Just thought of the perfect (pardon the pun) analogy. Chess has perfect information in the same way that a large code-base with 500k lines of code has perfect information. When I ask you how much time it will take to implement or refactor feature X, do you think you'll have enough time to read and learn the entire code-base before answering? How you approach that problem is almost exactly how you think through a position in chess.
edit #1
(tldr; chess teaches you to evaluate an overwhelming large number of options to evaulate and choose what you think is the best one in a reasonable amount of time, without having all the answers)
In all seriousness, the ability of human reasoning is finite and the skills that we apply to chess to deal with the seemingly infinite problem space apply very much to other things like programming. When we decide not to thinking deeply (e.g. multiple moves in) about a certain line of moves, it is because we do not deem them worthy of further thought, in the same way that I would, at an early stage, discard the option of refactoring an entire code base because, on the surface, the cost-benefit analysis is just too lousy. Also, in the same way that I can only think about 15-20 moves ahead at best along certain decision trees, I can only foresee and estimate so much of a software project before the limits of my knowledge and prediction power fail.
Chess is a game of perfect information where nothing is hidden from either side. Theoretically the white player should be able to win or force a draw every single game. It just doesn't happen that way in real life because to construct a tree of every possible move and counter move and then pick the optimal branch is hopelessly complex with this game. But for checkers it's doable (the best checkers players will play flawlessly and games are won or lost on a single mistake), and you probably already have tic-tac-toe figured out.
Edit: dang, ninja edit where you just said almost everything I said.
Chess is a lot of memorization once you understand the game. End Game/Open Game have to both be played prefectly at high end, or your opponenet will literally know how to defeat you.
I find Go translates more to programming since it forces you think about more abstract concepts like influence, when to/to not act. There aren't as many hard and fast rules in the meta-game like chess which allow more creativity and self expression.
---
The idea a programmer has to play Chess/Go is lot like the idea a programmer has to study advanced math. Really you are just learning logical problem solving, and rational ways of analyzing the state of a system.
[1] Go (disambiguation - the game, not the lang) https://en.wikipedia.org/wiki/Go_(game)
My opinion is that the only real predictor of how good someone is at chess is how much they have practiced, and conversely, the only thing that playing chess makes you better at is playing chess.
I've sunk a few hundred hours into playing chess, and the conclusion I arrived at was that the skills and mode of thinking cultivated by playing chess are largely non-transferable. Granted, playing chess has given me a few analogies for thinking about certain real-life situations, but I learned those in my first few hours of play.
Ultimately, I stopped playing chess. Perhaps this is an unorthodox opinion, but chess ended up being something I don't want to be extremely good at, simply because that requires a great deal of time investment, and I view the time I spent playing chess as largely wasted. I grew bored with the limited and mechanical nature of the game and quit. Haven't looked back. I think the reputation of chess as one of the greatest "thinking games" is severely undeserved. The vast majority of the game is about routine and mechanical/technical formalisms.
If you wish to practice your thinking or programming skills, there are much better ways for you to use your time (programming is one).
I still occasionally play video games, but I treat it more like watching a movie on Netflix. I usually only play through once on the medium setting, whereas in my early 20s I was very much a completionist, even for games I didn't much care for.
Yes, it's over 1500 years old and continues to amuse, but checkers is even older, and there's card games, and then Monopoly is basically just real life, so, that counts as eldest. What I mean to say is that chess is just another game, and just happens to be one of the old ones. It's a great game! But it's not like the holy incarnation of everything a game should be.
For people who defend chess's value by pointing to the enormous game complexity, the number of possible games / moves / etc, the same exact thing can be said of Super Smash Brothers and countless other multiplayer video games. Is Super Smash Brothers the greatest game in history?? (yes)
I think it's about mindset not skillset - games like these are about solving local problems ('tactics') to achieve a greater aim ('strategy'); people who are attracted to them are generally people who like the sort of problem solving that comes up in programming, hence the cross-over.
Your question, however was whether or not the skills translate - I don't think that solving daily chess problems or tsumego will do as much for your programming than solving programming puzzles (e.g. codewars), but the discipline of thinking through all possible paths ('reading') definitely helps.
I hack the game by playing crappy openings to get people off-book. If I could play nothing but Chess960[1], I'd be happier. Chess is buggy.
[1] https://en.wikipedia.org/wiki/Chess960 "... The random setup renders the prospect of obtaining an advantage through the memorization of opening lines impracticable, compelling players to rely on their talent and creativity."
I guess it's the memorization needed for the opening and end games. I memorize by exercise. The things I can rattle of the top of my head are usually facts and figures and formulas I've had to use frequently. With chess, it seems to require a significant amount of pre-memorization, the broader, the better. I have always resisted such memorization tasks, even as a little kid. I prefer understanding core principles and reasoning my way to the details on the fly.
Most people who know my work think of me as an excellent programmer, so if chess has an impact on programmer skill, it's at the very least not required.
Improved brain function? Yes, I believe so.
It has been shown in various studies that learning and excelling at chess changes the way that your brain is wired in a way that improves your analytical thinking and problem solving abilities [0].
Kids who learn chess at an early age, do better at math, for example. Personally, I played competitive chess at a young age (achieved Master level at age 17, which is good but not spectacular, before quitting to focus on engineering studies) and I do believe that my above-average analytical thinking skills to this day can partially be credited to the changes in my brain from those years in my youth spent studying and playing chess for hours.
[0] http://mic.com/articles/119332/how-chess-players-brains-are-...
https://medium.com/message/why-chess-will-destroy-your-mind-...
Nice piece about "chess sickness" and Duchamp (and he created less art and became more consumed with Chess) that echoes this post: http://thepointmag.com/2014/examined-life/exiles-game “Much of an exile’s life is taken up with compensating for disorienting loss by creating a new world to rule,” wrote Edward Said. “It is not surprising that so many exiles seem to be novelists [and] chess players.”
Additionally, I don't see the connection to programming.
If programming was that unforgiving I'd have to buy a new system every time I wrote a function.
I don't think that chess skills transfer to programming skills - I wouldn't recommend someone play chess as a way to get better at programming or vice versa.
Do I think being good at one indicates possible proficiency at the other? Maybe, but probably not. They can be approached the same way, at least below the grand master level - you can see each one as a series of small tactical problems to be solved.
However, some of the best programmers I've known weren't good at chess and the best chess player I've personally known was a mediocre programmer. So, anecdotal evidence is that the two don't correlate.
No, I don't think chess skills translate into anything - the only "real" skill I've learned is how to practice efficiently. It's a fun game and I play it for what it is.
Indirectly? Yes. Learning to think through the steps of an operation in terms of available and unavailable options is probably highly correlated to thinking about code flow. The major difference between a competent programmer and a non-programmer is that the programmer is used to specifying what is going on in a restrictive, typo-sensitive written language.
Would I advocate learning chess as a specific method to learn programming skills? No, not particularly.
Memorizing openings could mean that you will have an easier time learning standard libraries and syntax.
Realizing that some pieces can move certain ways that others cannot could make it easier to learn object-oriented programming.
Thinking several steps ahead and avoiding endgame stalemates could help you with loop-writing (or at least avoiding infinite loops).
But a lot of this is dependent on a particular language. I don't see chess being a lot of help with a functional language like Haskell. But an imperative language like C or an object oriented language like Java, sure. A good chess player will still have to study and learn like the rest of the world, but I'd put their chances of becoming a competent programmer above the middle of the general population.
Other games, like Robo Rally, translate to computer programming much more directly. Create a set of instructions to do what you want, sure. Then watch as chaos from others causes those instructions to do something totally unexpected. Then you have to figure out how to recover from it.
Or the Collectible Card Game model created by Magic: The Gathering. Each player takes turns having their instructions loaded and processed. And each player puts instructions on the stack, which are processed in order and can be interrupted.
I recently found lichess.org, which I heartily endorse because it's free software:
There really isn't much overlap between chess and programming. Programming is closer to an artisan craft than a sport.
I mean, sure, you can probably find a few strands which connect the two somehow, but really you could probably draw other weak connections to things like swimming or football or weight lifting, or for that matter even other unrelated subjects like painting or singing.
I guess chess involves visualising moves and developing tactics to force checkmate.
I'm not sure how much cross-over there is with programming skills though.
I once tried to write a simple chess bot, which was enjoyable, despite not getting very far, learning how to represent the board as a sequence of bits etc.
I'm unsure if chess gave me the skill or if having be ability to focus made me enjoy the game.
I'm a fairly terrible player, I played for a local team when I was younger and had the time (bottom series, sub).
I'm certainly a better programmer than a chess player.
That said I follow the game, love to play and the surrounding community of players so there is that aspect to it.
Math might be different.
From my experience in coding as well as hiring coders, I've actually found that the best programmers are those that can make deductive arguments quickly. Most argumentative people argue inductively with anecdotes, references to studies, analogies, etc. But when you find someone who argues deductively by slipping in premises for tacit or explicit agreement and then lowering the boom with an axiomatic conclusion, this person usually creates good code for me.
For computers, chess games are deductive problems where all (or almost all) possible moves (arguments) are examined to choose the best one, which is only made possible by binary brains. For humans, chess is extremely inductive - analogies, patterns, general underlying strategies albeit with changing particulars, etc. The best human chess players deductively analyze multiple possibilities of these inductive patterns (read Bobby Fischer - who I have not played, Tal Shaked - who I have played, and others on the amazing way they do this). So while the skill is not transferable, there are some similar aptitudes in good programmers and good chess players.
I know there's a holy grail out there of the ultimate programming skills assessment test, and I don't have it. But what I do is this: I give two programming problems (no language or syntax required at all, just the problem basically in comments). They have to solve it in a robust way (and every now and then someone comes up with a brilliant solution I haven't seen yet, although most people suggest the same stuff over and over again), and then they have to defend why the solution is good while I time them.
Most people can learn to think (and argue) deductively, but very, very few that I have found do this instinctively (and can thereby do it 10x faster than the average person). When I find someone who can even do it 2x faster than the average bear, I hire that person. It's just so rare.
I know that's not a perfect test, but as someone who both plays chess and also is constantly looking for a good indicators for programming skills, this is what I do. I've had pretty decent success this way. So who knows, according to my methods, maybe the best lawyers and philosphers are actually the best programmers.
That being said, I would probably be around 1000 elo (that is, absolutely terrible) but I am a halfway decent programmer so I think there's barely any correlation, if any at all.
I think there's intersection between chess and programming skill sets, but not significantly more or less than anything else using logic and attention to detail.