Kotlin vs C# vs Go. Что выбрать для проекта?

Проект состоит из приложения для android (в будущем возможно и iOS) , бэка и сайта с SPA.

Для android приложение пишется на kotlin, бэк хотел Django/FastAPI, SPA Svelte. Но в процессе написания бэка надоело, что в Python все ошибки узнаешь только при выполнении + IDE не верно предлагает автоподстановку методов объекта (т. к. мало кто прописал в свои библиотеки типы) . Это все замедляет разработку, требуется часто смотреть документацию к библиотекам. Решил посмотреть типизированные языки, заинтересовался анализом текущих платформ/фрамеворков и отобрал три варианта бэка: Ktolin ktor, Go echo, ASP NET core (minimal API) . Написал на каждом веб-сервис для сравнения скорости и удобства разработки.

Выделил следующие плюсы и минусы.

Python:

+ за счет гибкости языка можно делать замудренные конструкции

- он же. За счет гибкости языка каждая библиотека/фрамеворк как отдельное DSL и требует изучения документации. При этом опыт не переносится на другие библиотеки и всегда нужно изучать заново

- за счет отсутствия типизации (когда типы не прописаны) разработка идет дольше. Т. к. не известны сигнатуры функции на этапе написания кода, приходится смотреть документацию или проваливаться и изучать исходники (например в IDE никак не увидеть какой тип возвращаемого значения execute(query) у SQLAlchemy и какие есть методы у данного типа) Как следствие ошибки выявляются в рантайме.

Kotlin ktor:

+ нравится синтаксис языка

+ на нем же пишется android приложение, следовательно меньше переключений между языками

+ задел на будущей с Kotlin Multiplatform.

+ платформа fullstack, можно даже html теги писать функциями языка. При этом размер артефактов небольшой, а быстродействие высокое.

- Gradle. Почему нельзя сделать нормальную простую систему, как в python, net core, go? С появлением kotlin gradle dsl стало немного получше, но все равно это непонятные конфигурации, переменные, сакральный смысл которых сокрыт в недрах документации. Не возможно даже провалиться в исходных код плагина что бы посмотреть что к чему там.

Go:

+ легкий синтаксис и хорошая встроенная библиотека. По легкости и скорости разработки напоминает мне 1с

+ самый быстрый способ написать сервис особо не заглядывая в документацию.

+ субъективно мне показалось, что кода на Go писать меньше всего.

- проверка на ошибки после каждой функции замусоривает код.

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

ASP NET Core (minimal API) :

+ хорошая документация, большое сообщество, нормальный синтаксис

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

- сам язык C# становится слишком многословным, переусложненным синтаксическими конструкциями. Мне кажется скоро он сравняется с С++ по монструозности конструкций. Это усложняет чтение кода и заставляет писать больше символов.

- если писать приложение на Avalonia UI под андроид, то оно выходит размером > 100 Мб (что не приемлемо много)

Цель:

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

Так вот пишу сюда вопрос к тем, кто уже долгое время разрабатывает на данных платформах:

Есть ли какие то объективные минусы у каждой из рассматриваемых платформ?

2
2 комментария