Важны реальные показатели кода, а не навящанные кем-то правила. Реальные показатели: стабильность работы приложения, легкость поддержки и расширяемость, производительность и скорость разработки, легкость освоения новыми участниками команды.
Стиль написания кода и инструменты зависят от требований проекта и личнвх предпочтений команды разработчиков.
Код должен быть целенаправленным, а не просто красивым Все должно быть обосновано Нет смысла городить обьекты если в этом нет необходимости (падает производительность, увеличивается кол-во кода).
Легкость и скорость освоения кода Код пишется и читается человеком. Компилируется для машины. Значит код должен быть максимально просто читать. Емкость и выразительность Идеальная ситуация: емкое компактное выражение точно и однозначно описывает ситуациб и заменяет большие громоздкие конструкции. Меньше строчек кода - меньше возможности для ошибки и меньше времени на понимание. Но слишком большая компактность вредит легкости понимания - не следует злоупотреблять и лепить все в одну строчку.
Побрчный код и основной код (логика) В идеале код должен содержать только логику. Выделение памяти, закрытие открытых файлов и т.д. Он нужен машине. Такого много в C. От него необходимо избавояться. Он затрудняет понимание. Да, он предоставлчет больший контроль, но этого можно достичь и по-другому.
Расширение возможности должны быть предрстаылены по запросу, а не навязаны. В обычных случаях должны использоваттся простейшие надежные конструкции. Все подочныетоперации дрлжны быть автоматизированы. Python противоположность - минимум побочного кода. Например описание типа переменных. Иногда нужен тип переменной. Он помогает контролировать логики, исключает двойственность (несколько вариантов, тратится время на их проработку). Но иногда это избыточный функционал. Тип переменной обычно может быть вычислен из контекста и при присваивании.