Слайд 2Почему я здесь?
Приходится иметь дело с плохим или нестабильным кодом
Слайд 3Пример номер раз
Нет опыта разработки;
Единственный разработчик.
Слайд 4Пример номер раз
Результат:
Огромные классы и методы;
Классы имели множество ответственностей и были сильно
связаны друг с другом;
Отсутствие юнит-тестов;
Расширять функциональность с каждым разом становилось всё сложней.
Слайд 5Пример номер два
Класс-команда для вычисления:
Класс разбит на 7 файлов;
Общий объем почти 10к
строк кода;
Слишком много умеет и знает.
Слайд 6Пример номер два
Результат:
Запутанный и нестабильный класс;
Невозможно покрыть тестами;
Страшно изменять.
Слайд 77 смертных грехов
программирования
Слайд 15Наиболее частые ошибки.
Антипаттерны
Слайд 17God Object
— Мне нужен такой-то функционал
— Используй MegaCoreObject!
—
А ещё, мне нужен …
— Я же сказал, используй MegaCoreObject!
Слайд 18God Object
Признаки:
Большое число несвязных и несогласованных свойств и методов;
Один класс содержит всю
основную логику приложения;
Внесение нового кода в уже существующие классы, вместо создания новых и пересмотра иерархии классов для лучшего распределения обязанностей.
Слайд 19God Object
Следствие:
Сложно вносить изменения внутри God Object;
Сложно использовать повторно;
Сложно тестировать.
Слайд 20Golden Hammer (Silver Bullet)
— Когда у тебя в руках есть только молоток,
тогда всё вокруг превращается в гвозди.
А. Маслоу
Слайд 21Golden Hammer (Silver Bullet)
Предпосылки:
Стремление использовать знакомую технологию;
Отсутствие опыта с другими технологиями;
Риск при
переходе на другое решение;
Политические причины;
Уверенность в преимуществах собственного решения.
Слайд 22Golden Hammer (Silver Bullet)
Следствие:
неоптимальное решение;
ненужное усложнение или недопустимое упрощение системы.
Слайд 23Lava Flow
— Не знаю, как это работает, но оно работает. Не удалять
и не менять!
Слайд 24Lava Flow
Предпосылки
Отсутствие Code Review;
Отсутствие проектирования разработки;
Недостаток опыта работы с технологией;
Нет времени на
рефакторинг и технический долг.
Слайд 25Lava Flow
Следствие:
Увеличивается сложность проекта;
Замедляется скорость разработки проекта;
Сложно провести рефакторинг или внести новую
функциональность.
Слайд 27Hardcoding & Magic Number
var path = "C:/Projects/MyProject/Data/FirstTest";
var connection = Service.Connect("localhost/api");
var peopleAmount =
GetEuropePopulation() + 602005;
Слайд 28Hardcoding & Magic Number
Предпосылки:
Хардкод во время разработки или отладки;
Спешка.
Слайд 29Hardcoding & Magic Number
Следствие:
Исправная работа только в окружении, в котором ведётся разработка;
Неустойчивость
к изменениям;
Требуется повторный деплой.
Слайд 30Hardcoding & Magic Number
var path = "C:/Projects/MyProject/Data/FirstTest.xml";
var connection = Service.Connect("localhost/api");
var peopleAmount =
GetEuropePopulation() + 602005;
Слайд 31Hardcoding & Magic Number
var path = Path.Combine(Directory.GetCurrentDirectory(), dataPath);
var connection = Service.Connect(Settings.OperationServiceAddress);
var peopleAmount
= GetEuropePopulation() + LuxembourgPopulation2018;
Слайд 33Programming by permutation
Предпосылки:
Отсутствие желания понять как работает код;
Отсутствие документации;
Низкая компетенция разработчика.
Слайд 34Programming by permutation
Следствие:
Невозможно предусмотреть все сценарии;
Будет потрачено время на решение задачи перебором,
а после, повторно потратится время на переделку решения;
Приучает разработчика к тому, что написание кода — это магия, а не инженерная работа.
Слайд 37Over-Engineering
Предпосылки:
Необходимость покрыть потребности небольшой части пользователей;
Преждевременное усложнение системы;
Желание продемонстрировать свои способности.
Слайд 38Over-Engineering
Следствие:
Потрачено слишком много сил/времени/денег на функционал, который не нужен большинству пользователей;
Продукт стал
слишком дорогим и/или долгим, из-за чего он так и не был выпущен.
Слайд 39Not Invented Here & Reinventing the Wheel
Слайд 40Not Invented Here & Reinventing the Wheel
Предпосылки:
Высокая цена решения;
Недоверие к чужой разработке;
Желание
поддержать свой продукт/компанию;
Гордыня;
Вера в то, что свои программисты лучше всех.
Слайд 41Not Invented Here & Reinventing the Wheel
Следствие:
Новый велосипед может оказаться недостаточно функциональным
или надёжным;
Нужно поддерживать собственными силами;
Потеря денег/времени.