Знакомство
Зураб Белый
Руководитель практики Java
Первую программку написал в 14 лет, тогда и связал свою жизнь с IT. В коммерческой разработке более 15 лет. Прошел путь от джуна до руководителя отдела Java-разработки.
Окончил факультет компьютерных наук Воронежского государственного университета. В основном занимался проектами в сфере ритейла и государственном секторе.
Соведущий подкаста «Скрамное ИТ». Преподаватель, автор курсов и спикер на различных конференциях и митапах. В свободное время занимается гончарным делом, масштабным моделированием и путешествует.

Зачем писать понятный код?
Понять, что делает код
Понять, как код это делает
Что важно соблюдать во время разработки
🗸
Правильные названия
🗸
Единый стиль кода
🗸
Модульность
🗸
Иерархия
🗸
Соглашения
Базовые принципы проектирования
- KISS (Keep It Simple, Stupid)
- DRY (Don’t Repeat Yourself)
- YAGNI (You Aren’t Gonna Need It)
- APO (Avoid Premature Optimization)
- BDUF (Big Design Up Front)

Почему бы
просто
не прочесть
определения
и не начать
использовать?
просто
не прочесть
определения
и не начать
использовать?
- большинство паттернов и принципов было сформулировано давно;
- и не всегда четко;
- и не всегда для разработки ПО;
- за десятилетия понятия размывались и/или растягивались.
KISS
Keep it short simple
Делайте вещи проще
Делайте вещи проще
- Kiss был разработан ВМС США в 1960 году
- Простые системы будут работать лучше и надежнее
- Не придумывайте к задаче более сложного решения, чем ей требуется
- Иногда самое разумное решение оказывается и самым простым
Keep It Simple, Stupid
Будь проще
Будь проще
- Порой наиболее правильное решение – это наиболее простая реализация задачи, в которой нет ничего лишнего
- Простейшее объяснение какого-либо явления с большей вероятностью будет точным, чем более сложные объяснения
- Согласно KISS следует программировать и писать, как можно более упрощенно
YAGNI
You aren't gonna need it
Вам это не понадобится
Вам это не понадобится
- Принцип проектирования ПО, направленный на отказ от избыточной функциональности
- Всегда пишите только тот код, который действительно нужен здесь и сейчас, а не тот, который, как вам кажется, понадобится в будущем
You ain't gonna need it
Тебе это не понадобится
Тебе это не понадобится
- Все что не нужно в системе и не прописано в требованиях – не следует и реализовывать
- Программист не сжигает напрасно бюджет, не тратит время и другие ресурсы, а просто делает то, что действительно от него хотят
APO
Avoid Premature Optimization
Избегайте преждевременной оптимизации
Избегайте преждевременной оптимизации
- Разработка – это про деньги
- Никому не нужны программы, которые стоят больше, чем бизнес может себе позволить
- Оптимизировать программы по любому параметру стоит только после того, как станет понятно, нужна ли эта оптимизация
- Прежде чем вы погрузитесь в детали реализации, убедитесь, что эти оптимизации действительно полезны
- Преждевременная оптимизация – зло
- Преждевременная оптимизация может привести к задержкам при написании кода и, следовательно, увеличит затраты времени на вывод функций на рынок

Промежуточные выводы
KISS
- Снижать сложность воспринимаемых за раз компонентов
- Делать маленькими классы и методы в них
- Соблюдать принцип единственной ответственности
- Снижать количество зависимостей в классах
- Уменьшать сложность методов
YAGNI
- Не пренебрегать дизайном системы
- Интерфейсы, разделение по слоям и архитектурные паттерны может быть сложно применить в будущем
- Лучше применять YAGNI к разработке частей кода, которые не потребуются в ближайшем будущем
APO
- Не возводить оптимизацию в ранг религии
- Для распространенных инструментов обычно существует устоявшийся набор возможных оптимизаций и сценариев, когда что использовать
- Сначала убедиться в необходимости, потом оптимизировать
DRY
DRY – don’t repeat yourself (Не повторяйся)
- Избегайте копирования кода
- Выносите общую логику
- Прежде чем добавлять функционал, проверьте в проекте, может, он уже создан
- Используйте константы
- Каждая часть знания должна иметь единственное, непротиворечивое и авторитетное представление в рамках системы
- Изменение единственного элемента системы не должно требовать внесения изменений в другие, логически не связанные элементы
Есть опасность нарушения принципа KISS!
BDUF
BDUF – Big Design Up Front (Глобальное проектирование прежде всего)
- Перед тем, как приступать к разработке необходимо заранее продумать и спроектировать всю информационную систему
- Применять данный подход не на весь проект, а только на ту часть функциональности, который нужно сделать в рамках текущей итерации разработки
Есть опасность нарушения принципа APO!
Выводы
Принципы – это инструмент решения проблемы, а не ее создания, применять их стоит очень осознанно
Для каждой ситуации будут свои принципы проектирования и/или их пропорции
Т.к. некоторые принципы часто могут противоречить друг другу (KISS vs DRY), то придется искать компромисс
Единого рецепта не существует!