Марсоход или что отличает крутых инженеров
За свою карьеру я увидел много инженеров, наблюдал, как они растут, меняют специализации, становятся лидерами и руководителями. Также я провел множество интервью — как технических, так и в роли нанимающего менеджера или бар-рейзера. Я видел людей, которые оптимизируют микросекунды, и тех, кто строит масштабные корпоративные решения. Другими словами, у меня сложился достаточно широкий кругозор в этой сфере. Но, возможно, более важно то, что я наблюдал за процессом развития этих людей.
В какой-то момент я задался вопросом: как отличить классных инженеров от остальных? В чем заметная разница между технарями с большим потенциалом и людьми, которые работают с девяти до шести? Иначе говоря, между инженерами, которые становятся «go-to-person», двигают свои команды и индустрию вперед, и теми, кто просто разгребает задачи в Jira.
И я нашел для себя ответ: это любопытство. Конечно, это не единственный критерий, но я постараюсь раскрыть свою мысль. Любопытство, на мой взгляд, — это качество, которое я видел у всех, кого могу назвать классными инженерами.
Что значит быть любопытным?
Мне кажется, это значит постоянно задавать себе вопросы и чувствовать себя некомфортно, если на эти вопросы нет ответов. Это когда ты ищешь способ копать глубже, несмотря на обстоятельства. Это не про бесконечный кругозор, скорее про глубину, про детали, про разбор. Это когда ты не можешь уйти домой пока не разберешься в баге, потому что что-то пошло не так и ты не можешь оставить это непонятым.
Мне нравится пример с линуксоидами. Помните стереотип о них с красными глазами? Я сам когда-то был таким, когда интернет еще был по диалапу, сидел до утра, собирал Gentoo и Slackware из исходников, возился с конфигами, поднимал X-ы и FTP в локальной сети. А на следующий день в IRC мерились длиной конфигов. Все это делалось потому, что было интересно, как все устроено, хотя практического смысла в этом не было.
Однажды я работал в инвест-банке и был в командировке в Лондоне. Были майские праздники, у меня самолет в 6 утра. За предыдущий день поспал часа три, в час ночи уже был на ногах. В общем, я не выспался. Примерно к 10 утра я уже был в офисе и весь день работал. В 6 вечера собирался уходить, и тут инцидент на продакшене. В системе, в которой я не особо эксперт. Тем не менее она в моей зоне ответственности. Для меня все закончилось в 7 утра… Мой непосредственный руководитель был со мной на телефоне все это время, не давал уснуть и, что самое важное, задавал правильные вопросы. Сейчас, вспоминая тот случай, я задумываюсь о нашей мотивации. Мы могли просто перезапустить сервис, и это исправило бы ситуацию. Но, к тому моменту я не спал уже больше суток, у моего руководителя были выходные, и вряд ли это входило в его планы. Но мы оба сидели до победного, пока не нашли основную причину инцидента. Было ли это из-за чувства ответственности? Наверное, правильнее сказать, что да, но на самом деле — нет. Единственная причина: нам было интересно, почему что-то пошло не так, как задумано!
Ответственность и любопытство
Как мне кажется, часто в нашей работе люди путают ответственность и любопытство. Люди, которые работают со мной, знают, как высоко я ценю ответственных людей и ответственный подход к делу. Но я все больше убеждаюсь, что одно скрывается за другим. Мы думаем, что этот инженер ответственный: не бросит систему, когда что-то горит, разберется прежде чем что-то использовать, раскопает детали и поправит, закопается в процессы и настроит в команде. Но в реальности этими людьми движет любопытство. Им просто в кайф во всем этом разобраться. А мы, как руководители, вешаем на них ярлык — «ответственный». Есть, конечно, и исключительно ответственные люди, но в моем случае статистика на стороне любопытных.
Когда я еще работал в инженерной роли и менеджерских обязанностей почти не было, в моей промоушен форме руководитель написал, что я очень ответственный. Чушь полная! Мне было просто в кайф разбираться в том, что я делал. Конечно, я ответственный, но не это заставляло меня в выходные что-то изучать, оптимизировать, разбираться в странностях. Мне было интересно, как сделать алгоритм, который за микросекунды считает тысячи опционов, как пофиксить GC на системе, которая генерирует терабайты мусора с невероятным рейтом. Все это было гораздо большим стимулом, чем «ответственность».
Врожденное любопытство и воспитание
Вы замечали, что у детей любопытство в крови? Это врожденная функция. Все эти вопросы: почему светит солнце, почему небо голубое и так далее. И мы, взрослые, единственные, кто убивает это любопытство в детях. «Я занят», «Давай завтра», «Потому что».
Мне кажется, хорошим ответом было бы: «Я не знаю, пойдем вместе узнаем!». Даже если вы знаете ответ на вопрос. Ведь любопытство питается открытиями, и от процесса поиска этих открытий. Когда любое незнание превращается в интересное путешествие. Вопросы становятся сложнее с возрастом, но от этого они только интереснее.
Развитие любопытства у инженеров
Можно ли развивать любопытство у инженеров? Я уверен, что можно и нужно. Подходы те же самые, что и с детьми. Можно разобраться, а можно просто исправить следствие и забыть. Можно понять, как работает JVM, компьютер или инструмент, а можно сказать, что достаточно использовать Spring.
Почему это важно, кроме того что это люди, которые по ночам собирают Gentoo и фиксируют баги.На самом деле эти люди двигают проекты, развивают команды, двигают индустрию вперед. Без этих людей прогресс был бы невозможен. Человек с низким уровнем любопытства, наткнувшись на что-то необычное, скорее всего, пропустит это, не задав важных вопросов.
Исторические решения и «красивые» решения
Стандартная ситуация: приходит новый человек в проект, видит, что что-то сделано по-особенному, и логичный вопрос «почему так?». И скучный ответ: «так исторически сложилось». Большинство удовлетворятся этим ответом и пойдут дальше. Но может быть, за этой странностью скрывается гора корнер кейсов, 20 лет истязаний и 100 лет одиночества. Может, есть причины, которые нужно знать.
Если мы хотим, чтобы проект и команда двигались вперед, нужны люди, которые задают вопросы и ищут ответы. Люди, которые видят кривые решения, портянки кода, и говорят: «должен быть более правильный путь», и ищут и исправляют. Для них это процесс поиска «красивого» решения. Возможно, именно такие люди создали дизайн-паттерны. Они смотрели на код, кровь шла из глаз, и они искали «красивое» решение. Так фольклор и сложился шаг за шагом.
Знание внутренностей и глубокое погружение
Современный тренд, что не нужно знать внутренности и понимать, как что работает. Достаточно знать, как пользоваться Spring или SuperNew.js, и этого достаточно для работы. Я считаю, это полная ерунда. Так можно думать, если вы собираете лего. Но вы же не думаете, что вашу машину проектируют такие инженеры? Вы же не думаете, что такие инженеры строят мосты, дома, ракеты? Убежден, что мы должны разбираться на достаточном уровне во внутренностях, должны понимать базовые вещи вроде структур данных и алгоритмов, должны понимать, как работают базовые компоненты — компьютер, сеть и так далее.
В мире, где есть StackOverflow, можно на гуглить и скопипастить, теряется момент исследования, погружение в суть. Люди переживают, что ChatGPT их заменит, что программисты больше не нужны. Мне кажется эта группа людей сильно пересекается с группой «Лего». Возможно, стоит задуматься.
Минусы любопытства
Есть и минусы у любопытных инженеров. Термин Resume Driven Development описывает ситуацию, когда ради интереса втаскивают решения в проект. Конечно, это не инженерный подход. Инженеры должны принимать взвешенные решения, основанные на фактах и анализе, а не просто потому что интересно. Для интереса можно и в сторонке поиграться. Если варианты равны, я бы и сам выбрал более интересную технологию. Главное — не обманываться.
Когда проекту необходимо деливерить, любопытные могут уйти в долгое путешествие по поиску идеального решения, что часто отнимает много времени. Важно подруливать и сохранять быстрый цикл: попробовали, получили фидбэк, исправили, попробовали снова. Иначе можно уйти очень глубоко и надолго.
Склонность к неправильной оценке сроков — еще одна проблема. Иногда приходится применять коэффициент к оценке инженера, чтобы попадать в сроки. Во время работы много интересного мимо проносится, и инженеры отвлекаются. Это проблема переключения контекста. К сожалению, любопытство невозможно запланировать в календаре. Из-за этого часто страдает баланс работы и личной жизни, что нередко приводит к выгоранию.
Роль руководителей
Руководители таких инженеров должны находить баланс между пользой для проекта и интересом сотрудника. Я убежден, что любопытный сотрудник приносит больше пользы на дистанции. Поэтому я сторонник того, чтобы давать таким людям больше пространства. Именно в этих условиях они делают прорывы, которые тащат всех окружающих. Не стоит запирать их в сроки и деливери, иначе будет как с детьми, которым говорят: «не сейчас, я занят».
Заключение
Мы — везунчики. Не так много видов деятельности, где любопытство может быть раскрыто в полной мере. Для нас любопытство — это как топливо. Это то, что двигает нас вперед. Сложно представить, как можно продолжать движение без любопытства. Вдумайтесь, нет ничего невозможного для понимания или изучения. Вспомните Кона Коливаса — австралийского анестезиолога, который написал новый шедулер для ядра Linux. Анестезиолог из Австралии!
Поэтому у меня есть предложение: подумайте о чем-то, что вам казалось сложным или непонятным. Например, как работает BIOS, компилятор, дебаггер или Gmail. Попробуйте разобраться, может, не в супер деталях, но сделайте для себя открытия. Напишите свой мини компилятор. Уверен, у вас откроются инсайты, и это даст вам топлива для дальнейших исследований.
The mind that opens to a new idea never returns to its original size.