Недавно пытался разместить на Хабр Q&A вопрос про выбор платформы для разработки бэкенда для нового проекта, но в публикации отказали, т.к. “на данный вопрос не может быть ответа”. Разместил на vc.ru, но там видимо публика не “технари”, ни одного комментария…

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

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

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

Javascript всегда воспринимал как язык “для браузера”, в нем не нравится постоянное указание this, работа с промисами. В любом случае на этом языке приходится писать UI web страниц, т.к. конкуренты Flutter, Blazor и Kotlin Web Assembly создают сильно большие сборки и не подходят для мелких проектов.

C# стал многословен, требуется часто смотреть документацию по функциям. Я помню когда перешел с С++ на C# 1.0 был в восторге (Java мне тогда, как впрочем и сейчас, не нравилась). Интернет в те времена был dial-up 28Kbit, естественно ни о каких сайтах с документацией, тем более на русском, речь не шла. Я писал свою IDE под наладонник HTC на Compact framework и изучал все функции с помощью рефлексии и бумажной книги. Все было понятно и легко, по названиям методов и их сигнатуре было понятно, что они делают (документация не требовалась). Потом я много писал на C# (следующих версий) под Unity и все устраивало. Но годы идут, язык обрастает новыми конструкциями, становится громоздким и многословным. Подход, когда все является классом, мне кажется уже устарел и язык должен быть мультипарадигменным. Так же разработчики .NET пошли в динамическую кодогенерацию и типы (dynamic) из-за которой теперь без документации очень сложно понять даже сигнатуру функции! (см. asp.net minimal api).

Kotlin. Язык призванный заменить Java. Много плюсов у языка и библиотеки, интересная идея с последним аргументом-лямбдой у процедур, когда она пишется в вызове в фигурных скобках, что создает подобие DSL. Конечно эти DSL + кодогенерация kapt тоже сильно увеличивают когнитивную нагрузку при чтении кода, но меньше чем у C#. Существенным минусом я считаю систему сборки Gradle. Это как отдельный язык который нужно знать, что бы управлять сборкой программ. При сборе создается куча директорий, нужно разбираться где лежат артефакты и через какую команду Gradle их вообще нужно собрать (а этих команд десятки на простой проект). Так же не нравится большая вложенность папок с исходными кодам. На Kotlin я пишу приложение на Android и хотел на нем же написать бэк и сайт (сделал несколько тестовых проектов для изучения ktor, kvision, multiplatform, Kotlin/JS и уже практически начал писать на нем, но…

Я решил изучить Go и в итоге остановился на нем. Язык похож на C и 1С. Подкупила простота языка, языковых конструкций, понятная стандартная библиотека. Быстрая сборка и отличная система управления пакетами (модулями). Компиляция в один нативный файл, что в разы упрощает настройку деплоя на серверах! Как следствие высокая производительность программ написанных на Go. Очень легко читаются и понимаются исходные тексты пакетов. Сами пакеты это как классы, которые имеют приватные и общедоступные поля и методы, конструктор по умолчанию. Сторонние библиотеки на Go мощные и в тоже время простые по синтаксису. Посмотрите grom, fiber, их можно изучить за час (и для сравнения посмотрите документацию на SQLAlchemy для Python). На Go можно практически сразу писать отличные по внутренней структуре приложения. Документация по стандартной библиотеке Go можно сказать встроена в платформу. Все это дает высокую скорость написания ПО и минимизацию ошибок. Для начала изучения рекомендую русскоязычный сайт https://golang-blog.blogspot.com/. Хотя там большинство статей – это машинный перевод и читать их сложно, но основы языка там расписаны хорошо.

C++, Rust не рассматривал, т.к. эти языки, я считаю, не для быстрого написания прикладного ПО.

Ну и по тестам web-framework https://www.techempower.com/benchmarks/#section=data-r21 Go в числе лучших.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *