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.
I don't think he thought it through very well.. But if being generous because in chess you have to memorize lots of openings and if you want to know lots of languages there's a bit of memorization aswell.
I enjoy chess (though I haven't played much recently). I definitely see similar skills in both cases (lining up multiple steps to achieve my desired goal). But it's hard to tell whether or not playing chess makes me a better programmer.
Yup, I love playing chess, I play most weeks against a friend.
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 play chess. Bet that's a shocker when you look at my user name...
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.
I like the idea of playing chess a lot more than the reality of it. I usually go through a period with games where I don't understand them, find them bewildering, spend a short time on my own to learn the rules, then I'm good to go and can quite enjoy the game. Even with watching pro sports, if I at least know the rules, I can follow the progression of play and know when good plays happen. With chess, I've tried to read about it and learn how to play more than just the basics of moving pieces and still, I still don't "see" the game.
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.
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.
Another Go [1] enthusiast here, I never really got into Chess (here and there it was a bit of fun) but it never captivated me like Go. Chess is like a toy, Go is like an object of beauty.
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.
I occasionally play, and I'd like to play more. I don't think it specifically helps programming, but it does get me to concentrate on one thing only for an extended period of time (or lose!). Plus, you never know when you'll need to beat someone at chess to prove that you're the alpha nerd :P
The most interesting I've gotten out of chess is to learn that analysis creates its own vocabulary: flight square, pivot square, backward pawn, dark-squared weaknesses, etc.
I think the best programmers get more enjoyment from programming than playing chess.
I second that. I never had much interest in learning to play chess well. In my case I guess it's about when programming I work towards a specific outcome I find interesting for some reason. Winning/losing isn't an interesting outcome for me.
Only when I implement the n-queens problem in Haskell ;)
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.
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.
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.
I stopped playing chess years ago. It's an interesting game but newer games are more interesting. It's essentially an ancient form of the "Tactics" game type.
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.
If you're asking this as a hardcore chess player interested in getting into programming, then you should just jump in and give it a try. If you are trying to play chess to increase your "programmer's IQ" then I would recommend passing.
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.
I've never understood the 'imperfect information' thing when discussing chess. Chess _as played by people_ is full of hunches, uncertainty, prejudice, intimidation. Just look at how Kasparov played or Lasker, to see how important psychology is to chess. Or go down to Washington Square Gardens and play under the glare of dozens of people tutting at your every move.
Yes, but the possible input to a chess game is strictly limited - one player cannot just change the way a piece moves or introduce a new piece, and thus, it is not taken into account in any strategy. These sorts things must be taken into account when programming.
This is how a chess player thinks. "Jesus, why did she play that? She must have seen something I've missed. Shit, if I had more time I'd be able to figure it out. Damnit, I'll just move my knight back, that way my king'll be safer. I'm sure there's a better move but I can't find it now, and I think my ass went to sleep."
Change a few words, and it's pretty much a typical thought process when coding for me.
Bughouse chess might fit the bill in this case. If you're not familiar, there are two boards with four players, with teammates playing opposite colors on each board. A captured piece on one board can be held in reserve by the teammate and played on any subsequent turn on any open square on the other board.
Perfect information doesn't preclude the human element. It is a technical designation: each player has the entire knowledge of the game history up to and including the current state.
"Where it might frustrate a chess player, is that chess lacks an element of imperfect information."
Any chess player worth their salt deals with imperfect information, and has to manage risk, make kludges, pick imperfect paths, deal with the clock etc etc.
Right, however none of that has to do with perfect/imperfect information.
To quote Wikipedia: "In game theory, an extensive-form game has perfect information if each player, when making any decision, is perfectly informed of all the events that have previously occurred."
This is a technical designation, it has nothing to do with the future, only the past and current state.
Yes, to be a good chess player you need to be able to evaluate your opponent and make subjective determinations. Yes, your strategy is probably imperfect. But the fact remains that you can see the entirety of the game board and you can write down the history of moves, so you have perfect information.
My point is in the context of a discussion about analogies about chess and software dev - if you're good at one are you good at the other etc?
In this context the fact that chess has perfect information in a technical sense is irrelevant, since chess as played is so much more than a game about digital information.
I don't understand the imperfect information thing. The whole game is assuming what the other player is attempting to do. Can't the other player not acting how you predicted be considered a bug? Or is this more formally defined than I'm aware of?
Information in this instance is the current (and past) state of the game. Poker is an imperfect information game because you can't see your opponents cards, and you can't see the cards in the deck. Chess is a perfect information game because you know where every piece is, nothing is hidden.
If you believe that "everything is known" when playing the game of chess, I suggest you challenge Magnus Carlsen for the title of best player in the world right now!
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.
I don't think this is quite what was meant by the "everything is known" comment. I may not know what Carlsen is going to do for his next move, but I could certainly come up with a list of every possible move. The rules of chess won't change in the middle of the game and he won't suddenly be able to castle twice.
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 game of perfect information" - perfect but almost infinite/impossible to calculate even for the most powerful computers, within a finite timeframe. The number of legal chess positions is 10^40, the number of different possible games, 10^120. As a comparison, the number of atoms in the observable universe is estimated to be between 4×10^79 and 4×10^81.
I do play, though not as much in the past year or so.
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.
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.
Maybe indirectly, in that you probably get better at Hard Activity A if you get out of it often and focus on Hard Activity B. Sort of like dreaming to sort out your brain for the next day.
63 comments
[ 0.26 ms ] story [ 127 ms ] threadNo, 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.
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 recently found lichess.org, which I heartily endorse because it's free software:
https://github.com/ornicar/lila
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.
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.
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)
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.
I think the best programmers get more enjoyment from programming than playing chess.
If programming was that unforgiving I'd have to buy a new system every time I wrote a function.
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.
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.
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-...
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 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.
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.
It's so much more than an abstract problem.
Change a few words, and it's pretty much a typical thought process when coding for me.
"Where it might frustrate a chess player, is that chess lacks an element of imperfect information."
Any chess player worth their salt deals with imperfect information, and has to manage risk, make kludges, pick imperfect paths, deal with the clock etc etc.
To quote Wikipedia: "In game theory, an extensive-form game has perfect information if each player, when making any decision, is perfectly informed of all the events that have previously occurred."
This is a technical designation, it has nothing to do with the future, only the past and current state.
Yes, to be a good chess player you need to be able to evaluate your opponent and make subjective determinations. Yes, your strategy is probably imperfect. But the fact remains that you can see the entirety of the game board and you can write down the history of moves, so you have perfect information.
[0]: https://en.wikipedia.org/wiki/Perfect_information
In this context the fact that chess has perfect information in a technical sense is irrelevant, since chess as played is so much more than a game about digital information.
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.
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.
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.