На повестку дня: Ruby On Rails или Node.js или php или Python?
Доброго времени суток, уважаемые друзья ! :)
Скорее всего вам покажется, что это очередной холивар, но нет : я действительно стою перед сложнейшим выбором серверного языка и прошу вашей помощи. Я - молодой front-end разработчик, оперирующий изо дня в день html, css, sass/ stylus, JS(jQuery) с ajax-ом.
Не так давно думал о двух вещах : либо начать серьёзно back-эндидить, совмещая с фронтом, либо попробовать себя в разработке под iOS. В итоге решил, что веб все-таки куда более перспективная и любимая мною штука. Хочу писать хороший серверный код на приятном языке, добивая всё это изящным front-эндом. Через год уезжаю на учебу в университет США, буду получать бакалавра computer science и работать на part time job, из-за нацеливаюсь сразу на язык, который будет перспективен на сервере в ближайшие 3-7 лет - поэтому, php, скорее всего отпадает. Выбор естественно встал между четырьмя наиболее популярными языками : Ruby On Rails, Node.js, php, Python. Сам, говоря честно, не могу отдать предпочтение, потому что в бэк почти никогда не лез и знаю лишь основы php. С node.js должно быть легче, так как js уже изучил, а синтаксис там вытекает примерно тот же, поэтому это явный + к изучению. О RoR слышал, что это просто отличная штука для разработки мощных проектов с приятным синтаксисом и краткостью выражения. Python - что-то вроде RoR, только со своими заморочками.
Уважаемые программисты, очень хочу выслушать ваше мнение о том, что бы вы лично выбрали для вашего проекта, и как вы видите будущее этих языков? Что бы вы посоветовали изучать, исходя из изложенной ситуации? Заранее хочу выразить огромную благодарность всем, кто хоть чуточку уделит своего времени и укажет путь истинный в бэке! :)
Мода на Ruby / Rails прошла. Владельцу проекта нужна предсказуемость и прозрачность работы фреймворка, на котором построен его проект. Этого достаточно сложно добиться с "магией" Ruby, которую понять то сложно, если пришел с других языков. Это первое.
Второе, как ни крути но Ruby медленный. Да я пробовал последний Ruby 2.1 с последними Рельсами, и говорю он медленный. Да я знаю, что можно запускать Рельсу на всяких passanger, thin и unicorn. Знаю что есть JRuby и прочие реализации. Знаю что можно закешировать все что можно. Я это пробовал. И все равно, Руби - медленный. К слову реализаций Python тоже много, есть и Jython, PyPy, Stackless Python. Django на фоне Rails выглядит просто молнией, быстрый старт и прозрачность работы. Нет никакой магии, все понятно как работает от начала и до конца.
Третье, Django достаточно консервативный фреймворк. В него никогда не добавят какую-нибудь сомнительную фичу, как это бывает в Rails (например никому не нужный turbolinks). Скоро выходит версия 1.7. Где достаточно много плюшек действительно нужных.
Вам будут говорить про разветвление Python на версию 2 и 3. Что все плохо. Не верьте. Это все ерунда. В настоящее время большинство популярных библиотек уже давно на Python 3. Django, Flask уже давно. Мы все новые проекты начинаем на Python 3 и проблем никаких нет.
На счет NodeJS. Использовать можно, но... Неудобно. Переносимость кода client side < - > server side по факту равна менее 10%. Сейчас большинство используют NodeJS как платформу для запуска нужных тулз для сборки фронтэнда, например Grunt / Gulp, Bower и прочее. Конечно пакетный менеджер npm.
Покажите аналог такого примера в рельсах на джанго пожалуйста
Product.category.try(:user).try(:fio)
Знаю что этот пример не рабочий, но покажите мне его аналог.
Присоединяюсь к @Rikkit , вот такой пример еще: User.admins.active.pluck(:name).map(&:upcase).map(&:constantize).each { |constant| SomeClass.send(constant, 1, [2,3,4], "params") } unless proc { Time.now < Time.now.middle_of_day }.call
Кслову, скорей всего, вы поймете что тут происходит, знаю только англтийский
Насчет заказчика, вы правы наполовину: просто ему обычно не нужен человек, который пришел в руби с других языков - ему нужен тот, кто в нем разбирается :)
Насчет версий питона я не знаю, но когда около года назад читал литературу по нему, встречал противоположные утверждения, типа "Если вам скажут, что уже появился питон 3, то забейте и делайте на 2"
Руби - медленный. Делать на нем десктопные приложения пока, все же, не стоит (да и врядли когда-то это будет оправдано). Так же на нем не нужно делать еще очень много вещей. Но вот веб, где базы данных обычно работают на порядок медленней любого даже интерпретируемого языка - отличное место, где чаще всего медленность руби неважна и проигрывает перед сахаром
И да, как везде пишут: руби и рельсы - пристрастные инструменты. Или согласишься с тем, как предполагалось их использовать, или ничего не получится.
Плюс, тут уже заметили, что каждый будет хвалить свое :)
@webus вместо того, чтобы называть магией все, чего вы не понимаете, может стоит разобраться как оно работает?
Вы говорите, что он медленный. Можете привести бенчмарки свежих рельсов/руби с джанго/питоном, на основании которых вы делаете такие утверждения? Я видел бенчмарки рубей 1.9.3, и там они не сильно уступали питону. И вообще, странно, что вы говорите о скорости в высокоуровневых веб-приложениях. Критичные к производительности части приложения пишут на быстрых низкоуровневых языках. В большинстве случаев бизнесу требуется скорость разработки и простота развития приложения, которые руби/рельсы обеспечивают так, как никто.
@Shetani безусловно прав. Я бы Вам не советовал полагаться на какой-то единственно верный язык, ведь они всего лишь инструменты. В одной конторе будут бэк писать на пайтоне, в другой на рельсах, в третьей бэк будет на php. Выбор может зависеть от многих факторов и, чаще всего, выбирать будете не Вы. Потому, по-хорошему, советую изучить все предложенные Вами варианты. И не надо бояться, что времени не хватит. Хватит. Много времени может занять изучение первого языка для бэка (так как надо будет въехать и прочувствовать как этот бэк работает) и второго (потому что нужно будет переосмыслить то, что Вы выучили в первом), а дальше пойдет по накатанной.
Тоже советую начать с рельс и руби, ибо не зря в тренде.
Потом советую подергать node.js, ибо однопоточность и асинхронность, а также, по желанию, фулл-стэк фреймворки (единый код на сервере и на клиенте - meteor и другие).
Дальше уже php и python для полноты картины.
Также советую добавить в список Go, Java/Scala и Erlang.
Ну и совсем уже на любителя - Haskell + Yesod...практической ценности в этом будет мало, но для понимания (а также расширения сознания и просветления) очень даже полезно. =)
Программисты для своего проекта выберут то, на чем они пишут. И каждый посоветует свой фреймворк.
P.S. Сам за руби, тут как раз вебинар в воскресенье будет, может что-то для себя почерпнете.
Если вы уже пишите FrontEnd, зачем изменять уже известным вам веб-технологиям?
Если вы верстаете, знакомы с JS и JQuery, препроцессорами, то не разумнее ли развиваться дальше в этом же направлении? Или вы стали гуру, таким же как Paul Irish?
Берите NodeJS и серверный JS, на западе это самые трендовые технологии на сегодняшний день, за год как раз расширите свои знания и сможете устроиться на стажировки, поработать в боевом режиме.
Это мой взгляд на вещи, но как говорится решать вам...
Я не стал гуру, как Paul Irish пока что :) Эгоизм человека - великая вещь : именно это заставляет человека создавать новое и постоянно двигаться вперед. Вот интересно, что у животных его(эгоизма) нет, поэтому вполне естественно, что обезьяна не будет писать веб-приложение для того, чтобы по-правильному открывать свои бананы, не задевая плод. Думаю, что суть ясна : back мне нужен чисто для себе(это для начала) и своих проектов. Я обожаю front, но хочется чего-то нового.
Itvanya: Сам являюсь по большей части чисто Ангулар "разработчиком", в свое время учил и c# и ruby но в конечном счете, остановился на node. И если бек вам нужен только для своих проектов то node самое то что вам нужно., а если нет, то учить то что скажут)
У меня проекты на php (Yii) и ASP.NET MVC4.
Могу сказать, что сейчас сложно выступать в поддержку php.
.NET стремительно развивается, набор полезностей, замечательный C#, средства разработки и тестирования, литература.
Обычное интернет приложение на php вполне годно.
Но я работаю с финансами (обработка больших объемов данных), php проигрывает тут по всем показателям.
Так что добавляйте в свой список ASP.NET, убирайте php. Пробуйте и выбирайте.
По node.js - как аналог ASP.NET MVC4/RoR/Django он не годен. Но вполне кошерен как бэкенд для клиентского MVC, с вашими познаниями это неплохой вариант. Но есть одно но... Только некомпетентный аналитик допустит подобные проекты на обслуживание бизнеса. Ситуация будет меняться со временем.
А что именно понятно из трендов (ссылка по частоте запросов)?
Если, например, к тем запросам, что Вы указали добавить laravel то картинка полностью поменяется: https://trends.google.com/trends/explore?date=all&...
Руби и php можно сразу откинуть(Хотя по php куча вакансий). Да и работы по руби и питону не так много. Да питон неплох, но работы по нему меньше чем по C# JS Java.
Лучше смотреть в сторону Java и C#, а именно spring mvc, asp.net mvc. Они популярны в энтерпрайзе.
Или развиваться во фронте и пробовать node.js. Ноду больше используют в соц сетях играх и прочем. Для интерпрайза она не подходит.