Однажды, сидя ночью за очередным проектом, попивая крепкий чай и слушая фоном приятную музыку. Я стал приходить к мысли, что создавая проект - я играю в шахматы сам с собой.
Что казалось может быть общего у программиста и шахматиста, подумаете вы. На самом деле очень многое их объединяет, а в некоторых моментах программирование даже лучше.
Начнем с того, что разложим на простые составляющие шахматы и программирование:
В шахматах есть фигуры и у каждой фигуры свое назначение. А в программировании есть переменные и функции, только в отличии от шахмат, мы сами назначаем их, и таких "фигур" на нашем поле может быть бесчисленное множество.
В шахматах главная задача обыграть соперника, а в программировании главная задача обыграть самого себя (да да, борьба идет с самим собой). Сложнее всегда играть против себя, так как все ходы известны на 100 или даже на 1000 шагов вперёд.
Однако преимущество партии в шахматы над разработкой в том, что в среднем партия длится не дольше получаса, а вот разработка продукта, пускай даже и самого простого, может занимать недели.
В отличии от шахмат, в программировании нет правил, которые могли бы в чем-то ограничивать, главный ограничитель только в голове. И поэтому перед тем как написать хотя бы строчку кода, ты в голове должен воспроизвести ее алгоритм, пройтись по нему от и до, а так же запланировать, как дальше ты будешь использовать ее в проекте.
И чем больше таких строчек, тем более сложный алгоритм прогоняется сперва в голове, а потом переносится на язык кода. И ровно, как и в шахматах мы не уследили за ходом соперника, так и в программировании мы не уследили за ходом собственных мыслей в процессе формирования алгоритма. Результатом этого становятся бесчисленные ошибки, зависания и прочие страшные слова для программиста. По сути, программист проигрывает сам себе в этой игре разума.
И именно поэтому, практически у любого программиста склад ума не хуже, чем у шахматиста. Программисты думают дальше, чем видят другие, и они очень часто бывают недопоняты, так как по привычке выдают результат своих размышлений, а не путь который они сделали, для получения этого результата. Будьте снисходительны к программистам, они просто думают иначе =)