3 причины, почему мне нравится быть программистом
Количество разработчиков каждый год увеличивается на несколько миллионов, появляются новые сервисы и приложения. Очередной основатель стартапа «Сделаем мир лучше» рассказывает, как он сделает мир лучше. В мире IT полная идиллия.
И только старший разработчик Василий — где-то в тёмной квартире, в 3 часа ночи, под светом настольной лампы — пытается разобраться, почему с пользователя списалась в два раза большая сумма за услугу. О чём тот непременно сообщил в техническую поддержку, лаконично и точно описав проблему и весь отдел разработки. Так что же заставляет Василия продолжать работать даже ночами и при этом получать удовольствие от работы?
1. Программирование — это креативно
Да, да я уже слышу, как строгий мужчина с огромной бородой говорит мне: «Эй, мальчик, программирование — это тяжёлая техническая дисциплина! Здесь нет места развлечениям и, как ты сказал? Креативности!» И хлопнув себя рукой по лбу (и это во время COVID-19!), мужчина разворачивается и уходит. Что же, кто я такой, чтобы спорить со своим вымышленным собеседником? Поэтому подождём, пока он уйдёт, и продолжим!
Так почему быть программистом — это креативно?
Как настоящие сценаристы, каждый день мы дополняем исходные коды новыми сюжетами, наши актёры — это наши объекты. Ключевых персонажей мы прописываем щепетильно, уделяем внимание мелочам. Второстепенные персонажи даже не всегда удостаиваются отдельного класса. Впрочем, некоторые программисты скорее писатели детективного жанра. Их код — это место преступления, но это тема для отдельного поста.
Или как настоящие архитекторы мы создаём огромные проекты, в чём-то уникальные, а где-то заимствуем готовые решения. По артериям огромных систем пересылаются сотни тысяч сообщений, миллионы счастливых пользователей радостно делятся терабайтами личных данных. Наши системы масштабируемы и красивы! Хоть временами наши проекты больше напоминают старый сортир, который не падает только потому, что его подпёрли палкой. Обычно такие проекты хорошо описаны программистами-детективами в их сочинениях, но мы сегодня о другом.
Чувство прекрасного присуще каждому в той или иной степени, но, к большому сожалению, оно очень индивидуально. Поэтому, чтобы творцы не подрались во время очередной ревизии кода (code review), мы создаём правила и стандарты кода (coding conventions).
При этом сам процесс задания стандартов может вызвать ещё больше вопросов. Но и интернет уже полон открытыми стандартами, например, Google Style Guide, Microsoft C# Coding Conventions или Style Guide for Python Code, которые можно брать за основу. Не лишним будет упомянуть и про множество замечательных книг — «Совершенный код» С.Макконелла, «Шаблоны корпоративных систем» М.Фаулера, «Программист-прагматик» Д.Томаса и Э.Ханта, — авторы которых не только описали хорошие практики, но и обосновали выбор таких решений.
Программирование, конечно, нельзя назвать полностью творческой дисциплиной. Но в любом случае, чувство прекрасного и желание искать изящные и красивые решения помогут писать чистый, стабильный и поддерживаемый код.
2. Программирование — это постоянное изучение
«Очередное клише!» — закричит возмущённый читатель. «Ты ещё напиши нам, что программисты любят свою работу за гибкость в графике и местоположении!». Обязательно! Но чуть позже, а пока начну с известного анекдота:
— Ну и слабая же группа мне попалась! — Жалуется преподаватель после пары коллеге, — Объясняю им теорему — не понимают. Объясняю второй раз — не понимают. Объясняю третий раз — я уже понял, а они не понимают!
Известный анекдот
Разработка — это достаточно молодая и быстро развивающаяся дисциплина. Постоянно появляются новые библиотеки и фреймворки, другие становятся старыми и «немодными». Конечно, для овладения новыми знаниями обычно ничего не нужно, кроме компьютера и интернета. Но в таком ритме мы успеваем охватывать знания только по верхам. В этой ситуации программисты внутри одной команды, сообщества или форума вынуждены постоянно обмениваться знаниями, задавая вопросы и отвечая на вопросы своих коллег. Компании оплачивают поездки на разные курсы и конференции.
Но не менее важно и самому делиться знаниями, например, выступая с докладом на конференции или публикуя очередной пост в блоге . Как в анекдоте выше — это позволяет гораздо глубже разобраться в интересующей тематике.
Можно участвовать в адаптации (onboarding) новых специалистов, которые приходят в компанию. Это не только поможет самому глубже понять, как работает проект, а заодно моментально установить доверительные отношения и показать, кто на проекте папочка.
Процесс разработки — это не только написание кода и передвижение задачек в JIRA, но и взаимодействие со специалистами, в том числе и в смежных областях. При желании всегда можно попробовать заняться разработкой front-end или back-end, глубже изучить DevOps или заняться машинным обучением.
Более того, являясь прикладной дисциплиной, программирование позволяет охватывать не только технические аспекты разработки, но и изучать модели бизнеса.
Как отмечалось выше, технологии и знания постоянно устаревают. Именно поэтому важно основываться на каком-то базисе. Любое техническое решение — это какой-то алгоритм. Любые модели по итогу описываются какими-то структурами данных. Например, прочтение «Алгоритмы. Построение и анализ» Т.Кормана, «Искусство программирования» Д.Кнута, «Структуры данных и алгоритмы» и «Построение и анализ вычислительных алгоритмов» А.Ахо, Д.Ульмана и Д.Хопкрофта принесёт на начальном этапе намного больше пользы, чем изучение спецификации очередной библиотеки, позволит находить оптимальные решения в независимости от языка или фреймворка.
Конечно, непрерывное изучение может быть демотивирующим и изматывать, но зато способствует постоянному развитию и поддержке мозга в тонусе.
3. Удалённая работа и гибкий рабочий график
Берег моря. Лёгкий морской бриз обдувает лицо. Часы показывают два часа дня, а значит самое время начинать рабочий день! Одна рука лежит на клавиатуре, вторая держит прохладительный коктейль. В этот момент сон заканчивается…
Конечно же, удалённая работа и гибкий рабочий график не имеют ничего общего с ленивыми нажатиями клавиш, лёжа на берегу, и требуют определённой самодисциплины. Но насколько больше можно получить удовольствия от презентации коллеги, параллельно жуя бутерброд! Он уже совсем не похож на нудного осла, медленно переключающего слайды. А под пиво — любая презентация заиграет новыми красками! (Но мы же всё-таки люди серьёзные и такое себе не позволяем. Никогда. Это просто некрасиво.)
Работа из дома позволяет сэкономить уйму времени. Даже если дорога в одну сторону до работы занимает 20 минут, то только на дорогу в течение рабочей недели уходит более трёх часов — это три полноценных похода в спортивный зал! (Два хороших фильма.)
В то же время, для удалённой работы нужен определённый уровень комфорта. Сложно думать о рабочих задачах, когда на шее висит ребёнок, в соседней комнате играет музыка, а тебя отправляют сходить в магазин — ведь лучше всего думается на свежем воздухе. Поэтому если в квартире нет возможности организовать хорошее рабочее место, то ноги сами будут каждое утро нести своего владельца в сторону любимого офиса.
С гибким рабочим графиком выходит немного сложнее. Современные процессы разработки требуют постоянного взаимодействия членов команды: ежедневные стендапы, планирования, ретроперспективы. И это далеко не полный перечень митингов, в которых приходится участвовать. Рабочий день ты можешь начинать в любое время, но на стендапе в 8:00 будь добр быть. А уже в 16:00 вы будете дружно командой планировать задачи на следующую неделю. Очень гибко!
Между тем, присутствовать на всех митингах обычно нет острой необходимости, поэтому всегда есть возможность договориться с коллегами о своём отстутствии (и нормально выспаться). Да и митинги стараются не растягивать на весь день, а группировать в определённые временные рамки, удобные для всей команды.
Гибкий рабочий график — это действительно удобный бонус, который позволяет распланировать свой рабочий день в соответсвии со своими потребностями и оставаться максимально продуктивным.