LINUX.ORG.RU

Стек технологий

 , ,


0

2

Всем доброго времени суток. Любопытно узнать мнение знающих людей. В общем программистом я работаю не первый год. Занимаюсь в основном внутренними корпоративными системами(erp, crm и т.д.). Раньше использовал PHP и Yii/Symfony2(исторически в команде так сложилось) для веб морд и Java для всего фонового и долгоиграющего. С год назад перелез на Python. Смысл лично для меня был в едином ЯП для всего серверного, чтобы не скакать от Java к PHP. И я таки оказался прав.

Сейчас слышу вокруг себя что все это не айс и на самом деле следует использовать что-нибудь компилируемое типа Java/C#. Основными аргументами были скорость работы, зрелость технологии(хз что подразумевается под этим и почему джанга менее зрелая, никто так нормальных аргументов и не привел), статическая типизация, многопоточность.

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

  • Да, из коробки скорость больше. На прямых числодробилках
  • Асп.нет показался симпатичнее чем жабьи фреймворки(от количества которых лично у меня глаза разбегаются). Как минимум потому что там есть четкое понимание на что смотреть.
  • Статическая типизация это классно. В питоне мне ее до жути не хватает(в 3.5 вошел модуль typing и я его использую везде где только можно. беда в том что его не используют в либах, выпущенных ДО этого)

Ну и суть вопроса - какие профиты со всего этого? По пунктам что вижу лично я:

  • Питон тормоз, что есть то есть. Но его можно сильно ускорить. Например, был у меня дико долго генерировавшийся отчет. Я переписал его на cython и подключил к проекту. Все счастливы. Да и настолько ли важна скорость именно языка? Узким местом обычно является база данных. Если с ней будет затык - тормозить будет все что угодно. На мой взгляд все в архитектуру упирается
  • Как уже писал, под зрелостью и энтерпрайзностью я вообще хз что подразумевается. На Python написана OpenERP, например. Куча крупных муждународных контор использует его как основной язык в проектах.
  • Вот тут да. Хоть typing и исправляет многое.
  • Тут своя шиза из-за GIL. Имхо именно потоки в питоне(третьем, во всяком случае) это скорее асинхронность чем паралеллизм. В один момент времени выполняется одна инструкция, на io блокировки нет. А вот процессы это параллельность. Экзекьюторы есть, feature есть. Shared memory тоже есть, межпроцессное общение можно пайпами сделать. Отдельные асинхронные фреймворки тоже есть. И все это не считая того что а) сишный код под гил не попадает и б) есть реализации питона без него.

Покритикуйте, в чем я не прав?



Последнее исправление: Erh (всего исправлений: 2)

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

Так вот, питон это свобода, а ява и асп это рабство.
Если у тебя питон тормозит — значит ты как-то неправильно его готовишь. Ну или может задача и правда слишком числодробильская и стоит написать модуль на каком-нибудь c++.
Ентерпрайз это способ взаимодействия контор, к инструментам оно никакого отношения не имеет.

  • Вопли от любителей конпелять это просто утиное кряканье.
  • В одних ситуациях конпелять надо, в других не надо.
  • В большинстве ситуаций можно конпельнуть, но не обязательно.
  • На яве кодят упоротые неадекваты, которые не смогли осилить c или c++, но хотят чувствовать себя илиткой. Или которым оракле мозги промыла.
  • На ниграсофтовских языках кодят не от большого ума или от безысходности.
  • На похапе кодят или по старой привычке или потому что втянули себя в это болото слишком сильно.
  • На питоне кодят хипстеры потому что теперь это модно и все остальные потому что это удобно.
  • На c++ кодят очень крутые разработчики, индусы, мамкины кодеры и позёры.
  • На c кодят самые крутые кодеры в мире, мамкины хакиры и позёры.
  • Статичная типизация и многопоточность нужны далеко не всегда. Если нужны обе и так сильно что без них реально плохо — посмотри в сторону c++.

    На правах личного мнения
Goury ★★★★★
()
Последнее исправление: Goury (всего исправлений: 1)
Ответ на: комментарий от Goury

А ты хипстер, индус, мамкин кодер или позер?

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

Ну я примерно о том же и писал. Факт того что статическая типизация и многопоточность нужны не всегда - согласен. И тем не менее в питоне они есть. Типизация там как минимум строгая

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

Не понравился он мне, даже не скажу почему.

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

Ентерпрайз это способ взаимодействия контор, к инструментам оно никакого отношения не имеет.

нет, это показатель качества программного продукта

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

Я, например, в начале карьеры работал с 1С. Было это лет десять назад. На мой взгляд это махровый энтерпрайз. И хоть у меня и нет особого негатива к их платформе - там была куча багов. Причем багов именно платформенных, приводящих к внезапному «вы хотите отправить отчет в майкрософт?» и с которыми ты хрен что поделаешь из-за закрытости платформы. В Python, Java и PHP я подобного не встречал. Что из них энтерпрайз? :)

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

если ты по сути сказать ничего не можешь, пошёл вон (:

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

про 1С я к счастью сказать ничего не могу
могу вещать только со своей позиции кодомакаки видя разницу между нефункциональными требованиями интерпрайз и наколеночными продуктами

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

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

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

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

Weres ★★★
()

Практически все описанные тобой проблемы решает Go, на который уже ушло некоторое количество Python-разработчиков.
Java и C# - сильно другие рынки с сильно другими задачами.

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

полюбому приятнее чем в аналогичные проекты на питоне. Хотя бы за счет типизации.

До первого interface{}.

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

За пустой интерфейс нужно снег в башка попадать. Чтобы больно было. В джаве за object - тоже. Я не говорю, что язык идеальный, но он удобен.

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

Но я не описывал никаких проблем. С моей точки зрения проблем кагбе и нет - в наличии только плюсы и минусы. Чтобы не было недопонимания поясню что имею в виду. Когда я работал с 1С он был однопоточный. В плане совсем и без возможности это решить. Вот это - проблема. Так как нет возможности что-то изменить.

А в моем случае именно проблем нет, есть особенности. Положительные и отрицательные.

А какие задачи типичны именно для Java и C#?

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

А в моем случае именно проблем нет, есть особенности.

К чему тогда весь этот разговор?

А какие задачи типичны именно для Java и C#?

Делать хорошо неповоротливой капиталистической машине с Запада.

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

Да ни к чему в общем-то.

Сейчас слышу вокруг себя что все это не айс и на самом деле следует использовать что-нибудь компилируемое типа Java/C#. Основными аргументами были скорость работы, зрелость технологии(хз что подразумевается под этим и почему джанга менее зрелая, никто так нормальных аргументов и не привел), статическая типизация, многопоточность.

Т.к. на слово я никому не верил - начал гуглить. Вот что вышло по лично моим наблюдениям

...

Покритикуйте, в чем я не прав?

Просто разбираюсь, может это я чего-то недопонял

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

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

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

Все так. Но ведь интересно же :) Просто уж очень много разговоров было о том как все замечательно

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

За пустой интерфейс нужно снег в башка попадать.

Там это канонично, так что ты не застрахован

umren ★★★★★
()

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

Узкое место это ввод-вывод, плодить кучу подпроцессов которые находятся 99% времени в состоянии sleep пока к ним не прийдут данные по сети, из БД или еще откуда, а потом заявлять что дескать мой сервер обрабатывал бы 100000 тысяч одновременных, а так только 100 из за GIL проклятого мягко говоря лукавство. В двух словах параллельно не только io будет исполняться, а вообще весь сишный код, который лежит под слоем питона, GIL он только для байткода питоновских инструкций. Гвидо выкинет GIL из питона, как только кто-то реализует версию без него, которая не будет работать медленее питона с GIL на задачах со всего одним процессом. Но что-то никто до сих пор не смог.

Рекомендую освоить асинхронную парадигму и писать все сервера только в асинхронном стиле, забыв про GIL навсегда, благо в питоне для этого есть twisted, который настолько зрелый и матерый, насколько это вообще может быть, к примеру twisted появился на свет раньше чем PEP8

Еще есть такой энтерпрайзный фреймворк как zope. Для расширения кругозора стоит почитать про ту модель из интерфейсов и адаптеров, которую он предлагает. Модуль zope.interface из него использует и twisted

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

Прикольненько, всё-таки на низком уровне всё больше устаканилось)

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

Видимо мне повезло и я еще не встречал толком затыков из-за несовместимости второй и третьей ветки питона.

плодить кучу подпроцессов которые находятся 99% времени в состоянии sleep пока к ним не прийдут данные по сети, из БД или еще откуда, а потом заявлять что дескать мой сервер обрабатывал бы 100000 тысяч одновременных, а так только 100 из за GIL проклятого мягко говоря лукавство

Но ведь GIL не блокирует процессы. Он блокирует потоки

В двух словах параллельно не только io будет исполняться, а вообще весь сишный код, который лежит под слоем питона, GIL он только для байткода питоновских инструкций

Знаю

Гвидо выкинет GIL из питона, как только кто-то реализует версию без него, которая не будет работать медленее питона с GIL на задачах со всего одним процессом. Но что-то никто до сих пор не смог.

Насколько я понял это толком никому не нужно

Рекомендую освоить асинхронную парадигму и писать все сервера только в асинхронном стиле, забыв про GIL навсегда, благо в питоне для этого есть twisted, который настолько зрелый и матерый, насколько это вообще может быть, к примеру twisted появился на свет раньше чем PEP8

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

Еще есть такой энтерпрайзный фреймворк как zope. Для расширения кругозора стоит почитать про ту модель из интерфейсов и адаптеров, которую он предлагает. Модуль zope.interface из него использует и twisted

Еще есть такой энтерпрайзный фреймворк как zope. Для расширения кругозора стоит почитать про ту модель из интерфейсов и адаптеров, которую он предлагает. Модуль zope.interface из него использует и twisted

Интересно, почитаю. А зачем нужны сторонние написанные интерфейсы если в питоне есть абстрактные классы? Пусть это и не совсем одно и тоже с точки зрения ООП

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

Тут своя шиза из-за GIL. Имхо именно потоки в питоне(третьем, во всяком случае) это скорее асинхронность чем паралеллизм.

Если убрать GIL, то этот тормоз будет жрать 100% не одного ядра, а всех.

Питон это не для числодробилок.

Но да, он хорошо подходит для написания прослоек между бд и хттп.

Всякие твистед и торнадо чего стоят например. Хотя сейчас уже модно asyncio (aiohttp+aiopg=profit)

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

Если убрать GIL, то этот тормоз будет жрать 100% не одного ядра, а всех.

Ты загнул :) Параллельность и подразумевает работу на всех ядрах для ускорения.

Питон это не для числодробилок.

И да и нет. Есть масса достаточно шустрых инструментов. Из того что первым в голову пришло - numpy, cython, pypy.

Но да, он хорошо подходит для написания прослоек между бд и хттп.

Как и для всего остального при грамотном подходе.

Всякие твистед и торнадо чего стоят например. Хотя сейчас уже модно asyncio (aiohttp+aiopg=profit)

Чего стоят? Оо

Вот, например, доклад на эту тему - http://2014.codefest.ru/lecture/841

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

На солярку отменили gcc?

У меня старая солярка 9.

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

гцц бинарных пакетов тоже нет.

Проблема в том, что голанговский рантайм еще не спортирован на эту платформу (спарк).

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

Но ведь GIL не блокирует процессы. Он блокирует потоки

Описался

Знаю

Раз знаешь, тогда получается набрасываешь на вентилятор?

Насколько я понял это толком никому не нужно

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

Я использую tornado

Я не использую и честно говоря не знаю зачем он нужен, если к моменту его создания уже был twisted, какие он проблемы решил своим появлением?

Интересно, почитаю. А зачем нужны сторонние написанные интерфейсы если в питоне есть абстрактные классы? Пусть это и не совсем одно и тоже с точки зрения ООП

Чем отличается АБС от Интерфейса это непостижимый сакральный вопрос для студента. В этом контексте интересна твоя оговорка в конце, раз ты знаешь что это не одно и тоже, то должен понимать зачем они. В двух словах и АБС и Интерфейс это не сама реализация, а декларация намерений, в этом ни похожи.

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

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

Каноничный пример http://twistedmatrix.com/documents/current/core/howto/components.html

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

Чего стоят? Оо

В хорошем смысле же. А всякие сишные штуки под питонячим соусом это понятно, но это уже и не питон ведь.

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

Читал его посты. При всей ненависти имхо в третьей ветке многое сделано удобнее чем во второй

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

Пардон, неправильно тебя понял

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

Описался

Как скажешь :) https://www.chrisstucchio.com/blog/2013/why_not_python.html - одна из первых ссылок в гугле. Таки thread подвержен GIL'у, Process - нет. Хотя возможно ты имел ввиду себя, тогда все ок

Раз знаешь, тогда получается набрасываешь на вентилятор?

С учетом твоей манеры разговора отвечу аналогично - ветку жопой читаешь? Первый мой пост посмотри.

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

Атата. По твоей логики не должно существовать таких маленьких и плевых проектов как linux, ruby, python(!), freebsd. ЕМНИП Гвидо писал что не видит смысла в отказе от GIL и согласен его внедрить только при условии того что скорость выполнения как минимум не упадет

Я не использую и честно говоря не знаю зачем он нужен, если к моменту его создания уже был twisted, какие он проблемы решил своим появлением?

Я искренне рад за тебя :)

Чем отличается АБС от Интерфейса это непостижимый сакральный вопрос для студента. В этом контексте интересна твоя оговорка в конце, раз ты знаешь что это не одно и тоже, то должен понимать зачем они. В двух словах и АБС и Интерфейс это не сама реализация, а декларация намерений, в этом ни похожи.

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

Все что мне требуется от интерфейса - гарантированное наличие определенных методов. И отсутствие возможности создать экземпляр. При таком раскладе абстрактные классы + NotImplementedError это самый простой способ достичь желаемого. Особенно с учетом особенностей питоньего ООП

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

OpenCSW архив на ftp://ftp.sunet.se,

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

Вообще мне эта солярка досталась по работе, говно еще то.

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

В упор не видишь. Там каталоги пакетов 5.9 разных сборок. Я с телефона, ссылку не кину. Проблема в том, что некоторые релизы opencsw накиданы для 5.8 и 5.10, надо посмотреть глазами. Только что находил gcc4 рантайм и языки для 5.9. Говном быть не может, так как ядро лучше линукса, а остальное доставляется.

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

Как скажешь :) https://www.chrisstucchio.com/blog/2013/why_not_python.html - одна из первых ссылок в гугле. Таки thread подвержен GIL'у, Process - нет. Хотя возможно ты имел ввиду себя, тогда все ок

Я разве где-то утверждал что thread не подвержен GIL. Персонально я не подвержен GIL и Гвидо неподвержен GIL, нам обоим норм. Тут будет умесно еще раз за нас порадоваться.

Атата. По твоей логики не должно существовать таких маленьких и плевых проектов как linux, ruby, python(!), freebsd. ЕМНИП Гвидо писал что не видит смысла в отказе от GIL и согласен его внедрить только при условии того что скорость выполнения как минимум не упадет

А в джаве тоже байткод исполняется в виртуальной машине, а GIL нету, а все потому что бабла в ее разработку столько влито, что буду не сильно далек от истины, когда скажу ВМ джавы самая совершенная виртуальная машина в мире.

Я искренне рад за тебя :)

Это приятно, но все таки, ты используешь tornado, но не можешь сказать почему его выбрал?

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

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

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

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

«Log In / Registration Closed»

«UNIX Packages offers under paid subscription, the following list of packages in Bold at the version specified for this version of Solaris.»

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