Как стать автором
Обновить

Роль таланта в программировании

Время на прочтение9 мин
Количество просмотров17K

Долгое время в истории человечества мастерство, талант казались божественным проявлением, чем-то данным свыше. И в этом нет ничего удивительного - для обычного человека работа мастера являлась чем-то сродни магии. Примерно так же воспринималась работа программиста. Считалось, что только способные, одаренные люди могут освоить компьютер. Для непросвещенного человека программист казался волшебником, который творил чудеса под быстрое клацанье клавиатуры.

Работа программиста сильно напоминает работу ремесленника. Поэтому предлагаю в данной статье использовать слово “мастер” как показатель того, что программист дошел до высокого уровня развития в своей профессии.

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

Есть основания полагать, что в ближайшем будущем благодаря популярности нашей сферы уровень конкуренции станет еще более высоким. Происходит очень интересный феномен: огромное количество начинающих специалистов на фоне дефицита экспертов высокого уровня.  Вопрос о том, как достигнуть мастерства возникает не только у каждого разработчика индивидуально, но остро стоит у компаний, которые заинтересованы в развитии специалистов и нуждаются в хороших кадрах. 

Мотивация

Я долгое время думал, что идеального кода в принципе не существует. Так было до тех пор, пока к нам в команду не наняли того самого мифического 10х разработчика. Проект только начинался, и где-то за месяц до этого я создал рабочий прототип API. Первое, что сделал эксперт-программист - за пару дней полностью переписал весь мой код. И сделал это так красиво и изящно, что создавалось ощущение, будто приложение написано не человеком, а каким-то продвинутым искусственным интеллектом. Ничего лишнего, легко читается, расширяем. Даже просмотрев его мельком подсознательно понимался смысл того, что конкретно происходит.

Мы с друзьями стали называть такой идеальный код “академическим”.  После того, как я увидел академический код, появилось жгучее желание научиться писать так же; я начал замечать неудовлетворенность собой. Мне стало интересно, как происходит процесс развития экспертности, поэтому решил изучить вопрос более подробно. Основной вопрос заключался в том, почему одни разработчики становятся выдающимися, а другие остаются серыми посредственностями, и можно ли вырваться из категории вторых в категорию первых.

Достижимо ли мастерство? 

Оказывается, не во всех сферах возможно стать мастером. Для этого должны выполняться несколько условий.

  1. Быстрая обратная связь. 

Проводились исследования, где специалистов с многолетним опытом в сфере политологии, финансовой аналитики просили дать прогнозы будущих событий. Как выяснилось, практически все их утверждения работали хуже, чем бросок монетки. Опыт и авторитет “специалиста” не имел никакой корреляции с точностью даваемых им прогнозов[1].

Баскетболисты выполняют броски мяча тысячи раз в день, и сразу после броска видят результат. Если бы они бросали мячи сегодня, а узнавали результат на следующей неделе, их прогресс был бы гораздо более медленным. У политологов ситуация еще хуже. Исторические события происходят не так часто, и в настолько сложных системах как общество большое влияние имеет простой рандом. Слишком мало таких циклов как сделать прогноз, получить обратную связь, сделать вывод, и достижение экспертности в этих сферах сопряжено максимальными с трудностями.

  1. Паттерн, не зависящий от рандомных факторов. Возможность выполнять что-то осознанно, подмечая малейшие детали.

Человеку свойственно искать паттерны даже там, где их нет. Был проведен опыт над мышами и людьми[2]. Мыши дали две кнопки - красную и зеленую. С вероятностью 80 процентов загоралась зеленая, с вероятностью 20 процентов - красная. Если мышь нажимала кнопку, которая загорится следующей, она получала сыр, если неверную - удар током. Мышь быстро понимала, что выгодней нажимать только зеленую кнопку и смириться с 80 процентной вероятностью выигрыша. Человек же искал паттерны - чаще всего выбирал зеленую, но иногда, пытаясь предсказать, красную. В итоге результат человека оказался значительно хуже, чем у мыши: правильных ответов оказалось лишь 68 процентов.

Программирование идеально подходит по этим основным критериям. Каждый раз, когда пишется код, сразу видно, работает он или нет. Разумеется, читатель может возразить, что правильность выбора некоторых архитектурных решений становится очевидным лишь через долгое время. Действительно, поэтому при проектировании архитектуры приложения очень важна квалификация специалиста, который принимает решение. Правильность выбора архитектурных решений не имеет мгновенной обратной связи, и поэтому набираться опыта в проектировании ПО приходится много лет.

Трудолюбие VS талант

Многие компании при поиске специалиста используют слово “талант”. В переводе на менее замысловатый язык имеется в виду, что компания ищет человека, который будет безупречно справляться со своей работой. Интересно то, что последние исследования по данному вопросу говорят, что таланта как такового не существует. Также опубликовано намного больше исследований, утверждающих, что нет генетически заданного “таланта”, чем утверждающих обратное.

“Талант” всегда сопровождается интенсивной и осознанной работой. Для шахматистов существует так называемое правило 10 лет. Его суть заключается в том, что ни одному из шахматистов не удавалось достичь значительного успеха ранее, чем за 10 лет осознанной тренировки. В случае программирования данное правило работает не так явно, однако сложно поспорить с тем, что программисты с большим опытом, как правило, пишут более хороший код, чем программисты с меньшим опытом.

Можно предположить, что выдающиеся разработчики просто имеют более высокий уровень IQ, чем обычные. Некоторая корреляция, возможно, действительно есть, но все не так однозначно. Для целого ряда профессий были проведены исследования того, означает ли высокий IQ, что работник будет справляться со своими обязанностями лучше других. Согласно наблюдениям, высокий уровень IQ с некоторой точностью показывает, как человек будет справляться с незнакомыми задачами. В случае, если человек занимается своей работой несколько лет, корреляции между IQ и качеством работы выявлено не было[3] (disclaimer от автора: почему-то кажется, что при совсем больших разницах, например между 80 и 140 отличие все-таки будет).

В исследовании под названием “Роль осознанной практики в обеспечении блестящих результатов» Андерса Эрикссона[4] описывается эксперимент, где обучающихся музыке разделили на три группы по уровню игры на скрипке: талантов, среднячков и отстающих. Интересным оказалось то, что во всех трех группах количество занятий скрипкой в день на момент исследования было примерно одинаковым. Однако у “талантливых” скрипачей кроме того что, они имели больше накопленного опыта за счет регулярных занятий в прошлом, тренировка сопровождалась максимальной концентрацией. Если в группе из лучших скрипачей учебу воспринимали как высокоинтенсивный труд, где необходимо выложиться на максимум, то в группе из более слабых скрипачей отношение к урокам было гораздо более легкомысленное, хотя все знали, насколько важными являются занятия.

Итак, попробуем сформулировать основные факторы влияющие на достижение мастерства.

1. Учиться у мастеров, обучать других

Человеческая жизнь слишком коротка. Невозможно совершить все ошибки, сделать выводы и пойти дальше. Став учеником мастера можно избежать возможных ошибок и значительно сократить путь. Это не обязательно должен быть ментор, могут быть высококвалифицированные коллеги, которые подскажут на код ревью, что лучше писать одним образом, а не другим.

Я часто замечал, что хорошие программисты умеют объяснять сложные вещи простым языком. Причем невозможно понять, что здесь причина, а что следствие. Возможно, это работает в обе стороны: умение ясно выражать свои мысли является большим бонусом для развития. С другой стороны, с умением хорошо программировать непроизвольно вырастет навык четко и понятно изъясняться.

Имеет смысл стать ментором для тех, кто знает меньше вас.  Став ментором, можно развить необходимые навыки для эффективной коммуникации, а также узнать много нового, потому что новички часто задают неожиданные вопросы. Если вам в начале пути кто-то сильно помог, помогите и вы другим, пусть эта “карусель” взаимопомощи и дальше крутится: от этого выиграют все. Вы взращиваете не конкурентов, а таких коллег, с которыми будет приятно работать.

2. Время — лучшее лекарство

Казалось бы, достаточно проработать 10 - 15 лет, и ты рано или поздно станешь выдающимся мастером своего дела. Однако это происходит не всегда. Иногда бывает очень сложно отличить одного человека, который имеет опыт работы 5 лет от другого человека, у которого опыт 15 лет.  Можно предположить, что это происходит в силу того, что в сфере айти всё слишком быстро меняется, и знания, полученные 10 лет назад не актуальны. Но это происходит не только в айти. В некоторых сферах годы опыта играют злую шутку.  Известен факт: опытные врачи с меньшей вероятностью выдают правильный диагноз для редкой болезни, чем вчерашние студенты-медики[5]. Опытные специалисты становятся заложниками своего опыта; они привыкли, что чаще всего пациенты при определенных симптомах имеют конкретную болезнь, и вряд ли предположат что-то экзотическое. Похожая ситуация у программистов, застрявших в устаревших технологиях и полностью потерявших связь с современной индустрией.

Постоянная работа в зоне комфорта приносит больше вреда, чем пользы. Профессор Школы бизнеса Мичиганского университета Ноэль Тичи утверждает, что есть три зоны: зона комфорта, зона учебы и зона паники. Прогресс присутствует только при работе в зоне учебы. В зоне комфорта возникает деградация навыков. В зоне паники работа возможна, но вызывает быстрое выгорание, и длительное пребывание в этой зоне невозможно. Развитие специалиста – это марафон, а не спринт, поэтому лучше работать в зоне учебы, где есть простые вещи, которые уже знакомы, но также присутствуют качественно новые задачи, которые заставят что-то учить.

Основная сложность заключается в том, что эти зоны постоянно меняются и легко пропустить тот момент, когда то, что, раньше находилось в зоне учебы теперь находится в зоне комфорта. Требуется постоянная рефлексия на эту тему для того, чтобы правильно выделить зону учебы.

3. Осознанная практика

Осознанной практикой называется процесс, когда каждый раз думаешь над тем, как можно улучшить качество своей работы. При осознанной практике необходимо постоянно и постепенно повышать сложность выполняемых задач. Как правило, хорошие специалисты выкладываются максимально при решении даже самых простых задач с целью сделать уже знакомую работу хотя бы чуточку лучше. Возвращаясь к условному сравнению технических навыков программистов с 5 и 15 годами опыта, можно с уверенностью сказать, что разница была бы существенна, если каждый из них сознательно развивался, учился, а не находился долго в зоне комфорта.

Значит ли это, что нужно забыть про остальную жизнь, родных, друзей, хобби и оставить только работу и учебу? Вовсе нет. Осознанная практика возможна лишь ограниченное количество времени до тех пор, пока от усталости не теряется концентрация. Наверное, каждый замечал, что сосредоточенная работа в течение 4-х часов гораздо более эффективна, чем восьмичасовая с отвлечениями на всё ненужное. С большим количеством сна и отдыха, концентрация на следующий день будет, вероятно, такой же высокой, как и сегодня.

Некоторые специалисты, получив задачу, несколько дней не могут сосредоточиться, а потом в последний момент перед дедлайном принимаются за работу и приносят первый получившийся результат. Хорошие же специалисты работают каждый день примерно одинаково сосредоточенно, без рывков и панических атак. Подобная работа предсказуема, качественна, и с большей вероятностью приведет к ожидаемому результату.

4. Окружение

Так уж получается, что в основном мы проводим время за работой. И важно, чтобы те, с кем мы общаемся по работе, были профессионалами, энтузиастами своего дела. Важно, чтобы руководство также было заинтересовано в вашем развитии. 

Для осознанной практики необходимы адекватные сроки выполнения задач, а также квалифицированные коллеги, с которыми можно обсудить то или иное решение. Сложно развиваться тогда, когда задачи сплошным потоком идут одни за другим, и каждую из них нужно было сделать еще вчера. Из-за огромного количества задач с минимальными сроками не будет возможности каждую сделать хорошо, не говоря уже об идеальном выполнении.

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

Итог

Современная наука утверждает, что генетика, IQ, талант, скорее всего оказывают минимальное влияние на то, станет ли человек незаурядным специалистом или нет. Лично мое мнение заключается в том, что возможно есть некая склонность к выполнению определенного вида работ, и это выражается в том, нравится ли нам чем то подобным заниматься или нет. Но никакая склонность не гарантирует того, что получится достигнуть мастерства в определенной сфере. В истории есть много примеров, когда более одаренные дети не добивались ничего, а ничем не примечательные вырастали и меняли весь мир. Поэтому, вероятно, шанс достичь мастерства есть у каждого, но это потребует действительно огромного количества труда, подходящего окружения, и много лет практики.

Если у Вас есть интерес к дальнейшему изучению данной темы, я хотел бы порекомендовать почитать книги, материалы, которые были использованы при работе над данной статьей: 1) Джефф Колвин “Талант ни при чем! Что на самом деле отличает выдающихся людей?”, 2) Роберт Грин “Мастер игры”, 3) Чед Фаулер “Программист-фанатик, а  также посмотреть замечательное видео на канале Veritasium  The 4 things it takes to be an expert

Дополнительная информация по теме:

  1. Philip E. Tetlock. Expert Political Judgment. How Good Is It? How Can We Know?.

  2. Catherine Rampel. Forecasting Is for the Birds (and Rats).

  3. “Doll and U. Mayr, «Intelligence and Achievement in Chess — A Study of Chess Masters», Psychologische Beiträge 29 (1987), pp. 270-289.”

  4. “К. Anders Ericsson, Ralf Th. Krampe, and Clemens Tesch-Romer, «The Role of Deliberate Practice in the Acquisition of Expert Performance», Psychological Review”

  5. “N. К. Choudhry, R. Н. Fletcher, and S. В. Soumerai, «Systematic Review: The Relationship Between Clinical Experience and Quality of Health Care», Annals of Internal Medicine 142 (2005), pp. 260-273.”

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Какое ваше мнение, первопричина становления мастером в прирожденном таланте или нет?
25.98% Талант33
74.02% Другие факторы94
Проголосовали 127 пользователей. Воздержались 8 пользователей.
Теги:
Хабы:
Всего голосов 14: ↑13 и ↓1+12
Комментарии52

Публикации