В этой публикации я хотел бы представить на суд уважаемого читателя некоторые принципы, которыми я руководствуюсь, исполняя свои обязанности в роли Python-разработчика.
С одной стороны хотелось быть поделиться накопленным опытом, который может оказаться полезным для начинающих разработчиков, а с другой стороны получить обратную связь от более опытных разрабочиков, руководителей и специалистов смежных областей.
Принципы условно сгруппированы в три группы: принципы принятия решений; принципы, направленные на повышение качества кода; принципы, направленные на повышение производительности кода.
Далее дано развернутое пояснение каждому из перечисленных принципов. Для некоторых принципов в круглых скобках указанны постулаты Zen of Python, которые на мой взгляд имеют отношение к данным принципам, либо их частям.
С одной стороны хотелось быть поделиться накопленным опытом, который может оказаться полезным для начинающих разработчиков, а с другой стороны получить обратную связь от более опытных разрабочиков, руководителей и специалистов смежных областей.
Принципы условно сгруппированы в три группы: принципы принятия решений; принципы, направленные на повышение качества кода; принципы, направленные на повышение производительности кода.
- Принятие решений
- Любое техническое решение должно быть обосновано
- Ответственность за принятое решение всегда лежит на том или тех, кто принял данное решение
- При принятии технических решений необходимо учитывать их действие во времени и их соответствие потребностям бизнеса
- Одним из основных критериев при принятии технических и иных решений должна быть их наибольшая эффективность
- Смело отступать от правил, методологий, шаблонов и прочих ограничений, если эффект от такого отступления превышает возможные потери (Special cases aren't special enough to break the rules, although practicality beats purity)
- При необходимости сделать работающее, но, возможно, не наилучшее, решение сразу, а позднее улучшить его (Now is better than never, although never is often better than *right* now)
- Если сложно выбрать между двумя альтернативными техническими решениями, то нужно выбрать любое и двигаться с ним дальше, когда появится больше инфорации, то можно будет сделать рефакторинг, если решение оказалось неоптимальным
- Гибкость технических решений крайне желательна, а универсальность не обязательна
- Качество исходного кода
- Качество кода следует оптимизировать на базе сформированной системы критериев, сбалансированной по отношению к затратам в краткосрочном и долгосрочном периодах
- Писать оптимальный код сразу, если это не увеличивает его сложность и сроки разработки (Beautiful is better than ugly)
- Самодокументируемый код имеет приоритет над хорошо прокомментированным (Beautiful is better than ugly)
- Писать TODO и FIXME в коде
- Давать переменным, функциям, методам, классам и другим объектам исходного кода имена точно отражающие их назначение, несмотря на увеличение длины названий (Explicit is better than implicit)
- Меньшее число строк и объем кода предпочтительнее, при сохранении прежней читабельности кода (Simple is better than complex)
- Применять инспекцию кода (code review) как инструмент обнаружения ошибок, выравнивания стиля разработки, знакомства с чужим кодом и обучения в команде
- Применять повторное использование своего и чужого кода
- Использовать специализированные библиотеки для решения конкретных задач, вместо разработки своего аналогичного кода
- Производительность
- Производительность разработки кода имеет приоритет над производительностью исполнения кода
- Оптимизация производительности исполнения кода должна быть обоснована соответствующей потребностью
- Оптимизация производительности исполнения кода должна выполняться за счет устранения наиболее серьезных узких мест
- В первую очередь должны быть использованы наиболее эффективные методы оптимизации производительности исполнения кода
Далее дано развернутое пояснение каждому из перечисленных принципов. Для некоторых принципов в круглых скобках указанны постулаты Zen of Python, которые на мой взгляд имеют отношение к данным принципам, либо их частям.