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

Kate

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

44_AGFXMB0.png


Программирование меня заинтересовало на первом курсе университета, когда нам преподавали 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 projects можно (и нужно) сколько угодно. Но если вы предлагаете внедрить в коммерческий проект новую технологию, то ответственным за это решение будете вы. Поэтому важно использовать не что-либо самое новое или лично вам интересное, а то, что подходит под конкретную задачу.

Итог​

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

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

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


 
Сверху