Pull to refresh

Comments 34

Отличный пост! Написано явно с душой и любовью к проекту, читается на одном дыхании. Захотелось отправить вам резюме :)

А вот за python прям обидно. Что ж вы его даже не рассматриваете?

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

Если нужен хайлоад, то ребята правильно сделали что ушли сразу на Go. При всей моей любви к Питону — скорость не его сильная сторона.

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

Вот не согласен, что в основе техдолга — ошибки прогнозирования. Обычно в основе управленческие решения типа "пока и так сойдёт".

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

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

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

Не обязательно. Ну как пример. Придумали новый метод поиска, с ускорением в 10 раз относительно старого. Поиск используют 20 модулей. 3 модуля, где ускорение сильно нужно, обновили. Ещё 17 — остались в техническом долге.

Где тут ошибка при принятии решения?

P.S. Я бы сказал, что технический долг такого рода — это плата за стремление к ортогональности, совместимости и за перфекционизм.
Приятная статья ) Вадим, ну теперь ты просто обязан писать дальше подробности и детали – например, про тонкую настройку вашей кроличьей шины для больших нагрузок.

Серьёзно? Тогда уж сразу на Elixir/Erlang надо уходить :)

Серьёзно. А чем Elixir лучше? Слышал от человека, что пробовал его использовать, что он довольно медленный. Что не удивительно, ибо он крутится на VM.

Если можно, встряну в вашу дискуссию.

По впечатлению семилетней давности:
Математика и работа со строками в привычном формате на эрланговской виртуальной машине действительно слабовата. Хочешь быстрые строки — работай с байтами, хочешь числодробилку — пиши на с/плюсах и биндся с ними.
Но если тебе нужно поднять кластер из нескольких сотен узлов с разными задачами — это, наверное, самый старый и отлаженный язык & фреймворк в котором есть для этого буквально всё и из коробки.
Ну, и с тех пор 7 лет прошло, скорее всего какие-то части работы с математикой/строками переделали и оптимизнули.
Для меня слабым местом до сих пор видится отсутствие налаженного «стартового пакета», основной IDE со всеми современными фичами. Не плагина к IntelliJ IDEA с которым еще помучаться надо было, а коробочного решения.
Что не удивительно, ибо он крутится на VM.

Большинство языков с автоматическим управлением памяти крутится либо в VM (Java и ее деривативы, Erlang и т.п.), либо имеет некий рантайм в бинари (Go). Это не мешает этим языкам быть быстрыми при умелом использовании.

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

У меня тут в памяти история от техдира autoscout24.de, которые начали писать бэк на Scala, но через несколько лет им пришлось полностью его переделать на обычной Java т.к. нанять нужное количество девелоперов умеющих в Scala (который явно популярнее D) не удавалось никак, а развивались они быстро и разработчиков нужно было много. Да и читабельность кода на Scala была не на высоте.

Любой вменяемый девелопер, знакомый с любым статически типизированным языком, освоит его за неделю в процессе онбординга в компанию. Это не рокетсаенс.

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

Ну и еще давай возьмем С++. Статический типизированный? Да. Многие ли могут сказать что знают его хорошо учитывая новые стандарты начиная с C++11? Не думаю.

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


Вы сейчас спорите о вкусе устриц с тем, кто их ел. Не нужно быть экспертом в C++, чтобы быстро освоить D. Достаточно знать основы. D гораздо проще, при той же мощности.

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

Нет там никаких нюансов, вот чего вы фантазируете?
Есть стандартная библиотека покрывающая 90% нужд программирования вообще: https://dlang.org/phobos/index.html
Есть веб-фреймворк покрывающий 90% нужд веб-программирования: https://vibed.org/api/
Ну и есть репозиторий пакетов, если в первых двух чего-то не хватило: https://code.dlang.org/

Есть веб-фреймворк покрывающий 90% нужд веб-программирования:

Я правильно понимаю, что 90% веб-программирования из баз данных нужны только Mongo и Redis? А для 10% полноценная ORM появилась только 5 месяцев назад и имеет аж 22 скачивания за это время?

Я не знаю, зачем они вкорячили клиенты к Монге и Редиске прямо во фреймворк. Делать им там нечего.


О которой "полноценной ОРМ" идёт речь?

90% веба ещё и в рекламе нуждается. Давайте вкорячим Яндекс.Директ в web-фреймворк.


Боюсь даже спрашивать, где вы shark откопали.
https://code.dlang.org/search?q=orm

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

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

Если я не вижу каких-то веских оснований этим заниматься (интерес, потенциал и т.п.), то я потрачу это время на что-то другое.

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

если язык правильно готовить, то можно даже строить на нём системы реального времени

Я думал что системы реального времени нельзя строить на языках со сборкой мусора. Из-за блокировки потоков сборщиком мусора. Или в php есть какая-то магия по управлению памятью?
Конечно, речь не идет о жестких ОСРВ — там требования сильно выше. Да и учитывая, что PHP скрипты запускаются внутри какой-то ОС (в нашем случае Linux), то уже на этом уровне появляется мягкость. О запуске в QNX речи, конечно, не идет. Тем не менее, в PHP есть возможность работы с прерываниями, мьютексами и т.п. так что некоторое подобие системы реального времени вполне можно построить.

По управлению памятью: есть возможность принудительно освободить память, что мы и использовали для долгоживущих процессов, чтобы не разрастались. Там есть тонкости, безусловно, но получилось сделать так, чтобы память реально высвобождалась в процессе работы скрипта.

Но да, PHP все же надо использовать для другого.
Полный набор отрабатывает чуть более, чем за час. Полный набор запускается при финальных сборках и по ночам. Разработчик может запустить только тот сегмент, который его интересует в рамках выполняемой задачи.
Огорчает, что нет API для перевозчиков, а ещё лучше webhooks. Уж больно напрягает парсить почту. Могу ли я надеяться на появление чего-нибудь из вышеперечисленного в ближайшем будущем?
Sign up to leave a comment.