3 жизненно важных навыка Java-программиста в 2018 году

Автор: Петр Арсентьев



Что нужно уметь программисту? Конечно, писать код. Лет 10–15 назад такой ответ вполне бы устроил: программист мог справиться с программой (или ее частью) в одиночку.
Те времена прошли, мир IT изменился кардинально: чтобы создать продукт, нужна команда и готовые решения. Просто писать код уже недостаточно – необходимы еще три жизненно важных навыка, которые превращают вас из "просто программиста" в "успешного программиста".
Итак, начнем.

Навык 1. Уметь искать информацию

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

Гуглить все умеют, дак в чем навык? Еще в институте я видел студентов, которые не могут получить помощь от преподавателя из-за неумения сформулировать вопрос:

— Иван Иваныч, у меня не получается, помогите мне, вот моя программа.
— А что именно не работает?
— Я не знаю. Запускаю, а программа не работает.

В чем загвоздка? Студент не разобрал проблему детально, поэтому не может сформулировать вопрос, а ответ хочется получить здесь и сейчас. Конечно, преподаватель должен помогать ученикам, но чтобы прогрессировать, надо уметь разбираться в задачах самостоятельно и правильно ставить вопросы.
Каждый вопрос должен на 80 % состоять из ответа. Если вы уже написали больше одного "Hello, world!", то знакомы с проклятьем NullPointerException(). Любой разработчик скажет, что эта проблема связана с инициализацией ссылочной переменной нулевым указателем – null – и решение надо искать в инициализации переменных. Таким образом, в самой формулировке "У меня падает NPE" уже есть подсказка. Подробней про проклятье NPE можно посмотреть в видео.

Навык 2. Уметь описать проблему

Поскольку все разработчики работают в командах, им необходимо общаться. Есть два способа передачи информации: активный и пассивный. Активный способ – это когда вы звоните коллеге по телефону или ведете с ним диалог вживую. Данный способ плох тем, что, во-первых, вы не сможете воспроизвести диалог (можно записать на диктофон, но кто-то обычно так делает?); во-вторых, никто, кроме вас, не сможет воспользоваться полученной информацией (а ведь наша цель – в ее передаче); в конце концов, вы отвлекаете человека от работы – эта ситуация хорошо описана в книге Тома ДеМарко и Тимоти Листера "Человеческий фактор: успешные проекты и команды" (полезно почитать).
Пассивный способ – это когда вы свой вопрос формулируете письменно, например, на форуме, трекере или по email. Здесь плюсы вполне очевидны:

  1. Проблему можно описать детально.
  2. Информация зафиксирована и всегда доступна команде.
  3. Коллега отвечает на вопрос, когда может, а не когда вы его прервали.
Поэтому уметь кратко и просто описать свою задачу – это залог продуктивного сотрудничества членов команды (и здоровья их нервных клеток).

Как бы я посоветовал писать?

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

  1. Ищем в Интернете (помните о важности правильно формулировать вопросы?). Если ответ нашелся и все понятно, решаем задачу дальше.
  2. Если нагуглить не удалось, оформляем задачу в письменном виде. В тексте указываем:
    • формулировку проблемы;
    • порядок действий, приводящий к ошибке;
    • ожидаемые действия (как должно быть);
    • добавляем скриншоты, код и видео.
  3. Если информация не является секретной, то размещаем такой вопрос на открытых форумах. На них сидит много энтузиастов, которые подробно ответят вам на вопросы. Если сведения конфиденциальны, то пишем на почту, в трекере или личном сообщении.
Очень часто бывает, что человек начинает перерабатывать мысли в текст и к нему приходит решение. По своему опыту менторства скажу, что такие ситуации бывают очень часто: ученик пишет первое сообщение с формулировкой проблемы, а где-то через 5–10 минут – второе, с решением. Вот такая крутая штука – умение описать проблему.

Навык 3. Уметь читать чужой код

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

  • В чужом коде можно научиться новому.
  • Чужой код можно переиспользовать.
  • В чужом коде можно найти ошибки.
В команде могут попасться коллеги, которые любят писать стройные длинные методы на 200–300 строчек кода, коллеги с оригинальным взглядом на жизнь или даже макаронники с изящными GOTO. В общем, зоопарк. Если вы знаете, я сторонник стандартизации в оформлении кода, поэтому стал развивать проект Code quality principles. Буду рад, если у вас есть оригинальные куски кода, которые требуют рефакторинга. Присылайте их мне.

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

Заключение

Давайте еще раз кратко перечислю насущные навыки программиста:

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