tgoop.com/stringconcat/334
Last Update:
Как приучить python-котиков к лотку
Как вы знаете, я не очень жалую питон. На это есть 2 основные причины
- Он слишком много разрешает. Можно поприседать задницей на клавиатуру и интерпретатор исполнит получившийся результат. Сначала это выглядит как ВОООУ ГИБКОСТЬ!!11, а потом нужны еще +3 человека, чтобы эту гибкость выпрямить
- Динамическая природа языка. Её можно поправить, но только отчасти
Так вот, проект куда меня позвали спасать был написан на питоне. Он был свеж и можно сказать greenfield, но спустя совсем непродолжительное время начались классические проблемы — код перестал быть поддерживаемым: запутались в цепочках вызовов и перестали понимать что происходит
Что нас в итоге спасло:
- Разделили убер-классы с бизнес-локикой на небольшие классики, похожие на UseCase
- Внедрили статическую типизацию через mypy и заставили ее работать, а не просто формально присутствовать (хотя к работе mypy тоже есть вопросики, но это обусловлено самим языком и все же лучше чем ничего).
- Впоследствии еще сделали прото-объекты-значения, чтобы понимать какой float что обозначает в параметрах метода
- Приделали returns . Стало понятно что можно ожидать от метода. Кстати есть плагин для mypy
- Обмазали правилами из pylint . Самое эффективное правило у нас - ограничение цикломатической сложности. Поскольку проект был MLный, то нередко можно было встретить код с 10ю вложенными циклами, что уводило читабельность и понимаемость в отрицательную зону
Пожив пару-тройку месяцев в атмосфере страданий удалось получить результат, который поддерживается до сих пор. А ребята даже иногда шлют мне угрозы в личку что-то вроде «блин офигеть мы все еще можем вносить изменения в код!». Поэтому не отчаивайтесь, когда не видите резульатат сразу. Практически любые серьезные изменеия проходят стадию хаоса и поножовщины, тем более такие, которые ломают мировоззрение — «всю жизнь так писали, а что можно было по-другому?»
BY StringConcat - разработка без боли и сожалений
Share with your friend now:
tgoop.com/stringconcat/334