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 лет назад, то таким и осталось… Адепты на других языках, как-то более лучше развиваются в плане чистоты своих проектов. Опять сугубо моё ИМХО.

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

Питон - это простой скриптовый язык, производительность которого желает лучшего, но кода большую часть процессорного времени занимает ожидание ввода/вывода уже становится неважным на чем написан бекенд. Так как все в вебе сводится к операциям ввода/вывода (за исключением небольшого количества задач с обработкой загружаемых изображений), то быстродействие питона и на крупных проектах не является самой главной проблемой. В таких проектах узкое горлышко - это база. Твой мир рухнет, если ты узнаешь, что я видел проекты на питоне, содержащие миллионы SLOC. Там есть ООП, но нет джавовых паттернов, почему их не используют тут писали не раз. Напомню для наркоманов: В ПИТОНЕ СВОИ ПАТТЕРНЫ, питонячьи, а не джавовые. А примитивный ты, расширяй кругозор или учись тоньше троллить.

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

если оно позволяют проще/надёжнее выполнить задачу - какая разница?

Разница в том, что мы сравниваем жопу с жопой или жопу с пальцем.

какие проблемы юзать кложу 24x7?

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

из-за зафорcенной иммутабельности и STM она всяко надёжнее той же Java

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

Это всё не означает, что в теории на кложе нельзя написать что-то стабильное и надёжное. Это означает, что на практике средневзвешенный программист на кложе пишет что-то более падучее, чем средневзвешенный программист на чистой жаве. Каков во всём этом вклад иммутабельности и STM - вопрос отдельного исследования.

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

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

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

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

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

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

#pragma once

Со своими проблемами.

на си таки написан весь мир

Низкоуровневый шлак, призванный затыкать собой кривизну железа. Доживающий свой век. Менее десяти процентов. Доля постоянно падает.

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

стандартное бэкенд-решение живёт за каким-нибудь compojure и капитально упасть не может бай дизайн.

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

не из Яндекса?

Господь миловал.

LamerOk ★★★★★ ()

игра фигня мне не понравилось !!!!!!!!!!! остоётся токо ждать лутшего.Это для меня говно плохо зделана тупо.Немогли зделать всё как в Crusis!!! И графику и управление.Не рекоминдую такую игру!!!

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

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

  • мы так видим мир
  • в жопу ваш ооп, хоть мы его не изучали
  • пишем, как хотим

Ну что же? Я объявляю победу здравого смысла над недопрограммистами.

У джавистов - хищный взгляд таится за глазами мимо проплывает Java, нога на педали, новый GraalVM, как верный друг, он не предаст, сегодня я его объезжу, двигаюсь с собой в такт, нах$# питонистов! Я знаю, что они пиз*ят.

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

Думаешь только на питоне такая ситуация?

На Go, в большинстве случаев, тоже все печально. Большинство пишут тупо процедурный код, и хорошо, если по функциям разделяют. И когда говоришь: на этом проекте мы пишем в ООП/Функциональном стиле/… (нужное подчеркнуть), то встречаешь недоумевающий взгляд: «а что, так можно? там же нет классов и лямбд (ключевых слов)». И только где-нибудь в самом неподходящем месте, где по идее должен быть обычный цикл, какой-нибудь особо отличившийся подаван вкорячит самописный WorkerPool для массива из двух элементов, и будет с пеной у рта объяснять, как он сэкономил 0.001с процессора (на проекте с 2 rpm), родив при этом неподдерживаемое нечто.

По этому тут как в известном анекдоте: надо не кровати двигать…

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

сам придумал - сам с собой поспорил, сам признал себя победителем, ай молодец!

Дядь, во-первых, питон - говно (как и java, но у java хотя бы JVM есть, которая, как ни крути, a state of art), во вторых, я большую часть своей программерской карьеры пишу за деньги на том, что считается ФП языками. А вы, конечно, продолжайте утешать себя придуманными тезисами.

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

Это если у тебя унылый круд для веба.

ну, во первых сейчас у меня вовсе даже всё бигдато с МЛ, а во-вторых, унылые круды для веба - это, наверное, процентов 85 (например) всей разработки сейчас. Почему бы не облегчить жизнь этим 85%?

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

Писать на Go в ООП так себе идея. Авторы Go немало сил приложили к тому чтобы на нем было максимально неудобно это делать. Если ты, несмотря на все это все таки пытаешься использовать на Go ООП, то даже не знаю, хорошие у меня для тебя новости или не очень, но ты определнно Месье и да, ты знаешь толк… Ты, кстати, на ФОРТе в ООП стиле писать не пробовал? Говорят довольно необычные ощущения, попробуй, вдруг понравится.

anonymous ()

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

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

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

Не всегда есть выбор, как именно делать. Особенно, в больших проектах.

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

reviz0r ()

Про одержимость синглетонами, кстати:

Чтобы проверить, нарушен ли принцип SRP, попробуйте описать то, чем занимается этот класс, в одном предложении. Получится что-то вроде: «Он стирает, сушит и гладит одежду». Наличие перечисления и союзов «и» — один из признаков возможного нарушения принципа единой ответственности. Наглядный пример нарушения принципа — паттерн Singleton. Такой класс выполняет две задачи: следит за тем, чтобы в программе был только один экземпляр, и выполняет какие-то полезные действия.

emorozov ()

Пишу на питоне для нужд фирмы. Бизнесу нужно решать задачи, а не изъё-ся с ООП, которое на мой взгляд вообще не нужно. Сейчас мне налетят тут всякие погромисты 300кк в наносекунду и начнут пояснять, но типа, это ваше мнение, я останусь при своём. Про type hints согласен, да. И слава яйцам, что питон даёт свободу выбора.

anonymous ()

По работе смотрю новые питоновские проекты

Сочувствую, без сарказма.

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

Это показывают во всяких GeekBrains и прочих «школах» программирования.

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

Большая часть питонистов пришли с Django, на ней долго не было асинхрощины. Итог - большая часть питонистов в неё не умеют. В своё время видел как фронтер объяснял middle+ python developer (с 8 годами опыта работы) как работать с async/await… И питонист не понял.

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

Python сам по себе не способствует это. Python - хороший клей, средний язык скриптов (Lua и perl для этого лучше, ИМХО), язык прототипов или инструмент для разбора данных (если человек не умеет в R или Julia). Не более.

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

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

Картину наблюдаю на разных компаниях в течении последних двух лет.

Я эту картину наблюдаю последние 5 лет и становится только хуже. Хайп Python дал буст с одной стороны. С другой сделал ещё ниже качество предложения на рынке труда. Сейчас уровень питонистов чаще всего ниже уровня какого-нибудь пхпшника (а вот они на самом деле нормальные ребята стали, когда бросили свои джумлы и вордпрессы).

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

Не приблизится. В Python чаще всего эти фичи - сахар, суть языка остаётся. Python - это огрызок всех подряд модных подходов, который не реализован полностью. Да, он удобный в быстрой разработке, но если смотреть на длительную перспективу - это плохой выбор, так как нужен очень большой hard skill для того, чтобы этот бардак сделать поддерживаемым, расширяемым и компактным. Не зря же один из создателей SICP забрал свои слова, что Java - это худшее, чтоб было с их университетом после того, как туда завезли Python.

Это вы ещё не смотрели видимо такие вещи как Sanic, где парадигма «мы сделаем технологию на нормальном языке, воспользуемся Python как языком бизнес-логики и будем рассказывать какой Python производительный».

Все-таки, Python не является Haskell, OCaml или каким-нибудь диалектом LISP.

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

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

Для этого нужно, чтобы была квалификация и желание у бизнеса сделать хорошо. Те, кто использует Python как основу - чаще всего хотят просто начать продавать. Плевать на качество.

Все какая-то портянка из 100500 глобальных def’ов вижу, в основном, в проектах.

Зато по дао питона и идиоматично написано. На самом деле, сейчас ещё усугублена ситуация сахаром, так как эти 100500 становятся не однозначными по смыслу.

Компании - солидные и платят этим Питонисам 250+ рублей в месяц. А стиль написания такой, за который могли бы уволить джуна в 2010ом, если речь шла про другой стэк (C#, Java).

А хотели бы 50к, так как понимаю низкий уровень продукта. Просто рынок стал дороже. За полтора года разработка стала дороже в два раза.

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

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

Это лень и нежелание просто?

Ну вот представь. Какой-нибудь продаван проходит курс какого-нибудь по data science и устраивается. Он пошёл в It потому, что там платят, а не потому что интересно. И на этом построена сегодня индустрия заработка на тех, кто «хочет в IT». Недавно так хайпили ноду и жс, теперь вот за змею принялись.

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

Не способность освоить что-то сложнее лапши считается объективной причиной?

P.S. не удтверждаю, что я - прав.

Да нет, тут много правильных мыслей.

Я просто реально не понимаю, почему качество Питон-проектов, как было примерно таким 10 лет назад, то таким и осталось…

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

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

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

small-entropy ()

Заметьте. В тред набежала куча людей, которые рассказывают что примитивизм питона - это благо, возможность писать лишь на пол шишке по парадигме - это свобода, а низкий уровень компетенции оправдывают бизнесом. Nuff said

small-entropy ()
Ответ на: комментарий от small-entropy

Рассуждаешь как нуб. В питоне там при работе с базой плейсхолдеры по-умолчанию, но коннекторами никто не пользуется, пользуются ORM. ORM в свою очередь фильтрует все передаваемые параметры. В PHP же , если раньше гомносайты от взлома спасала magic_quotes_gpc, то теперь - ломай не хочу + начинающие не пользуются ORM, тяжеловесными фреймворками для которых нужно брать VPS вместо шаред хостинга, поэтому имеем, что имеем. Java с ее DAO ничем не лучше. Приложения на ней спасает только типизация, потому как 42' это не int. Эта дрисня свалится с 500-ошибкой, но взломана не будет, если там конечно не что-то типа "SELECT * FROMuserswhereemail= '" + email + "';".

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

У вас представление о вебе на уровне говносайтов

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

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

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

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

Очень много понаписано, и чрезвычайно субъективно. Напишут только про этот пункт.

Если кто не помнит, именно Java создавалась как язык для дуболомов. Корпоративные рабы должны были фигачить код в строго заданных рамках. Чтобы в принципе не было возможности сделать шаг вправо или влево.

Возьмите рекламные материалы фирмы Sun за 1996-1997 года, почитайте. Правда, возможно, их уже не осталось в сети. Но я ещё помню.

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

Никакой возможности создавать свободные функции. Но дуболомы тут же начали клепать God Object’ы, реализующие всю функциональность приложения в одном классе.

И т.д. и т.п. В общем, не сработал подход.

emorozov ()
Ответ на: комментарий от small-entropy

Вы так и не ответили чем питон лучше PHP или Java.

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

Про PHP смешно даже сравнивать. Говноподелка, в которой в глобальном пространстве имён были тысячи функций, которые ещё и дублировали функциональность между собой, иногда отличаясь в деталях, иногда отличаясь только именами. И ещё логики в намименовании никогда не было: одна функция могла называться strpos_char, другая strip_char_str.

Вроде с тех пор там что-то улучшили, но коснувшись PHP лет 15 назад, я зарёкся когда-либо на расстояние пушечного выстрела подходить к этому языку и к тем, кто с ним имеет дело.

Это прям BASIC двухтысячных годов.

И да, несмотря на то, что в последние годы он (вроде бы) стал лучше, думаю, что PHP проекты — лидеры по количеству уязвимостей типа SQL injection и прочих в этом роде. Потому что он калечит мозг.

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

https://github.com/avshatalov48/bitrix-core-business/blob/master/components/bitrix/bizproc.wizards.setvar/component.php он утверждает что подобная говнина лучше парашной джанги… но джанга как бы я ее ненавидел на голову выше всяких ларавелей, yii и тем более ублюдского битрикса… большего кала чем последний я не встречал

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

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

Мухи любят и ищут …

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

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

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

Яснопонятно, фанатик детектед. Вы подтвердили мои слова своим вбросом. С «метапрограммирования на питоне» - это топ. Вы сделали мой день

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

Нет слов. Никогда не пишите на rust, haskell или облом другом вменяемом языке. Будет больно

С чего вы взяли что не пишу? :)

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

Ну или там Java - вменяемый язык? Да на ней никто писать не хочет, максимум, что хотят — это писать на JVM, но никак не на Java.

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

Когда человек говорит, что в дизайне Python косяков меньше, чем в PHP у любого, кто писал на обоих языках будут обоснованные сомнения. Я не говорю и не говорил, что РНР идеален или что он лишён недостатков. Я утверждаю, что в Python их ещё больше. Но современной массовой культурой это выдаётся за «фичи». Поэтому Python сообщество не развивается. Именно поэтому, после 7 лет работы с python я с удовольствием сменил стек. Про почему думаю, что не пишите - если вы писали бы часто сервисы на Rust, Haskell или C, то знали бы, что заморочек с типизацией там никак не меньше чем на Java. И менее многословными их можно назвать разве что при определенных подходах. Про саму Java - это монструозный инструмент, как и весь сектор enterprise разработки. В нем много недостатков, но есть много и хорошего. И язык развивается, его сообщество старается работать в разрезе best practice. В отличии от питонистов, для которых банальный асинхронный код уже вызов часто. Но, возможно, у меня не репрезентативная выборка.

small-entropy ()