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

Всем привет, меня зовут Антон, и я Junior Full Stack Developer в компании Binary Studio. Когда я начинал свою карьеру в IT, то понял, что мое представление о разработке немного отличается от реальности. Поэтому я и решил написать эту статью: чтобы люди, которые хотят попробовать себя в этой отрасли, стали немного лучше понимать, что она из себя представляет и во что нужно инвестировать свое время.

funny meme

Программирование меня заинтересовало на первом курсе университета, когда нам преподавали C#. Мне понравился этот язык и я решил изучить его получше в надежде получить оффер заветного Junior .NET Developer. Постепенно освоил синтаксис, ООП, перешел к конкретным технологиям и написал несколько pet projects. Но назвать себя разработчиком в тот момент времени я еще не мог. В чем же причина?

Чем разработчик отличается от человека, который просто пишет код?

Для начала нужно разобраться с целями коммерческой разработки. По моему мнению, единственная цель коммерческой разработки – предоставлять программное обеспечение, которое помогает оптимизировать или оцифровывать процессы бизнеса. Звучит немного заумно, поэтому давайте рассмотрим конкретный пример.

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

Теперь попробуйте исходя из описанного примера дать ответ на вопрос: а какая цель разработчика в этом процессе? Разрабатывать приложение по каждой букве принципа SOLID? Писать самый-самый оптимизированный код в мире? Может, мы как заказчик хотим видеть трендовые технологии на нашем проекте? Очевидно, нет. Мы хотим продавать еще больше елок, зарабатывать еще больше денег и добиться монополии в своей отрасли. Поэтому, я считаю, что:

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

Разработчик должен смотреть шире технических задач:

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

Здесь нужно добавить несколько ремарок. Конечно, разрабатывать по SOLID, писать оптимизированный код и быть в тренде технологий хорошему разрабу все так же необходимо. Я лишь хочу сказать, что без понимания конечного продукта даже очень хорошей технической базы будет мало.Также описанные выше обязанности частично берут на себя project manager и business analyst. Они “конвертируют” запросы бизнеса в конкретное ТЗ для разработчиков. Но даже в таком случае, необходимость понимать предметную область и цели проекта никуда не пропадает.

Какие качества необходимы хорошему разработчику?

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

Понимание того, чего хочет клиент

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

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

Умение презентовать свою работу

Огромную роль играет не только то, что вы делаете, но и как вы это презентуете. Совсем уж элементарный пункт, да? Из своего опыта могу сказать, что это далеко не всегда так. Если вы работали над функционалом, польза которого не видна здесь и сейчас (например, написали сервис для вызова удаленных процедур, обертку над библиотекой, интегрировали в проект новую технологию), то объяснить человеку без технического бэкграунда зачем вы этим занимались – отдельный вид задач.

Я развил это качество в Binary Studio Academy. По ходу работы над проектом наша команда представляла свои результаты условному заказчику, который задавал много вопросов, делал замечания и вносил правки в конечный функционал. Это научило меня смотреть на задачи шире, понимать, какую пользу в итоге они принесут конечному пользователю.

Умение работать в команде

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

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

Умение разбираться в чужом коде

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

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

Немного о hard skills

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

Зачем писать код по стандартам?

Какую пользу разработка по стандартам несет для бизнеса? Ведь если пользы нет, то нет и смысла использовать эти стандарты.

Дело в том, что плохо написанный код невероятно тяжело поддерживать (спасибо, капитан очевидность). Инженеры, вместо того чтобы работать над новым функционалом, будут неделями разбираться с уже существующим, бороться с side effects, и молиться, чтобы их фича не сломала половину приложения. На задачи будет выделяться намного больше времени, а время, как известно, – деньги. Вряд ли какой-либо бизнес хочет их терять.

Как научиться писать хороший код?

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

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

  • Изучение SOLID, KISS и DRY. Эти наборы правил увеличили качество моего кода в разы. Некоторые из них достаточно непростые, поэтому советую сразу пробовать применять их на практике.
  • Постоянное изучение обновлений языка программирования, технологий, которые использую. С каждой версией разработчики добавляют что-то, что делает код потенциально чище. Так что быть в тренде нужно обязательно.
  • Конечно, большое количество практики. Для себя я не ставил цель программировать по 25 часов в сутки, лучше меньше, но регулярно. Также очень сильно качает навык разработка в команде с другим человеком, частые code review и дискуссии на тему как лучше реализовать логику нашего приложения.

MythBusters

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

Работа в большой компании == хорошая работа

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

Вера в best practices

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

Технологии ради технологий

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

Итоги

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

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

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