Выбранный нами язык программирования может изменить наш взгляд на проблему и то, как мы взаимодействуем с ней.

Разные языки предоставляют разные способы моделирования сценариев реального мира и могут иметь огромное влияние на скорость итерации и масштабирования продукта. В этом блоге инженер Canva Джош Либ-дю Туа объясняет, почему он изучает Rust и как изучение новых языков может принести вам пользу в долгосрочной перспективе.

В первые дни Canva наша кодовая база состояла из Java для серверной части и ванильного Javascript для внешнего интерфейса. Этот подход хорошо работал тогда, но было бы невозможно масштабироваться до количества инженеров, которое у нас есть сейчас, и оставаться продуктивными, если бы мы не адаптировались.

Итак, мы внесли некоторые изменения в наш стек технологий. Мы заменили Javascript на Typescript с React, представили Kotlin и Swift для наших мобильных приложений и добавили другие для специально выбранных целей, например, Scala для нашей команды по науке о данных и машинному обучению. Мы не боялись вносить эти изменения, и это позволило нам масштабироваться и развиваться, сохраняя при этом продуктивность. В прошлом нам нужно было адаптировать наш технологический стек, и, возможно, нам придется снова частично изменить его в будущем. Всегда будут отдельные проблемы, которые наш текущий технологический стек не сможет решить, и белые пятна в концептуальных моделях, предлагаемых нашими текущими языками.

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

Развитие культуры исследований и обмена знаниями

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

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

Есть каналы Slack для тех, кто интересуется функциональным программированием, и у нас есть группы, которые встречаются после работы, чтобы вместе изучать эти языки. Инженерная культура Canva ценит постоянное обучение, и эти клубы, регулярные интерфейсные и серверные форумы, а также организованные технические переговоры — все это часть культуры исследований и постоянного совершенствования инженерных разработок.

Я уже некоторое время присматриваю за Canva's Rust club. Он начался в первые месяцы 2018 года всего с 4 людьми. Сейчас нас в Slack уже 24 человека, и мы проводим еженедельные встречи после работы, чтобы поговорить и сделать все, что связано с Rust.

Мы работали над децентрализованной программой чата, эмулятором NES, а теперь смотрим на встроенные проекты, шрифты и инструменты, которые в 10 раз увеличат эффективность нашей разработки.

Как мы развиваем культуру исследований и обмена знаниями

Клубы — это отличный способ объединить единомышленников, чтобы глубже погрузиться в конкретные общие интересы. В этом случае мы решили создать клуб Rust в Canva. С таким разнообразием интересов в Canva (почти) есть клуб для всего. Каждый из этих клубов, от функционального программирования до скалолазания и выпечки, посвящен исследованиям и обмену знаниями по соответствующим темам.

Инженерные форумы – это еще один способ, которым мы регулярно обсуждаем и изучаем новые темы, даже если они не связаны с основным продуктом. Каждую неделю мы чередуем форум для backend-разработки и один для frontend-разработки. Конечно, фронтенд-инженеры также могут посещать бэкенд-форум, и наоборот. Наши инженеры используют эту возможность, чтобы поделиться тем, над чем они работали и о чем думали, и это не обязательно должно быть напрямую связано с нашим основным продуктом. Часто речь идет о новой технологии, которая может медленно проникать в наш технологический стек.

Уделяя больше внимания исследованиям, не связанным с Canva, мы также регулярно проводим встречи и переговоры. В прошлом мы проводили SydJS, Rails Girls, доклады о функциональном интерфейсном программировании, TypeScript (до того, как он был развернут как часть редактора Canva) и многие другие. Эти мероприятия предоставляют всем инженерам, а не только инженерам Canva, возможность изучить новые языки и технологии и получить новые идеи и идеи.

Попутно мы узнали, как развивать культуру исследований и обмена знаниями; вот некоторые методы, которые мы приняли.

  • Учитесь с самого начала понимать, что любое обучение — это хорошо. «Мы постоянно учимся» — это одна из наших инженерных ценностей в Canva, и мы стараемся жить в соответствии с этим. Когда все входят в комнату с одним и тем же мышлением, что «все обучение — это хорошо», обычно происходит то, что любое беспокойство по поводу участия ослабевает, создавая безопасное и гостеприимное пространство, которое поощряет любопытство.
  • Не делайте утверждений — задавайте вопросы. Открытые вопросы побуждают всех выдвигать непредвзятые гипотезы и исследования. Поэтому вместо повестки дня встречи попробуйте заменить каждый пункт обсуждения вопросами.
  • Поощряйте смелость. Важно осознавать, что каждая идея и потенциальное решение оправданы, и многим людям может быть трудно реализовать более нестандартное мышление. Будь то признание самой креативной/случайной/неизвестной идеи сертификатом или просто выкрикивание – вы будете удивлены тем, как это может побудить людей выйти из своей зоны комфорта.

Выгоды

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

Но акт исследования и обмена знаниями имеет некоторые очень немедленные преимущества, о которых я расскажу ниже.

1. Возможность использовать нужный инструмент из расширяющегося набора инструментов

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

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

Это относится и к разработке программного обеспечения. Если вам нужно хранить какие-то данные, необходимо знать, какие базы данных существуют. Имея это в виду, при написании программы важно проводить такой же анализ. Если ваша программа должна быть построена быстро и легко поддерживать, вы можете использовать один язык, и если он должен очень хорошо масштабироваться и иметь время безотказной работы 99,99999%, может быть альтернативный, лучший выбор для рассмотрения.

Пример успеха: изменение технологий в Canva

Переход с ванильного Javascript на Typescript с React стал самым большим изменением в нашем техническом стеке. Когда редактор Canva был впервые создан, это был чистый Javascript, что позволило нам очень быстро создать основной редактор с помощью небольшой группы инженеров. Со временем мы привлекли больше инженеров, и кодовая база, функции и модули выросли в геометрической прогрессии. Масштабирование во всех этих направлениях замедлило развитие редактора, и то, что было преимуществом нашего стека технологий, стало огромным недостатком. Это побудило нас создать Canva 2.0 и новый интерфейс редактора. Теперь, созданный с помощью React in Typescript, он позволяет большему количеству разработчиков работать более продуктивно и выпускать еще больше функций, исправлений и улучшений.

Свойства каждого языка будут означать, что он подходит для решения определенного класса задач. Спросите любого инженера, и он скажет вам, что использование Bash для написания веб-интерфейса — не лучшая идея. Но, с другой стороны, у Javascript определенно есть свои недостатки, когда дело доходит до составления команд оболочки.

В Canva мы, как правило, работаем с Java и Typescript, но это не единственный код, размещенный в наших репозиториях. Пишем все от Python и PHP до Scala и Swift. Каждый язык тщательно отбирается, чтобы помочь нам разработать решения для конкретной области продукта.

Серебряной пули не существует. Язык никогда не будет лучшим во всем. Есть еще несколько языков общего назначения, таких как Java и C++, но вы можете быть уверены, что и у них есть свои недостатки. Важно знать свой набор инструментов программирования, и, имея опыт работы со многими языками, вы сразу же сможете выбрать лучший язык для решения вашей проблемы.

2. Возможность изменить свое мышление в лучшую сторону

Есть еще одно преимущество изучения новых языков. Процесс обучения и мышления по-новому поможет вам лучше решать проблемы.

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

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

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

Теперь для такого языка, как Haskell, вместо того, чтобы сосредотачиваться на объектах, мы фокусируемся на действиях. У нас было бы действие для включения автомобиля, нажатия педали акселератора и нажатия на тормоза. Затем этим действиям даются некоторые данные для действия, и они реагируют новыми данными, например, насколько сильно нажаты педали.

Это два разных способа решения одной и той же проблемы. Если бы вы знали только предыдущее представление, то все могло бы казаться объектом. Но если бы вы знали только последнее, тогда все есть действие.

Схема объектного (Java) представления автомобиля

Диаграмма действия (Haskell) представление автомобиля

Эти представления идут дальше, чем просто сообщают компьютеру, что что-то есть — они указывают на совершенно разные пути достижения одного и того же решения.

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

Последние мысли

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

Для получения более подробной информации о наших текущих вакансиях посетите страницу вакансий Canva здесь .

Первоначально опубликовано на https://product.canva.com 4 октября 2018 г.