LINUX.ORG.RU

Почему во многих Питон-проектах не используют async/await и ООП, как в Java?

 , , ,


2

1

Привет, всем. По работе смотрю новые питоновские проекты, и немного удивляет следующие детали:

  1. по сей день, пытаются все оформить сугубо через def() и форкать разные Py-скрипты через систему

  2. не смотря на наличие async/await в Python v3 - не используют и не пытаются

  3. если и объявят class , то он сугубо используется для DAO/DTO, ни каких сложных ОО-дизайнов не оформляется… type hints не испольуются, ABC-контракты не используются, GoF-паттерны тоже

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

Говорю не про публичные проекты, которые в GitHub можно найти. А про многие, которые делает разработка в рос. компаниях. Картину наблюдаю на разных компаниях в течении последних двух лет.

Вот, я не пойму… Я что-то не понимаю или что? Вроде, появляются различные интересные фичи в Python3 , ряд вещей позволяет приблизится к написанию кода, как на Java.

Все-таки, Python не является Haskell, OCaml или каким-нибудь диалектом LISP. Это язык с элементами функциональщины, а не pure functional language, как Haskell. Так от чего не снабдить свой код asyncio, все граммотно оформить по ОО-дизайну с SOLID-принципами, четко разработь с event loop и прочим… Все какая-то портянка из 100500 глобальных def’ов вижу, в основном, в проектах. Да и вроде… Компании - солидные и платят этим Питонисам 250+ рублей в месяц. А стиль написания такой, за который могли бы уволить джуна в 2010ом, если речь шла про другой стэк (C#, Java).

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

Это лень и нежелание просто? Или есть объективные причины забить болт на все это, и далее оформлять спагетти-код километровый?

P.S. не удтверждаю, что я - прав. Возможно, я совсем не прав. Я просто реально не понимаю, почему качество Питон-проектов, как было примерно таким 10 лет назад, то таким и осталось… Адепты на других языках, как-то более лучше развиваются в плане чистоты своих проектов. Опять сугубо моё ИМХО.

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

Погоди, я на питоне машииное обучение учу в батарейках на нормальных ЯП от серьёзных дядей и разгребаю сырые данные. Мне кажется тянуть туда Java или упаси боже C++ - моветон. Мне надо о качестве данных волноваться и цифрах, которые я считаю, а не о том, что указателями обмазываться. И о том как в срок данные причесать в удобоваримый вид и под сроком больше не время работы программы стоит, а то время, которое уйдёт на составление костылей для какого-то удобоваримого представления данных. А там уже и Царя можно нанимать байты гонять эффективно.

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

Ну да. Мне пока заходят только изменения в датаклассах и f строки из свежего. Прямо так чтобы ими обмазываться можно было. Потому что датакласс куда удобнее массивов всяких с индексами и удобнее чем обычным методом его делать. Ах да, из совсем свежего вкусно выглядят изменения в менеджере контекта with, но я пока не оценил по достоинству.

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

нет объекта верхнего уровня свойствами которого были бы все объявленные объекты как в js или ruby

locals()

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

тут выше про gil писали: питон сам управляет потоками (зеленые потоки) как, например, go… если, вкратце - то это механизм, которые предотвращает модификацию данных разными «потоками» и вместе с тем все замедляет… но это не является особой то проблемой для серверных приложений, потому как все они запускаются через тот же gunicorn, который берет на себя создание множества процессов и балансировкой нагрузки между ними.

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

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

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

Что одно, что второе не сильно надо. У питона мало мест применения где нужны потоки или асинхронность. Я против использования питона где это надо. А так да, если надо, то нормально. Но обмазываться на ровном месте?

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

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

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

Потому что первые мои ЯП были все со статической типизацией.

В алгоритмах можно использовать и динамические объекты и при этом все будет работать быстро.

К сожалению многие просто не умеют разработать архитектуру динамических объектов, которые бы не тупили.

При разработке проектов вполне можно использовать динамические объекты, но лишь в тогда, когда они действительно полезны.

В целом конечно архитектура динамических объектов должна быть хорошая.
Где этого нет, то все как в басне

А вы друзья как не садитесь, все в музыканты не годитесь! ...
anonymous
()
Ответ на: комментарий от tz4678

Так то да. Но на мой вкус это больше извращение. Хотя ютубчик вроде как переписали с питона. Но сейчас я бы не стал веб на питоне делать. А так согласен, что есть места где нужна асинхронность. Но мне сам питон в вебе не нравится. php/go лучше выглядит. Но это моё ИМХО, народ вон и на Java/C# веб делает.

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

датакласс куда удобнее массивов всяких с индексами и удобнее чем обычным методом его делать

attrs существовал задолго до датаклассов

eternal_sorrow ★★★★★
()

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

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

Но мне сам питон в вебе не нравится. php/go лучше выглядит.

Вот уж нет.

eternal_sorrow ★★★★★
()

Если бы в Жабе были обычные функции то это плевдоооп там бы тоже не городили.

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

Да тут не в скорости дело. Я редко в скорость упираюсь, статика больше помогает глупые ошибки не делать, когда по невнимательности в одну переменную/метод/поле не сунешь что-то чего там быть не должно. Это ещё на этапе компиляции всплывёт. Код по типу

class Country{
...
int capitalCode;
string capital;
...
}

...
Russia=Country(...);
if (Russia.capitalCode=="Москва"){
...
}
На этапе компиляции нафиг пошлёт, да и IDE заругает сразу. А в динамике проглотит. И вроде тяжело самому набрать capitalCode вместо capital, но с автодополнениями в IDE как нефиг можно сделать такое. Ну или если поля сильно похожи то тоже можно не то выбрать. Так-то только из-за такого страха я немного недолюбливаю динамическую типизацию, хотя и понимаю что это страх и я очень редко подобное делал за всё время.

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

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

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

Почему во многих Питон-проектах не используют async/await и ООП, как в Java? (комментарий)

Да, я понимаю что data hints как раз призваны решить эту проблему. Но в реальности это не такая уж и проблема, а просто мой страх. Но вот найти такой баг в питоне может быть не так уж и тривиально, если не обмазывать всё тестами.

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

вот это синглотон

Нет, это не синглтон это говно на лопате обычная глобальная переменная.

>>> import sys
>>> sys
<module 'sys' (built-in)>
>>> sys = 123
>>> sys
123
no-such-file ★★★★★
()
Ответ на: комментарий от eternal_sorrow

Хотя насчёт type hints полностью поддерживаю. Завёл привычку всегда писать type hints в объявлениях функций - волосы стали мягкими и шелковистыми.

Лорчую.

fernandos ★★★
()

Я что-то не понимаю или что?

Не всем зашёл этот async/await, все пишут как хотят. Плохо что ли? Хорошо!

th3m3 ★★★★★
()
Ответ на: комментарий от no-such-file

Сам модуль — синглтон и он будет одним и тем же везде где его импортируют, sys в неймспейсе текущего модуля — переменная.

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

Сам модуль — синглтон

Сам модуль это модуль. Так любую библиотеку можно синглтоном обозвать.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

этот как раз синглтон, потому как в питоне есть кеш модулей, и они импортируются (создается объект) всего один раз

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

они импортируются (создается объект) всего один раз

В любом языке библиотека подключается 1 раз. Любая библиотека синглтон?

PS: в треде открыта перепись людей, не знающих что такое синглтон и зачем он нужен.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

В любом языке библиотека подключается 1 раз

Особенно в сях и плюсах.

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

x3al ★★★★★
()
Ответ на: комментарий от no-such-file

В питоне модуль - это инстанс класс module. Это объект.

/tmp via 🐍 v3.10.0 
➜ echo 'FOO = "bar"' > foo.py                  

/tmp via 🐍 v3.10.0 
➜ printf 'import foo\nfoo.FOO = "bar"' > bar.py

/tmp via 🐍 v3.10.0 
➜ printf 'import foo; import bar; print(foo.FOO)' > baz.py

/tmp via 🐍 v3.10.0 
➜ python baz.py                                           
bar

Т.е. и одиночка и паттерн Registry… Короче что хочешь твори, если конечно твой мозг не успела поразить джава, тогда ты начнешь все это говно лепить с фабриками, синглтонами…. Последнее действительно воообще почти не встречается. Я такой код видел только в своей бывшей конторе: там идиот прочитал книгу по паттернам для Java… и решил все их реализовать на Python, а потом свалил в закат чтобы писать на форке PHP3 (тот который был без ООП) во Вкунтакте

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

Когда кто-нибудь про Rust напишет?

emorozov
()

Хз как там в других компаниях.

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

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

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

Зависит от того сколько у тебя там всего внутри лежит. И это просто пример, не самый удачный. Да и сколько памяти тебе надо экономить тоже важно может быть, объект сам по себе немного памяти отжирает, что может быть нежелательно. Более правильный пример был бы с каким-то dark/dork когда смысл у слов совсем разный (тёмный и придурок), а отличие в одной букве.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: Zen of Java от WitcherGeralt

Ехал cинглтон через синглтон, сунул синглтон синглтон в синглтон, синглтон за синглтон синглтон цап.

… и осталось пять поросят.

anonymous
()
Ответ на: Zen of Java от WitcherGeralt

Да от IPetuh, IGovno и всяких IdiotDAO код лучше не станет

tz4678 ★★
()

по сей день, пытаются все оформить сугубо через def() и форкать разные Py-скрипты через систему

И почему это плохо?

не смотря на наличие async/await в Python v3 - не используют и не пытаются

Так от чего не снабдить свой код asyncio, четко разработь с event loop и прочим…

asyncio решает ровно одну предельно чётко очерченную задачу io concurrency, про которую в этом предложении нет ни слова. А если эта задача не стоит, в коде не должно быть никакого asyncio и евентлупов, потому что ничего кроме оверхеда и усложнения кода они в этом случае не дадут.

если и объявят class , то он сугубо используется для DAO/DTO, ни каких сложных ОО-дизайнов не оформляется…

Ты сам себя слышишь? Никаких сложных OO-дизайнов не должно быть нигде и никогда.

GoF-паттерны

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

приблизиться к дизайну/стилю кода, как на Java

потому что Java - это всегда нечитабельная многословная объектная лапша.

type hints не испольуются, ABC-контракты не используются

Это уже хотя бы не вредно, но всё равно это сахарок никакой собственной ценности не имеющей и для бизнеса бесполезный. Если никто из разработчиков не вводит их по собственной инициативе, при этом софт разрабатывается, может они и не нужны? Да, они страхуют от ошибок, но может «солидные питонисты за 250+ рублей в месяц» этих ошибок не так много и делают? А может там всё так покрыто тестами что ошибки никуда не пролезают? Там, где от этих инструментов видно пользу, они приживаются сами по себе. Там где не приживаются - пользы от них, очевидно, нет.

Бизнесу нужен продукт. Если продукт может быть написан без траты времени на бесполезные перделки - только так он и должен быть написан. «Может быть написан» тут следует понимать в широком смысле - не write once, а с нормальной гибкой модульной архитектурой, понятным кодом который легко рефакторить, подстраивать под меняющиеся требования бизнеса и в котором может разобраться новый сотрудник. Ничего из того что ты перечислил никак не может улучшить эту характеристику. Паттерны и жавятина могут только ухудшить.

slovazap ★★★★★
()

И правильно делают - пистон для простых дел, поэтому ВНЕЗАПНО на нём пишут по простому. Если нужны сложности лучше взять подходящие для этого средства туже java у которой и ide есть и средства и библиотеками она обмазана. Набросим ! :D - пистон вообще деффчачий язык - все знакомые программистки пишут на пистоне :D :D. И жена тоже на нём любит скриптики писать, хотя не программистка ни разу. И том числе и поэтому на нём сложности не нужны.

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

потому что Java - это всегда нечитабельная многословная объектная лапша.

Обожаю лоровских экпертоффф. Язык не знаю, но вивовата джафка !! ну а чё.

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

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

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

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

Ну и как обычно за «простые» проекты разработчикам премии не выписывают. Поэтому каждый раз надо изобразить что-нибудь этакое чтобы вчера нанятые джуниоры не просекли.

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

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

vtVitus ★★★★★
()

и приблизиться к дизайну/стилю кода, как на Java.

Записывай!

#define BEGIN {

А чорт, это старый способ. Тогда «гугл как написать джавамашину на питоне». Должно помочь.

slackwarrior ★★★★★
()

На меня часто гонят что мой питон пахнет жавой. Хз.

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

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

upcFrost ★★★★★
()

Потому что с какого ляда на языке X должны писать в стиле языка Y.

А качество правда низкое, потому что порог входа. Почитай конфигурации 1С, и тебя перестанут беспокоить SOLID и async/await.

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