AgentProvocateur
@AgentProvocateur

Разработка web-сервисов – LAMP (Python/Django) vs. MEAN (Node.js)? Или что-то другое?

Цель - стать разработчиком web-сервисов/приложений (маркетплейсов , онлайн-конструкторов , корпоративных систем и т.д.). Конкретно - специалистом по одному узкому стеку разработки, но достаточному для реализации сервисов, полноценно решающих распространенные задачи конечных пользователей/бизнеса.

Если с фронтендом всё относительно понятно, то с серверной частью сомнения. Хочется сделать осознанный выбор и освоить на уровне (чтобы быть хорошим специалистом в чём-то одном, а не посредственным во многом). После продолжительного курения поиска выделил 2 пути:
  1. сосредоточиться на стеке LAMP и использовать Python (Django, Flask и т.д.) в качестве серверного языка, генерируя современный фронтенд всякими ангулярами;
  2. погрузиться в тотальный Javascript (MEAN-стек с сервером на Node.js).

Что важно в выборе:
  • Возможность поднимать web-приложения в максимально короткие сроки с минимальным количеством кода;
  • Возможность разрабатывать сервисы, отвечающие всем современным стандартам и пользовательским требованиям, решающие широкий круг задач;
  • Чтобы технология была актуальна и востребована в ближайшие 7-10 лет (дабы не только «познать мудрость», но и успеть «плоды вкусить»), как в РФ, так и за рубежом (понимаю, что прогнозировать невозможно, но у специалистов в теме есть более ясная картина, чем у меня);
  • Возможность разрабатывать быстрые, легкие и устойчивые к нагрузкам приложения без использования тонны костылей и «напильников».
  • Возможность встраивания web-приложений в стандартные корпоративные сайты клиентов (к примеру, на битриксе);
  • Широкое поле деятельности (востребованность как по вакансиям, так и на мировом фрилансе/в клиентской разработке);
  • Понятный и приятный процесс разработки, а не регулярный взрыв мозга (поверхностное знакомство с синтаксисом понимания по этому вопросу не дало, разве что в node.js писанины больше).

Изучил форумы с подобными вопросами, в том числе и тостер, есть 2 противоречивые точки зрения:
  • В пользу Python: он логичен, строг, позволяет решать 98% реальных задач и поднимать почти любые приложения. Разработка занимает в 2-3 раза меньше времени и трудозатрат, чем на JS. Node.js – это асинхронщина, взрыв мозга для новичка, не имеющего многолетнего опыта разработки на других технологиях. Если и погружаться в MEAN, то только после того, как досконально освоится LAMP. Ниша node.js очень узкая, в основном SPA, в большинстве задач он не нужен со своей асинхронностью, только навредит. Да и вообще это надутый пузырь на волне хипстерского хайпа.
  • В пользу Node: всё идет к тому, что js станет стандартом как на фронте, так и на сервере. Через 5 лет серверную часть не на js будут писать только ленивые ретрограды. Приложения получаются быстрее python и др. в 10-15 раз, выдерживают большие нагрузки, нет задач, которые нельзя было бы реализовать в рамках MEAN-стека. Технология в стадии активного развития, через 5 лет сегодняшние её косяки будут исправлены, и она станет стандартом де-факто для web-приложений, как php для web-сайтов когда-то. Нет смысла тратить время и распыляться на морально устаревающие средства.
  • Уметь нужно и то, и другое. Это взаимодополняемые технологии, будет сложно и неэффективно решать поступающие задачи на чем-то одном. Но тогда о цели «стать узким специалистом, а не поверхностным и распыленным» можно забыть, чего не хотелось бы.

Вопросы:
  • В какую сторону посоветуете смотреть? Буду рад аргументации, хотя бы краткой.
  • Есть ли что-то в рамках web-сервисов, чего нельзя реализовать на Python, но можно на Node.js? Есть ли что-то, чего нельзя реализовать на Node.js, но можно на Python? Какая технология перевешивает по возможностям?
  • Нужно ли погружаться разработку стандартных php-сайтов для досконального понимания всех этапов разработки, прежде чем замахиваться на сервисы/приложения? Или можно сразу погружаться в разработку web-сервисов без всяких «комплексов неполноценности»?
  • Насколько рационален поэтапный путь: php-сайты -> web-сервисы на python -> web-сервисы на node.js? Или рациональнее сразу выбрать конкретную стезю и в ней развиваться?
  • Или имеет смысл забить на то и другое, и сразу окунуться в непоколебимый web-энтерпрайз (C#/Asp.net или Java/Spring)? Если да, то какие тут преимущества перед Python/JS?

Благодарю тех, кто дочитал до конца. Прошу прощения за простыню, вопрос холиварный, потому, думаю, имеет смысл задать его развернуто. Как видите – жуткая каша из противоречий в голове, а пока она есть, продуктивного погружения не получится, да и клиентам/работодателям нужно уверенно обосновывать свой выбор. Просьба сильно не пинать и не отправлять в поиск – прокурил его от и до, вынеся все противоречия из ответов 2-3 годичной давности в этот топик, не дающие покоя. Хотелось бы получить актуальные на середину 2017 выводы от специалистов. Спасибо!
  • Вопрос задан
  • 9410 просмотров
Решения вопроса 4
1) Мой основной язык Python, на JS больших программ почти не писал. Когда писал на нём больше, то ощущал дискомфорт из-за:
- отсутствия нормального наследования (хотя сейчас, вероятно, это уже исправлено)
- трудностей с типами данных и неявными преобразованиями (вот вчера буквально был холивар на Тостере о == и ===)
- списков, реализованных как переодетые объекты
- отсутствия из коробки структур данных вроде deque.

Но это были студенческие поделки.

2) Python предоставляет больше средств борьбы со сложностью. Наследование, система метаклассов, синтаксический сахар. Хотя бы даже такая штука как property. Он даёт больше возможности инкапсулировать сложность внутри. Ну и на нём действительно очень много разнообразных библиотек. Возьмите хотя бы Django: она умеет автоматически генерировать миграции базы данных. Насколько я знаю, это мало кто умеет делать.

3) Не думаю, что JS - это язык будущего для бэк-енда. Я бы согласился, если бы вы сказали про Scala или Kotlin, которые куда больше подходят для больших и сложных приложений хотя бы потому, что имеют ещё больше средств борьбы со сложностью, чем Python. Поэтому я смотрю скорее в их сторону для своего будущего профессионального развития, не на JS. Он как-то не очень тянет в сравнении.

4) Ничто не помешает вам изучить платформу А, затем Б, потом В и так далее; от этого только польза. Может быть, вы через десять лет будете на Quipper - диалекте Haskell для квантовых компьютеров - писать. Но начинать посоветую всё же с Python - чтоб меньше заниматься мазохизмом и больше писать кода.)
Ответ написан
un1t
@un1t
Выбор ЯП и стека вещь сугубо субьективная. Параметров слишком много, чтобы можно было объективно сравнить.
Все перечисленные технологии популярны и в ближайшиее 5 лет будут востребованы. Выбирай то что нравится.

В пользу Node: всё идет к тому, что js станет стандартом как на фронте, так и на сервере. Через 5 лет серверную часть не на js будут писать только ленивые ретрограды.

Ну-ну. Или стухнет как руби.

Приложения получаются быстрее python и др. в 10-15 раз, выдерживают большие нагрузки,

У JS нет превосходства в производительности над Python. Скорее наоборот. Но в целом я бы не рассматривал производительность как фактор выбора, т.к. в первом приближеннии она одинакова.

нет задач, которые нельзя было бы реализовать в рамках MEAN-стека.

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

Технология в стадии активного развития, через 5 лет сегодняшние её косяки будут исправлены, и она станет стандартом де-факто для web-приложений, как php для web-сайтов когда-то. Нет смысла тратить время и распыляться на морально устаревающие средства.

Некоторые косяки действительно будут исправлены. С монгой все поигрались и забыли, вернулись к реляционным БД. Express.js это наколенная поделка, которую можно написать за один вечер. Там по сути кроме роутинга ничего нет. Может быть черзе 5 лет на ноде появятся какие-то полноценные фреймворки типа Джанги, Рельсов или Симфони, но на сегодняшний день их нет. Angular это вообще фронтенд, его можно с любым бакендом использовать.

На мой вкус Python имеет преимущество, как более приятный язык программирования с более широкой областью применения. Также Python является стандартом в популярной сейчас области анализа данных и машинного обучения. В Python можно писать синхронный код, так и асинхронный и это поддерживается на уровне языка.
Ответ написан
Комментировать
alexsurfer
@alexsurfer
Программист Python, Django, PostgreSQL, Golang.
Если ты учишься и хочешь навыки развить, что бы в будущем тебя кормило программирование, тогда мой совет такой. Начинай изучать python и javascript. Реальность такова, что без js не напишешь фронт, а python имеет множество библиотек под все задачи. Py очень понятный язык, js не очень понятный.

Есть проект PonyORM + PonyJS + ReactJS https://www.youtube.com/watch?v=6AWL4iSfZXU
За такими технологиями будущее, python на бэкенде и react на фронте.
Ответ написан
Привет

1) Для начала тебе нужно определиться с тем, что ты хочешь делать по итогу. Т.е. если запустить какой-то свой проект, то php/python. Если тут нужен асинхрон или научиться асинхрону, то node.js. Если хочешь работать устроиться куда-то в банк, то Java/C#. Т.е. выбирай инструмент под задачу, а не задачу для инструмента.

2) Python - универсальный язык, который может делать многое. Вопрос, что не всегда это можно сделать эффективно. В общем, если нужен асинхрон и много соединений то бери node.js, если нужно другое - то бери Python.

3) Не понимаю разницы между обычными сайтами и веб-сервисами. Вопрос сложности реализации - основа то везде одинаковая. Будешь делать сервисы, будешь уметь делать обычные веб-сайты.

4) Если для личного развития, то можно. Если для работы, то нет. Скорее всего ты будешь работать либо на php, либо на python, либо на node.js - и там уже сможешь детально рассматривать все нюансы и стек. Учить все сразу - не учить ничего.

5) Судя по тому, что ты описал в требованиях, Java тебе не подходит. Тут либо должна быть цель устроиться в какую-то большую компанию под сложный проект, либо должно быть четкое понимание того,что ты будешь делать, и почему ты хочешь взять именно Java.

Вопрос: Ты чем заниматься хочешь в итоге? Что-то для себя пилить, работать на фрилансе или пойти в какую-то контору (стартап или гиганта типа Яндекса, Меил.ру?)
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
sim3x
@sim3x
Средний разработчик использует 3 ЯП в день
На каждом ЯП 3+ технологии

Нельзя стать высокооплачиваемым разрабом изучив только технологию X на ЯП Y
Нельзя стать разрабом изучив только область знания Z

Так что учите все, что видите и пробуйте, то что нравится
Ответ написан
@immaculate
Программист-путешественник
Мне кажется, предугадать, что будет через 10 лет, очень сложно. Все равно придется не раз переучиваться. Единственное, что стоит исключить из рассмотрения — PHP. Он вряд ли что-то даст в плане развития мышления или карьеры, разве что плохие привычки.

То, что вы написали как преимущества Javascript - спорно. Зато у Javascript есть пара огромных недостатков
1) это язык-костыль, сляпанный кое-как (да в курсе, что ситуация исправляется, но не радикально)
2) это язык с очень низким уровнем входа, соответственно, часто придется сталкиваться с плохим кодом, потому что большинство разработки на Javascript идет методом копипастинга кусков из Интернета

Взгляните, например, на вопросы по Javascript здесь. Очень много вопросов демонстрирует что задающие их люди не изучили даже основы языка, не понимают, где у них Javascript, где jQuery, где HTML и где DOM.

Но разработчик на JS от голода точно не умрет, впрочем, так же, как и разработчик на Python. Субъективно мне кажется, что почти любой язык приятнее Javascript для изучения и разработки. Не люблю я его с давних пор.
Ответ написан
Shablonarium
@Shablonarium
Я таки вообще пишу на ASP.NET
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы