Привет! Это Леша Жиряков, я руководить бэкенд-команды витрины KION и Python-гильдии в МТС. Как раз о Python сегодня и пойдет речь. Обсудим, почему самый популярный ЯП, по версии TIOBE, так востребован в корпоративном секторе: из простого инструмента автоматизации он превратился в полноценную экосистему для создания критически важных продуктов.

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

Недавно я уже писал о причинах успеха Python в целом, а сегодня хочу подробно рассмотреть его современные инструменты для предприятий: типизированные структуры данных с dataclasses, высокопроизводительные системы валидации msgspec, pydantic 2 и другие библиотеки. То есть все, что помогло ему стать идеальным выбором для серьезных бизнес-решений. Информации много, так что тему разобью на две части. Погнали!

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

Что для этого предлагает экосистема Python? Вот главные инструменты:

  • аннотации типов;

  • статический анализ;

  • линтинг;

  • типизированные структуры данных;

  • валидация и сериализация данных;

  • управление зависимостями;

  • асинхронное программирование в корпоративной среде;

  • тестирование и обеспечение качества;

  • корпоративная безопасность и надежность;

  • средства мониторинга и логирования в экосистеме Python для Enterprise-систем;

  • контейнеризация и развертывание.

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

Аннотации типов — революция в мире Python

Сейчас, когда я пишу этот текст, актуальная версия Python — 3.13.3. Аннотации типов были официально введены в Python 3.5 с PEP 484 в 2015 году. Это стало революционным шагом, превратившим Python из чисто динамического языка в язык с поддержкой опциональной статической типизации.

Базовый пример использования:

def greeting(name: str) -> str:
    return f"Hello, {name}"

Важно понимать, что аннотации типов в Python не влияют на выполнение программы — интерпретатор их игнорирует. Они используются внешними инструментами статического анализа кода — например, mypy.

Модуль typing и его ключевые компоненты

Typing — основа системы типизации в Python, предоставляющая специальные конструкции для создания выразительных и безопасных типов.

Базовые:

  • коллекции: List, Dict, Set, Tuple;

  • опциональные значения: Optional[T] или T | None;

  • объединения типов: Union[T1, T2] или T1 | T2;

  • функциональные типы: Callable[[ArgType1, ArgType2], ReturnType];

  • дженерики: TypeVar, Generic;

  • литералы: Literal["success", "error"].

Продвинутые возможности:

  • Self — для методов, возвращающих экземпляр собственного класса;

  • TypedDict — типизированные словари с фиксированным набором ключей и их помощники Required, NotRequired, ReadOnly;

  • Final — маркировка финальных классов, методов и переменных;

  • Overload — создание перегруженных сигнатур функций;

  • Override — явное указание переопределения методов родительского класса;

  • TypeGuard и TypeIs — для создания функций проверки типов;

  • LiteralString — строки, известные на этапе компиляции (защита от инъекций).

Протоколы и структурная типизация:

  • Protocol — определение интерфейсов через структурную типизацию;

  • Runtime_checkable — возможность проверки протоколов в runtime.

А вот и пример использования:

from typing import Self, TypedDict, Final, overload, override, TypeGuard, LiteralString

class UserDict(TypedDict):
    name: str
    age: int
    email: NotRequired[str]  # Опциональный ключ

class Builder:
    def add_item(self, item: str) -> Self:  # Возвращает экземпляр того же класса
        return self

API_VERSION: Final = "v1"  # Неизменяемая константа

@overload
def process_data(data: str) -> str: ...
@overload  
def process_data(data: int) -> int: ...

def is_string_list(value: list) -> TypeGuard[list[str]]:
    return all(isinstance(item, str) for item in value)

def execute_query(query: LiteralString) -> None:
    # Защита от SQL-инъекций
    pass

Современные инструменты для работы с типами

Дальше перечислю инструменты, которые усиливают преимущества типизации:

  • Ruff — сверхбыстрый линтер и форматтер на Rust, который дополняет проверку типов множеством связанных правил. Это и обнаружение неиспользуемых импортов из модуля typing, и проверка корректности аннотаций согласно PEP 484/526, и валидация синтаксиса типов, выявление несовместимых конструкций. Хотя Ruff не выполняет полноценную статическую проверку типов, как mypy, он обеспечивает быструю предварительную валидацию типизации и автоматическое исправление многих проблем с аннотациями.

  • Mypy — основной инструмент статической проверки типов. Постоянно развивается, чтобы поддерживать новые возможностей типизации.

  • Pyright/Pylance — альтернативный проверщик типов от Microsoft, интегрированный в VS Code.

  • Beartype, Typeguard — библиотеки для проверки типов во время выполнения с минимальными накладными расходами.

Внедрили — какие теперь преимущества?

С типами определились. Давайте посмотрим, что они дают компании: 

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

  • Раннее обнаружение ошибок: находить их теперь можно еще до запуска программы.

  • Улучшенная поддержка IDE: автодополнение, подсказки и навигация по коду стали значительно точнее.

  • Безопасный рефакторинг: изменения в коде с типами снижают регрессии.

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

Результатом внедрения типизации становится:

  1. Сокращение Runtime-ошибок на десятки процентов. Статические анализаторы вроде Mypy и Pyright находят несоответствия типов еще до запуска кода — так можно исключить классические ошибки типа передачи None вместо строки или обращения к несуществующим атрибутам. IDE предупреждает о неправильном использовании функций прямо на этапе написания кода, а более точное автодополнение снижает количество опечаток.

  2. Сокращение времени онбординга новых разработчиков. Типы служат живой документацией: новичок сразу понимает, что ожидает функция и что она возвращает. Ему не нужно тратить время на изучение кода через отладку и эксперименты. IDE показывает точные подсказки по параметрам и возвращаемым значениям, а рефакторинг становится безопаснее благодаря автоматическому поиску всех мест использования. В результате опытные команды фиксируют снижение production-багов на 20–40%.

Статический анализ кода для повышения качества

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

Mypy — основной инструмент статической проверки типов

Mypy анализирует аннотации типов Python и обнаруживает потенциальные ошибки без фактического запуска кода. Его ключевые возможности:

  • проверка соответствия типов в функциях и методах;

  • анализ совместимости сложных структур данных;

  • проверка обобщенных типов (generics);

  • возможность постепенного внедрения (incremental typing);

  • поддержка расширенных возможностей типизации через stub-файлы (.pyi).

Базовая настройка mypy выполняется через файлы mypy.ini, setup.cfg или pyproject.toml (более распространенный способ):

[mypy]
disallow_untyped_defs = True
disallow_incomplete_defs = True
check_untyped_defs = True
disallow_untyped_decorators = True
no_implicit_optional = True
strict_optional = True
warn_redundant_casts = True
warn_return_any = True
warn_unused_ignores = True

Теперь про интеграцию mypy в процесс разработки и CI/CD. Вот пример настройки для GitHub:

# .github/workflows/type-check.yml
name: Type check
on: [push, pull_request]
jobs:
  mypy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: '3.11'
          cache: 'pip'
      - name: Install dependencies
        run: |
          pip install -e .[dev]
          pip install mypy types-requests
      - name: Run mypy
        run: mypy src tests

Pyright — альтернативный инструмент проверки типов

Разработанный Microsoft, Pyright предлагает более высокую производительность и глубокую интеграцию с VS Code:

  • инкрементальный анализ для больших проектов;

  • настраиваемые уровни строгости: basic, strict;

  • отличная интеграция с редактором через Pylance.

Настройка через pyrightconfig.json:

{
  "include": ["src", "tests"],
  "exclude": ["**/node_modules", "**/__pycache__"],
  "strictListInference": true,
  "strictDictionaryInference": true
}

Линтинг Python: революционный Ruff

Ruff — современный линтер, написанный на Rust. Он намного быстрее традиционных Python-линтеров, а еще:

  • заменяет множество инструментов — flake8 и плагины, isort, pyupgrade, autoflake;

  • поддерживает автоматическое исправление проблем (--fix);

  • имеет встроенный форматтер;

  • проверяет согласованность импортов и использование типов.

Пример конфигурации:

# pyproject.toml
[tool.ruff]
line-length = 88
select = ["E", "F", "B", "I", "UP", "N", "YTT", "ANN", "S", "A"]
ignore = ["ANN101"]

[tool.ruff.isort]
known-first-party = ["my_company"]

Подробней о Ruff я рассказывал тут.

Дополнение Ruff: wemake-python-styleguide

wemake-python-styleguide — один из самых строгих линтеров для Python с акцентом на обеспечение высочайшего качества кода. Что тут интересного:

  • автоматическое определение сложных участков кода;

  • больше 900 проверок качества;

  • zero-tolerance-философия к нарушениям чистоты кода — она же нулевая терпимость к нарушениям;

  • поддержка архитектурных ограничений.

Один из основных авторов этой библиотеки — Никита Соболев, он пишет Python и развивает его экосистему. Человечище!

А вот и пример использования:

# setup.cfg
[flake8]
max-line-length = 80
select = WPS
per-file-ignores =
    # API layer exceptions:
    api/views/*.py: WPS202, WPS432

В крупных компаниях wemake используется как «хранитель» высоких стандартов кода: он предотвращает деградацию кодовой базы с течением времени. Строгость правил создает устойчивый фреймворк для поддержания чистоты кода на протяжении всего жизненного цикла продукта — в долгосрочных проектах без этого никак.

С базой разобрались, теперь — к тому, какие плюшки получает компания.

Преимущества после внедрения

Перечислю ключевые:

  • сокращение времени релиза при внедрении Ruff с десятков минут до секунд;

  • уменьшение числа runtime-ошибок на десятки процентов благодаря строгой типизации и mypy;

  • ускорение code review за счет автоматического исправления типовых ошибок линтерами;

  • экономия ресурсов за счет замены множества инструментов одним универсальным решением — например, Ruff заменяет flake8, isort, pyupgrade, autoflake;

  • повышение стабильности и отказоустойчивости за счет раннего выявления проблем в CI/CD;

  • снижение затрат на поддержку и рефакторинг благодаря строгим правилам wemake-python-styleguide;

  • упрощение интеграции новых разработчиков за счет стандартизированных и понятных правил оформления кода;

  • повышение производительности статического анализа больших проектов при переходе на Pyright/Pylance.

Давайте к следующему пункту.

Типизированные структуры данных

Введение в dataclasses

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

В результате код получается более устойчивым к ошибкам благодаря ранней проверке типов с помощью инструментов вроде mypy. А еще — понятным для больших команд разработчиков. 

Модуль dataclasses предлагает декоратор @dataclass — он автоматически генерирует специальные методы для классов, хранящих данные. Это решение устраняет многословность стандартных классов, требующих ручной реализации init, repr, eq и других магических (дандер) методов.

Ключевые преимущества:

  • сокращение шаблонного кода;

  • встроенная поддержка типизации;

  • автоматическая генерация методов сравнения и представления;

  • удобное документирование структуры данных.

Синтаксис и базовые возможности

Ловите простой пример: 

from dataclasses import dataclass
from datetime import datetime

@dataclass
class Employee:
    id: int
    name: str
    department: str
    hire_date: datetime
    salary: float = 0.0

Он обеспечивает:

  • конструктор с типизированными параметрами;

  • методы repr и eq;

  • значения по умолчанию (salary).

Продвинутые функции

А вот пример, какие возможности есть у Dataclasses для корпоративных приложений:

from dataclasses import dataclass, field, InitVar

@dataclass
class TransactionRecord:
    transaction_id: str
    amount: float
    timestamp: datetime = field(default_factory=datetime.now)
    user_id: str = field(compare=False)  # Исключить из сравнения
    raw_data: InitVar[dict] = None  # Параметр только для __init__
    metadata: dict = field(default_factory=dict)
    
    def __post_init__(self, raw_data):
        if raw_data:
            self.metadata['source'] = raw_data.get('source')
            self.validate()
    
    def validate(self):
        if self.amount <= 0:
            raise ValueError("Transaction amount must be positive")

Оптимизации производительности

Что предлагают dataclasses для критичных к производительности систем:

@dataclass(frozen=True, slots=True)
class ImmutablePoint:
    x: float
    y: float
  • frozen=True создает неизменяемые объекты, как tuple;

  • slots=True оптимизирует использование памяти и скорость доступа к атрибутам;

  • комбинация этих параметров обеспечивает максимальную производительность.

Сравнение с альтернативами

Dataclasses занимают промежуточное положение в экосистеме Python:

  • они более гибкие и читаемые, чем namedtuple;

  • проще в использовании, чем ручное создание классов;

  • легче для понимания, чем attrs (хотя менее функциональные);

  • есть нативная поддержка в стандартной библиотеке, в отличие от Pydantic.

Примеры в корпоративных приложениях

Dataclasses идеально подходят для бизнес-доменов:

@dataclass
class CustomerProfile:
    customer_id: str
    tier: Literal["standard", "premium", "enterprise"]
    creation_date: datetime
    features: list[str] = field(default_factory=list)
    
    @property
    def is_enterprise(self) -> bool:
        return self.tier == "enterprise"
    
    def can_access_feature(self, feature_name: str) -> bool:
        return feature_name in self.features

В корпоративных приложениях часто используются для:

  • передачи данных между слоями (DTO);

  • представления бизнес-сущностей;

  • конфигурационных структур;

  • промежуточных моделей для API.

Типизация делает их идеальными для сред, где надежность и ясность кода — на первом месте. Подробнее о dataclass я писал тут.

Ключевые преимущества после внедрения

Подытожим, что получает компания:

  • повышение надежности бизнес-логики за счет явной типизации и строгих ограничений данных;

  • ускорение разработки и сопровождения благодаря самодокументируемости структур данных;

  • упрощение взаимодействия между командами через прозрачные и согласованные схемы;

  • снижение числа ошибок при передаче данных между слоями приложения (DTO);

  • удобство расширения и рефакторинга моделей без риска регрессий;

  • повышение читаемости и ясности кода за счет встроенных методов и свойств;

  • сокращение времени на отладку благодаря раннему выявлению несоответствий типов;

  • упрощение интеграции с внешними сервисами и API за счет унифицированных моделей данных.

Поехали дальше!

Валидация и сериализация данных

Pydantic 2: новое поколение

Pydantic 2 стал эволюционным скачком в экосистеме Python для валидации данных. Полностью переписанный с использованием Rust-расширений (pydantic-core), он предлагает впечатляющий прирост производительности — в 5–50 раз быстрее первой версии при сохранении интуитивного API.

Архитектурные изменения в Pydantic 2 включают:

  • компиляцию схем валидации в оптимизированные Rust-процедуры;

  • новый механизм обработки аннотаций типов;

  • разделение между валидацией (тяжелый процесс) и созданием моделей (легкий процесс);

  • улучшенную типизацию с более точными типами возвращаемых значений.

Пример создания дата-модели:

from pydantic import BaseModel, Field

class User(BaseModel):
    id: int
    name: str
    email: str = Field(pattern=r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')
    roles: list[str] = []
    
    model_config = {
        "strict": True,
        "frozen": True
    }

Еще Pydantic 2 улучшает обработку сложных структур:

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

  • продвинутые механизмы валидации для вложенных структур;

  • контекстно зависимая валидация с model_validator;

  • строгая валидация типов (strict=True) или гибкое приведение типов.

Msgspec как высокопроизводительная альтернатива

Библиотека msgspec предлагает еще более высокую производительность для сценариев, где скорость критична:

import msgspec

class User(msgspec.Struct):
    id: int
    name: str
    email: str
    roles: list[str] = []

# Десериализация ~30x быстрее json.loads + Pydantic
user = msgspec.json.decode('{"id": 1, "name": "John"}', type=User)

Бенчмарки показывают, что msgspec:

  • в 4–10 раз быстрее Pydantic 2 для сериализации и в 2–5 раз быстрее для десериализации;

  • использует меньше памяти — согласно бенчмаркам, msgspec потребляет примерно в 2–3 раза меньше памяти по сравнению с Pydantic 2;

  • имеет минимальные зависимости — только стандартная библиотека Python.

Msgspec или Pydantic?

Теперь давайте разбираться, какую из двух библиотек выбрать. 

Msgspec предпочтительнее, когда:

  • производительность — абсолютный приоритет;

  • обрабатываются большие объемы данных;

  • нужна сериализация в нестандартные форматы — MessagePack;

  • не требуется сложная валидация или интеграция с фреймворками.

Pydantic остается лучшим выбором для:

  • сложной валидации с пользовательской логикой;

  • интеграции с FastAPI и другими фреймворками;

  • систем, где выразительность важнее производительности.

Интеграция с внешними форматами данных

Обе библиотеки предоставляют расширенную поддержку форматов:

  • JSON: оптимизированная сериализация и десериализация в обоих случаях;

  • YAML: нативная поддержка через плагины в Pydantic, ручная интеграция в Msgspec;

  • XML: через дополнительные адаптеры в Pydantic;

  • MessagePack: нативная поддержка в Msgspec, через плагины — в Pydantic.

Выбор между Pydantic 2 и Msgspec должен основываться на балансе между производительностью, удобством разработки и интеграционными требованиями проекта. 

Ключевые преимущества после внедрения

Посмотрим, что предприятие получает на этот раз:

  • сокращение времени обработки данных до 30 раз при использовании msgspec вместо стандартных решений;

  • уменьшение потребления памяти и ресурсов при сериализации и десериализации больших объемов данных;

  • ускорение разработки за счет встроенных механизмов сложной валидации и проверки структур данных;

  • поддержку множества форматов данных — JSON, YAML, XML, MessagePack — для удобной интеграции с внешними системами;

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

  • простоту и прозрачность интеграции с популярными фреймворками (например, FastAPI);

  • возможность выбора между гибкой типизацией и строгой валидацией в зависимости от приоритетов проекта;

  • минимальные зависимости и легкость сопровождения при переходе на высокопроизводительные библиотеки — например, msgspec.

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

Комментарии (26)


  1. stas_dubich
    11.07.2025 12:17

    А бенчмарки будут ?) Питон как бекенд для блога - ок, для нагрузки 50 RPS тоже пойдет, но дальше уже очень сомнительно


    1. Aleksey999 Автор
      11.07.2025 12:17

      5К RPS на одно ядро с минимальным Фондом Оплаты Труда, Time To Market - это не сомнительно, это ЯП номер 1 в мире.
      В других моих статьях есть бенчмарки, в них они уместней https://habr.com/ru/companies/ru_mts/articles/912730/
      и тут:
      https://habr.com/ru/companies/ru_mts/articles/877628/


      1. dph
        11.07.2025 12:17

        Хм, из этих статей можно сделать только один выводы - их автор не умеет читать и не умеет в бенчмарки. Что-то еще есть?


  1. whoisking
    11.07.2025 12:17

    Сокращение Runtime-ошибок на десятки процентов

    А какой-то paper с каким-нибудь research имеется?



  1. Dhwtj
    11.07.2025 12:17

    Для исследований и прикладных программках для работы с данными отлично.

    Но на прод в кровавый энтерпрайз - да боже упаси!


    1. Aleksey999 Автор
      11.07.2025 12:17

      Instagram, Spotify, Dropbox и многие, многие другие - в шоке сейчас..


      1. Dhwtj
        11.07.2025 12:17

        Там потоковая обработка данных без сложной бизнес логики. А что CPU bounded вынесли в сервисы на Go или чём-то компилируемом и быстром


        1. Aleksey999 Автор
          11.07.2025 12:17

          Откуда информация?

          Instagram изначально был построен на Django с использованием Python, и несмотря на рост масштабов, Python остается центральным языком для многих компонентов системы:
          Обработка данных и аналитика
          Машинное обучение
          Инфраструктурные инструменты
          API и микросервисы


          1. Dhwtj
            11.07.2025 12:17

            Обработка данных и аналитика

            Машинное обучение

            Инфраструктурные инструменты

            API и микросервисы

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


    1. Gadd
      11.07.2025 12:17

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

      В bloody enterprise всё-таки используется немного другой Python (если это не data, ML или AI. Но и тут есть простор для деятельности) со всеми своими достоинствами и недостатками. Бывают, конечно и исключения, особенно когда опытные разработчики вынуждены писать на новом для них Python после поверхностного изучения основ синтаксиса. Этого часто достаточно, чтобы написанный код работал, но сопровождать его становится больно, динамическая природа языка только ухудшает ситуацию. Обычно в таких случаях формируется мнение, что Python не пригоден ни для чего серъёзного.

      В общем, моя основная мысль - в bloody enterprise Python может работать вполне хорошо, просто нужно уметь его приготовить.


      1. Dhwtj
        11.07.2025 12:17

        Бла бла

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


        1. Gadd
          11.07.2025 12:17

          Как правильно готовить Python для энтерпрайз - боюсь, что ответ не вместить в комментарий или даже статью. Если очень коротко, то ответ общий для всех ЯП:

          • голова на плечах

          • знание ЯП и предметной области

          • правильное использование нужного инструментария (линтеры, статические анализаторы, и прочее)

          • хорошее покрытие тестами (для Python, как и для любого другого динамического ЯП нужно очень хорошее покрытие)

          • опыт

          • ???

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

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


          1. Dhwtj
            11.07.2025 12:17

            Удачи

            Только подальше от моего прода


  1. izibrizi2
    11.07.2025 12:17

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

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


    1. whoisking
      11.07.2025 12:17

      Поинтересуюсь, можно примеры для джанги, когда нужен di?


    1. Aleksey999 Автор
      11.07.2025 12:17

      Python лидер по паттернам программировани из коробки - если что, а еще он абсолютнейший лидер по количеству библиотек (в том числе фреймворков).


      1. dph
        11.07.2025 12:17

        И откуда такой вывод? И качество библиотек при этом учитывалось или в расчет принимались любые работы джунов?


        1. Aleksey999 Автор
          11.07.2025 12:17

          это факт, поинтересуйтесь и сами увидите


      1. itmind
        11.07.2025 12:17

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

        Go например намного проще в изучении и намного выгоднее в долгосрочной перспективе для бизнеса. Так же крупный энрепрайс это java или c#. А python это большая вероятность ошибок в рантайме и работа не над логикой, а над устранением тормозов.


        1. Aleksey999 Автор
          11.07.2025 12:17

          Есть критерии выбора которые лежат на поверхности: количество звезд, количество открытых Ишью. Как выбрать подход: человек который выбирает библиотеку знает как это сделать (по умолчанию).


  1. Vplusplus
    11.07.2025 12:17

    Комментаторы захейтили автора только за то, что он считает Python хорошим ЯП для корпоративной разработки. Это те же не любители 1С? Я сам занимаюсь корп. разработкой на Python и считаю его самым удобным и надёжным языком для решения поставленных задач.
    Многие забывают, что во внутренней корп. разработке нет огромного RPS, зато есть сложная бизнесовая логика и здесь лаконичность синтаксиса python подходит лучше всего для создания читаемого и поддерживаемого кода.
    Хотя в нашем проекте мы внедряли типизацию, но потом ушли от нее, для нас удобства от динамической перевесило потенциальные проблемы, но у нас и не было этих проблем.


    1. Dhwtj
      11.07.2025 12:17

      сложная бизнесовая логика

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

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

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


    1. dph
      11.07.2025 12:17

      Какие еще языки для корпоративной разработки вы пробовали? В каких у вас есть серьезные компетенции?
      Без разнообразного опыта сложно говорить про "хороший" или "плохой" язык. А вот те, у кого есть достаточно разнообразный опыт - обычно относятся к Python с большим сомнением, тем более при использовании динамической типизации.


  1. Panzerschrek
    11.07.2025 12:17

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


    1. Dhwtj
      11.07.2025 12:17

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

      Костыли из типов не помогут питон войти в энтерпрайз. Исследования разнородных и кривых данных да несложные прикладные программы, не несущие ответственности - вот и весь питон. Впрочем, прикладные программы штука растяжимая: питон очень богат прикладными библиотеками. Например, чтение Excel с пересчётом формул есть только в c# ( актуальный epplus денег хочет) и в питон (видимо, кто-то проплатил создание библиотеки) и больше нигде. И если очень надо то деваться некуда.