LINUX.ORG.RU

Безоговорочный выбор ЯП для веба.

 


2

6

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

Разбор.

-Статические языки. Это производительность и экономия ресурсов сервера, а значит денег на сервер. Плюс очень сильно помогает от мелких ошибок, особенно когда долго за кодом и начинаешь путаться (тут IDE или компилятор умело даст по рукам, сказав что ты запутался - очень помогает). Ну а так имеется нормальное (настоящее) многопоточное программирование (и чаще все в одном процессе).

-Java - язык очень нравится (честно, считаю наилучшим для бизнеса), но ужасно не нравится энтерпразные решения и библиотеки (один ужас... всякие ЕЕ и даже Spring для простого или среднего пет-проекта, смотрятся ужасно). Оверхед на оверхеде, читать исходники очень сложно, порой обычное решение обернуто в избыточное число объектов. Про сервлеты (и ЕЕ) я уже говорить не буду, рассматривал постройку приложения на embedded-серверах (Jetty, Undertow, Netty). Очень нравится то, что можно реализовать все что нужно через maven (гредле), хотя конечно nginx придется ставить, но вот эта вся мощь - что юзаешь один язык, очень круто. Крайне бесят XML.

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

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

-С++ и Раст - слишком хардкорен для меня и думаю для веба в целом тоже.

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

-PHP и node.js - пропущу в обзоре.

-Python - не совсем идеальный язык, как фанатеют люди которые пишут на нем, но на мой взгляд лучший выбор из скриптовых языков на сегодня (не идеальный язык, но идеальный выбор). Правда я особо не люблю FULL фреймворки, такие как джанго, так как в вебе, чаще проще что-то написать по-быстрому самому, чем потратить дни на решение проблем или изучения мануалов того или иного монолита (туда же Spring MVC). По этой же причине посматривал на фласк или что-то типа фалкона (пока еще не решил).

И так, предлагаю дискусс - что выбрать «N», или «Y» и почему вы так решили?

PS пропустил (и не знаю о них) - руби, свифт, шапр и т.д.

Ответ на: комментарий от KRoN73

но разница всё равно не на порядок

Вот тут у меня разница почти на три порядка: https://www.techempower.com/benchmarks/#section=data-r14&hw=ph&test=p...

Ты в курсе как устроенны динамические языки и какая разница между статическими? И почему даже JIT никак не поможет особо (и вроде, как слышал, он и не помог, поэтому отказались). На один только момент работы с одним типом данным, динамических язык будет прыгать в свою хэш-таблицу и проверять типы, вытаскивать типы, приводить типы и т.д.

Ничто в реальном приложение (в реальном, а не в фибоначчах) не поможет просесть динам язык в раза два три. И это тут мы еще не говорим о памяти, которая хранить на все эти мета-данные (и то что для го или джавы и т.д. память будет шаренная, а не как копии у процессов у динамических языков).

Хотя, стоит отметить, что V8 (js) знатно отполировали до блеска, но все равно он всосет в реальных приложение против статик языков.

wist512
() автор топика
Ответ на: комментарий от KRoN73

Нет. На числодробилках Питон быстрее :D

Ну в фибоначчах он же победил, лол (или ты думаешь что вызов методов покрывает вычисление чисел и у нас там дробилки не получается??)

Или прочитай после слов «Предупреждаю сразу»

Я посмотрел исходники, зачем мне лишние слова, когда я вижу очередные школьные замеры коня в вакууме, ну серьезно benchmarksgame тут выглядит солиднее (хотя тоже конь) https://benchmarksgame.alioth.debian.org/u64q/php.html

wist512
() автор топика
Ответ на: комментарий от wist512

Для бэкенда мне. Ноду пропустил, потому что краем ухо наслышан что там сейчас какие-то «боли» с переходом на новую версию (или что-то в этом духе),

переводил несколько проектов с 0.10 на последнюю ноду (недавно). все прошло безболезненно.

наслышан про калбэк-хеллы, которые сейчас заменили чем-то но не более лучшим (промисы?)

есть несколько решений callback hell, в т.ч. промисы.

и что уж больно часто все меняется.

новое добавляется, старое никто не отбирает.

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

они и не было «так». все нормально у ноды для «многолетних» проектов. JS — да, на больших проектах боль, но на то и придумали typescript.

waker ★★★★★
()
Ответ на: комментарий от waker

Вот typescript в этой связке интересно глянуть.

wist512
() автор топика

Сто лет не холиварил, :) но как-то на пхп в 2017 начинать проект - не (конечно чисто мое мнение).

И так, текущие позиции: java vs go и python vs node.js

wist512
() автор топика
Ответ на: комментарий от wist512

Или статические языки vs динамические языки

wist512
() автор топика
Ответ на: комментарий от KRoN73

То же не вижу смысла холиварить, все неудобные посты ты игнорируешь, подтасовываешь факты ради холивара (те примеры «с низа» techempower.com) и при этом кидаешь такие утверждения как втрое быстрее, основываясь на примерах алгоритма уровня «собеседований».

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

wist512
() автор топика
Ответ на: комментарий от wist512

старого унылого и плохо задезайненного пхп

Он - превосходный, удивительный и очень полезный язык программирования. Что ты с ним такое делаешь (или питаешься сделать), что он тебе выглядит унылым и «плохо задезайненным»? Ты «просто так себя чувствуешь» или не хватает чего-то конкретного? http://php.net/manual/ru/ полностью осилил?

anonymous
()
Ответ на: комментарий от KRoN73

Вот если речь о Ruby, который в цитате последним, то это один из худших сегодняшних лидеров :) ИМХО, конечно.

аргументы, или опять громкий пук в лужу?

anonymous
()
Ответ на: комментарий от anonymous

аргументы

w/o синтаксис и постоянные проблемы при обновлении инфраструктуры. Каждое обновление продуктов на RoR — русская рулетка, в 90% случаев требующая лезть с напильником и разбираться, что там ещё сломалось и что ручками в зависимостях править нужно.

KRoN73 ★★★★★
()

Правда я особо не люблю FULL фреймворки, такие как джанго, так как в вебе, чаще проще что-то написать по-быстрому самому, чем потратить дни на решение проблем или изучения мануалов того или иного монолита (туда же Spring MVC). По этой же причине посматривал на фласк или что-то типа фалкона (пока еще не решил).

bottle.py

buratino ★★★★★
()
Ответ на: комментарий от KRoN73

Каждое обновление продуктов на RoR — русская рулетка

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

anonymous
()
Ответ на: комментарий от KRoN73

Самый адекватный синтаксис, не вижу ничего в нём w/o. Всё есть объекты и они общаются посылками сообщений, это собственно весь синтаксис (плюс блоки добавляются). А вот нахваливаемый Python имеет w/o написанную стандартную библиотеку (2.7) (сравните читаемость с Ruby /lib) и для стандартных методов правила по именованию методов из PEP8 не писаны . PHP даже рассматривать не стоит.

Lancelot
()
Ответ на: комментарий от theLastOfCats

Стал интересен такой выбор. А зачем «Scala + Play2» если второй вариант с TypeScript полностью его покрывает (как потребность в статике, так и в классах полноценных)? Примеры, как бы, взаимоисключают друг друга.

wist512
() автор топика
Ответ на: комментарий от wist512

ИМХО, связка «Scala + Play2» это как «Java + Spring», но без жжения в заднем проходе от использования Spring.

Да, мой ответ скорее предполагал, либо Scala, либо TS. Они оба хороши.

Хотя, я вспомнил, что в этот список еще можно добавить «C# + .NET Core»

theLastOfCats
()

Если не страшны скобочки, простота и головокружительные фичи(для веба в частности): Clojure/ClojureScript

Если нужно привычное, не смущает небольшая отсталость и отсутсвие качественной экосистемы(нет нормальных либ от слова совсем): Javascript(node.js)

Java - боль. Если и рассматривать языки с хорошей интераперабельностью с java, то однозначно kotlin(это как человек 2 года поработавший с ним говорю, не android).

Итого по приоритету: 1. Clojure 2. Javascript 3. Kotlin 4. Scala (не использовал, но плюсую)

anonymous
()

Конечно же, это Common Lisp

anonymous
()
Ответ на: комментарий от anonymous

Java - боль. Если и рассматривать языки с хорошей интераперабельностью с java, то однозначно kotlin

С хорошей IDE вся боль джавы не чувствуется и так же не чувствуется все превосходство котлин (мне субъективно показалось, что пишешь на той же джаве). На джаве наилучший тулинг, который я встречал (опять же субъективно).

wist512
() автор топика
Ответ на: комментарий от wist512

Еще в 2004 году весело кодил на нем процедурно, местами с классами

Go - PHP нынешнего десятилетия. А Коммандер Пайк - новый Расмус.

anonymous
()
Ответ на: комментарий от anonymous

PHP всех рвет, потому что он похож на сишку

Начиная с 5й версии всё меньше и меньше.

anonymous
()

Java - язык очень нравится

паблик статик файнал борщ, да. Кому в здравом уме может нравиться жаба?

Kotlin

это для тех, кто не хочет жрать жаву(и правильно делает), а скалу какую-нибудь ниасилел(зря)

я сам за Clojurescript и Clojure, если чо

anonymous
()
Ответ на: комментарий от wist512

С хорошей IDE вся боль джавы не чувствуется

с хорошими протезами отсутствия ног не чувствуется

anonymous
()
Ответ на: комментарий от anonymous

это не сам питон

Так и в PHP каком-нибудь числодробилки тоже не сам PHP :)

KRoN73 ★★★★★
()

Кстати, как раз по сабжу. Тут случился один расчёт на Golang уже ближе к Web'у. Нужно хитрый JSON читать и обсчитывать.

Я себе вчера лицо фейспалмами разбил внутренней противоречивостью Golang :) Ну, ладно, инопланетный парсинг JSON, это объяснимо статической типизацией. Но вот каша из чрезмерных строгостей, типа отсутствия неявных преобразований типов и, наоборот, дурацкого сахара, провоцирующего трудноуловимые ошибки, типа присваивания с инициализацией — это фейспалм. По-моему, язык с такой кашей в условиях рынка просто обречён на успех :D

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

По поводу количества активных проектов на GH. С помощью крайне примитивной тулзы получил данные за 2014 - 2017 год.

Принимались во внимание проекты, имеющие:

  • Активность на проверяемую дату (месяц);
  • Хотя бы 1 звезду;
  • Хотя бы 1 форк;
  • Вес больше 10KB.

Затем немного обработал в LibreOffice Calc и вот что получилось. Среднее количество проектов за 12 месяцев на ЯП:

	2014	2015	2016	2017
C#	520.5	847	995.5	2136.4
Go	258	422.5	490.8	1372.6
Python	1690	2241.1	2700.5	6529.8
PHP	1119.8	1455.3	1661.8	3839.6

Принимая сумму всех 4х за 100%, позиции относительно друг-друга (округлённые значения):

	2014	2015	2016	2017
C#	14.5%	17.1%	17%	15.4%
Go	7.2%	8.5%	8.4%	9.9%
Python	47.1%	45.1%	46.2%	47%
PHP	31.2%	29.3%	28.4%	27.7%

Получается, за последние (неполные) 4 года количество проектов на C# выросло на 1.1%, на Go - на 2.7%. На Python упало на 0.1%, на PHP - на 3.5%.

anonymous
()
Ответ на: комментарий от KRoN73

В теме всё было.

Не было. Важны детали: как запускаешь, с какими параметрами и прочее. Видел одного кадра, который у Revel замерил скорость harness (реверсный прокси) и сделал выводы, что Go медленнее самого медленного PHP в сотни раз.

anonymous
()
Ответ на: комментарий от anonymous

Кому в здравом уме может нравиться жаба?

Хозяевам галер.

Oxdeadbeef ★★★
()
Ответ на: комментарий от anonymous

Кроме того, как выше было замечено, компеляцию регулярки не нужно повторять с каждым запросом - это не PHP, одного раза достаточно - инфа 100%. И меня таки интересует, какой шаблонизатор был использован для PHP. Если никакого, то эквивалентом этого в Go была бы простая fmt.Sprintf().

anonymous
()
Ответ на: комментарий от anonymous

Не дописал:

Эквивалентом этого в Go была бы простая fmt.Sprintf()...

ты же импортируешь жирненькую template/html. Замерь скорость со Smarty или что там сейчас в PHP популярно и сообщи, как прошло.

anonymous
()
Ответ на: комментарий от th3m3

Не всем же борщ хлебать, кому то и работу делать надо.

anonymous
()
Ответ на: комментарий от anonymous

паблик статик файнал борщ, да. Кому в здравом уме может нравиться жаба?

То что разработчики в 95 году не предвидели капризы энтерпрайза, это отдельная тема, такая же тема как многие умудряются хаить древнейшие языки спустя 20-40 лет, когда больше бомбит от некоторых нездоровых решений в новых языках.

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

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

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

*Кроме фреймворков, настраивающихся по нотациями, все это в совокупности чистой воды магия, но то они и фреймворки, чтобы было модно и молодежно.

wist512
() автор топика
Ответ на: комментарий от th3m3

А сколько в Rust сообществе имбецилов? То-то и оно. В Go вот - каждый второй. Так что Go - самый стремительно растущий ЯП по всем параметрам. В него и следует запрыгивать.

anonymous
()
Ответ на: комментарий от anonymous

Люди пишущие на го делятся на несколько типов:

1) Настоящие программисты, опытные прагматичные разработчики, даже бегло могут оценить потенциальные проблемы языка и как он пригоден для их разработки. Никогда Го не выбирают, кроме вынужденных случаев, когда хайп выше здравого смысла и приходится работать с чужим кодом.

Присущее свойство - приоритет на многолетнюю разработку, даже ценой красивого синтаксиса (не будут менять инструмент, ради пары свистелок, явно имеют свой накопленный многолетний код и ставит разработку выше инструмента).

2) Среднего числа разработчики, видят в языке чисто инструмент для микросервисов и прочих скриптовых трендов (devops).

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

3) Низкоуровневые-разработчики или люди близкие к ИТ, самая неокрепшая область ИТ индустрии (и самая популярная из-за хайпа по обучению на программистов), ввиду малого опыта едят все что дают с полки, причем вообще не разжевывая (не имея к этому критической оценки). То есть, никак не могут объективно оценить то что дают, поэтому заглотнув маркетинг в чистом виде, преподносят инструмент как лучший из лучших и вообще что-то близкое к утопическому идеальному.

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

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

wist512
() автор топика

В общем, я правильно понял, что выбор сделан в пользу Python?

th3m3 ★★★★★
()
Ответ на: комментарий от x3al

и вакансии где-нибудь за пределами снг.

смотрел вакансии в Германии - вакансий на Python и Ruby в разы меньше, чем вакансий на PHP.

правда в свою очередь вакансий на PHP в разы меньше, чем вакансий на Java

Ford_Focus ★★★★★
()
Ответ на: комментарий от x3al

причём надо сказать, что вакансия на питоне - далеко не всегда web, очень много вакансий для тестировщиков с требованием питона

лично мне заниматься одним только тестированием как-то не очень интересно

Ford_Focus ★★★★★
()
Последнее исправление: Ford_Focus (всего исправлений: 1)
Ответ на: комментарий от Ford_Focus

если 2-4 раза - «не сильно выделяется», то я пас.

Если что — JS динамический, а PHP — тормоз.

x3al ★★★★★
()
Ответ на: комментарий от Ford_Focus

смотрел вакансии в Германии - вакансий на Python и Ruby в разы меньше, чем вакансий на PHP.

Проиграл. Выше уже кидали ссылки. Но давай повторим для Германии.

PHP https://de.indeed.com/php-Jobs 5.312 вакансии

Python https://de.indeed.com/python-Jobs 5.922 вакансии

Есил взять UK, то php так и остаётся на уровне 5к, а Python уже 9k. Даже Гугл Тренды показывают, что популярность php медленно сходит на нет. С каждым годом. Он сейчас ещё шевелиться за счёт того говнокода в интерпрайзе, который нужно поддерживать.

th3m3 ★★★★★
()
Ответ на: комментарий от wist512

Питону не нужен ts, чтобы не вызывать боль и ужас. Так что...
Не, если нужно нанять психа, заточенного на jquery с коллбэками для бэкэнда (зачем-то) - то ок.

Shadow ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.