LINUX.ORG.RU

Python или NodeJS

 , ,


0

2

Сейчас, как я вижу, NodeJS становится всё популярнее. В чём его плюсы? Что у него один и тот же язык с браузером? В npm много пакетов, наверно, применение JS сейчас очень широкое.

Или обработать генерируемую через JS веб-страницу. Наверно, лучше в таком случае использовать тот же самый язык? У безголового Firefox есть библиотеки для работы с питоном или NodeJS, но чтобы можно было работать с ним через bash, мне ничего не удалось найти.

Ответ на: комментарий от silver-bullet-bfg

lisp, js, smalltalk, ruby (из того, что я знаю)

Tcl еще забыли. Вот где мощнейшие выразительные средства, он даже в чем-то превосходит лисп (в человечности главным образом). В перле еще есть source filters, тоже можно добавить в список. А самые убогие из динамиков это пхп и питон. Ну шаблонизатору простительно, а вот питон это какой-то позор.

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

Да, tcl забыл. Можно вспомнить на самом деле достаточно много языков. Python создавался для решения типовых задач… он примитивен и в этом его киллерфича. Ты можешь дать код джуну и ожидать +/- одинаковое решение с мидлом, т.к. язык просто ограничен. Та же канитель в Golang

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

Показатель IDЕ, видимо главный, то как твой провайдер работает. Или твоё сетевое оборудование.

Возможно. Сейчас скачал, ок. Красивенькое и хорошее окно первоначальных настроек, ок. Запускается ИДЕ, ок. Зарегиститруйтесь или войдите в аккаунт - не хочу. Не хотите - значит и пользоваться вы ИДЕ не хотите (окно программы закрылось.)

Kazun3500
()
Ответ на: комментарий от silver-bullet-bfg

ФП и ООП, которые по заверениям питонистов в питоне божественны.

Как сгоревший питонист, заявляю, что ФП там практически нет и поползновения выпиливать лямбды с map и filter в угоду comprehensions и выкинуть свёртку в functools это подтверждают.

Про рекурсию и остальное уже можно не заикаться.

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

Понтов больше чем от фанатиков JetBrains я видел только от фанатиков Apple…

А я видел. От тех кто освоили emacs, им постоянно пользуются (по их заверениям) и всех на него пытаются пересадить.

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

А я видел. От тех кто освоили emacs, им постоянно пользуются (по их заверениям) и всех на него пытаются пересадить.

Странно, никогда никого не пытался пересадить. Ибо IDE/редактор это вкусовщина. Ну и если человеку нравится жрать д**мо, то это не мо дело

silver-bullet-bfg ★★
()
Ответ на: комментарий от Kazun3500

Почему? Профпригодность - это то, что требуется оценивать тимлиду в отношении своих сотрудников. И если тимлид не способен придти к руководителю и сказать «с такими программистами мы не сделаем продукта», то это гав*о, а не руководитель среднего звена.

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

Да, в «рашке» принято оправдывать своё поведение и прикрываться отговорками о том, что специалистов не найти. Но это только там, где идёт распил или yoba-студий, который продают современные решения, строя бизнес на основе секты БМ.

За 8 лет работы тимлидом и пятнадцать лет работы программистом я не видел такого подхода ни в одной нормальной конторе. У гавноделов - да, везде и всюду.

silver-bullet-bfg ★★
()
Ответ на: комментарий от silver-bullet-bfg

И в чем же JS современный уступает Python?

Эти языка заточены под решения разных задач. Хотя они могут частично конкурировать в Web сфере.

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

JS властвует только в Web. Прочие сферы его применения похожи на садо-мазо с плетками и куртизанкамм.

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

Asyncio костыль, который лежит вне архитектуры языка.

Это утверждение требует пруфов. Начиная с того, что понимается под «архитектурой языка Python», заканчивая тем, где вне нее находится asyncio.

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

Наконец-то комментарий по существу.

Python живёт на локалхосте. Различные обвязки к либам, замена больших bash скриптов, так же используется как основной, так и дополнительным языком к различным программам и играм.

Особенно это. А то тянут его куда попало и огребают последствия.

RedEyedMan666
()
Ответ на: комментарий от silver-bullet-bfg

На сколько знаю - ES6 стандарт. Какая Node была уже не помню, но ЕМНИП где-то в районе пятой.

7.6 если брать вариант как я сказал - включена по умолчанию.

Синтаксис на основе отступов хотя бы.

Шикарнейшая вещь, которую с удовольствием внедрил бы всюду.

Это просто костыль, запись if в строку.

Ок, тернарники это синтаксический сахар заменяющий if

А иногда надо. В реальной задачи.

Когда реально нужен вложенный тернарный оператор? Приведите пример, элементарно интересно, когда обязательно нужен он и нельзя/хуже будет использовать if блок.

У тебя есть формула расчёта, которую ты не хочешь чтобы кто-то перебил через монки-патчинг. Или, для другого примера, у тебя есть метод, который гарантирует валидацию данных, которую нельзя исправлять. Или есть метод, который ползает в БД, куда нельзя ползать без разрешения. Тысячи примеров, которые можно найти в реальных задачах бизнеса. Бизнесу нужны гарантии безопасности и стабильности работы. Приватность решает часть кейсов.

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

Признание проблемы первый шаг на пути к нему. Дальше рекомендую почитать что-то из фундаментального по ООП до озарения.

И скатиться к жаве, с десятками классов на HelloWorld приложение? Нет спасибо. В некоторых областях оно элементарно избыточно. Но - я не отрицаю, что общие принципы оттуда знать надо.

Не то. Давай так - напиши вот что. Объект А стреляет событием, а объекты B и C вызывают свой метод и что-то делают. Объекты D и Х не реагируют никак. Сделай это только за счет метода языка, не прибегаю ни к чему кроме стандартных средств языка и без сервисов очередей. Если сможешь - покажи, буду рад увидеть как этого достичь. Сразу на крики «ненужно» и «зачем» - нужно, когда у тебя есть система, которая построена на не связанных объектах, которые должны обмениваться данными и реагировать на изменения без каких-либо обращений к друг-другу, для того чтобы были взаимозаменяемы.

Не совсем понял. Можно пример на том же яваскрипте?

А что тут сложного? Видоизменится синтаксис, но да.

Сильно изменится, очень сильно.

Скорость - на порядок выше, лямбды (в жс называются «стрелочными функциями») нормальные, типизация сейчас прикручивается нативная (медленно, но верно перенимается JS черты TS). Имеющиеся батарейки поверх для типизации (тот же Flow) на порядок лучше. Сюда же «допником» - изкоробочная асинхронность, хорошая работа с паралеллизмом (web workers уже на Node в стандарте), приятные генераторы, возможности метапрограммирования, приватные свойства и методы у прототипов, хорошая стандартная библиотека… И в чем же JS современный уступает Python? Если не брать религиозные войны и лозунги фанатеков?

Не совсем соглашусь с «хорошая стандартная библиотека» в жс, но если в целом - именно современный JS в некоторых областях ничем не уступает, а то и превосходит питон.

А можно чуть более подробно про нативную типизацию?

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

А почему js нельзя назвать примитивным?

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

Когда реально нужен вложенный тернарный оператор?

  1. Когда нужно запутать новичка

  2. Когда нужно сделать код лаконичнее, проще. Вместо if на две-три строки.

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

Шикарнейшая вещь, которую с удовольствием внедрил бы всюду.

Вот себе всюду и внедряй. Мне, например, такое дерьмо не нужно.

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

Шикарнейшая вещь, которую с удовольствием внедрил бы всюду.

Аналогично

RedEyedMan666
()

Сейчас, кстати допилят wasm и это может сильно изменить расклад с го/питоном.

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

Концептуально убого, видно уши языка для отсталых особенных. Форматирование - это форматирование, код - это код. Не надо смешивать мух с котлетами.

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

Эти языка заточены под решения разных задач. Хотя они могут частично конкурировать в Web сфере.

Да ладно. Сотни софта для декстопа и мобилок конечно же не существует. А так же ML и сетевое программирование.

Python живёт на локалхосте. Различные обвязки к либам, замена больших bash скриптов, так же используется как основной, так и дополнительным языком к различным программам и играм.

Тут да, соглашусь. Хотя скрипты на Node тоже давно пишут и они ничем не хуже. Хотя DevOps’aм проще в Python, ниже порог вхождения.

На этом поле JS полностью сливает Python.

Тут скорее не сливает. Эффект утёнка

JS властвует только в Web.

Да, да. Сотни декстоп приложений и мобильных, конечно это подтверждают).

Прочие сферы его применения похожи на садо-мазо с плетками и куртизанкамм.

Не согласен в корне. Писал на Electron приложения - всё было гуд. Сейчас, по правде говоря, это единственный способ написать по настоящему кроссплатформенное приложения для разных ОС.

Так же на ReactNative, Framework7 и ionic. Не вижу сложностей или мазохизма в их применении. Чаще всего мобильное приложение нужно как GUI к запросам на сервер с каким-то небольшим функционалом на клиенте. Для этого JS и его инструменты вполне пригодны. Тем более, что webview есть везде.

silver-bullet-bfg ★★
()
Ответ на: комментарий от RedEyedMan666

Повидал достаточно и этого хватило, чтобы бежать от разработки так далеко, насколько это возможно.

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

Форматирование - это форматирование, код - это код.

Это ты так считаешь. А другие в итоге забивают на форматирование, когда пишут код, стэковерфлоу полон таких примеров.

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

Повидал достаточно и этого хватило, чтобы бежать от разработки так далеко, насколько это возможно.

Ага, на каком-нибудь govnokod.ru я тоже всё это видел. Бежать от разработки не собираюсь, особенно если это мои поделки, которые я клепаю для фана.

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

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

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

Надеятся, что предыдущий разработчик будет пользоваться линтером или быть твердо уверенным, что часть ошибок форматирования ты никогда не увидишь в написанном коде?

Для меня выбор очевиден,

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

Здесь много кто неграмотно пишет свои комменты, но они ведь не перестали писать. А стоило бы :)

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

А другие в итоге забивают на форматирование, когда пишут код, стэковерфлоу полон таких примеров.

Сделай astyle, если надо.

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

Я не за себя пример приводил. Мне с питоном никчему делать этот ваш astyle. На других языках стараюсь не писать ничего, даже хэллоуворлды в пару строк (привет, JS).

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

Мне с питоном никчему делать этот ваш astyle

Мы его и не делаем, у нас код отформатирован. В любом случае это не является какой-то мегапроблемой/киллерфичей.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)

Очевидные плюсы скриптования на Python для меня

Попробую объяснить.

1. Обычно я акцентируюсь на объектах, а не на деталях синтаксиса вроде ; или {( ... )}.

2. Влияние отступов на синтаксис — для меня удобно. Таким образом я обеспечиваю корректное форматирование в процессе написания кода, а не после него. И подход принятый в питоне помог мне в выработке привычки следить за форматированием всегда, в любом тексте.

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

В синтаксисе питона нет ничего лишнего.

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

instance.your_super_call() И всё. Никаких этих ваших дурацких ; которые в других языках вечно забываешь дописывать. Про обязательные скобки я вообще молчу.

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

7.6 если брать вариант как я сказал - включена по умолчанию.

Сама то возможность использования гораздо раньше была. Зачем вам «включена по умолчанию»? Если уж так, то и в Python asyncio в стандарте не так давно появился (3.7.х ветка, ЕМНИП). И это позже все равно NodeJS.

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

Шикарнейшая вещь, которую с удовольствием внедрил бы всюду.

Вопрос, а зачем, какую проблему вы этим решите? В Python это внедрили, чтобы код для не программистов был более читаемый. Т.к. вложенность видна. Ну и плюс интерпретатор было проще написать таким образом. Остальное - вкусовщина и рассказы о том, что код стал более читаем - просто отмазка и показатель, что community и фанбои питона не способны запомнить style guide или использовать linter (что решает проблему соответствия стандартам). Ещё бы к IDE привязывали язык, чтобы писать можно было только на Х, а на всём остальном нет, чтобы еще и среду разработки не учить дополнительную. Ну бред жеж.

Ок, тернарники это синтаксический сахар заменяющий if

Любой ЯП - это синтаксический сахар над машкодами. Конструкции вводят в язык для получения определённых абстракций, которые дают ту или иную степень выразительности кода. Понятный для вашей текущей компетенции пример - вы можете сделать струнный инструмент с парой струн (Н.Паганини по легенде доказал, что можно и на одной струне сыграть) или дать их больше. Чем больше струн - тем больше возможностей. Но они не всегда нужны. Зачем вам 12 струн, если ваша задача сыграть «мурку» для «Михалыча»? Оно ему не нужно. Больше за это он не заплатит.

Вопрос в том, что там где Python востребован - возможности более сложных языков не нужны. Есть Х, который не способен понять ни один паттерн и REST сервис или скрипт для DevOps, который нужно получить не через день, а через пару часов. Если ему дать JS, TS, C# или не дай бог любое ФП - он не сделает. А вот с примитивным языком, где нет большого набора абстракций - задача будет решена. А когда надо будет внести сложный и новый функционал - дешевле переписать. Вот и получаем гору капрокода и капростартапов, которые будут вечно переписываться. Это не плохо, это модель разработки, которая имеет место быть и право на существование. И да, даже на примитивном языке можно сделать что-то стоящее и сложное, но на это уйдёт слишком много сил и времени. Будет идти борьба с интсрументом, а не с задачей. Sad but true.

Когда реально нужен вложенный тернарный оператор? Приведите пример, элементарно интересно, когда обязательно нужен он и нельзя/хуже будет использовать if блок.

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

У вас есть переменная, которая может быть пустой или заполненной, т.е. необходимо применить две стратегии. Стратегия 1: если переменная заполнена,надо плюнуть ошибкой вверх и асинхронно вызвать логирование (зачем дожидаться ответа от сервиса логирования - замедлит API), присвоить переменной null (ведь то, что у нас нет условий для поиска - не ошибка сервиса, а ошибка переданных данных и должна быть показана на клиенте). Если заполнена - вызывать запрос к БД, результат отфильтровать и вызвать N обработчиков (асинхронно, зачем нам разные поля JSON заполнять в синхронном режиме), для мутации данных и присвоить к переменной.

Результат используем дальше, для выполнения каких-то операций.

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

Далее эта переменная используется где-то дальше.

И скатиться к жаве, с десятками классов на HelloWorld приложение?

Смотря что за приложение вы в качестве HelloWorld используете. И в ООП языке без дерева классов вы всё равно ничего не сможете сделать, т.к. работа с консолью хотя бы - это уже отдельный класс с реализацией определённых методов.

Нет спасибо. В некоторых областях оно элементарно избыточно.

А я разве призываю использовать ООП везде? Можно пруф на это можно? Я говорю о том, что Python примитивен, но в части его областей применения не требуется что-то развитый язык, достаточно Python, т.к. применение нормального ЯП дорого. Ну не будем же мы для скриптов CI/CD использовать PureC или Java.

Но - я не отрицаю, что общие принципы оттуда знать надо.

Не то что надо, это необходимо. Иначе даже на Python rод будет полным говном, которое нельзя поддерживать. Просто Python-код будет проходить linter (т.е. минимальная читаемость всё же будет), но менее говном он от этого не станет.

Не совсем понял. Можно пример на том же яваскрипте?

Та любое frontend-приложение возьми на каком-нибудь ember. Или пример сервиса на moleculer. Конечно, если эти примеры по стандарту, а не костылями. Свой код, к сожалению, пока используются в production решения показать не смогу, т.к. комтайна.

Сильно изменится, очень сильно.

Ну синтаксис языка А отличается от синтаксиса языка В. Это нормально. Если есть понимание как работают даты и как они должны работать в виде прототипов - мало что изменится для вас.

Не совсем соглашусь с «хорошая стандартная библиотека» в жс

Почему же? Чего в стандартной библиотеки NodeJS вам не хватает?

но если в целом - именно современный JS в некоторых областях ничем не уступает, а то и превосходит питон.

Ну я это и сказал.

А можно чуть более подробно про нативную типизацию?

На сколько знаю, началось внедрение с типизированных массивов, как проверка «нужно ли» и развития идей Flow (который загнулся в итоге из-за TS). Начали обкатывать несколько вариантов статической типизации (от аннотаций как в TypeScript до гомункулов на основе JSDoc или WebAsm), пока смотрят как лучше реализовать, дабы не убить производительность. Пруфа к сожалению уже не найду, читал в обсуждении фич ES, которые принимали.

Все дело в том, что сейчас в JS можно писать декораторы и внедрена поддержка символов, по идее есть всё чтобы сделать Static Type Check и даже проверять его не как в TS при компиляции, но это скорее всего замедлит такой код. Поэтому в поисках вариантов.

А почему js нельзя назвать примитивным?

У него есть достаточно много уровней абстракций и свобода выбора в реализации, когда этого требует задача. Когда мне надо было написать сервис, который отдавался на поддержку студентам - я обмазал все async/await и максимально изолировал части через брокеры. Когда мне надо было сделать сервер для быстрой работы с изображениями (отдача пресетов, пережатие фоток, работа с CDN), который должен был выдерживать по 40к запросов в час минимум - то я сделал всё на основе cluster, ФП и callbacks, т.к. это давало меньше нагрузки и выше скорость работы. Когда мне в одной задаче на фронте понадобилось расширить объект стандартный для SPA я использовал proxy (таким образом не перебив стандартную библиотеку)… Примитивный язык заставляет вас придумывать абстракции для решения ваших задач (делаю некий микро-DSL-винегрет), а простой - обладает необходимыми абстракциями для решения задач на разных уровнях. Выбор же абстракций язык даёт возможность сделать на основе критериев задачи, а не на том, что язык Х не умеет так.

Я соглашусь, что чистое ФП, ООП, <имя_парадигмы> не нужны в прикладных задачах (чаще всего) и все языки в той или иной мере ограничивают программиста. Но, простые языки растут вместе с ним и дают под каждый уровень развития подходящие абстракции, а примитивные - заставляют писать велосипеды, чтобы реализовать те же абстракции.

silver-bullet-bfg ★★
()
Последнее исправление: silver-bullet-bfg (всего исправлений: 1)
Ответ на: комментарий от RedEyedMan666

Это обычно маугли, которых вчера в лесу нашли, а сегодня интернет дали. Если форматирование через жопу - я минусую и вкладку закрываю.

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

Мы его и не делаем, у нас код отформатирован.

Святая самоуверенность в том, что очередная жс-лапша или сишная не отформатирована вперемешку табом или пробелом. На код-то не влияет. Зато когда копипастишь куда-то сразу всё всплывает. Выглядит это очень непрофессионально :)

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

Копипаст то? Да, когда копипастом код пишут сразу школотой пахнет или веб макаками, не умею я их на запах различать...

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

Ага. Пистон конечно скопипастится как надо, никто не подрежет тебе табы/пробелы, например, на уровне кривого фронта.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.