Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[SnowOne 2023] Александр Кучук: Советы для продолжающих от Кучука

jugnsk
March 17, 2023

[SnowOne 2023] Александр Кучук: Советы для продолжающих от Кучука

Кучук Александр собирается преподнести миру вторую часть своих (не)бесполезных советов.

Рассмотрим популярные ошибки, которые которые часто совершают разработчики. Разберем код, который вы встретите, спустимся в src.test подвал, вспомним грабли, которые больно ударили автора доклада, ну и не пройдем мимо софт-скиллов, которые быстро твердеют в большой корпорации.

jugnsk

March 17, 2023
Tweet

More Decks by jugnsk

Other Decks in Programming

Transcript

  1. Советы для продолжающих
    от Александра Кучука
    1

    View full-size slide

  2. Почему для продолжающих
    2

    View full-size slide

  3. Кто я
    • Преподавал в МФТИ(ГУ)

    • Преподаю в НИУ ВШЭ ФКН

    • Пишу на Java

    Но с ошибками могу еще и на других языках

    • Тимлид

    • Соведущий подкаста «Вторая пересдача»

    • Пишу в твиттер @aarexer

    • Пишу в телеграм-блог @aarexer_blog
    3

    View full-size slide

  4. Исключения
    5

    View full-size slide

  5. Исключения
    Это просто
    • Бросаем

    • Ловим

    • В финале титры
    6

    View full-size slide

  6. Исключения
    Иногда ловить не просто
    7

    View full-size slide

  7. Исключения
    Реальность
    Ваши мысли?
    8

    View full-size slide

  8. Исключения
    Реальность
    Ваши мысли?
    9

    View full-size slide

  9. Исключения
    К чему привело решение
    • Добро пожаловать в мир ошибок

    ERROR: Can’t decrypt by ….
    10

    View full-size slide

  10. Исключения
    К чему привело решение
    • Добро пожаловать в мир ошибок

    ERROR: Can’t decrypt by ….

    • Нам не страшно видеть ERROR в логе
    11

    View full-size slide

  11. Исключения
    К чему привело решение
    • Добро пожаловать в мир ошибок

    ERROR: Can’t decrypt by ….

    • Нам не страшно видеть ERROR в логе

    • Нам уже вообще ничего не страшно
    12

    View full-size slide

  12. Исключения
    А как бы хотелось?
    13

    View full-size slide

  13. Исключения
    Оцениваем проект через призму исключений
    Лучший способ понять качество кода - это посмотреть, насколько хорошо
    в этом коде организована работа с исключительными случаями
    15

    View full-size slide

  14. Исключения
    Оцениваем проект через призму исключений
    Сохранена авторская орфография и пунктуация
    16

    View full-size slide

  15. Исключения
    Оцениваем проект через призму исключений
    17

    View full-size slide

  16. Исключения
    Исключение - это НЕ способ замазать ошибку или сделать так, чтобы ваша
    программа не выдавала ошибки (с) Георгий Курячий

    https://youtu.be/hjVmyU7N8Jo

    Канал UNИX

    Читает Георгий Курячий
    18

    View full-size slide

  17. Исключения
    Оцениваем проект через призму исключений
    19

    View full-size slide

  18. Исключения
    Оцениваем проект через призму исключений
    20

    View full-size slide

  19. Исключения
    Оцениваем проект через призму исключений
    21

    View full-size slide

  20. Исключения
    Оцениваем проект через призму исключений
    Почему мы не можем получить имя домена?
    22

    View full-size slide

  21. Исключения
    Оцениваем проект через призму исключений
    23

    View full-size slide

  22. Исключения
    Клиент-серверный пример
    Кто здесь источник ошибок?

    • Пользователь

    • Разработчики

    • Менеджеры

    • БД/Инфраструктура/Сеть
    Мой сервер
    Команда разработки
    24

    View full-size slide

  23. Исключения
    Клиент-серверный пример
    Кто здесь источник ошибок?

    • Пользователь

    • Разработчики

    • Менеджеры

    • БД/Инфраструктура/Сеть
    25

    View full-size slide

  24. Исключения
    Что делать?
    Мой сервер
    26

    View full-size slide

  25. Исключения
    Реакция
    27

    View full-size slide

  26. Исключения
    Реакция
    Для полноты картины - это был HTTP 200 OK
    28

    View full-size slide

  27. Исключения
    Думать о том как будут ситуации обрабатываться
    29

    View full-size slide

  28. Исключения
    Думать о том как будут ситуации обрабатываться
    Это утилита для разработчиков
    30

    View full-size slide

  29. Исключения
    Думать о том как будут ситуации обрабатываться
    Это обычный человек
    31

    View full-size slide

  30. Исключения
    Думать о том как будут ситуации обрабатываться
    Это обычный человек
    32

    View full-size slide

  31. Исключения
    Думать о том как будут ситуации обрабатываться
    Это обычный человек
    33

    View full-size slide

  32. Исключения
    Исключение - это НЕ ошибка, а нелинейная передача управления, способ обработки
    некоторых условий не там, где они были обнаружены (с) Георгий Курячий

    Канал UNИX

    Читает Георгий Курячий
    https://youtu.be/hjVmyU7N8Jo
    34

    View full-size slide

  33. Исключения
    • Разные по смыслу и нужны для разных целей

    Бизнес-сценарий

    Ошибка пользователя

    Ошибка разработчика

    Завязаны на Framework (Привет, Spring!)

    • Может быть красным флагом для оценки проекта

    • Думать: как будут ситуации обрабатываться и для кого эта
    обработка, к чему она может привести

    • Не лениться и строго следить за работой с этим инструментом
    35

    View full-size slide

  34. Логирование
    36

    View full-size slide

  35. Логирование
    Log IT
    Доклады про Logger-ы в Java мире:

    37

    View full-size slide

  36. Логирование
    Вы пользуетесь логированием?
    38

    View full-size slide

  37. Логирование
    Вы пользуетесь логированием?
    40

    View full-size slide

  38. Логирование
    Вы пользуетесь логированием?
    41

    View full-size slide

  39. Логирование
    Подробно - плохо? Сделаем!
    42

    View full-size slide

  40. Логирование
    А как надо?
    43

    View full-size slide

  41. Логирование
    Под ситуацию - свое решение
    Мой сервер
    44

    View full-size slide

  42. Логирование
    Пользователь шлет дичь
    • Перехватим исключение ДО пользователя

    • Подробно расскажем пользователю что не так он ввел/сделал

    • Минимально запишем в лог

    Мой сервер
    45

    View full-size slide

  43. Логирование
    Разработчик сделал дичь
    • Перехватим исключение ДО пользователя

    • Минимально расскажем пользователю что не так

    • Максимально подробно запишем в лог

    • Отдать ID ошибки - для идентификации

    и упрощения поиска

    46

    View full-size slide

  44. Логирование
    Реальная история
    Владелец фуры не может подписать ЭП документ уже второй день
    47

    View full-size slide

  45. Логирование
    Почему не получилось?
    48

    View full-size slide

  46. Логирование
    Итог
    • MDC/Structured Logging

    • Думайте: как лог поможет вам быстро найти проблему

    • Помните: лог - это единственный друг и относиться к нему надо
    соответствующе
    49

    View full-size slide

  47. Логирование
    Совет
    • Пробуйте сами смотреть свои логи

    • Покажите коллегам, что вы пишите в лог
    50

    View full-size slide

  48. Документация
    51

    View full-size slide

  49. Документация
    Что нужно сделать в первую очередь, когда вы пришли на проект, а там
    отличная документация?
    52

    View full-size slide

  50. Документация
    Что нужно сделать в первую очередь, когда вы пришли на проект, а там
    отличная документация?

    A. Сказать спасибо менеджеру
    53

    View full-size slide

  51. Документация
    Что нужно сделать в первую очередь, когда вы пришли на проект, а там
    отличная документация?

    A. Сказать спасибо менеджеру

    B. Сказать спасибо тимлиду
    54

    View full-size slide

  52. Документация
    Что нужно сделать в первую очередь, когда вы пришли на проект, а там
    отличная документация?

    A. Сказать спасибо менеджеру

    B. Сказать спасибо тимлиду

    C. Сказать спасибо родителям тимлида

    за воспитание такого сына/дочери
    55

    View full-size slide

  53. Документация
    Что нужно сделать в первую очередь, когда вы пришли на проект, а там
    отличная документация?

    A. Сказать спасибо менеджеру

    B. Сказать спасибо тимлиду

    C. Сказать спасибо родителям тимлида

    за воспитание такого сына/дочери

    D. Поблагодарить судьбу
    56

    View full-size slide

  54. Документация
    Что нужно сделать в первую очередь, когда вы пришли на проект, а там
    отличная документация?
    Проснуться
    57

    View full-size slide

  55. Документация
    Что нужно сделать в первую очередь, когда вы пришли на проект, а там
    отличная документация?
    Проснуться
    А я и не спал
    57

    View full-size slide

  56. Документация
    Что нужно сделать в первую очередь, когда вы пришли на проект, а там
    отличная документация?
    58

    View full-size slide

  57. Документация
    Реальность: есть разработчик/тимлид кто давно на проекте и он
    единственный знает как все работает

    Остальные знания разбросаны

    по команде частями
    59

    View full-size slide

  58. Документация
    Реальность: есть разработчик/тимлид кто давно на проекте и он
    единственный знает как все работает

    Остальные знания разбросаны

    по команде частями Он единственный, кто
    всё знает о проекте
    59

    View full-size slide

  59. Документация
    Реальность: есть разработчик/тимлид кто давно на проекте и он
    единственный знает как все работает

    Остальные знания разбросаны

    по команде частями Он единственный, кто
    всё знает о проекте
    59

    View full-size slide

  60. Документация
    Реальность: есть разработчик/тимлид кто давно на проекте и он
    единственный знает как все работает

    Остальные знания разбросаны

    по команде частями Он единственный, кто
    всё знает о проекте
    К сожалению, это просто картинка
    59

    View full-size slide

  61. Документация
    Где моя документация?
    60

    View full-size slide

  62. Документация
    Где моя документация?

    Документация в этот момент:
    61

    View full-size slide

  63. Документация
    Где моя документация?

    Документация в этот момент:
    61

    View full-size slide

  64. Документация
    Где моя документация?

    Документация в этот момент:
    61

    View full-size slide

  65. Документация
    Где моя документация?

    Документация в этот момент:
    61

    View full-size slide

  66. Документация
    Ваша документация перестала отвечать на звонки.

    Три всадника апокалипсиса: Менеджер, Тимлид и Аналитик.
    62

    View full-size slide

  67. Документация
    Мы поняли как плохо без документации и решили исправиться.

    JIRA-14950: Добавить документацию сервису

    Было:
    63

    View full-size slide

  68. Документация
    Мы поняли как плохо без документации и решили исправиться.

    JIRA-14950: Добавить документацию сервису

    Было: Стало:
    64

    View full-size slide

  69. Документация
    У нас на проекте есть документация!

    65

    View full-size slide

  70. Документация
    У нас на проекте есть документация!

    Документация у нас на проекте:
    66

    View full-size slide

  71. Документация
    У нас на проекте есть документация!

    Документация у нас на проекте:
    67

    View full-size slide

  72. Документация
    Более ответственный подход:
    68

    View full-size slide

  73. Документация
    А как надо-то?

    69

    View full-size slide

  74. Документация
    А как надо-то?

    70

    View full-size slide

  75. Документация
    JavaDoc на русском!
    Если позволяет проект, то лучше так, чем на уровне 

    «My name is Sasha, I am from Russia»
    71

    View full-size slide

  76. Документация
    JavaDoc на русском!
    72

    View full-size slide

  77. Документация
    JavaDoc на русском!
    • Это не психическое заболевание
    73

    View full-size slide

  78. Документация
    JavaDoc на русском!
    • Это не психическое заболевание

    • Не надо этого стесняться
    74

    View full-size slide

  79. Документация
    JavaDoc на русском!
    • Это не психическое заболевание

    • Не надо этого стесняться

    • Не всем проектам и командам надо писать на английском языке
    75

    View full-size slide

  80. Документация
    JavaDoc на русском!
    • Это не психическое заболевание

    • Не надо этого стесняться

    • Не всем проектам и командам надо писать на английском языке

    • От того, что вы пишете с ошибками, лучше не станет никому

    • Посмотрите для кого вы пишите код и документацию
    76

    View full-size slide

  81. Реальная история
    77

    View full-size slide

  82. Logger
    История на реальных событиях
    Задача:

    Подключить корпоративный Logger
    78

    View full-size slide

  83. Logger
    А что такого?
    79

    View full-size slide

  84. Logger
    План
    • Подключаю

    • Запускаю

    • Тестирую

    • ….

    • PROFIT!!

    80

    View full-size slide

  85. Logger
    План
    • Подключаю

    • Запускаю

    • Тестирую

    • ….

    • PROFIT!!

    81

    View full-size slide

  86. Logger
    Но есть же документация?
    82

    View full-size slide

  87. Logger
    Мы погружаемся в Con
    fl
    uence!
    83

    View full-size slide

  88. Logger
    Что делать?
    84

    View full-size slide

  89. Logger
    Едем к нашей единственной зацепке
    85

    View full-size slide

  90. Logger
    Кто автор?
    Пример комментария по блоггеру

    86

    View full-size slide

  91. Logger
    Кто автор?
    Пример комментария по блоггеру

    87

    View full-size slide

  92. Logger
    Итог
    • Сидели 2 часа

    • Подключали даже внутренние чакры

    • Все в итоге заработало
    88

    View full-size slide

  93. Logger
    Итог
    • Сидели 2 часа

    • Подключали даже внутренние чакры

    • Все в итоге заработало

    • Разработчик уволился через 3 месяца
    89

    View full-size slide

  94. Документация
    • Это тяжело, рутинно

    • Это навык, подобный программированию, который надо развивать

    • Помогает разработке и даже вам самим

    • Позволит вам попасть в рай

    • На русском языке тоже можно писать

    • Покажите документацию другу
    90

    View full-size slide

  95. Документация
    • Это тяжело, рутинно

    • Это навык, подобный программированию, который надо развивать

    • Помогает разработке и даже вам самим

    • Позволит вам попасть в рай

    • На русском языке тоже можно писать

    • Покажите документацию другу
    НЕ ОСТАВЛЯЙТЕ СЛЕДОВ
    91

    View full-size slide

  96. Тестирование
    92

    View full-size slide

  97. Тестирование
    Я пишу на статически типизированном языке - у меня уже есть тесты!
    • Тесты бывают разные
    93

    View full-size slide

  98. Тестирование
    Я пишу на статически типизированном языке - у меня уже есть тесты!
    • Тесты бывают разные

    • Мы будем рассматривать unit-тесты
    94

    View full-size slide

  99. Тестирование
    Вопрос в зал
    Зачем нужны тесты?
    95

    View full-size slide

  100. Тестирование
    Тесты - это как документация
    96

    View full-size slide

  101. Тестирование
    Тесты - это как документация
    97

    View full-size slide

  102. Тестирование
    Тесты - это искусство
    • Каждый раз когда вы смотрите на тест - он должен объяснять свою
    необходимость или должен быть удален
    98

    View full-size slide

  103. Тестирование
    Тесты - это искусство
    • Каждый раз когда вы смотрите на тест - он должен объяснять свою
    необходимость или должен быть удален

    • Если тест падает, то он должен не только падать, но и внятно
    "объяснить" почему
    99

    View full-size slide

  104. Тестирование
    Тесты - это искусство
    • Каждый раз когда вы смотрите на тест - он должен объяснять свою
    необходимость или должен быть удален

    • Если тест падает, то он должен не только падать, но и внятно
    "объяснить" почему

    • В assert-ах есть message, а еще есть @DisplayName
    100

    View full-size slide

  105. Тестирование
    Тесты - это искусство!
    Встречайте нашего гостя
    101

    View full-size slide

  106. Тестирование
    Тесты - это искусство!
    Встречайте нашего гостя
    102

    View full-size slide

  107. Тестирование
    Тесты - это подсказка вам
    Тесты помогут вам понять что вы делаете что-то не так
    103

    View full-size slide

  108. Тестирование
    Что посмотреть
    • jUnit5, Mockito, Spock, Power Assert, Truth, AssertJ
    104

    View full-size slide

  109. Тестирование
    Что посмотреть
    • jUnit5, Mockito, Spock, Power Assert, Truth, AssertJ

    • Разные подходы TDD, BDD
    105

    View full-size slide

  110. Тестирование
    Что посмотреть
    • jUnit5, Mockito, Spock, Power Assert, Truth, AssertJ

    • Разные подходы TDD, BDD

    • https://youtu.be/1XoQv5oeAm8
    106

    View full-size slide

  111. Тестирование
    Что посмотреть
    • jUnit5, Mockito, Spock, Power Assert, Truth, AssertJ

    • Разные подходы TDD, BDD

    • https://youtu.be/K-eA9ZIkJBg


    107

    View full-size slide

  112. Тестирование
    Обратная сторона медали
    • Это вторая кодовая база
    108

    View full-size slide

  113. Тестирование
    Обратная сторона медали
    • Это вторая кодовая база

    • Это может существенно тормозить

    разработку
    109

    View full-size slide

  114. Тестирование
    Обратная сторона медали
    • Это вторая кодовая база

    • Это может существенно тормозить

    разработку

    • Плохие юнит тесты иногда хуже, чем их

    полное отсутствие - это ложное 

    чувство защищенности
    110

    View full-size slide

  115. Тестирование
    Обратная сторона медали
    • Это вторая кодовая база

    • Это может существенно тормозить

    разработку

    • Плохие юнит тесты иногда хуже, чем их

    полное отсутствие - это ложное 

    чувство защищенности

    • Особенно, если нет культуры
    111

    View full-size slide

  116. Тестирование
    Помните
    • Не надо бежать писать сразу тесты - если функциональность постоянно
    меняется и вы в процессе активной разработки и творения

    • Тесты - это еще одна документация

    • Тест должен кричать почему он упал

    • Писать тесты - это тоже навык
    112

    View full-size slide

  117. Тестирование
    Кто должен писать unit-тесты?
    113

    View full-size slide

  118. Выводы:
    Нормально делай - нормально будет!
    • Внедряйте Peer review

    Возможно, даже вживую

    • Думайте с позиции пользователя

    Сделали большую фичу - покажите ее кому-то

    • Развивайте в себе навыки документации

    • Меняйте отношение к тестам

    • Повышайте культуру

    Разработка - это не только написание кода
    114

    View full-size slide

  119. В крайне случае - нет
    115

    View full-size slide

  120. Пора прощаться
    • Твиттер: @aarexer

    • Телеграм-блог @aarexer_blog

    • Заметки по Java и программированию: 

    https://github.com/qcha/JBook

    • Подкаст с Углянским:

    https://www.youtube.com/@second_retake
    116

    View full-size slide