7 Навыков Высокоэффективных Программистов

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

Они решать задачи и улучшить свое резюме.

Но самое интересное начинается после того, как программист получает заветную должность — в каком-нибудь стартапе, в Google, в Amazon или ещё где-то.

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



7 навыков высокоэффективных программистов

Автор статьи, перевод которой мы сегодня публикуем, говорит, что коллектив, в котором он работает, был вдохновлен история TechLead о 7 навыках высокоэффективных программистов.

Члены команды решили высказать собственные мысли по этому поводу.

Здесь, в форме советов, анализ 7 навыков эффективных программистов.



1. Научитесь читать чужой код



7 навыков высокоэффективных программистов

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

Это умение дает тому, кто им владеет, много хорошего.

Программист должен уметь понимать код других людей.

В конце концов, это его работа.

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

«Чужой код», кстати, может быть чем-то, что было написано самим программистом, скажем, год назад. Этот навык оказывает положительное влияние на программиста двумя способами.

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

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

Это поднимет ваш авторитет в глазах коллег.

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

Это еще больше укрепит ваш статус в коллективе.

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

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

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



2. Развивайте инстинкт неудачных проектов

Есть много навыков, освоение которых требует времени.

Один из них, который, по нашему мнению, стоит освоить, — это выработать понимание того, какие проекты не стоит реализовывать, а какие могут привести к «гонке ко дну».

В крупных компаниях всегда много проектов, над которыми работают программисты.

Но не все эти проекты будут реализованы.

Не все из них будут полезны.

Среди них могут быть такие, которые не имеют коммерческого смысла (по крайней мере, для программиста).

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

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

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

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

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

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

Со временем у вас разовьется интуиция, которая позволит вам быстро распознавать проекты, обреченные на провал.



3. Избегайте встреч



7 навыков высокоэффективных программистов

С кем бы вы ни работали, без встреч вам не обойтись.

Это касается абсолютно всех.

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

Однако у совещаний есть одна неприятная особенность: иногда они внезапно занимают почти весь рабочий день.

Вот почему очень важно научиться избегать ненужных встреч.

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

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

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

Многие люди планируют повторяющиеся встречи в то время, которое они считают наиболее подходящим.

На этих встречах обсуждаются рабочие вопросы.

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

Мы, например, предпочитаем поступать именно так.

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

Большинство людей, которые приходят рано, одинаковы.

Они делают это для того, чтобы выполнить свою работу.

Поэтому они не мешают работе других.

В нашем случае это важно для отдельных членов команды.

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

В это время мы ни с кем не общаемся.

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

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

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



4. Мастер GitHub



7 навыков высокоэффективных программистов

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

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

Но другие впервые сталкиваются с GitHub на своей первой работе.

Для них GitHub — настоящий ад, построенный из непонятных команд и загадочных процессов.

Они никогда не бывают полностью уверены в том, что то, что они делают, правильно.

Именно поэтому всякие «шпаргалки» на GitHub очень популярны.

Вышесказанное справедливо для любой системы контроля версий.

Если использовать правильно, то это очень полезно.

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

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

Это время будет потрачено на разгадку хитросплетений ветвей и развилок.

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

В этом нет ничего хорошего.

Если вам нужна шпаргалка GitHub, создайте ее.

Научитесь продуктивно работать с GitHub. Неважно, как именно вы этого достигнете.



5. Пишите простой код, который легко поддерживать.



7 навыков высокоэффективных программистов

У некоторых начинающих программистов есть такая черта: они стараются реализовать все, что знают, в одном проекте.

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

Существует баланс между чрезмерно сложными структурами проектов и простым кодом.

Шаблоны проектирования и объектно-ориентированное программирование направлены на упрощение кода в крупномасштабных проектах.

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



6. Научитесь говорить «нет» и расставлять приоритеты

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

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

Следует отметить, что умение расставлять приоритеты и умение говорить «нет» на самом деле могут быть двумя отдельными навыками.

Однако эти навыки очень тесно связаны друг с другом.

Там, где есть необходимость в одном из них, обычно нужен второй.

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

А сказать «нет» — значит отказаться выполнять работу, которую должен сделать кто-то другой.

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

Особенно это актуально для тех, кто только что закончил учебу и устроился на первую работу.

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

Сейчас на работе ждут того же и стараются никого не разочаровать.

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

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

Есть много навыков, которые не проверяются на собеседованиях.

Их редко можно получить путем обучения.

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



7. Научитесь думать о том, как именно будет использоваться ваша разработка



7 навыков высокоэффективных программистов

Есть один навык, который сложно проверить во время собеседования.

Ситуации, в которых это необходимо, трудно воспроизвести в процессе обучения.

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

Обычно мы называем это «продумыванием вариантов использования программы».

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

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

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

Например, может измениться объект, метод или API определенной системы.

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

Причем речь идет об изменениях любого масштаба — даже о чем-то вроде изменения типа в базе данных.

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

Сюда также входит способность понимать схему решения высокого уровня на этапе проектирования.

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

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

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

Нетрудно создать программу, которая будет хорошо работать на вашем компьютере.

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

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



Полученные результаты

В этой статье мы предоставили вам обзор 7 навыков, которые характерны для высокоэффективных программистов.

Надеемся, вы нашли среди них те, которые хотели бы развивать самостоятельно.

Уважаемые читатели! Что бы вы посоветовали освоить тому, кто хочет стать профессиональным программистом?

7 навыков высокоэффективных программистов

Теги: #программирование #разработка #Лайфхаки для гиков #обучение

Вместе с данным постом часто просматривают: