Пытаясь изучить Angular 9, я недавно решил создать простое приложение Game of Life, используя этот фреймворк. Правила просты: в бесконечной сетке каждая ячейка сетки либо жива, либо мертва. Если в живой клетке более трех живых соседей, она умирает от переполненности. Если у него меньше двух живых соседей, он умирает от одиночества (малой скученности). В противном случае он живет нынешним поколением. Теперь, если клетка вначале мертва, она может стать живой в следующем поколении, если в настоящее время она окружена ровно тремя соседями. Вот и все. И естественный последующий вопрос: как выглядит эта симуляция?

Ну вот, пожалуйста:

А также:

И наконец:

Понятие

Игра в жизнь не является секретом как для ботаников, так и для инженеров (чтобы не сказать, что эти группы взаимоисключающие). Она существует с тех пор, как математик по имени Джон Конвей представил эту идею в 1970 году и породил множество вопросов и архив конфигураций, каждая из которых ведет к загадочной, но полностью предсказуемой закономерности. Но последствия и возможные значения моделирования здесь обсуждаться не будут. Вместо этого я попытаюсь защитить его силу учителя для начинающего разработчика и его удобство как чудо для опытного инженера.

Три качества

(Отказ от ответственности: это спекулятивно, анекдотично и стереотипно. Возможно, я обнаружил, что обсуждаю причину, по которой изобретение Конвея стало популярным в поп-культуре, а не реальную корреляцию между его врожденными качествами по отношению к некоему общему `` программистскому '' нраву '' . Тем не менее, мы идем вперед.)

Я считаю, что есть три качества, которые вытесняют моделирование по сравнению с другими в качестве отличительного признака задач программирования: эстетика, определяемость и сложность. В совокупности эти характеристики образуют проблему, которая стимулирует, приносит удовлетворение и прекрасна для решения.

Эстетический

Аномалия в области производства машин. «Игра жизни» Конвея буквально двоична и может быть полностью выражена двумя цветами. Тем не менее, это потрясающе. Его анимированная, бесконечная и обычно антропоморфизированная сетка может поглотить вас на часы среди бесконечного количества возможных конфигураций. На фоне научной тайны (я думаю, тайны мелкой, но все же…) движения работающей симуляции могут наполнить их создателя абсолютной гордостью после создания чего-то бесконечного.

Определимость

Возникает стереотип: программисты любят предсказуемость. Если бы языки кодирования были понятны только половину времени - если бы строки превратились в числа, а числа - в случайные строки, если бы компиляторы иногда читали назад, а не вперед, если бы в некоторые дни наибольшее максимальное целое число было 5 или знак равенства переставал работать, это было бы ты остаешься? Достаточно разочарований, когда какое-то осуждение отправляет ваши когда-то элегантные строки кода в бездну или когда забытый персонаж отнимает тридцать минут из вашей жизни. Но, по крайней мере, это объяснимо. По крайней мере, когда вы обнаружите эти ошибки, вы сможете понять, почему они произошли, и дать себе пощечину за то, что позволили им произойти. Когда художник проливает чашку кофе на свой холст, он обычно портится, но иногда становится лучше, и это единственный шанс стать прекрасным. Но когда я проливаю кофе на свой ноутбук, у меня никогда не будет возможности сесть, спокойно вздохнуть и сказать: «Знаешь, это может сработать».

А «Игра жизни» Конвея предсказуема - математически, визуально (хотя и скрупулезно), независимо от времени. Его правила ясны и лаконичны и могут быть тщательно протестированы. Если вы сделали это правильно, независимо от того, как вы это сделали, вы можете доказать, что то, что вы сделали, работает.

Сложность

Еще одно предположение: программисты любят сложности. Сложная проблема - это проблема, которую стоит решить после нескольких часов написания. После нескольких часов обдумывания возможных решений и уверенности в том, что каждое из них терпит неудачу, прежде чем смотреть в окно и обдумывать свой выбор карьеры. Но достаточно скоро вы продолжите с того места, на котором остановились, потому что когда-то вы узнали удовлетворение, которое приходит с богатым решением.

Однако все это в значительной степени. Некоторые проблемы скучны, некоторые тусклые, и, какими бы сложными они ни были, скука, необходимая для их решения, может не стоить того, чтобы ее решить. На самом деле, если на решение проблемы уходит пять лет, то, ей-богу, это того стоило.

Вот где сияет Жизнь. Это нетривиально, но и не безнадежно нетривиально. Его можно создать за день, и для него не требуются инструменты, соответствующие последним достижениям информатики (почему моделирование жизни существует с первых дней программирования). Проблема требует только преподавателей. Как вы визуализируете сетку, как вы определяете ее размеры, как вы отслеживаете изменения, внесенные в исходную (пустую) конфигурацию, и как вы переходите от одного поколения к другому? Вы позволяете сетке расширяться с новой жизнью или предоставляете фиксированную вселенную для манипулирования пользователем? Будет ли пользовательский интерфейс отличительным или минималистичным (или и тем, и другим)? Вы позволите изменить правила? И этот список можно продолжить, но каждый вопрос имеет правильный размер, и поэтому это идеальная проблема.

В консолидации:

Множество прекрасного кода и прекрасного вывода. Жизнь - один из примеров, когда оба верны. Эстетическая часть аргумента актуальна только потому, что проблема создает неожиданную картину из очень небольшого количества информации, которая может быть привлекательной для кого-то, кто пытается доказать, что информатика может иметь неотъемлемую художественную ценность, помимо того, что является простым инструментом для художественного дизайна. Он остается в сфере определенности и множества последствий (истина, предсказуемость и т. Д.), И это достаточно сложно, чтобы быть доступным, но все же провокационным. Я призываю всех, кто интересуется, добавить в огонь и отправить свой планер, космический корабль или щенка-андроида на край экрана своего компьютера в неизвестность. Это будет чесать ту часть вашего мозга, которая двигается, когда вы хотите быть творчески не творческим, когда вы хотите построить что-то одновременно жесткое и свободное. Если вы начинающий программист, вы можете это делать, и вы можете учиться на этом, а если вы эксперт, вы можете это делать и ценить это. В любом случае, при создании программы есть что-то, что нужно, поэтому многие добавили к ее концепциям и почему многие будут продолжать это делать.

Спасибо за прочтение! Если вы не хотите впечатляться, мой Github можно найти здесь, и, пожалуйста, не стесняйтесь делиться другими популярными программами, которые, по вашему мнению, стоят рядом с Life в зале (полезных) программных клише.

Бонусный узор (с ужасным вырезом):