Найти тему
Mad Devs

Программирование с нуля: 7 уроков, которым я научилась за год в IT

Оглавление

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

Свой путь в IT я начала чуть больше года назад. Решив попробовать себя в программировании, я пришла на стажировку в компанию Mad Devs. Уже во время стажировки я получила первый опыт командной разработки в реальном проекте. После я продолжила работу во внутренних и коммерческих проектах как младший фронтенд-разработчик.

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

Урок первый. Коммуникация

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

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

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

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

-2

Урок второй. Ответственность

Вот что пишет об ответственности Дядюшка Боб в своей книге “Идеальный программист”:

“Термин «профессионализм» имеет много смысловых оттенков. Конечно, профессионализм — это своего рода почетный знак и повод для гордости, но также он является признаком ответственности. Понятно, что эти стороны профессионализма неразрывно связаны между собой: нельзя гордиться тем, за что вы не несете никакой ответственности.
Быть непрофессионалом намного проще. Непрофессионалы не несут ответственности за выполняемую работу — они оставляют ответственность своим работодателям. Если непрофессионал совершает ошибку, то мусор за ним прибирает работодатель. Но если ошибка совершается профессионалом, то устранять последствия приходится ему самому.”

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

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

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

Урок третий. Просьбы

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

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

Урок третий. Просьбы

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

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

-3

Вот небольшая инструкция о том, как правильно просить помощи:

  • Попытайтесь разобраться в проблеме самостоятельно. Скорее всего, Google поможет вам найти ответ. Не тратьте на это больше 30–60 минут.
  • Попробуйте изложить проблему в письменном виде так, будто вы пытаетесь объяснить ее коллеге. На этом этапе ответ часто появляется сам собой. Такой прием называется “утиным дебаггингом”. Не тратьте на это больше 60–90 минут.
  • Если решить проблему самостоятельно не удалось, то попросите коллегу найти для вас немного (или много) времени в течение дня. Кратко расскажите, с какой проблемой вы столкнулись.
  • Если вам обещали помочь, максимально подробно расскажите о проблеме. Сообщите как можно больше деталей, предоставьте сообщения в консоли, логи. Расскажите, что вам удалось нагуглить, объясните, как вы уже пытались решить проблему.
  • Также может сработать вариант, когда вы подробно расписываете проблему и отправляете ее в чат команды или общий чат отдела разработки. Возможно, кто-то из коллег поможет вам с решением.

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

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

Урок четвертый. Проблемы

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

Когда вы…

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

ГОВОРИТЕ об этом!

-4

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

Стендап — это рассказ о том, что вы сделали по задачам вчера, что будете делать сегодня. Также в стендапе вы указываете, с какими проблемами столкнулись. Отдельная графа для проблем выделена не случайно. Ваша задача — сообщить о проблемах. В команде есть выделенный человек, проектный менеджер (ПМ), задача которого — помочь вам решить эти проблемы.

Каждый раз, когда вы замалчиваете проблемы, где-то в мире грустит один ПМ — ваш ПМ.

Урок пятый. Боязнь ошибаться

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

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

Во-первых, невозможно знать и уметь все. Особенно в современной IT-сфере, которая очень быстро меняется.

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

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

Об ошибках писал Роберт Мартин в уже упомянутой мной книге “Идеальный программист”:

“Программный код слишком сложен, и ошибки будут всегда. К сожалению, это не избавляет вас от ответственности. Человеческое тело слишком сложно, чтобы изучить его от начала и до конца, но врачи все равно клянутся не причинять вреда. И если уж они не пытаются уйти от ответственности, то с какой стати это может быть позволено нам?
«Хотите сказать, что мы должны писать совершенный код?»
Нет, я хочу сказать, что вы должны отвечать за свое несовершенство. Тот факт, что в вашем коде заведомо будут присутствовать ошибки, не означает, что вы не несете за них ответственность. Написать идеальную программу практически невозможно, но за все недочеты несете ответственность именно вы, и никто другой.”

Урок шестой. Работа на результат

При командной разработке IT-продуктов используется много разных инструментов и методологий. Возможно, вы слышали о некоторых из них: OKR, Agile, SCRUM и т.п. Кому-то кажется, что это лишние процессы, которые только отнимают время. Но важно, чтобы вся команда понимала общие цели и приоритеты. За этим и нужны методологии. Это делает процесс разработки гибким и структурированным.

-5

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

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

По завету старших коллег, постоянно спрашивайте себя: “А не хуйню ли я делаю?”

Урок седьмой. Оценки задач и сроки

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

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

Майк: «Пола, страница входа в систему мне нужна к завтрашнему дню».
Пола: «Нет, Майк, здесь работы на две недели».
Майк: «Две недели? По оценкам проектировщиков, работа должна была занять три дня, а прошло уже пять!»
Пола: «Проектировщики ошибались, Майк. Они выдали свою оценку до того, как служба маркетинга сформулировала окончательные требования. У меня осталось работы еще на 10 дней. Ты не видел мои обновленные оценки в вики?»
Майк: (с суровым видом и недовольным голосом) «Это недопустимо, Пола. Завтра я буду представлять клиентам демо-версию, и я должен им показать, что страница входа работает».
Пола: «Какая часть страницы входа должна работать к завтрашнему дню?»
Майк: «Мне нужна страница входа! Я должен иметь возможность войти в систему».
Пола: «Майк, я могу сделать макет страницы входа, который позволит войти в систему. Сейчас простейший вариант уже работает. Макет не проверяет имя пользователя и пароль и не отправляет забытый пароль по электронной почте. У верхнего края нет баннера с фирменным логотипом, не работает кнопка справки и всплывающая подсказка. Страница не сохраняет cookie, чтобы запомнить данные для следующего входа, и не устанавливает ограничений доступа. Но войти в систему вы сможете. Подойдет?»
Майк: «Значит, вход будет работать?»
Пола: «Да, вход будет работать».
Майк: «Отлично, Пола, ты меня спасла!» (отходит с довольным видом)

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

Финальная черта

Всё это мне удалось вынести из моего первого года в IT, первого в жизни опыта командной разработки. Это был сложный год, но он принёс мне множество инсайтов и открыл мне новый мир. Дальше будет только интереснее.

Благодарности

В конце хочется поблагодарить всех своих коллег и менторов, в частности, Denis Grushkin, Emir Sabyrkulov, Vladimir Shebarshov и Alice Jang. Спасибо вам! Благодаря вам и вашему терпению я у мамы программист и пишу вот такие умные статьи =)

Спасибо за внимание!