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

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

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

👍НравитсяПонравилось25
В избранноеВ избранном4
Подписаться на тему «junior»
LinkedIn



Підписуйтесь: Soundcloud | Google Podcast | YouTube


9 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.
Изучение SOLID, KISS и DRY. Эти наборы правил увеличили качество кода в разы.

В связи с этим у меня два вопроса:
1. Во сколько конкретно раз увеличилось качестве кода?
2. Какая методика применялась для измерения качества кода? В каких единицах измерялось качество кода?

Спасибо за комментарий!
1. Это фигура речи) Но рассмотренные подходы действительно помогли мне научиться писать код чище.
2. Я оцениваю качество кода по следующим пунктам:
— Надежность, правильность работы
— Насколько код оптимизирован
— Насколько код возможно расширять
— Читабельность
— Простота
По моему мнению, SOLID, KISS и DRY помогают улучшить три последних пункта приведенного списка.

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

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

Спасибо за интересный ответ

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

— качество продукта конечно корректно рассматривать с точки зрения направления продукта, его масштабности, долгоиграбельности и т.д. Т.к. в разных случаях автором документации будут разные люди и не всегда это будет прогер, кодописатель и т.п. Т.е. точка оценки проукта — у тим-лида одна, у инвестора/покупателя продукта другая, у заказчика третья. Но пункт касательно документации я все таки вынес бы в отдельный пункт или подпункт т.к. речь идет о чем-то большем чем скрипт формы обратной связи :)
— самодокументированный код это конечно хорошо но не соглашусь (не флейма ради ни не по принципу «баба-яга против») т.к. часто такой код будет ущербом собственно коду и в больших и сложных/масштабных проектах такой код будет или в ущерб времени разрабтки или в ущерб коду и при смене команды, появлении новго человека ему прийдется привыкать к нему что опять е потянет время, ошибки и т.п. и в результате плавно перейдем к п.3
— касательно «описание переменных» и т.п. можно это назвать культурой подачи кода , возможно в вашем понимании это будет перекликатся с «самодок. кодом». Грубо говоря это когда _архитекктор_ задает стиль того как будет писатся проект — где конфиги, что где и как описывается, как разбивается на модули/блоки, какие имена и по каким маскам/шаблонам задаются классам, переменным, функциям и т.п. ну например:
$block_one и $perviyBlok выглядят немного поразному и понимание так же, соотв. и чтение такого кода.

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

[sarcasm on]
1. в 100500!!!! Вы что не профи и не понимаете?!
2. я вижу вы ваще в коде нуд, у нас есть профи и он мерял специальной линейкой и результат есть ведь не зря мы ему платим 100500
а вам бы тихо молчать и вот там пишите свои кернелы, мордоркнижки и т.д.
мпециальная метдика : Ваш_энд_Гоу! Метдика секретная и у нас есть спец с дипломом по этой методике.
а меряется чтоб вы знали в смузях (что тоже не знаете?!)
[sarcasm off]

Спасибо, хорошо и интересно написано. Много полезного не только для разработчиков. У вас цепкий взгляд на мир =)

Спасибо за коментарий)

Подписаться на комментарии