Что не так с моим кодом или 7 причин моих страданий
Почему я здесь?
Пример номер раз
Пример номер раз
Пример номер два
Пример номер два
7 смертных грехов программирования
1. Спешка
2. Апатия
3. Леность
4. Ограниченность мышления
5. Алчность
6. Невежество
7. Гордыня
Наиболее частые ошибки. Антипаттерны
Антипаттерны разработки
God Object
God Object
God Object
Golden Hammer (Silver Bullet)
Golden Hammer (Silver Bullet)
Golden Hammer (Silver Bullet)
Lava Flow
Lava Flow
Lava Flow
Кулинарные антипаттерны
Hardcoding & Magic Number
Hardcoding & Magic Number
Hardcoding & Magic Number
Hardcoding & Magic Number
Hardcoding & Magic Number
Programming by permutation
Programming by permutation
Programming by permutation
Архитектурные антипаттерны
Over-Engineering
Over-Engineering
Over-Engineering
Not Invented Here & Reinventing the Wheel
Not Invented Here & Reinventing the Wheel
Not Invented Here & Reinventing the Wheel
Заключение
Вопросы? Истории?
5.14M
Категория: МенеджментМенеджмент

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

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

Андрей Воробьёв
30.11.2019

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

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

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

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

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

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

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

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

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

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

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

7

8. 1. Спешка

8

9. 2. Апатия

9

10. 3. Леность

10

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

11

12. 5. Алчность

12

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

13

14. 7. Гордыня

14

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

15

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

16

17. God Object

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

18. God Object

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

19. God Object

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

20. Golden Hammer (Silver Bullet)

— Когда у тебя в руках есть только молоток, тогда всё
вокруг превращается в гвозди.
А. Маслоу
20

21. Golden Hammer (Silver Bullet)

Предпосылки:
• Стремление использовать знакомую технологию;
• Отсутствие опыта с другими технологиями;
• Риск при переходе на другое решение;
• Политические причины;
• Уверенность в преимуществах собственного решения.
21

22. Golden Hammer (Silver Bullet)

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

23. Lava Flow

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

24. Lava Flow

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

25. Lava Flow

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

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

26

27. Hardcoding & Magic Number

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

28. Hardcoding & Magic Number

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

29. Hardcoding & Magic Number

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

30. Hardcoding & Magic Number

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

31. Hardcoding & Magic Number

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

32. Programming by permutation

32

33. Programming by permutation

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

34. Programming by permutation

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

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

35

36. Over-Engineering

36

37. Over-Engineering

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

38. Over-Engineering

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

39. Not Invented Here & Reinventing the Wheel

Not Invented Here & Reinventing the Wheel
39

40. Not Invented Here & Reinventing the Wheel

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

41. Not Invented Here & Reinventing the Wheel

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

42. Заключение

42

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

43

44.

КОНТАКТЫ
E-mail: [email protected]
44
English     Русский Правила