Принцип заключается в том, что возможности, которые не описаны в требованиях к системе, просто не должны реализовываться. YAGNI основан на идее, что большинство «гипотетических» возможностей, которые кажутся полезными на этапе проектирования, никогда не будут востребованы. Реализуя их заранее, разработчики тратят время, усложняют код и повышают риск ошибок.
Стандарты кодирования — залог хорошей сопровождаемости проекта
Любая командная разработка может быть эффективной только в том случае, если участники команды имеют общее видение. Иначе разработка начинает напоминать басню Крылова «Лебедь, Щука и Рак».
Если над проектом работает больше одного разработчика, то обязательно должен быть стандарт оформления кода (его еще часто называют стандартом кодирования или стилем программирования). Это касается и аутсорсинговых компаний, в которых проект может передаваться от одного разработчика к другому, и проектов, которые передаются на поддержку и сопровождение «во вне», да и вообще любых проектов, которые будут существовать больше нескольких месяцев, сопровождаться и дорабатываться.
Стандарт кодирования — набор правил и соглашений, которые описывают базовые принципы оформления программного кода, используемого совместно группой разработчиков. Цель использования стандарта — упрощение восприятия программного кода человеком, сокращение нагрузки на память и зрение при чтении программы. Бонусом к этому идёт возможность эффективного использования сравнений в системе контроля версий — разный стандарт оформления кода «ломает» нормальный процесс работы с diff, так как подсвечиваются все изменения в оформлении, а не только в бизнес‑логике.
В стандарт кодирования обычно входят соглашения о принципах именования классов, функций и переменных, правила форматирования (например, ширина отступов и используемые для этого символы), стиль оформления комментариев и условия их использования, а также использование нотации документирующих комментариев.
Обычно это всё автоматизируется на уровне IDE (программной платформы, которая служит для написания кода). Программист может писать код как ему удобно, а IDE будет автоматически форматировать написанный программный код согласно заданным правилам. Для этого используются линтеры — программы, которые форматируют код в сответствии с задаваемой конфигурацией. В разработке на Ruby, например, используется rubocop, в JavaScript и TypeScript — eslint.
Использование стандартов кодирования — это экономически целесообразный подход, так как чем быстрее программист может понять написанный ранее код, тем меньше оплачиваемого времени он на это потратит. Да и для душевного здоровья программистов это полезно — практически все программисты не любят читать чужой «говнокод» в смутной надежде понять задумку его автора и разобраться с фактически заложенной в него бизнес‑логике, ведь нередко бывает, что задумка и фактическая реализация — это «две большие разницы». Разумеется, что правильное оформление не гарантирует красоту и тем более правильность реализации, но всё же значительно ускоряет понимание.
Стремления к красоте реализации и правильности программной архитектуры тоже реализуемы на уровне соглашений — в этом очень помогает соблюдение принципов программирования, например: DRY, KISS, YAGNI, SOLID.
Тематические статьи
KISS — это принцип проектирования и программирования, при котором простота системы декларируется в качестве основной цели или ценности. Большая часть программных систем необосновано перегружена практически ненужными функциями, что ухудшает удобство их использование конечными пользователями, а также усложняет их поддержку и развитие разработчиками. Следование принципу KISS позволяет разрабатывать решения, которые не обладают этими недостатками: они просты в использовании и в сопровождении.
Следование принципу DRY позволяет добиться высокой сопровождаемости программного продукта: внесение изменений и тестирование значительно упрощаются. Если код не дублируется, то для изменения логики достаточно внесения исправлений всего в одном месте. Также значительно проще тестировать одну (пусть и более сложную) функцию, а не набор из десятков однотипных. При следовании DRY упрощается и повторное использование функций, вынесенных из сложных алгоритмов, что позволяет сократить время разработки и тестирования новой функциональности.
SOLID это аббревиатура пяти основных принципов проектирования в объектно-ориентированном программировании, предложенных Робертом Мартином:
- Single responsibility — принцип единственной ответственности
- Open-closed — принцип открытости / закрытости
- Liskov substitution — принцип подстановки Барбары Лисков
- Interface segregation — принцип разделения интерфейса
- Dependency inversion — принцип инверсии зависимостей
TDD, test-driven development или разработка через тестирование — это методология разработки ПО, повышающая надёжность и сопровождаемость проектов. При следовании этой методологии тесты пишутся до написания кода. TDD основывается на повторении коротких циклов разработки: сначала пишется тест, покрывающий желаемое изменение, затем пишется программный код, который реализует желаемое поведение системы и позволяет пройти написанный тест, а после этого проводится рефакторинг написанного кода с постоянной проверкой прохождения тестов.
Флаги функций позволяют отделить развертывание функциональности от развертывания кода, обеспечивают возможности для A/B-тестирования и предоставляют механизм быстрого отключения проблемных функций.
Наши услуги
Формализуем и автоматизируем бизнес‑процессы, осуществляем системную интеграцию, разрабатываем и внедряем цифровые решения, повышающие эффективность бизнеса.
Разрабатываем сложные веб‑приложения и сайты. Создаём как отдельные инструменты для бизнеса, так и полноценные цифровые системы по индивидуальным требованиям.
Разрабатываем веб‑приложения различной направленности и технически сложные веб‑сервисы.
Cоздаём и внедряем как комплексные ERP‑системы для бизнеса, так и более специализированные информационные системы — CRM, WMS, BPMS, экспертные и аналитические системы, системы поддержки принятия решений, коммуникативные сервисы и многое другое.
Осуществляем комплексную поддержку ИТ‑проектов для обеспечения высокой работоспособности и улучшения продуктовых метрик.
Разрабатываем и сопровождаем комплексные системы, устойчивые к отказу оборудования, отдельных сервисов и целых подсистем.
Разрабатываем веб‑приложения, работающие по‑настоящему быстро: генерация страниц осуществляется за доли секунды, а загрузка сайта даже на медленных каналах занимает не более пары секунд.
Мы создаём сайты и веб‑приложения, которые выдерживают десятки тысяч обращений в минуту без сбоев и без снижения скорости работы.