Что отличает лучших разработчиков от толпы: 10 важных черт

Что отличает лучших разработчиков от толпы: 10 важных черт

1 мая 2023 г.
<цитата>
  • Мы прилагаем все усилия, чтобы улучшить наши технические и социальные навыки. Но наши черты характера, наш склад ума — мы принимаем как должное. Врожденная, фиксированная часть того, кто мы есть. Таким образом, мы позволяем ему работать на автопилоте.

* Такой образ мышления вреден. Для успешной карьеры разработчика программного обеспечения важно не только ваше мышление (возможно, даже больше, чем ваши навыки), но оно также находится под вашим контролем.

* Настоящие старшие разработчики признают, что черты характера податливы, осознают свое мышление и намеренно работают над ним. Это суперсила, которая выделяет их из толпы и ускоряет их карьеру.

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

3 вещи, которые вам нужны, чтобы добиться успеха в качестве разработчика программного обеспечения

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

Технические навыки

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

Тем не менее, одни только технические навыки не помогут вам в профессиональной командной настройке. Вот почему вам также нужны социальные навыки.

Навыки межличностного общения

Чтобы иметь возможность работать над крупными коммерческими проектами, вам необходим надежный набор социальных навыков: работа в команде, общение, управление проектами и планирование, удаленная работа, самоорганизация, обучение, личная продуктивность и тому подобное.

Многие из нас находят эти навыки менее интересными, чем технические, и поэтому мы часто пренебрегаем ими — так что они уже могут выделить солидных, профессиональных разработчиков из толпы. Но, по крайней мере, мы признаем их.

Однако есть и третья категория, которая не менее важна, но остается незамеченной почти всеми, даже хорошими в других отношениях разработчиками.

Мышление

Настроение чем-то похоже на межличностные навыки, но "навыки", из которых оно состоит, — это более фундаментальные, ключевые черты: любознательность, терпение, эмпатия, упорство, адаптивность и т. д.

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

Это делает нас слепыми к огромной и важной части нашего набора навыков и может сильно повредить нашему прогрессу.

[Чтобы получить еще более полное представление о том, как продвигаться по карьерной лестнице профессионального разработчика, ознакомьтесь с моим "Полным руководством, как стать НАСТОЯЩИМ старшим разработчиком" на GitHub]

Почему отсутствие понимания своего мышления может поставить под угрозу вашу карьеру

Разработка программного обеспечения – это сложная, иногда разочаровывающая и безумно быстро развивающаяся область. Чтобы учиться, расти и оставаться актуальным в качестве разработчика (и не перегореть в процессе), требуется определенный набор черт характера.

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

Мышление — это нечто иное, чем навыки. Понимание принципов Agile-разработки — это не то же самое, что быть адаптируемым и открытым для частых изменений.

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

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

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

Это отличительная черта, сверхдержава, которая выделяет лучших разработчиков из толпы.

Хорошо, но какие черты являются наиболее важными? Давайте углубимся в детали.

10 качеств настоящего старшего разработчика

1. Любопытство

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

Вам необходимо глубоко изучить сложные области бизнеса (несколько из них на протяжении всей вашей карьеры). Анализ и уточнение требований — это обучение. Исследования — это обучение.

Оптимизация производительности и отладка — другими словами, глубокое изучение внутренней работы кода — тоже своего рода обучение.

Разработка программного обеспечения также связана с работой с людьми (и для людей).

Вы будете работать в кросс-функциональных командах с разнообразным набором людей из разных специализаций и опыта (в настоящее время, в эпоху удаленности, скорее всего, из разных стран и культур).

Вы должны понимать "бизнес". Вам нужно будет понять и решить болевые точки и проблемы пользователей.

Без здоровой дозы любопытства вы не только будете менее эффективны во всех этих вещах, но и довольно быстро перегорите.

2. Склонность к решению проблем

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

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

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

Если вам не нравится разгадывать подобные головоломки, если вы не умеете разбирать и распутывать проблемы, ваша карьера разработчика программного обеспечения будет непростой.

3. Терпение

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

Чтобы достичь совершенства и добраться до вершины, вы должны быть готовы к пожизненной преданности делу. А это требует большого терпения.

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

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

4. Жесткость (в нужном количестве)

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

Вы будете бороться, терпеть неудачи, застревать и сильно разочаровываться — независимо от того, насколько вы старше. И вам понадобится много песка, чтобы пробиться и не сгореть.

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

5. Эмоциональный интеллект

Разработка программного обеспечения связана с людьми и командами. Вы будете очень тесно сотрудничать со своими коллегами на индивидуальном уровне: объединять программы, вместе отлаживать и просматривать их код.

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

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

Кроме того, все эти люди имеют разное образование, как техническое, так и не техническое. Они страстные. У них твердое мнение. Иногда у них могут быть сложные характеры.

И ваш успех как разработчика зависит от того, насколько хорошо вы сможете наладить с ними взаимопонимание. Без высокого эмоционального интеллекта это просто невозможно.

6. Умение держать свое эго под контролем

Разработка программного обеспечения (и работа в команде в целом) — это баланс. С одной стороны, вас нанимают за ваш опыт. От вас ожидают твердого мнения и руководства менее технически подкованными или более молодыми людьми.

С другой стороны, вы будете работать с такими же опытными и самоуверенными товарищами по команде, которые будут оспаривать вашу точку зрения и с которыми вам придется принимать групповые решения.

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

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

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

7. Адаптивность

В разработке программного обеспечения все происходит очень быстро. Технологии постоянно меняются. Новые методологии становятся популярными. Компании поворачиваются.

На протяжении всей своей карьеры вы также будете менять проекты, команды, компании и сферы деятельности. Даже отдельный проект — это постоянный акт проверки и адаптации (особенно в agile-подходах). И ваша команда тоже будет постоянно реорганизовываться.

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

8. Надежность

Я повторяю это до отвращения, но разработка программного обеспечения — это командная игра. Ваши коллеги, менеджер и компания - все они рассчитывают на то, что вы сделаете свою часть работы.

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

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

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

9. Прагматизм

Профессиональная разработка программного обеспечения — это искусство компромиссов. Вам постоянно нужно идти на компромисс между скоростью разработки и качеством. Сочетайте новое и перспективное с проверенным и стабильным.

Пройдите тонкую грань между недостаточной и чрезмерной инженерией.

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

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

10. Положительный прогноз

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

Вы также будете работать с уродливым кодом. (Да, в каждой кодовой базе есть хорошие и плохие части, даже в таких ведущих компаниях, как Google.)

Вы устанете, расстроитесь и расстроитесь.

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

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

Бонус: несколько советов о том, как целенаправленно формировать свое мышление

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

Да, ты можешь! Это обширная тема, стоящая нескольких книг («Мышление» Кэрол С. Двек — отличная отправная точка). Но позвольте мне быстро поделиться парой советов:

* Признайте, что ваше мышление непостоянно, а ваши черты податливы.

* Развивать самосознание. Понаблюдайте, как вы реагируете в разных ситуациях. Попытайтесь понять, что заставляет вас чувствовать себя определенным образом (любопытно или скучно, позитивно или сварливо, нетерпеливо или оборонительно).

* Взгляните на свое поведение с точки зрения дня или двух. Было ли ваше мнение действительно прагматичным или это говорило ваше эго? Как вы могли поступить иначе?

* Подготовьтесь заранее. Заранее спланируйте, как вы будете вести себя в следующий раз в подобной ситуации, и определите правильный триггер, который напомнит вам о вашем плане, когда придет время.

* Разоблачайте себя в ситуациях, которые позволят вам тренировать и укреплять желаемые черты. Активно ищите такие возможности.

* Сосредоточьтесь на одной черте в течение некоторого времени. Это облегчит поиск возможностей для ее применения и повысит ваше самосознание этой черты.

* Рефрейминг. Будьте сознательны и обдуманно относитесь к тому, как вы разговариваете с собой. Идея не глупая, она удивительная. Эта дрожь не тревога, это волнение. Проблема не разочаровывает, она интересна.

* Заручиться помощью. Не стесняйтесь попросить своего коллегу или руководителя оставить отзыв или даже стать вашим «партнером по подотчетности», который поймает и укажет на ваше нежелательное поведение.

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

Итог

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

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

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


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE