Это вторая часть из цикла Мой путь написания движка электронной коммерции с нуля.

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

«Так много вариантов, столько языков, фреймворков и прочего. Как мне решить, какой из них выбрать? «

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

Моя личная мантра

Прежде чем мы выберем наш стек, вам нужно понять одну вещь: в мире технологий много людей. Значит, мнений будет МНОГО. То, что рекомендует один человек, другой отвергнет. Но что все это значит для вас? Это много шума. Как выбрать подходящий?

Итак, вот секретный соус:

«Вы выбираете, основываясь на том, во что вы верите. И если философия языка перекликается с тем, во что вы верите, вы просто выбираете это»

Вы начинаете с того, как вы думаете должен выглядеть хороший язык. И во что вы принципиально верите. Когда я говорю это, я имею в виду, считаете ли вы, что использование { } ; и ? полезно для вас? Как вы думаете, должен ли хороший язык поддерживать правильные концепции объектно-ориентированной ориентации? Или вы хотите что-то, что отличается от традиционного языкового дизайна? Считаете ли вы, что языки программирования должны быть как можно более дружественными к человеку, или вы думаете, что они должны быть удобными для компьютера и как можно более специализированными, и что для их правильного изучения должны потребоваться значительные усилия? Это вопросы, которые вы должны задать себе.

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

Прочие соображения

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

В общем, вот чему я обычно учу своих учеников:

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

Не соображения

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

PHP медленный? Facebook использует это. Руби медлителен? Basecamp использует это. То же самое и с миллионами других веб-сайтов. Дело в том, что не забывайте о своей большой цели - вы здесь, чтобы разработать приложение для решения реальной проблемы или, скорее, для заработка. Не позволяйте выбору языка отвлекать вас.

Итак, без лишних слов, перейдем к выбору нашего стека.

Оценка технических стеков

  1. PHP
  2. Node.js (Javascript)
  3. Скала
  4. GoLang
  5. Python
  6. Рубин
  7. Эликсир

1. PHP

Начнем с PHP. Это самый популярный язык программирования на стороне сервера. Большая часть Интернета работает на PHP. Крупные компании используют PHP (например, Facebook). Я являюсь опытным разработчиком PHP более 8 лет и до сих пор время от времени работаю над некоторыми клиентскими проектами на PHP. И все же, если вы спросите меня, я бы не стал использовать PHP для этого проекта. Почему?

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

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

Когда следует использовать PHP?

Если вы только начинаете и хотите научиться писать базовый серверный код, PHP - очень хороший выбор. Если вы собираетесь использовать реальное приложение на PHP, я бы порекомендовал хороший фреймворк (желательно MVC), такой как Cake, Symfony или Laravel.

Если вы создаете что-то на основе чего-то популярного, что уже существует, например Wordpress или Drupal, тогда PHP - хороший выбор.

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

2. Node.js

Поговорим о Node.js. Node.js - это в основном Javascript (JS) на стероидах. JS - это один из языков, который ваш веб-браузер уже понимает, поэтому некоторые умные люди решили, что было бы неплохо иметь возможность запускать этот же язык и на серверной части. Итак, один человек, знающий JS, теперь может также написать логику на стороне сервера. У Node есть свои собственные концепции управления зависимостями (NPM), которые необходимо понять, прежде чем вы сможете начать писать код. А JS - одна из самых фрагментированных экосистем. Есть синтаксис ES20xx, есть загрузчики модулей, упаковщики, минификаторы и даже компиляторы, которые будут компилироваться в JS с другого языка.

В любом случае, на мой взгляд, синтаксис JS наиболее близок к PHP в мире серверов. И до недавнего времени JS не имел должной поддержки объектно-ориентированного программирования, как другие языки.

JS также является одним из самых поляризованных языков. Люди либо любят это, либо ненавидят. Мое личное мнение? Я действительно ненавижу это. Мне не нравится синтаксис, не нравятся концепции. Я ненавижу это страстно. Он внизу моего списка. То, что я ненавижу в JS, - это концепция обратных вызовов. Это приводит к появлению большого количества вложенного кода, также известного как ад обратных вызовов. Понятно, что плохой код ведет к аду обратных вызовов, но также сложно написать хороший код на JS.

Например, различие между == и === в контексте сравнений имеет разное значение (это также один из наиболее часто задаваемых вопросов на собеседовании) и даже многие опытные программисты совершают эту ошибку.

Пример кода JS:

Когда следует использовать Node.js?

Если вы хотите изучать только один язык и / или уже умеете писать код на JS и хотите опробовать JS и на стороне сервера, Node.js - хороший выбор. Некоторые из фреймворков, которые вы можете попробовать - Express.js, Meteor.js, Sails.js.

3. Скала

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

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

Но новичкам я не рекомендую Scala. Не только легко выстрелить себе в ногу, но и немного сложно понять код другим людям, например, на Github, если вы работаете в фоновом режиме, например, PHP. И вообще последняя хорошая книга по Scala, которую я прочитал, была около 800 страниц. Это не обязательно плохо - это означает, что язык имеет множество функций и, возможно, слишком мощный. Я написал свой собственный веб-фреймворк на Scala, чтобы глубже изучить язык. Хотя мне все это нравилось, мне хотелось, чтобы это было немного проще для того, что я пытался делать.

Еще одна приятная особенность Scala заключается в том, что она работает поверх JVM (виртуальной машины Java). Java - один из самых популярных корпоративных языков, и из-за его возраста и популярности существует множество библиотек даже для самых сложных сценариев использования, которые вы можете себе представить. Итак, хорошее в Scala заключается в том, что, поскольку он построен поверх JVM, вы действительно можете использовать собственные библиотеки Java в своих приложениях, и это действительно мощно.

Пример кода Scala:

Когда следует использовать Scala?

Вы действительно хотите освоить мощный функциональный язык программирования. ИЛИ, вы академический исследователь. В Scala есть множество фреймворков, с которыми вы можете поиграть (каламбур), и, конечно же, моя любимая из них - Play! framework, который ближе всего к Ruby land’s Rails.

4. GoLang

Язык программирования Go - это системный язык, который широко используется в Google. YouTube работает на Go, как и многие другие сервисы в инфраструктуре Google. Мой опыт написания кода на Go был действительно очень положительным. Сказав это, во время моих экспериментов с Go не существовало подходящего эквивалента Rails из страны Ruby. Следовательно, я в конце концов отпустил это. Go очень прост, но мощен и может многое. В то время я сделал вывод, что если вы небольшая команда разработчиков, лучше использовать что-то вроде Python или Ruby, которые не только имеют более широкое сообщество, но также имеют множество фреймворков и инструментов, которые могут помочь вам быстрее разрабатывать программное обеспечение. .

Пример кода GoLang

Когда лучше использовать Go?

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

4. Ruby и Python

Я объединил Ruby и Python вместе, потому что они очень похожи во многих аспектах. С ними обоими весело писать код, у них большое сообщество, и у обоих есть зрелые фреймворки для веб-разработки. Два моих любимых фреймворка Python - это Flask и Django.

Что касается Ruby, у нас есть король веб-разработки, Rails. Я занимаюсь веб-разработкой почти десять лет и могу сказать вам, что если есть фреймворк, который почти на 100% идеален, то Rails был бы им. Он дает вам все необходимое прямо из коробки и даже учитывает разработку внешнего интерфейса, предоставляя вам (самоуверенные) рабочие процессы и конвейеры.

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

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

И есть много вещей, которые мне не нравятся в Python. Python фрагментирован - Python 2 и Python 3. Некоторые вещи, которые работают с 2, не работают с 3 и наоборот. При этом Python по-прежнему является королем, когда дело доходит до науки о данных или чего-либо в целом, связанного с анализом данных и тому подобным, что не совсем сильная сторона Ruby.

Поскольку в нашем проекте это не предполагается, нам пока не нужно беспокоиться о Python.

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

Пример кода Ruby

Пример кода Python

5. Эликсир

Эликсир - новый язык по сравнению с остальными. Он написан поверх Erlang. На Erlang работает большинство телекоммуникационных компаний по всему миру. Это означает, что это язык, созданный (Sony Ericsson) с учетом требований надежности. Но Erlang все еще был слишком сложным, чтобы новички могли его усвоить. Итак, один из авторов Ruby, Хосе Валим, решил создать свой собственный язык, который во многом похож на Ruby, на основе Erlang VM. Так родился Эликсир.

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

Сходство с Ruby и разделение многих его философий также является огромным плюсом. Эквивалент Elixir в Rails - Phoenix, и я думаю, что это следующая лучшая альтернатива, которую можно реально использовать на момент написания этой статьи. Это еще не 100% рельсы, но и не должно быть. Фактически, Phoenix намного проще Rails во многих аспектах, и именно эта простота делает его более привлекательным.

Итак, для своего проекта электронной коммерции я выбрал Phoenix.

Пример кода Elixir

Заключительные мысли

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

В следующей части я расскажу, как настроить новый проект Phoenix, что я делал иначе и чему научился у них.

Увидимся на следующей неделе!

Ваше здоровье,

Нея