Что не так с моим кодом или 7 причин моих страданий

Содержание

Слайд 2

Почему я здесь?

Приходится иметь дело с плохим или нестабильным кодом

Почему я здесь? Приходится иметь дело с плохим или нестабильным кодом

Слайд 3

Пример номер раз

Нет опыта разработки;
Единственный разработчик.

Пример номер раз Нет опыта разработки; Единственный разработчик.

Слайд 4

Пример номер раз

Результат:
Огромные классы и методы;
Классы имели множество ответственностей и были сильно

Пример номер раз Результат: Огромные классы и методы; Классы имели множество ответственностей
связаны друг с другом;
Отсутствие юнит-тестов;
Расширять функциональность с каждым разом становилось всё сложней.

Слайд 5

Пример номер два

Класс-команда для вычисления:
Класс разбит на 7 файлов;
Общий объем почти 10к

Пример номер два Класс-команда для вычисления: Класс разбит на 7 файлов; Общий
строк кода;
Слишком много умеет и знает.

Слайд 6

Пример номер два

Результат:
Запутанный и нестабильный класс;
Невозможно покрыть тестами;
Страшно изменять.

Пример номер два Результат: Запутанный и нестабильный класс; Невозможно покрыть тестами; Страшно изменять.

Слайд 7

7 смертных грехов программирования

7 смертных грехов программирования

Слайд 8

1. Спешка

1. Спешка

Слайд 9

2. Апатия

2. Апатия

Слайд 10

3. Леность

3. Леность

Слайд 11

4. Ограниченность мышления

4. Ограниченность мышления

Слайд 12

5. Алчность

5. Алчность

Слайд 13

6. Невежество

6. Невежество

Слайд 14

7. Гордыня

7. Гордыня

Слайд 15

Наиболее частые ошибки. Антипаттерны

Наиболее частые ошибки. Антипаттерны

Слайд 16

Антипаттерны разработки

Антипаттерны разработки

Слайд 17

God Object

— Мне нужен такой-то функционал
— Используй MegaCoreObject!

God Object — Мне нужен такой-то функционал — Используй MegaCoreObject! — А
А ещё, мне нужен …
— Я же сказал, используй MegaCoreObject!

Слайд 18

God Object

Признаки:
Большое число несвязных и несогласованных свойств и методов;
Один класс содержит всю

God Object Признаки: Большое число несвязных и несогласованных свойств и методов; Один
основную логику приложения;
Внесение нового кода в уже существующие классы, вместо создания новых и пересмотра иерархии классов для лучшего распределения обязанностей.

Слайд 19

God Object

Следствие:
Сложно вносить изменения внутри God Object;
Сложно использовать повторно;
Сложно тестировать.

God Object Следствие: Сложно вносить изменения внутри God Object; Сложно использовать повторно; Сложно тестировать.

Слайд 20

Golden Hammer (Silver Bullet)

— Когда у тебя в руках есть только молоток,

Golden Hammer (Silver Bullet) — Когда у тебя в руках есть только
тогда всё вокруг превращается в гвозди.
А. Маслоу

Слайд 21

Golden Hammer (Silver Bullet)

Предпосылки:
Стремление использовать знакомую технологию;
Отсутствие опыта с другими технологиями;
Риск при

Golden Hammer (Silver Bullet) Предпосылки: Стремление использовать знакомую технологию; Отсутствие опыта с
переходе на другое решение;
Политические причины;
Уверенность в преимуществах собственного решения.

Слайд 22

Golden Hammer (Silver Bullet)

Следствие:
неоптимальное решение;
ненужное усложнение или недопустимое упрощение системы.

Golden Hammer (Silver Bullet) Следствие: неоптимальное решение; ненужное усложнение или недопустимое упрощение системы.

Слайд 23

Lava Flow

— Не знаю, как это работает, но оно работает. Не удалять

Lava Flow — Не знаю, как это работает, но оно работает. Не удалять и не менять!
и не менять!

Слайд 24

Lava Flow

Предпосылки
Отсутствие Code Review;
Отсутствие проектирования разработки;
Недостаток опыта работы с технологией;
Нет времени на

Lava Flow Предпосылки Отсутствие Code Review; Отсутствие проектирования разработки; Недостаток опыта работы
рефакторинг и технический долг.

Слайд 25

Lava Flow

Следствие:
Увеличивается сложность проекта;
Замедляется скорость разработки проекта;
Сложно провести рефакторинг или внести новую

Lava Flow Следствие: Увеличивается сложность проекта; Замедляется скорость разработки проекта; Сложно провести
функциональность.

Слайд 26

Кулинарные антипаттерны

Кулинарные антипаттерны

Слайд 27

Hardcoding & Magic Number
var path = "C:/Projects/MyProject/Data/FirstTest";
var connection = Service.Connect("localhost/api");
var peopleAmount =

Hardcoding & Magic Number var path = "C:/Projects/MyProject/Data/FirstTest"; var connection = Service.Connect("localhost/api");
GetEuropePopulation() + 602005;

Слайд 28

Hardcoding & Magic Number

Предпосылки:
Хардкод во время разработки или отладки;
Спешка.

Hardcoding & Magic Number Предпосылки: Хардкод во время разработки или отладки; Спешка.

Слайд 29

Hardcoding & Magic Number

Следствие:
Исправная работа только в окружении, в котором ведётся разработка;
Неустойчивость

Hardcoding & Magic Number Следствие: Исправная работа только в окружении, в котором
к изменениям;
Требуется повторный деплой.

Слайд 30

Hardcoding & Magic Number
var path = "C:/Projects/MyProject/Data/FirstTest.xml";
var connection = Service.Connect("localhost/api");
var peopleAmount =

Hardcoding & Magic Number var path = "C:/Projects/MyProject/Data/FirstTest.xml"; var connection = Service.Connect("localhost/api");
GetEuropePopulation() + 602005;

Слайд 31

Hardcoding & Magic Number
var path = Path.Combine(Directory.GetCurrentDirectory(), dataPath);
var connection = Service.Connect(Settings.OperationServiceAddress);
var peopleAmount

Hardcoding & Magic Number var path = Path.Combine(Directory.GetCurrentDirectory(), dataPath); var connection =
= GetEuropePopulation() + LuxembourgPopulation2018;

Слайд 32

Programming by permutation

Programming by permutation

Слайд 33

Programming by permutation

Предпосылки:
Отсутствие желания понять как работает код;
Отсутствие документации;
Низкая компетенция разработчика.

Programming by permutation Предпосылки: Отсутствие желания понять как работает код; Отсутствие документации; Низкая компетенция разработчика.

Слайд 34

Programming by permutation

Следствие:
Невозможно предусмотреть все сценарии;
Будет потрачено время на решение задачи перебором,

Programming by permutation Следствие: Невозможно предусмотреть все сценарии; Будет потрачено время на
а после, повторно потратится время на переделку решения;
Приучает разработчика к тому, что написание кода — это магия, а не инженерная работа.

Слайд 35

Архитектурные антипаттерны

Архитектурные антипаттерны

Слайд 36

Over-Engineering

Over-Engineering

Слайд 37

Over-Engineering

Предпосылки:
Необходимость покрыть потребности небольшой части пользователей;
Преждевременное усложнение системы;
Желание продемонстрировать свои способности.

Over-Engineering Предпосылки: Необходимость покрыть потребности небольшой части пользователей; Преждевременное усложнение системы; Желание продемонстрировать свои способности.

Слайд 38

Over-Engineering

Следствие:
Потрачено слишком много сил/времени/денег на функционал, который не нужен большинству пользователей;
Продукт стал

Over-Engineering Следствие: Потрачено слишком много сил/времени/денег на функционал, который не нужен большинству
слишком дорогим и/или долгим, из-за чего он так и не был выпущен.

Слайд 39

Not Invented Here & Reinventing the Wheel

Not Invented Here & Reinventing the Wheel

Слайд 40

Not Invented Here & Reinventing the Wheel

Предпосылки:
Высокая цена решения;
Недоверие к чужой разработке;
Желание

Not Invented Here & Reinventing the Wheel Предпосылки: Высокая цена решения; Недоверие
поддержать свой продукт/компанию;
Гордыня;
Вера в то, что свои программисты лучше всех.

Слайд 41

Not Invented Here & Reinventing the Wheel

Следствие:
Новый велосипед может оказаться недостаточно функциональным

Not Invented Here & Reinventing the Wheel Следствие: Новый велосипед может оказаться
или надёжным;
Нужно поддерживать собственными силами;
Потеря денег/времени.

Слайд 42

Заключение

Заключение

Слайд 43

Вопросы? Истории?

Вопросы? Истории?