- PVSM.RU - https://www.pvsm.ru -
Продолжение перевода [1] статьи Джона Оллспоу [2] о личных качествах ведущих разработчиков.
Вместо этого они рассуждают, основываясь на наблюдениях, и предлагают варианты решения найденной ими проблемы. Один опытный менеджер сказал мне: «Никогда не приходи к своему начальнику с жалобами, если у тебя нет готового решения проблемы. И лучше, если решений будет несколько». Но даже если у вас не получилось найти ни одного решения — это уже лучше, чем жаловаться просто так.
Они понимают, что любые технические решения неоднозначны — мир не чёрно-белый. Они быстро могут определить, в каком случае удачное решение сработает, а в каком нет. Они знают, что невозможно быть результативным и педантичным одновременно (принцип ETTO [3]), знают, что приходится выбирать между качеством работы и скоростью, а проблемы, которые перед ними стоят, нужно было решить ещё вчера, или они вообще не имеют окончательного решения.
Они знают, что не вся их работа идеальна, но их это устраивает — они стремятся явно выделить идеальные и неидеальные части проекта. И потом, спустя некоторое время, когда изначальная архитектура упрётся в свой потолок расширяемости, они не будут с сожалением вспоминать о недальновидных решениях в прошлом, они не будут со злостью и неприязнью [4] оценивать всё задним числом, бросаясь фразами типа «Эти идиоты с самого начала делали всё неправильно!», или «Они схалтурили!», или «Я ЖЕ ГОВОРИЛ им, что это не сработает!». Вместо этого они скажут: «До сих пор старый код отрабатывал своё. Но мы знали, что рано или поздно нам придётся всё изменить, и, кажется, это время пришло. За работу!».
Известно немало лаконичных высказываний о таких компромиссах, и зрелые разработчики знают, что не всегда стоит доверять этим полным философии изречениям (моих слов это тоже касается):
Вкратце по компромиссам: все срезают углы, в любом проекте [и в этом переводе :) рад любым исправлениям!]. У незрелых разработчиков это вызывает отвращение, а зрелые намеренно, в самом начале проекта, обозначают такие углы, допускают их и считают это частью хорошего дизайна.
(Сюда же: Твой код может быть изящным, но мой, сука, работает [7])
У вас проблемы, если кто-то не хочет понимать, что его код (или инфраструктура) может повлиять на другие части системы или бизнеса, и оправдывает это тем, что он чётко следует всем формальностям. Прикрывая свою задницу [8], вы неявно сообщаете окружающим, что готовы пожертвовать другими (своей командой? компанией? обществом?) под тем лишь предлогом, что в вашей работе нет никаких недостатков. Зрелые инженеры не уходят в сторону и берут возложенную на них ответственность. Если они понимают, что у них недостаточно полномочий, чтобы быть отвественными за свою работу, они ищут пути, чтобы это исправить.
Пример самовыгораживания: «Я не виноват, что у них всё сломалось. Что-то они сделали неправильно. У меня всё по спецификации, а если в ней были ошибки — я здесь не при чём».
Как правило, за сложные проекты ответственность несут сразу несколько человек. В любом проекте все: проектировщики, руководители, инженеры по эксплуатации, разработчики и ребята из отдела развития бизнеса ответственны за свои задачи. И зрелые разработчики осознают, что эти задачи, как и восприятие целого, у всех могут быть разными. Это позволяет им быть эффективными в своих делах. Умение сопереживать — значит, умение поставить себя на место другого человека в проекте и учитывать его точку зрения в своей работе.
В инженерии не избежать конфликтных ситуаций, и недовольство ими, вместо их принятия, как составляющей успеха, — признак незрелого разработчика.
Нет, диплом по философии получать не обязательно, но ментальные ловушки это то, что в определённый момент может затормозить карьерный рост разработчика. Большинство зрелых разработчиков, с которыми я знаком, может и не понимают деталей того, как возникают ловушки, или как с ними бороться, но они понимают, что, как и все люди, они могут в них попасться.
Как правило, разработчикам ежедневно приходится обрабатывать большие объёмы новой информации. Но, попав в одну из ловушек, мы начинаем интерпретировать данные таким образом, что наши выводы противоречат реальному положению вещей. Это может неожиданным образом повлиять на всю последующую работу и итоговый результат.
На Википедии представлен обширный список [10] ловушек. Разработчики подвержены в основном следующим:
Кроме этих ловушек есть немало других, и все настолько интересные, что я могу утонуть в их изучении. Категорически рекомендую ознакомиться с нимип подробнее, если вам интересно увеличить свою эффективность.
Эти заповеди были описаны в книге «Психология компьютерного программирования [16]», написанной в 1971 году. Несмотря на возраст, слова до сих пор актуальны. Я не читал саму книгу, но нашёл пост [17] о ней в блоге Стивена Уайетта Буша [18]. Стивену её посоветовал перед смертью его отец. Вот эти заповеди:
Я уже почти не слежу за исследованиями в области приобретения знаний, но в размышлениях о развитии индустрии от этой темы уйти сложно. Одна из основных работ по этой теме — доклад [20] Стюарта Дрейфуса и Хуберта Дрейфуса «Пятиуровневая модель [21] умственных процессов, задействованных в целенаправленном получении навыков», в котором они описали характеристики разных уровней компетенции.
В докладе говорится:
Новички действуют, исходя из правил и знаний. Они всё обдумывают и анализируют, поэтому они медленно работают, выбирают и принимают решения.
(то есть, новички сильно зависимы от частных законов)
Эксперты действуют интуитивно, исходя из зрелого, целостного проверенного понимания, без сознательного размышления. В этом весь смысл опыта. Они не рассматривают проблемы и решения по отдельности. Они действуют.
(то есть, эксперты действуют по обстоятельствам)
Я не совсем согласен с таким чётким разделением уровней. Мне кажется, на самом деле, всё несколько более размыто. Но, тем не менее, даже такая упрощённая классификация может быть полезной.
От переводчика: не могу найти в интернете интересную работу Н. Н. Непейводы «Уровни знаний и умений», если кто найдёт, выложите в комментариях, пожалуйста.
Отношение людей к технологиям и техническим решениям не менее важно, чем подробности об этих технологиях. Зрелые разработчики знают это и подстраиваются соответствующим образом. Умение сопереживать помогает им понять, как их коллеги относятся к техническим решениям, даже если им самим не так просто выразить своё отношение.
Доверие людей к программам, архитектурам или шаблонам в большой степени зависит от прошлого опыта, который может привести как к положительному, так и к отрицательному отношению. Если вам приходилось работать с интернет-магазином на mod_perl, который постоянно падал в совершенно загадочых обстоятельствах, то неудивительно, что и в другой компании вам не захочется с работать с этой технологией даже в абсолютно иных условиях. Вы просто знаете, что с mod_perl связаны большие проблемы, и будете избегать его использования в любом случае.
Зрелые разработчики понимают это, когда делают выбор в пользу технологии с подобным, пускай абсурдным, багажом. Убедить группу использовать инструменты и шаблоны, которые их не устраивают, — непростая задача. Принцип «для каждой задачи — свой инструмент» должен принимать во внимание и этот, не всегда количественный, параметр.
В качестве примера того, как эмоции заставляют людей принимать решения, почитайте какой-нибудь холивар [22] о чём угодно.
Эту цитату обычно приписывают Гарри Трумэну, но у меня такое чувство, что это слова какого-то иезуитского священника. Так или иначе, ещё один признак того, что вы работаете со зрелым инженером, — это если он ценит успех проекта выше, чем возможную личную выгоду, которую он может получить за работу над этим проектом.
Это идея сделает нас свободными, и как только все поймут и усвоят её, расцветёт мир прогресса и передового — инженеры не будут озабочены приравниванием своей работы к личному карьерному успеху.
Мне повезло, что я работаю cо зрелыми инженерами в Etsy, для меня это очень почётно. Наша отрасль ещё молода, и, несмотря на то, что нам ещё многому предстоит научиться у инженеров из других областей, я думаю, у нас есть некоторое преимущество. Интернет неразрывно связан с распространением информации, и, если мы хотим вырасти в настоящую отрасль знаний, в дисциплину, мы должны постоянно обращать внимание на то, что значит быть „ведущим“ и „зрелым“ разработчиком.
Спасибо Серёге и Ренате за помощь в переводе. Спасибо моим наставникам, Андрею и Сергею, которые каждый день показывают мне, что значит быть „ведущим“ и как им быть.
Автор: skovorodkin
Источник [24]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/razrabotka/27946
Ссылки в тексте:
[1] перевода: http://habrahabr.ru/post/169739/
[2] Джона Оллспоу: https://twitter.com/allspaw
[3] принцип ETTO: http://www.namahn.com/resources/interview/erik-hollnagel-birds-do-it
[4] неприязнью: http://talkingshrimp.com/ways-be-passive-aggressive-essential-pocket-guide
[5] писал: http://www.kitchensoap.com/2008/08/24/everything-isnt-about-the-knuth-quote/
[6] отсюда: http://omniti.com/seeds/dissecting-todays-internet-traffic-spikes
[7] Твой код может быть изящным, но мой, сука, работает: http://omniti.com/seeds/your-code-may-be-elegant
[8] Прикрывая свою задницу: http://en.wikipedia.org/wiki/Cover_your_ass
[9] ментальных ловушках: http://habrahabr.ru/post/149408/
[10] список: http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D0%BE%D0%B3%D0%BD%D0%B8%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D1%85_%D0%B8%D1%81%D0%BA%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9
[11] Искажение в свою пользу: http://en.wikipedia.org/wiki/Self-serving_bias
[12] Искажение авторства: http://en.wikipedia.org/wiki/Fundamental_attribution_error
[13] Ретроспективное искажения: http://en.wikipedia.org/wiki/Hindsight_bias
[14] Отклонение в сторону результата: http://en.wikipedia.org/wiki/Outcome_bias
[15] Ошибка планирования: http://en.wikipedia.org/wiki/Planning_fallacy
[16] Психология компьютерного программирования: http://www.amazon.com/exec/obidos/ASIN/0932633420
[17] пост: http://blog.stephenwyattbush.com/2012/04/07/dad-and-the-ten-commandments-of-egoless-programming
[18] Стивена Уайетта Буша: https://twitter.com/wyattdanger
[19] Лаборатории реактивного движения: http://ru.wikipedia.org/wiki/%D0%9B%D0%B0%D0%B1%D0%BE%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D1%80%D0%B5%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B4%D0%B2%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F
[20] доклад: http://www.dtic.mil/cgi-bin/GetTRDoc?AD=ADA084551&Location=U2&doc=GetTRDoc.pdf
[21] модель: http://habrahabr.ru/post/80698/
[22] холивар: http://lurkmore.to/%D0%A5%D0%BE%D0%BB%D0%B8%D0%B2%D0%B0%D1%80
[23] мышления: http://www.braintools.ru
[24] Источник: http://habrahabr.ru/post/170515/
Нажмите здесь для печати.