Про домино и программизм
Недавно играл в домино с компьютером. Играл самым простым образом, не думая, выставляя любую фишку, которая подходит (назовем такую стратегию стратегией глупого игрока). Компьютер меня обыграл три раза подряд, поэтому я задумался. Мысли особой глубиной не отличались, поэтому спрячу их под кат.
И стал ходить так, чтобы после моего хода торчал кусок, которого у меня нет. Думалось, что хотя таким образом я и подыгрываю компьютеру (скорее всего у него есть такая фишка), но ведь после его хода, может быть, эта фишка сменится такой, которая у меня есть (назовем такую стратегию стратегией доброго игрока). Компьютер снова меня выиграл. Тогда я стал наоборот делать ходы, чтобы на поле были фишки, которых много у меня или на поле. То есть затруднял ход противнику (назовем эту стратегию стратегией жадного игрока).
Тут я бросил играть в домино, и стал думать, какая из этих стратегий является более предпочтительной и насколько именно. Обычно такие размышления заканчиваются расчетами на листочке либо написанием программки. Расчеты делать было трудно, а программу писать интересно. Поэтому я написал программу, которая играет три разных стратегии в одной игре. В результате получилось, что глупый игрок выигрывает в 29.4% случаев, добрый — в 23.9%, а жадный — в 37.8%.
Из всего этого два вывода: 1) жадным быть выгодно; 2) даже, если играть совсем по-простому, выигрываешь довольно часто (понятно, почему детские домино пользуются популярностью). Но в процессе я сделал еще один вывод, который будет интересен в основном программистам.
Дело в том, что когда я еще программировал в школе я специально учился выделять куски кода в программе и делать их процедурами. Даже специально время выделял для подобных тренировок. Процедурный подход к программированию и все дела. В результате научился.
Потом, уже в ВУЗе аналогично осваивал объектно-ориентированный подход, выделяя классы, организуя их в иерархию, настраивая области видимости. Это уже у меня пошло гораздо сложнее. Жонглировать классами сложнее, чем процедурами.
Ну так вот выяснилось, что при написании этой простой тестовой программы у меня код “сам собой” расползся по семи отдельным классам, самый большой из которых занимал 6 килобайт (но имел только два метода). Как-то и модификаторы области видимости расставились, и код закоментировался, и иерархия классов выстроилась. Буду тешить себя мыслью, что зачатками ООП овладел. Теперь надо двигаться к паттернам проектирования. :)
kukina_kat 2009-02-05T16:50:05Z
bukov_ka 2009-02-06T04:35:18Z
[deleted] 2009-02-05T20:31:52Z
kukina_kat 2009-02-06T00:43:52Z
А ООП и процедуры это все-таки из программизма. А в программизме ты типа специалист, по крайней мере, у тебя так в дипломе написано.
bukov_ka 2009-02-06T05:02:30Z