Это была напряженная неделя. Несколько сервисов, написанных на устаревших языках (C++ или Java), начали барахлить, и их пришлось реорганизовать в микросервисы, написанные на Go.

Для тех из вас, кто не знает, Go – это язык программирования с упором на параллелизм и простоту. Позвольте мне кратко объяснить оба термина. Параллелизм — это жаргон программирования, обозначающий параллельное выполнение задач. Это то, в чем Go преуспевает. Что бы ни требовалось для параллелизма, будь то ввод-вывод через сокет или ввод-вывод через сокет, Go оптимизирован для эффективного выполнения этой задачи (при условии, что это ввод-вывод через сокет).

Простота – это более общая концепция, согласно которой Go по своему дизайну не загружает множество функций, обычно применяемых в других языках (C++, Java, C#, Python, Rust, … ). Проблема со многими из этих функций заключается в том, что они редко бывают полезны за пределами университетских исследований, в реальном мире, особенно если вы хотите просто довести дело до конца. Основная проблема с этими функциями заключается в том, что они вызывают значительную когнитивную нагрузку, чего следует избегать любой ценой. Я имею в виду, конечно, эти функции могут быть полезны для исследований, таких как разработка алгоритмов или структур данных, но давайте посмотрим правде в глаза, вам это действительно понадобится в реальной жизни? Нет, не совсем. Вы не собираетесь разрабатывать алгоритмы или структуры данных. Вы даже не собираетесь писать код, который очень заботится о том, какие структуры данных или алгоритмы используются. Вероятность (95%+) заключается в том, что вы собираетесь написать код, который извлекает некоторые данные из базы данных и записывает их в http-соединение или аналогичную задачу.

Вывод здесь не должен состоять в том, что другие языки, которые я упомянул, плохи, скорее, нужно всегда использовать правильный инструмент для работы. И если сама работа довольно проста, использование сложного инструмента и изучение новых вещей не только не нужны, но даже вредны, так как мешают доводить дело до конца. Это все равно, что использовать дремель, чтобы открыть консервную банку. Конечно, Dremel — красивый и универсальный инструмент, но он также сложен и требует сложного набора приспособлений, на освоение которых можно потратить годы. Такой инструмент может иметь смысл для какой-то сложной строительной работы. Но не все работают на такой работе, мало кто на самом деле. Так что, если вам просто нужно открыть пару банок (а есть вероятность, что так и есть, согласно статистике), то предпочтительнее использовать простой инструмент с низкой когнитивной нагрузкой, такой как консервный нож.

Однако соблазн сложных инструментов очень опасен:

Многие люди от природы склонны к изучению нового.

И что еще хуже, часто не из-за требования Get Sh*t Done, а скорее из любопытства, интереса или других подобных прихотей. Когда вы пытаетесь все упрощать, это очень опасно. Вы этого не хотите. Если ваши коллеги узнают что-то новое, это признак того, что у вашего бизнеса могут быть проблемы. Достаточно скоро они начнут писать «умный код», нечитаемый для других людей и ужасно отличающийся от идиоматического кода.

Вот почему наш стартап недавно внедрил базовое тестирование, чтобы заблаговременно обнаруживать эти тревожные сигналы и действовать соответствующим образом.

Когда человек сталкивается со стрессом, его защитные силы снижаются. Вот почему мы проводим базовый тест не реже одного раза в неделю.

Стенограмма моего последнего базового теста

командир: «Офицер Боб, начнем. Готов?»
Я: «Да, сэр».
командир: « Назовите свою базовую линию».
Я: «И закрутилась кроваво-черная сложность… Система классов, взаимосвязанных внутри классов, взаимосвязанных внутри классов, взаимосвязанных внутри одного JAR… И красиво просто на фоне тьмы играл высокий белый фонтан».
командир: «Код».
Я: «Код».
командир: «Вы когда-нибудь были в корпорации? Код».
Я: «Кодекс».
командир: «Они держать тебя в кабинке? Код».
Я: «Кодекс».
командир: «Когда вы не выполняете свои обязанности они держат вас на связи? Код».
Я: «Кодекс».
командир: «Упрощенно. ”
Я: “Упрощенный”.
командир: “Каково это удерживать указатель, который гарантированно не равен нулю? Упрощено».
Я: «Упрощено».
командир: «Они научить вас, как использовать типы суммы? Упрощенный.
Я: «Упрощенный».
командир: «Вы долго для того, чтобы ваши типы были параметризованы? Упрощенный.
Я: «Упрощенный».
командир: «Вы мечтаете о том, чтобы интерфейсы и разработчики были взаимосвязаны? Упрощенный".
Я: "Упрощенный".
командир: "Что это? хотите постоянно держать свои данные в своих руках? Упрощено".
Я: "Упрощено".
командир: "В коде упрощено».
Я: «В рамках упрощенного кода».
командир: « Почему бы вам не сказать это трижды: «В упрощенном коде».
Я: «В упрощенном коде. Внутри упрощенный код. В упрощенном коде».
командир: «Мы закончили. Офицер Боб, вы можете получить свой бонус».
Я: «Спасибо, сэр».

Примечание. Мы называем наших скрам-мастеров «командирами». Я думаю, это уместно. Но мы всегда пишем это со строчной буквы «с» из почтения к Командующему, мудрому, который есть и всегда будет только одним, да будет Его царствование долгим, и пусть он избавит нас от сложности как сейчас, так и в Go2.