Перевод статьи Али Спитель «The Most Important Non-Programming Skills for Programmers».
Когда я думаю о том, с каким программистом мне хотелось бы работать, мне на ум скорее приходят нетехнические навыки, которые и делают программиста хорошим коллегой. Фактически, все указанные здесь навыки способствуют также и написанию хорошего кода, а значит, работают на улучшение технических проектов. Большинство из них применимы для продвижения по карьерной лестнице и не в сфере программирования, но я сфокусируюсь на том, чем они полезны именно программистам.
Эмпатия
Чтобы построить отличный продукт, вам нужно уметь ставить себя на место других людей. Как они будут пользоваться этим продуктом? Какие функции будут им полезны? Как наша программа может помочь им улучшить их жизнь? И наоборот, как она может им навредить или негативно сказаться на их жизни? Каковы могут быть этические последствия использования вашего приложения?
Эмпатия имеет большое значение при создании многих частей вашей программы. Если вы не обеспечите надлежащую их безопасность, информация о ваших пользователях может быть использована им во вред посторонними лицами. Если у пользователей будут сложности с доступом к каким-то частям вашей программы, вы ограничите количество людей, которые смогут воспользоваться вашим проектом. Если приложение будет запускаться медленно или требовать для запуска слишком много ресурсов, у вас будет отток пользователей, поскольку люди в регионах с медленным интернетом или мобильные пользователи не смогут запускать ваше приложение. Когда вы пишете код, вы должны подумать о каждом его пользователе!
Эмпатия также поможет вам быть успешным в роли члена команды и ментора. Поставьте себя на место вашего менеджера или другого разработчика. Почему они принимают свои решения? Как вы можете им помочь? Наличие эмпатии существенно улучшит вашу способность быть эффективным товарищем по команде. Если вы работодатель, то, проявляя эмпатию, вы сможете дольше удерживать своих сотрудников на рабочем месте, причем они будут работать гораздо эффективнее (источник).
Будьте терпеливы с другими разработчиками, особенно теми, которые изучают что-то новое для себя. Вспомните, как вам было тяжело учиться и что вы при этом чувствовали. Вероятно, они чувствуют то же самое. Если вы будете с ними грубы, станете преуменьшать их прогресс или проявлять излишнюю педантичность, это им лишь навредит и сделает процесс обучения еще более сложным.
Ваши слова и действия имеют реальные последствия, и вы можете использовать их как во благо, так и во вред людям. Это касается не только общения вживую, но и общения онлайн. Вам может казаться, что вы говорите забавные вещи, или что просто выпускаете пар, но ваши слова могут очень негативно отразиться на чьей-то жизни. Только от вас зависит, как вы будете действовать и сможете ли исправить причиненную невзначай обиду.
Решение проблем
Когда я учу программированию, я вижу много людей, которым решение проблем дается куда тяжелее, чем написание кода само по себе. Умение разбивать проблему на более мелкие кусочки и решать все эти маленькие «проблемки» требует большой практики. Если вы научитесь решать проблемы, это может помочь вам стать куда более сильным программистом.
Также не следует забывать, что для многих проблем существует больше одного решения. Значительная часть работы разработчика заключается в обдумывании различных решений и выборе лучшего из них. Какое-то решение быстрее других в реализации? Оно запускается более эффективно? Оно будет менее дорогим? Все эти вопросы важны, а выбор подходящего решения является сложной, но очень важной частью разработки программного обеспечения.
Сотрудничество
Скорее всего, будучи программистом, вы будете работать с другими людьми. С другими разработчиками, деловыми людьми, менеджерами, участниками open source проектов, собственниками бизнеса и бесчисленным количеством других людей. Даже если вы фрилансер, это вас не спасет. Поэтому научиться хорошо ладить с другими людьми в рабочих отношениях является критически важным.
Есть много вещей, из которых состоит хорошее сотрудничество. Для начала, следует осознавать, что один человек не может делать всё или, по крайней мере, не может делать всё одинаково хорошо.
Разные люди обладают разными навыками и жизненным опытом, они по-разному смотрят на многие вещи, поэтому вместе эти люди способны на большее, чем по отдельности. Не следует постоянно прикрывать собой команду или пытаться быть мастером на все руки. Будет гораздо лучше, если вы позволите и другим людям внести свой вклад в общее дело.
Просите окружающих о помощи и помогайте им сами. Вам не нужно быть экспертом во всем: разные люди могут быть экспертами в разных вещах. Полагайтесь на других людей и, если застряли на чем-то, обязательно попросите о помощи, чтобы не тормозить слишком долго.
Когда кто-нибудь просит вас о помощи, изъявляйте желание помочь. Объясняя что-нибудь, вы можете многому научиться: таким образом вы проведете «ревизию» своих знаний по теме. Если вы занимаете менеджерскую позицию, обязательно оставляйте людям время для наставничества и эффективного сотрудничества!
Не перебивайте людей и не отвергайте сразу же их точку зрения. Если их мнение не ценится и не принимается во внимание, в будущем у них будет меньше желания принимать участие в обсуждении. Активно слушайте, когда люди делятся своими идеями. Вместо того чтобы во время их речи обдумывать свой ответ или доводы, почему ваша идея лучше, попытайтесь подумать, почему их подход тоже хорош и как он может быть реализован.
Позже, когда вы реализуете их прекрасные мысли, расскажите всем, что автором идеи был такой-то коллега. Ничто так не снижает эффективность моего труда, как работа в команде, где мои идеи отвергают, недооценивают или присваивают.
Коммуникация
При работе с другими людьми коммуникация имеет решающее значение. И неважно, кто эти люди – коллеги, клиенты, пользователи, менеджеры или подчиненные. Честно сообщайте им, как идут дела, на каком этапе находятся проекты. Высказывайте свое мнение откровенно, но доброжелательно. Люди будут менее восприимчивы к обратной связи, если вы будете грубы или неконструктивны. Но если вы будете лгать или приукрашивать правду, вы можете не увидеть позитивных изменений.
Один реальный пример из моей жизни. Человек, прочитавший пост в моем блоге, написал очень длинное письмо о том, что из-за выбранного мной тона мой пост звучит очень глупо.
Я обычно использую много восклицательных знаков и стараюсь быть очень восторженной в своих постах – это делается намеренно, чтобы оживить темы, которые иначе могут показаться скучными.
Тот человек написал много сексистских высказываний и прочих обидных вещей. В то же время я и правда могла бы отказаться от обилия восклицательных знаков и при этом все равно рассказывать людям о программировании так, чтобы для них это было увлекательно. И я была бы гораздо восприимчивее к критике, если бы ее подали более конструктивно.
Если дела идут не очень хорошо, обязательно расскажите об этом. Будьте честны в отношении того, что дедлайн придется отодвинуть. Поведайте о причинах, почему работа тормозится. Если вы будете высказываться открыто, у вас будет куда больше шансов переломить ситуацию и улучшить рабочие условия.
Инклюзивность
Мне случалось работать инструктором скалолазания и вожатой в летнем лагере. В моих группах чаще всего были девочки среднего школьного возраста. Мне очень нравилось работать с ними, но школьники среднего возраста обычно не слишком толерантны к отличиям других людей и склонны создавать враждебные группировки.
Мы играли в игру, где все мы стояли в одном большом круге, а затем один из вожатых говорил людям, что они покидают круг и выбывают из игры по причине каких-то характеристик, о которых они не знали и не могли их контролировать. Дети внутри круга продолжали играть, а дети вне круга исключались и могли только наблюдать.
Эта игра была супер эффективной для демонстрации девочкам, на что это похоже, когда людей отвергают из-за того, что они не могут контролировать. Я по-прежнему много думаю над этим.
Будучи взрослыми, мы все еще оставляем людей вне круга, исключаем их из нашего коллектива, основываясь на определенных характеристиках, которые они не могут изменить. Но если мы дадим им возможность вернуться в наш круг и внести свой вклад в общее дело, наши продукты будут отражать более разнообразный опыт, они станут лучше.
Есть множество исследований относительно того, что diversity-команды обладают лучшей производительностью. Но на чисто человеческом уровне задумайтесь о том, каково это – быть вне «круга». Старайтесь расширять свои круги, а не сужать их.
Вполне вероятно, что много ваших пользователей окажутся людьми, традиционно исключаемыми из «круга» в сфере технологий. Я могу сказать по собственному опыту, что быть в команде единственным в своем роде очень тяжело. Лишь 5% моей карьеры я работала в командах, где была еще хотя бы одна женщина.
Это также связано с эмпатией. Старайтесь делать свои программы для широкого спектра пользователей. Не только для здоровых людей или людей, следящих за самыми последними технологиями. Так вы сможете достучаться до большего количества пользователей.
Терпение
Первый человек, с которым вы должны быть терпеливым, когда программируете, это вы сами. Программирование это тяжелое занятие. Временами у вас будут случаться баги или сложные проблемы, которые придется преодолевать. Если вам всегда легко, значит, вы не бросаете себе вызов и не растете как программист. Будьте упорны, работая над решением проблемы, и не сдавайтесь, когда становится тяжело. Но также не следует забывать, что можно сделать перерыв и вернуться к проблеме спустя какое-то время. Перерыв может помочь вам решить задачу более эффективно или иначе посмотреть на нее по возвращении.
Также будьте терпеливы с другими людьми. Человек не совершенен, а на обучение может потребоваться время. Ошибки и провалы могут стать самыми важными переживаниями в процессе обучения. Поэтому не следует создавать рабочую среду, где небезопасно рисковать и расти. Осознайте, что различные вещи различными людьми усваиваются по-разному и в любом случае на это нужно время.
Креативность
Что я люблю в программировании, так это то, что я могу использовать свою креативную энергию для создания вещей, приносящих пользу другим людям. Чтобы создавать действительно классные вещи, нужно научиться мыслить «вне коробки».
Креативные идеи важны дли придумывания нового функционала, интерфейсов, приложений. У меня был случай, когда человек купил лицензию на продукт компании, который строила я, по большей части из-за креативного интерфейса. И мой сайт-порфолио тоже пользуется успехом в силу своей креативности.
Кроме того, для решения многих проблем также нужна креативность. Практически для каждой проблемы в программировании существует больше одного решения, а креативный подход обычно помогает найти самое оптимальное.
Скромность
Вы можете очень многому научиться у других программистов. В мире кода никто не может знать всё. Будьте восприимчивы к конструктивной критике, не начинайте сразу обороняться. Благодаря обратной связи вы можете улучшить и свой код, и свои навыки. Если вы застрянете в своей заезженной колее, это не будет способствовать вашему росту. Вы не всегда правы, так что следует прислушиваться к идеям других людей.
Уверенность
С другой стороны, нужно быть уверенным в своих силах. Я знаю, что для кого-то с сильными проявлениями синдрома самозванца это может быть очень непросто. Но вера в себя и уверенность в своих способностях на самом деле очень важны.
Для начала, следует быть уверенным, что вы можете браться за проекты. Не нужно обрекать себя только на самые легкие проекты или сомневаться в себе, когда вам поручают что-то сложное. Попробуйте решить, что сможете, а затем попросите помощи, чтобы пройти самые трудные части.
Также не нужно сразу бросаться к поисковику. Дайте себе попробовать пару идей, прежде чем начать гуглить ответ. Или хотя бы гуглите часть проблемы, а не всю задачу. Вам совершенно не повредит просто испытать несколько вещей и посмотреть, не сработают ли они. Вы можете удивиться, осознав, как много уже знаете.
Что я еще делаю, это отслеживаю свои победы. У меня есть файл, где записаны все классные вещи, которые я сделала, и приятные слова, которые говорили обо мне другие люди. Когда выдается сложный день или когда я начинаю сомневаться в себе, я это перечитываю и обычно это добавляет мне уверенности в том, что я делаю.
Приспосабливаемость
Программирование это все еще новая сфера деятельности, которая развивается очень быстро. Поэтому критически важной является способность адаптироваться к изменениям.
При выходе нового фреймворка, библиотеки или языка, который внезапно захватывает лидирующие позиции, очень важно суметь изучить их (в рамках необходимого, конечно). Если бы мы все продолжали писать код на Fortran, наша индустрия сегодня выглядела бы совершенно иначе. Мы должны быть способны к развитию и адаптации к изменениям.
Также не стоит забывать, что цели проектов и их функционал тоже часто меняются, особенно при работе с клиентами. Когда такое случается, мы должны приспосабливаться и реализовывать эти запросы (опять же, в рамках необходимого).
Участие в жизни сообщества
Конференции, посты в блогах, социальные сети, митапы очень важны, поскольку помогают учебе и росту. Open source проекты и сообщества вокруг них это просто кровь и плоть нашей индустрии. Способность устанавливать связи, завязывать знакомства с людьми очень важна для образования, обмена опытом и поиска новых возможностей.
Даже если вы интроверт, не любящий общаться лично, есть множество прекрасных онлайн-сообществ, где вы можете многому научиться. А при работе в компании сильные связи внутри команды помогают людям лучше сотрудничать друг с другом.
Заключение
Перечисленные навыки часто относят к «soft skills», но я думаю, что это очень упрощенное их понимание. Они помогают и лучше писать код, и быть лучшим коллегой. Они гораздо важнее знания определенного языка, библиотеки или фреймворка, а также они пригождаются людям за пределами индустрии технологий.
Развитие этих навыков будет полезно как конкретно программистам, так и людям вообще. При этом следует помнить, что никто не совершенен и каждому есть, куда расти. Поэтому не останавливайтесь и делайте маленькие шажки к оттачиванию этих не-программистских навыков!
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]