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

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

Поясните для тех, кто не умеет в ПХП.

Ядро не умеет в многобайтовые кодировки, поэтому попытка доступа через квадратные скобки приведёт к битому результату.

http://sandbox.onlinephpfunctions.com/code/a392a027920e172575bef90f371307f62578aae3

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

В развивающихся странах рынок ещё молод, а опытные ребята часто уезжают. Так что на местечковом украинском ресурсе картина, наверное, такая и есть.

Не совсем так. В США находится мировой печатный принтер, и огромное изобилие денег. В отличие, от других стран, США могут свои напечатанные деньги обменивать на любые ресурсы других стран (если печатать другие валюты, то это будет только разгонять внутреннюю инфляцию, например, Индия не может напечтать 10^40 рупий и на них купить у Ирана нефть, от этого только стоимость кг риса в Индии повысится до 10^10 рупий).

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

Даже из западной Европы программисты вполне себе массово уезжают в США за большими деньгами, что уж говорить про бедные страны.

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

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

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

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

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

Почему бы не перейти наконец на юникод по умолчанию? Пыхтон смог, никто от этого не умер.

Не обязательно.
У Microsoft для разработки исходного кода можно использовать любую кодовую страницу.
Хочу CP1251, да пожалуйста …

И все счастливы, а @den73 посрамлен ...
anonymous
()
Ответ на: комментарий от no-such-file

Тут в теме уже рассказывают что import foo это синглтон

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

что такое синглтон

Антипаттерн. Всё, что нужно о нём знать, чтобы несколько раз подумать, прежде чем написать.

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

Тогда разработка языка была на низком уровне, а про проектирование я вообще молчу.

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

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

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

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

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

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

Как раз предельно просто. Отвратительный язык.

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

Отвратительный язык.

Это да.
И заливная рыба, также - дрянь …

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

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

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

попытался подловить

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

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

опровергнуть твоё утверждение про «просто переменную»

Как-то не особо получилось.

Антипаттерн

Так про DI и IoC питонисты вообще не слышали. Что же предлагается, лепить глобальные переменные как диды? Собственно об чём ТС и спрашивал: какого хера Карл?

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

Так про DI и IoC питонисты вообще не слышали. Что же предлагается, лепить глобальные переменные как диды?

Чувак, ты сильно отстал от жизни, и критикуешь какой-то выдуманный код на Python 20 летней давности.

DI и IoC в Python были уже в Zope, который умер где-то в начале нулевых.

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

Ну так и что взамен? Пока что я вижу что тут питонисты шлангуют, типа нам ваш заумъ не нужен, у нас тут питономагия.

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

Ну так и что взамен? Пока что я вижу что тут питонисты шлангуют, типа нам ваш заумъ не нужен, у нас тут питономагия.

Никто не шлангует. DI используется в современном фреймворке FastAPI, например.

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

А те, от которых есть польза, используют. Но тут как и в любой области: кто знает, тот использует. Большинство, как и везде, не знает, поэтому строят велосипеды с квадратными колёсами. Только Python тут не при чем.

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

Получилось, конечно. Безотносительно того, готов ты это признать или нет.

какого хера Карл?

Рациональность, нежелание превращать код в лапшу.

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

потому что многие из этих паттернов в Python просто не нужны.

Чем же питон так волшебен что везде нужны, а в питоне не нужны?

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

Да, ты прав:

➜ vi ~/work/threads.py                     

~ took 3m6s 
➜ cd ~/work                           

~/work via 🐍 v3.10.0 
➜ python threads.py&                  
[1] 8208

~/work via 🐍 v3.10.0 
✦ ➜ ls /proc/8208/task 
8208  8449  8450  8451  8452  8453  8454  8455  8456  8457  8458

~/work via 🐍 v3.10.0 
✦ ➜ cat .git/config
[1]  + 8208 done       python threads.py

~/work via 🐍 v3.10.0 
✦ ➜ cat threads.py 
#!/usr/bin/env python
import time
import threading

threads=[]
for _ in range(10):
    t=threading.Thread(target=lambda: time.sleep(30))
    t.start()
    threads.append(t)

for t in threads:
    t.join()
tz4678 ★★
()
Ответ на: комментарий от no-such-file

Где нормальный, неизменяемый синглтон?

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

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

json все же лучше чем питон на нём можно и css липить и сразу код какой нить , хотя и то и то может оказаться болью по скольку зависимости могут либо прекращать существование либо меняться с индусской скоростью размножения этих версии до того случая с прекращением и отцеплением пациента и утилизация его в биореактор потому что найден более быстрый алгоритм другой библиотеки как и в случае что инитрамфс лучше смахнуть на дракут, а tar.gz на tar.lz4 или на zstd из за еще лучшей скорости

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

Чем же питон так волшебен что везде нужны, а в питоне не нужны?

Тем, что Python - интерпретируемый язык с динамической типизацией. В нём многие вещи делаются намного проще поэтому.

GoF писали свою книгу для компилируемых языков со статической типизацией, и многие из паттернов поэтому имеют смысл только для такого сочетания свойств: компилируемый язык со строгой статической типизацией.

Вообще, это не религия, а книга GoF - не библия. Не стоит чему-то слепо поклоняться, потому что «диды поклонялись, и мы будем».

Нет какого-то царского пути, типа, «делай так, так и так (используй ООП, паттерны, async/await) и получишь конфетку!»

Это скорее костыли, подпорки, для тех, кто только начинает программировать и у кого нет ещё никакого понимания, что работает, а что нет. Чтобы не наломал сходу дров.

Но это не скрижали Моисея, в них нет абсолютной истины.

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

То, что для адекватов «проще», чище и рациональней, для сектантов — вероломный ахтунг.

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

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

Реальность: юникод большинству был нафиг не нужен; 8-бит кодировки прекрасно справлялись со своей задачей - представлять все значимые международные символы (латинский алфафит, цифры и знаки препинания), алфавит своего языка (у нас - кириллица, в европе - некоторые добавочные к латинице символы) и немножко других знаков, каким хватило места (проблемы могли быть разве что у китайцеподобных с их иероглифами, но на них всем было пофиг). Юникод же увеличивал вдвое расход памяти и время обработки на неанглийских текстах, а ещё усложнял алгоритмы, что, во-первых, ещё дальше увеличивало время обработки, а во-вторых провоцировало ошибки. Ради чего? Теоретической возможности представлять 100к символов? Не нужно. В html, кстати, проблема представления юникодных символов была решена на уровне рендеринга в виде &#-последовательностей, что делало нативный (utf-8 и подобное) юникод ещё более ненужным.

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

Ага, всё энфорсится, чтобы дурачки (целевая аудитория) не смогли запороть красивый вид кода. Только запороть можно не только красивый вид, а например, вооружившись чрезмерно нативным мультитредом, сделать сервер с открытием нового треда на каждый коннект, вместо event loop'а. Ну конечно, читать такое понятнее будет чем event loop, дурачки не запутаются в коде, ну а возросшую в 100 раз нагрузку на железо мы компенсируем закупками этого самого железа, да?

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

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

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

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

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

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

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

Чувак, если бы пхытонщики писали не как дебилы, а как люди, то они были бы не пхытонщиками, а как минимум писали бы на С++!!!

А покуда нет мозга, то что могут, то и копипастят…

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

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

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

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

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

Реальность: кто помнит времена кодировок, точно по ним не скучает. Знать какие бывают кодировки, уметь на вид определить кодировку, уметь перекодировать любой файл, уметь что-то придумывать, когда веб-сайт отдаёт одну неправильную кодировку, а браузер определяет как другую неправильную, и никакими настройками не сделать, чтобы сайт наконец отобразился… Никто, думаю, не хочет возвращаться в это время.

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

Покуда был «зоопарк кодировок», все было прилично. И у меня КОИ8-Р никак не конфликтовала со 100500 другими кодировками.

А теперь этот хрюникод, будь он неладен! Да ладно бы UTF32 — я бы еще понял это, но какой мудак решил стандартом сделать UTF8, где для вычисления длины строки необходимо всю строку анализировать!!! И прочие загоны. В том же хрю32 просто на 4 делишь количество байт - вот тебе и количество символов…

А еще в генте что-то поломали, и у меня теперь вообще в терминале нет кириллицы. Мудаки чертовы. Причем, странно, но в бубунте ничего этого не поломали. Вот как так?

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

для вычисления длины строки

Не нужно. Серьёзно. Если ты не пишешь конвертеры между кодировками, тебе не нужно знать длину строки в кодпойнтах.

В том же хрю32 просто на 4 делишь количество байт - вот тебе и количество символов…

Кодпойнтов.

x3al ★★★★★
()

Почему во многих Питон-проектах не используют async/await
ни каких сложных ОО-дизайнов не оформляется… type hints не испольуются,

используют.

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

Реальность: юникод большинству был нафиг не нужен; 8-бит кодировки прекрасно справлялись со своей задачей - представлять все значимые международные символы

Старые кодировки были плохо спроектированы, но они были более эффективные.
И для баз данных лучше их использовать, а UTF-8 для html …

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

В нём многие вещи делаются намного проще поэтому

В нём куда-то делись глобальные переменные и сопутствующие проблемы? Да нет, вроде только хуже стало, т.к. даже тип переменной никак не контролируется.

Не стоит чему-то слепо поклоняться, потому что «диды поклонялись, и мы будем».

Отмазки пошли. Лиса и виноград, классика.

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

ты еще на bash попроси всю твою java-парашу реализовать

Вот это ты расчехлился. Если питон это что-то вроде баша, то ладно, вопросов нет.

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