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

Я оказался в похожей ситуации в 2020 году, когда решил объединить усилия со своим соучредителем (тогда еще студентом колледжа) для создания Volume; журнальная платформа размером с укус. Все было непросто, и нам пришлось отбрасывать и повторять несколько идей и функций (включая весь веб-сайт), пока мы, наконец, не запустили наше приложение почти год спустя, в сентябре 2021 года.

На последнем курсе инженерного дела, когда я решил начать, у меня было очень мало опыта за плечами (не считая нескольких проектов GitHub и летней стажировки в Fidelity Investments) — так что совершенно очевидно, что я очень нервничал, учитывая множество доступные варианты. Чем больше я думал о последствиях первых решений, которые мне пришлось принять, моя неопытная голова начала наполняться тревогой.

Перенесемся в 2022 год. Я стал намного спокойнее после того, как совершил кучу ошибок и научился на них, получил предварительный посев от двух директоров Microsoft India и поработал с, пожалуй, самыми интересными разработчиками, которых я встречал. Наше приложение недавно также попало в список лучших новых приложений Google Play за июль!

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

1. Доступ к талантливым разработчикам рядом с вами -

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

Еще в колледже мы широко знакомились с C/C++ на наших курсах DSA, и все хорошо владели этими языками. Но если вы баловались с ними, вы знаете, что они так же плохи, как веб-бэкенды, так и хороши в низкоуровневом системном программировании. (Да, Drogon уже здесь, но он относительно новый, и, будем честны, никто из нас в колледже не знал, как использовать эти языки, кроме обращения к связанным спискам и обхода деревьев). Разработчиков Java было немного, большинство из них имели опыт разработки только для Android. У меня не было особой надежды убедить разработчиков Java работать в стартапе без денег.

У меня осталось 2 варианта — Javascript (Node.js) и Python.
Оба были бы отличным выбором. Javascript очень популярен на веб-рынке, и почти все вокруг меня, как старшеклассники, так и младшие, хорошо знали этот язык. Популярность Python значительно возросла благодаря появлению бесчисленных курсов по машинному обучению и науке о данных, и это динамичный и простой в использовании язык. Большинство людей, которые использовали его когда-то, остались с ним.

Что касается наличия талантов, это была ничья. Однако после дополнительных исследований доступных фреймворков (Express, Django и т. д.) я решил использовать Python и Django, прежде всего из-за его фантастической ORM и готовых функций.

2. Скорость разработки -

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

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

Django прекрасно служил нам (и продолжает служить) в этом отношении. ORM упростил операции с базой данных, а в сочетании с чистым дизайном, который навязывает вам фреймворк, он сделал работу с несколькими функциями внутри монолита удовольствием и, что более важно, сверхбыстрой с меньшим количеством строк кода (спасибо, python). Оглядываясь назад, можно с уверенностью сказать, что слоган Django звучит так: «Веб-фреймворк для перфекционистов со сроками».

3. Набор функций –

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

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

В идеале ищите фреймворки с отличной встроенной поддержкой аутентификации, маршрутизации, ORM, шаблонов и общего промежуточного программного обеспечения (безопасность, регистраторы и т. д.). Python (Django), Java (Spring), Ruby (Rails), Golang (Gin) и большинство популярных языков обычно имеют по крайней мере один фреймворк с богатым набором функций.

4. Зрелость платформы –

До сих пор вы принимали во внимание доступность талантов, скорость разработки и сужали выбор фреймворков с богатым набором функций. Отлично, вы на правильном пути. Теперь добавим последний ингредиент в рецепт выбора лучшего серверного фреймворка — Maturity.

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

Таким образом, крайне важно выбрать фреймворк, который присутствует на рынке достаточно долгое время (скажем, 10 лет). У Джанго было все это. Плюс сам фреймворк был на рынке так долго, что прошел боевые испытания (использовался Instagram, Disqus, Spotify, Pinterest и т. д.). Весна Java (и сама Java) великолепна в этом отношении, как и Ruby on Rails.

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

Это также мой первый блог на Medium, так что оставьте свой голос или комментарий ниже! — Хотелось бы услышать мысли других инженеров о том, что лучше всего подходит для них. :)

Вот несколько ссылок, по которым вы можете связаться со мной, Linkedin, Twitter и Github.