Меня сильно бесит динамическая типизация в Питоне. Особенно когда в твоём проекте сотни тысяч LoC и не используется аннотация типов.

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

Хм, ну я даже не знаю, затолкаю всё в словарь, чего сущности зря плодить!

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

С другой — у нас никогда не было не то что статической типизации, у нас даже аннотации типов не было до недавнего времени. Из-за этого хернуть данные в словарь проще, чем писать новый класс. Результат всё равно будет один и тот же — IDE подскажет тебе всё что угодно, но только не то, что нужно.

Работаешь с кодом, который написал кто-то другой. Одна функция возвращает словарь, другая принимает словарь. Между вызовами двух функций тебе нужно что-то сделать с данными. И вот ты стоишь голый посреди супермаркета пытаешься вспомнить, какие ключи возвращает первая функция, какие ключи ожидает вторая, какие ты туда уже положил, а какие ещё нет. Окей, у тебя штук пять ключей в этом словаре, ты перешёл в первую функцию, посмотрел, что она туда кладёт, пошёл дальше. А если у тебя несколько десятков ключей? Штук десять условий, от которых зависит, какой ключ туда положить. Ты проходишь по иерархии вызовов несколько файлов, пытаешься выяснить, какие параметры передаются именно в этот инстанс класса, какие приходят в метод. Бесит.