Популярная цитата стартапов:

Двигайся быстро и ломай вещи

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

Почему бы не «Двигаться быстро и ничего не ломать?».
Это именно то, что Элм позволил нам делать. Если код компилируется, мы можем быть уверены, что он не сломается, потому что мы просто не получаем никаких исключений времени выполнения в Elm.

Elm позволил нам двигаться намного быстрее, чем мы могли бы сделать с помощью JavaScript.

Вы никогда не пропустите добавление символа «,», который сломает ваше приложение JavaScript. Или забудьте обновить объект, чтобы он содержал эту новую структуру данных, которую вы добавили. Или потратьте день, пытаясь выследить надоедливую ошибку, которая, в конце концов, окажется просто опечаткой. Elm позволил нам двигаться намного быстрее, чем мы могли бы сделать с помощью JavaScript, никогда не позволяя нам застревать на досадных ошибках. Ошибки также вызывают утомление: с Elm мы можем писать код в течение 14 часов и не расстраиваться, когда ложимся спать.

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

Итак, как мы пришли к написанию нашего приложения на Elm?

Начнем с самого начала.

В недавнем подкасте Эван и Ричард рассказали о том, что они не знали ни о каких больших приложениях, написанных с нуля на Elm. Что ж, это то, что мы сделали 26 000 строк кода назад. Вероятно, сейчас у нас второе по величине приложение Elm в мире.

Кто мы?

Нас шесть выпускников, которые работают в теплой потной квартире в Швеции. Пятеро из нас - студенты Линчёпингского университета и один - Стэнфордского университета. Мы часами работали над нашим видением Илона Маска с начала лета.
Как сказал бы Ричард Фельдман: Кстати, мы нанимаем!. Напишите нам по адресу [email protected], если у вас долгие часы работы без зарплаты.

Что мы строим?

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

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

Почему вяз?

Мне и одному соучредителю нужно было написать магистерскую диссертацию, но мы также хотели потратить как можно больше времени на разработку нашей идеи. Наша магистерская диссертация была названа Устранение Javascript и посвящена всем библиотекам, которые необходимы для получения той же функциональности, что и Elm 0.16. Если вы не хотите читать диссертацию, я не виню вас (я бы тоже не хотел), но вот TLDR:

  • Чистые функции - ›Родной
  • Неизменяемые структуры данных - ›Immutable.js
  • Функции высшего порядка - ›Родные
  • Каррирование - ›Ramda.js
  • Проверка статического типа - ›Поток (не JavaScript)
  • Нет концепции Null - ›сказка / data.maybe
  • Реакционная способность - ›Rx.js
  • Вяз Архитектура - ›Redux
  • Декларативный интерфейс - ›React.js

Мы собирались начать этот проект с нуля, поэтому у нас действительно была свобода выбора любой технологии, которую мы хотели. Выбор действительно сводился к React / Relay или Elm. Наш стек будет выглядеть примерно так:

  • Вяз или реакция / реле
  • Феникс
  • GraphQL
  • Rethinkdb (также напишу в блоге об этом выборе)

Чтобы выбрать между React / Relay и Elm, мы создали два простых проекта https://github.com/graphql-elixir/phoenix-hipster-stack
«https://github.com/carleryd/elm-hipster -куча".

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

Что делает Вяз крутым

Трудно написать ужасный код

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

Полезно для программистов среднего уровня

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

Эльм делает вас лучшим программистом

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

Компилятор, формат Elm и архитектура Elm

Компилятор, о котором вы, возможно, уже слышали? В противном случае читайте это. То, о чем так много не говорят, - это вяз-формат. Elm-format автоматически форматирует ваши файлы, чтобы он был согласован между всеми программистами, и очень важно, что почти все проекты Elm используют его. Потому что, глядя на чужой код Elm, он выглядит точно так же, как и ваш. Формат Elm в сочетании с тем фактом, что все программы Elm следуют одной и той же архитектуре, позволяет понять случайный проект Elm намного легче, чем случайный проект javascript.

Легче нанять хороших специалистов

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

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

Вяз быстрый

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

Мы сделали правильный выбор?

Elm действительно окупился, и мы не могли быть более счастливыми (или, конечно, можем), сложность нашего приложения перестала расти довольно быстро, позволяя нам продолжать работать быстро, когда мы достигли нескольких тысяч строк кода. Мы также начали развивать другой путь - разработку через компилятор. Вы где-то вносите изменения в модель, а затем просто следуете за компилятором, пока программа не скомпилируется снова. Таким образом, вам не придется тратить так много времени на размышления о том, какое влияние может оказать изменение, просто внесите изменение и посмотрите, что произойдет.

Иногда мы ставили под сомнение свое решение, когда упирались в стену и не знали, как ее решить. Вначале мы целыми днями думали о том, как что-то делать, но по мере того, как это стало яснее, мы нашли шаблоны для решения повторяющихся проблем, таких как общение между родителями и детьми. Как только мы это сделали, повторение одного и того же шаблона стало очень простым.
Вяз сложен в другом смысле, чем javascript, JavaScript может быть простым, и вы можете изучить его через пару дней и начать что-то делать. Но через некоторое время, когда ваше приложение становится сложным, и вы не можете удерживать в голове все движущиеся части одновременно, у вас возникают проблемы. С Elm вы не можете просто собирать что-то вместе, если он работает, то, вероятно, правильный путь. Вы застрянете, пока не научитесь правильному пути, но тогда это просто. Настоящим недостатком elm thou является то, что теперь react-native кажется более болезненным.

GraphQL и Elm?

Перед тем, как мы начали проект, у нас была одна вещь, которая сдерживала нас. Мы действительно хотели использовать GraphQL, для которого действительно не хватало первоклассной поддержки, пока не нашли https://github.com/jahewson/elm-graphql. Когда мы начинали, он даже не поддерживал мутации, но мы думали, что можем добавить это или что мы могли бы сделать кучу других вещей, прежде чем нам это действительно понадобится. В конце концов, так и получилось. В elm-hipster-stack мы используем версию elm-graphql, не имеющую мутаций.

Если у вас есть какие-либо вопросы или вы хотите связаться с нами по поводу работы, напишите нам по адресу [email protected]