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 Slide

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

    View Slide

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

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

    • Пишу на Java

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

    • Тимлид

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

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

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

    View Slide

  4. 4

    View Slide

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

    View Slide

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

    • Ловим

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    ERROR: Can’t decrypt by ….
    10

    View Slide

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

    ERROR: Can’t decrypt by ….

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

    View Slide

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

    ERROR: Can’t decrypt by ….

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

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

    View Slide

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

    View Slide

  14. 14

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    https://youtu.be/hjVmyU7N8Jo

    Канал UNИX

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

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

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

    • Менеджеры

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

    View Slide

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

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

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

    • Менеджеры

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    Канал UNИX

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

    View Slide

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

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

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

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

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

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

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

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

    View Slide

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

    View Slide

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

    37

    View Slide

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

    View Slide

  39. ДА
    39

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

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

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

    Мой сервер
    45

    View Slide

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

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

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

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

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

    46

    View Slide

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

    View Slide

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

    View Slide

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

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

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

    View Slide

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

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

    View Slide

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

    View Slide

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

    View Slide

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

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

    View Slide

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

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

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

    View Slide

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

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

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

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

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

    View Slide

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

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

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

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

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

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

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

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

    View Slide

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

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

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

    View Slide

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

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

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

    View Slide

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

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

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

    View Slide

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

    View Slide

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

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

    View Slide

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

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

    View Slide

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

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

    View Slide

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

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

    View Slide

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

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

    View Slide

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

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

    Было:
    63

    View Slide

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

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

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

    View Slide

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

    65

    View Slide

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

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

    View Slide

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

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

    View Slide

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

    View Slide

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

    69

    View Slide

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

    70

    View Slide

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

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

    View Slide

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

    View Slide

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

    View Slide

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

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

    View Slide

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

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

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

    View Slide

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

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

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

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

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

    View Slide

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

    View Slide

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

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

    View Slide

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

    View Slide

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

    • Запускаю

    • Тестирую

    • ….

    • PROFIT!!

    80

    View Slide

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

    • Запускаю

    • Тестирую

    • ….

    • PROFIT!!

    81

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    86

    View Slide

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

    87

    View Slide

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

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

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

    View Slide

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

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

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

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

    View Slide

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

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

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

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

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

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

    View Slide

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

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

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

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

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

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

    View Slide

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

    View Slide

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

    View Slide

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

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

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

    View Slide

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

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

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

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

    View Slide

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

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

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

    View Slide

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

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

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


    107

    View Slide

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

    View Slide

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

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

    разработку
    109

    View Slide

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

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

    разработку

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

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

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

    View Slide

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

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

    разработку

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

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

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

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

    View Slide

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

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

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

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

    View Slide

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

    View Slide

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

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

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

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

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

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

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

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

    View Slide

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

    View Slide

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

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

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

    https://github.com/qcha/JBook

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

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

    View Slide