Я заядлый папка с оригами. Я занимаюсь фолдингом с 6 лет, это намного больше, чем мой опыт программирования. Но сегодня я считаю себя больше экспертом в программировании, в частности, Javascript, и увлеченным оригами. На прошлой неделе я посетил конференцию OASIS и встретив там столько талантливых людей, я заметил, что между этими двумя навыками существует очень сильная аналогия.

Почему это важно

Я считаю, что в моей личности есть нечто очень важное, что движет моей страстью к программированию. Однако эта штука довольно аморфная. Я постоянно пытаюсь проанализировать это и выяснить, что это такое. Более того, даже в мире программирования меня не привлекают какие-то области. Мало кто из разработчиков программного обеспечения. Так что придание формы идеям, которые привлекают меня к написанию кода и разработке программного обеспечения, может помочь мне улучшить себя как в этой, так и в других областях жизни. Влияние оригами помогает мне увидеть эту точку зрения. К тому же это просто интересно анализировать.

Как складывается ощущение

Мне, наверное, следует проиллюстрировать, что значит быть папкой. Модели оригами чрезвычайно сложны. Для выполнения некоторых моделей требуется несколько сотен шагов, а на доведение до совершенства могут потребоваться десятки часов. Это требует сосредоточения на последовательности складывания в течение многих часов подряд. Складывая модель, которая вам нравится, можно целый день (или ночь) не есть. Некоторые входят в своего рода медитативное состояние, в котором мысли бессознательно блуждают, сосредоточившись на складках. Есть много технических шагов, однообразная работа. Большинство моделей являются симметричными (одни больше, чем другие), что требует повторения длинных последовательностей шагов с другой стороны. Некоторые последовательности складывания перемещают модель вперед в определенном направлении на десятки шагов, затем возвращаются, чтобы развернуть все, и повторять несколько иначе с существующими складками. Это утомительно, сложно, часто в течение долгого времени неблагодарно, поэтому требует большого уровня внутренней дисциплины и мира.

Итак, чем же оригами похоже на написание кода?

Нарушать правила

В первую очередь - очевидное - оба поля являются территорией творчества. Вы можете творить. Я верю, что творческие люди найдут удовлетворение во всем, что позволит им что-то сделать. Продукт менее важен, чем сам процесс. Но я забегаю вперед.

Мне больше всего нравится аналогия с влиянием нарушения правил. В оригами практически все модели складываются по инструкции. Нарисована трехмерная модель, и есть язык жестов, объясняющий, как следует перемещать слои бумаги. В программировании также есть язык, который дает вам инструменты, чтобы указать машине, что делать. Кроме того, существуют парадигмы и концепции, которые помогают абстрагироваться от того, как вы кодируете эти инструкции. Будь то языки более высокого уровня, такие как Javascript, Haskell, Python или Scala. Или это шаблоны проектирования, такие как pubsub, Composite, Factory. Или это может быть использование фреймворков и инструментов. Что в мире Javascript превратилось в абсурдную реальность множества проектов кода, претендующих на решение какой-то общей проблемы. Сегодня популярны React, Angular, Redux, Webpack, но скорость оттока высока, и во всем мире объявлено об усталости фреймворков.

В оригами очень легко сложить по инструкции и добиться великолепного результата. Художник, создавший модель, следит за тем, чтобы соблюдение инструкций гарантировало прекрасный результат. Но лекция Николаса Терри успокоила то, что моя интуиция говорила мне годами. Простое следование инструкциям приводит к копипасту. Сама папка не приносит никакой пользы, кроме как получать удовольствие от процесса. Это может быть достаточно хорошей целью, но, как утверждает Терри, именно это отличает хорошую модель от отличной. Очень важно привнести в модель свою страсть. И так в коде. Создание веб-сайта с помощью twitter bootstrap ведет к просто еще одному веб-сайту. Другой пример - неправильное использование фреймворков. Я был вовлечен в дискуссию между автором React Router и некоторыми пользователями об их потребности в дополнительных функциях. Райан Флоренс утверждал, что не собирался предоставлять эти функции, поскольку в этом нет смысла. Пользователи ожидают, что его программа будет чем-то не так. В стольких словах он говорит: Если у вас есть другие потребности, отличные от тех, которые, как я считаю, как создатель этого произведения, должны быть обеспечены - тогда, пожалуйста, возьмите его сами и улучшите его по своему усмотрению. Собственно, это и есть программное обеспечение с открытым исходным кодом. И этого боятся и разработчики, и папки. Есть постоянное ощущение, что вещи, которые делают другие люди, лучше, чем мои собственные. Но это ощущение только в нашем воображении. Большинство создателей программного обеспечения и оригами были бы рады увидеть разные интерпретации своих творений. Это придает их работе новый уровень смысла. Так развивается мир.

Искусство или ремесло?

Это заставляет меня задаться вопросом, является ли написание кода искусством. Потому что вы создаете что-то новое. Но я бы сказал, что написание кода само по себе не является искусством. Точно так же складывание оригами не делает из вас художника. Но как только вы начинаете бросать вызов правилам и давать свою интерпретацию, начинается самое интересное. Когда я работал над формированием волка Николаса Терри, я физически чувствовал, как я перехожу от следования инструкциям к работе, основанной на воображении. И это, я думаю, тонкая грань. Некоторые программы - это произведение искусства. Новаторские идеи, запечатленные в строках кода, можно считать искусством, если они являются продуктом собственного воображения программиста и приводят к какой-то недавно открытой идее. Умная абстракция, грамотное использование платформы. Когда он выходит за пределы определенного уровня сложности и очевидности, это разовое творение, полностью зависящее от психического состояния автора в конкретный момент создания. И это искусство. Мой волк не похож на волка из других папок. И по мере того, как я улучшаю свои навыки и ремесло, я открываю себе возможность создавать более артистичных волков. В процессе они могут трансформироваться во что-то еще. Но это зависит от моего художественного мышления.

Итак, как оригами, так и программное обеспечение позволяют развивать творческие способности на разных уровнях помимо технической. Ремесло превращается в искусство в процессе, если создатель только позволяет себе перестать следовать инструкциям.

Кто в подробностях?

Я был поражен вниманием к деталям, которое папки придают своим моделям. На каждом этапе процесса складывания необходимо внимательно следить за тем, как каждая складка совпадает с тем же миллиметром, что и должна. В отличие от программирования, в оригами это необходимо для успеха модели. Вы не можете найти выход из плохой реализации. Детали должны быть хорошо проработаны как в начале, при построении основы, так и в конце, при формировании модели. Здесь очень мало места для ошибки, поскольку неправильное размещение в начале может повлиять на десятки слоев бумаги и привести к деформации модели. А игнорирование детали в конце означает менее реалистичный результат. Удивительно, как можно складывать модель часами, а затем упускать детали в конце только для того, чтобы полностью упустить всю атмосферу модели.

Инфраструктура против приложений

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

Точно так же я обнаружил, что складываю эту модель блестящего израильского создателя Бена Голдбергера. Чтобы сложить снитч, нужно сложить утомительный узор посередине. У меня возникли трудности в процессе складывания, и я должен был принять решение - я могу продолжить с этой единственной моделью и грубой силой перейти к шаблону, или я могу исследовать свойства шаблона, чтобы найти лучшую последовательность складывания. Я видел, как много папок работали над этой моделью на съезде. У некоторых вообще не было проблем со складкой. Но те, кто это сделал, должны были принять это решение, и я увидел, как по-разному люди подходят к этой проблеме. Я думаю, что очень сильно стремлюсь к ответам, даже ценой завершения модели. Для меня результатом была даже не полная модель. Это была разгадка последовательности складывания. В какой-то момент мне стало казаться, что я вообще не собираюсь дорабатывать эту модель, что было очень неудачно. Я уже был готов отказаться от этого, так как не мог найти достаточно простого решения. Но потом я это сделал, и результат вы можете увидеть на фото. В другой раздвижной двери я мог бы это пропустить. И тогда у вас не будет этой картины, чтобы увидеть, но плоды процесса все еще останутся в моем собственном сознании, и кто знает, может быть, через несколько месяцев это помогло бы мне где-нибудь еще.

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

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