Как инженерия программного обеспечения и вязание в основном одно и то же

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

Алгоритмическая природа вязания (и других текстильных ремесел) — наиболее очевидный аспект. Схемы вязания содержат инструкции, которые можно читать так же, как (псевдо-)код:

*k2,p2* around until you reach 10 cm from the cast on edge

по существу:

while total_length < 10 cm:
    knit()
    knit()
    purl()
    purl()
    total_length = measure_from_cast_on_edge()

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

Разработка схемы вязания или изменение существующей под свой личный размер — по сути — не более чем упражнение в вычислениях и геометрии. И поэтому это также может быть сделано как людьми, так и программами. Было бы неправильно не упомянуть здесь работу Custom Fit, где они, по сути, предлагают Индивидуальные схемы вязания как услугу. В этом нет большего сходства между хитростью и техничностью, не так ли?

Если мы более подробно рассмотрим ручное вязание, проявятся дополнительные сходства и аналогии между разработкой программного обеспечения/программной инженерией и вязанием:

И то, и другое обычно делается для решения конкретной проблемы (хотя делать это просто для удовольствия, безусловно, можно), и достижение этого решения выигрывает от некоторого начального планирования. Лично я ярый сторонник использования ручки и бумаги для обоих типов проектов. Отложите пряжу в сторону, выключите компьютер и сначала подумайте и набросайте. Снимите мерки, сделайте образцы. Какой фреймворк подходит? Какой тип пряжи будет наиболее целесообразным? Если заинтересованные стороны вовлечены: каковы их ожидания и ограничения? Как должен работать пользовательский интерфейс? Настаивают ли пользователи на использовании старых версий Internet Explorer? Чувствителен ли получатель шали к шерсти рядом с кожей? Действительно ли они дадут свитеру возможность ручной стирки, в которой он нуждается? Получение правильной отправной точки с первого раза значительно повысит как эффективность, так и удовлетворенность всех участников. Если что-то пойдет не так — вы всегда можете провести рефакторинг и начать заново. Код можно откатить, функции изменить, а кусок вязания можно переделать или переделать. Однако, в отличие от строк кода, пряжа потенциально более подвержена повреждению в процессе.

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

Как насчет контроля версий? Зафиксировав свой код (рано и часто ☝️), вы защищаете его в любом состоянии и можете вернуться к нему в любое время. Самое близкое, что вы можете сделать в вязании, это стратегически расположить спасательные круги. Любая ошибка после этого, и вы возвращаетесь к тому моменту, когда все было в порядке.

Общий ключевой аспект, который — для меня — является отличительной чертой любого ремесла: вы оттачиваете его со временем. Достаточно следовать онлайн-учебнику по написанию «Hello World» или набрасывать 10 стежков. Но со временем ваши знания, разнообразие инструментов, которыми вы овладеваете, и общее качество вашей ручной работы растут и позволяют вам быть более творческими, более интуитивными и, в конечном счете, более успешными в том, что вы делаете. Понимание того, какой короткий путь вы можете использовать, не ставя под угрозу целостность проекта, поймать ошибку и сразу же понять ее последствия, знать, как добраться до сути проблемы, зная, в каких деталях не заблудиться — все это расцветет при постоянных тренировках. И это потому, что и вязание, и разработка программного обеспечения действительно являются ремеслом. Сделано как мозгом, так и руками, создавая вещи, которых раньше не было. Поиск разумного способа заставить что-то произойти среди десятков возможных способов сделать это. Из этого диапазона творчества следует, что потребность в формальном образовании в ремесле более ограничена, чем, например. в аэрокосмической технике. Хотя, безусловно, есть преимущества в обучении основам, предыстории и некоторому контексту, это не является строго необходимым. И ремесло вязания, и ремесло разработки программного обеспечения определенно открыты для самодидактического обучения.

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

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

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

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

В-третьих, это материальность проекта. Вязаное изделие — это уникальный физический объект. С другой стороны, часть программного обеспечения может быть легко запущена в тысячах экземпляров по всему миру за считанные секунды.

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

Все аналогии сопровождаются оговорками, и все же мне любопытно: какие конкретные и в чем-то подходящие аналогии могут быть для другого ремесла, кроме вязания? Дайте мне знать!