Как вы знаете, я не очень жалую питон. На это есть 2 основные причины
- Он слишком много разрешает. Можно поприседать задницей на клавиатуру и интерпретатор исполнит получившийся результат. Сначала это выглядит как ВОООУ ГИБКОСТЬ!!11, а потом нужны еще +3 человека, чтобы эту гибкость выпрямить
- Динамическая природа языка. Её можно поправить, но только отчасти
Так вот, проект куда меня позвали
Что нас в итоге спасло:
- Разделили убер-классы с бизнес-локикой на небольшие классики, похожие на UseCase
- Внедрили статическую типизацию через mypy и заставили ее работать, а не просто формально присутствовать (хотя к работе mypy тоже есть вопросики, но это обусловлено самим языком и все же лучше чем ничего).
- Впоследствии еще сделали прото-объекты-значения, чтобы понимать какой float что обозначает в параметрах метода
- Приделали returns . Стало понятно что можно ожидать от метода. Кстати есть плагин для mypy
- Обмазали правилами из pylint . Самое эффективное правило у нас - ограничение цикломатической сложности. Поскольку проект был MLный, то нередко можно было встретить код с 10ю вложенными циклами, что уводило читабельность и понимаемость в отрицательную зону
Пожив пару-тройку месяцев в атмосфере страданий удалось получить результат, который поддерживается до сих пор. А ребята даже иногда шлют мне