Как стать непревзойденным программистом

0
2430
views

Перевод статьи Кена Мазаики «29 Behaviors That Will Make You An Unstoppable Programmer».

Непревзойденные программисты

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

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

1. Агрессивное использование Google

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

2. Невероятное упорство

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

3. Нужно знать о важности микро-решений

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

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

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

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

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

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

¯\_()_/¯

5. Использование подходящих инструментов

Подбор правильных инструментов

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

Такой подход дает им возможность сузить поиск до 2-3 вариантов, а затем быстро применить к своему продукту лучший из возможных инструментов, чтобы немедленно определить, как он будет работать в их среде.

6. Понимание того, что код стоит дешево

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

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

7. Адекватная оценка технологий

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

8. Умение говорить «я не знаю»

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

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

9. Анализ зацепок в сообщениях об ошибках

Сообщения об ошибках

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

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

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

10. Знание разницы между преждевременной и необходимой оптимизацией

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

  1. Максимально просто.
  2. Более запутанно, зато быстрее.

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

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

11. Умение отвечать за свои ошибки

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

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

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

12. Быть «продвинутым» пользователем своих инструментов разработки

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

Не имеет значения, что именно входит в ваш набор инструментов и каким редактором (Sublime, Text, Atom, Emacs, Vim или Visual Studio) вы пользуетесь.

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

13. Уметь пользоваться Vim (хоть немного)

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

14. Никогда не браться за фриланс-проект с незнакомой технологией

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

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

15. Не считать количество часов

Количество проведенных за работой часов не главное

В течение дня вы можете выполнять работу двух видов:

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

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

16. Легко воспринимать критику

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

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

17. Парное программирование с более опытными людьми

Нет более быстрого способа научиться программировать.

18. Всегда сперва проверять собственную работу

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

Прежде чем послать пул-реквест на GitHub, просмотрите свой код и разберите его так, будто он не ваш. Это простое действие поможет вам избежать негативного фидбэка.

19. Осознание, что самое сложное во фрилансе это не написание кода, а все остальное

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

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

20. Выявление и решение более крупных проблем

Решение масштабных проблем

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

  • Работа по выходным, чтобы не выбиваться из графика.
  • Постоянные баги в коде и необходимость «горячих» исправлений.
  • Многократное падение сайта в продакшене.
  • Работы начинаются, но до их завершения возникают дела с более высоким приоритетом.

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

21. Погружение в крупные open source проекты для выпуска ваших фич

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

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

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

22. Пропуск многих собраний

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

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

23. Знание, когда нужно возвращать долги

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

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

24. Умение писать плохой код

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

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

25. Умение ненавязчиво дать людям понять, что вы работаете допоздна

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

26. Действовать как лидер, а не как босс

Непревзойденные программисты это лидеры. Они не боссы. Между этими понятиями есть важная разница.

  • Боссы имеют людей в подчинении.
  • Лидеры это люди, за которыми другие люди следуют.

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

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

27. Игры в офисе

Игры в офисе

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

28. Учеба под давлением

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

  • наладки производительности
  • конфигурации сервера
  • переноса данных из различных систем.

Нужно уметь сохранять хладнокровие и легко ориентироваться по ситуации. Этому тяжело научиться, но это невероятно ценно.

Все эти привычки важны. Но одна выделяется даже на их фоне.

29. «Быстро двигаться и крушить»

(“Move fast and break things” – в прошлом девиз Facebook, — прим. перев.)

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

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



ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here