Короткий ответ
Хороший код следует PEP 8, читаем, разбит на небольшие функции с ясными именами, лишён дублирования и магических чисел, обрабатывает краевые случаи и покрыт тестами. Плохой код нечитаем и трудно поддерживать. Алгоритмическую задачу решают по методике: понять условие, оценить сложность, написать рабочее решение, затем оптимизировать и протестировать.
Как это работает подробнее
Разница между хорошим и плохим кодом видна в читаемости, структуре и тестах, а надёжная методика решения задач помогает не начинать писать код наугад.
- PEP 8. Свод рекомендаций по оформлению кода: отступы, именование, длина строк; следование ему делает код единообразным и лёгким для чтения коллегами.
- Структура кода. Хороший код решает задачу просто, разбит на небольшие функции с понятными именами, лишён дублирования и обрабатывает краевые случаи.
- Тесты и сопровождение. Покрытие тестами — признак зрелого кода; плохой код нечитаем, полон магических чисел и скрытых побочных эффектов, поэтому его страшно менять.
- Понимание задачи. Условие перечитывают, выписывают входные и выходные данные, по ограничениям прикидывают ожидаемую сложность и заранее думают о краевых случаях.
- Порядок решения. Сначала простое рабочее решение, затем оптимизация и проверка краевых случаев, ручной прогон алгоритма на примерах и тесты на обычных и граничных данных.
Что использовать на практике
- Читаемость. Следуй
PEP 8и выбирай понятные имена переменных и функций. - Маленькие функции. Дроби код на функции с одной ответственностью и убирай дублирование.
- Тесты. Покрывай ключевую логику тестами, включая граничные случаи вроде пустого входа и дубликатов.