Уроки, извлеченные в качестве инженера-программиста начального уровня
Опубликовано: 2022-08-30Если бы вы спросили меня год назад, чем занимается инженер-программист, я бы ответил что-то вроде «решения проблем с помощью кода». Это простой ответ, который указывает на то, как оценивается наша работа. Для инженеров в командах, ориентированных на продукт, эти проблемы могут включать в себя реализацию новой функции, о которой просили клиенты, или повышение производительности существующих функций.
Если бы вы сегодня задали мне тот же вопрос, я бы дал немного другой ответ. Инженеры-программисты должны решать правильные проблемы с помощью кода, и при эффективном решении они достигают бизнес-целей. Выяснение того, какие проблемы нужно решить и как их решить, является наиболее важной частью работы разработчика, а фактические детали реализации второстепенны.
Мой путь в программной инженерии
Я заинтересовался программированием после того, как прослушал курс Upperline Code летом, перед тем, как поступить на первый год обучения в колледже. Я получил эту возможность благодаря программе подготовки к колледжу и карьере, в которой я участвовал, под названием The Opportunity Network.
Upperline Code был моим первым знакомством с программированием, и я быстро понял, что мне интересно научиться программировать. Позднее тем же летом я получил пакет документов для зачисления в Нотр-Дам и перешел из Колледжа искусств и литературы в Инженерный колледж, чтобы специализироваться в области компьютерных наук.
Одними из моих любимых курсов CS были «Дизайн/анализ алгоритмов», «Облачные вычисления» и «Проблемы программирования». Задачи были интересными, и профессора прекрасно представляли новые идеи и объясняли концепции.
Во время учебы я знал, что хочу работать инженером-программистом и использовать полученные технические навыки. К счастью, летом перед моим выпускным годом у меня была возможность пройти стажировку в качестве инженера-программиста в Kantata и программировать в паре с другими инженерами, чтобы помочь реализовать функции.
Мой опыт стажировки, наряду с ободряющими речами моих профессоров, вселили в меня уверенность в том, что я не соглашаюсь на какую-либо другую роль, когда я только начал подавать заявление о приеме на работу. После большого количества времени, проведенного в офисе, я получил высшее образование в 2021 году со степенью CS и принял предложение стать младшим инженером-программистом здесь, в Sprout Social.
Освоение Sprout Social
Частью того, что он был новичком в этой роли и новичком в компании, было необходимость развивать как общие навыки разработки программного обеспечения, так и знания в предметной области Sprout. Я обнаружил, что задачи, для понимания которых требовались общие знания в области программирования, мне было легче всего решать. Однако задачи, которые требовали знания архитектуры Sprout, отнимали у меня время, и мне приходилось полагаться на помощь своей команды. Хотя есть некоторые проблемы, которые вы можете решить, читая документацию в Интернете, вы не всегда можете найти информацию, относящуюся к работе, которую вы выполняете, — возможность обратиться за советом к другим имеет решающее значение.
Первое, что бросилось мне в глаза, когда я присоединился к Sprout, — это совместный процесс разработки. Я знал, что для разработки функций нужны целые команды, но я не знал, как это выглядит на практике. Я быстро понял, что для выпуска успешной функции требуется совместная работа многих людей в разных ролях — от менеджеров по продукту, определяющих требования к проекту, до дизайнеров, создающих макеты, и инженеров, реализующих функции. Сотрудничество было не чем-то необязательным, а необходимостью для достижения целей нашей команды.
Изучение того, как перемещаться по различным кодовым базам и построение ментальной модели того, как различные сервисы взаимодействуют друг с другом, было крутой кривой обучения. Поскольку основным бизнесом Sprout является программное обеспечение, его архитектура во многом определяется бизнес-требованиями. По мере того, как я наращивал темпы, я должен был знать о бизнес-проблемах, которые пытались решить разработчики, и о том, почему были приняты предыдущие архитектурные решения.
Сначала я был немного напуган тем, что пулл-реквесты требовали проверки, прежде чем их можно было объединить в кодовую базу. Понимание того, что основной целью проверок кода является обмен знаниями и соблюдение стандартов кода, помогло изменить мою точку зрения.
Проверка кода помогла отточить мои технические навыки и улучшить качество моих запросов на вытягивание. Когда коллеги давали мне советы о том, что нужно изменить, знакомили меня с новыми шаблонами и указывали на соответствующие области кодовой базы, это было очень полезно. Чтение запросов на вытягивание от других инженеров также дало мне ценную информацию о других сервисах, над которыми я непосредственно не работаю.
Ваш предыдущий опыт имеет значение
Существует преобладающее представление о том, что когда вы вступаете в новые этапы жизни, ваш предыдущий опыт больше не имеет значения. Как только вы поступите в колледж, ваш школьный опыт больше не будет иметь значения. Как только вы начинаете работать, ваш опыт работы в колледже больше не имеет значения.
Но то, что часто упускается из виду, заключается в том, что наш опыт, знания и привычки имеют усугубляющий эффект. Обычно мы можем достичь чего-то нового только благодаря работе, которую мы проделали раньше. Знания и навыки, которые я получил ранее, сильно повлияли на то, как я подхожу к новым задачам в качестве инженера-программиста начального уровня.
Занятия в бакалавриате, которые оказали самое непосредственное влияние на мою повседневную работу в Sprout, были «Вызовы программирования» и «Концепции баз данных». Первый научил меня разбивать большие проблемы на более мелкие части, чтобы решать их более эффективно. Это помогло мне более целенаправленно структурировать свой код и улучшить его читабельность.
Концепции баз данных научили меня фундаментальным концепциям реляционных баз данных и охватили такие темы, как проектирование схемы базы данных и SQL. Я научился писать запросы, что оказалось чрезвычайно полезным, поскольку мне часто приходится обращаться к нашим базам данных для решения проблем или ответов на вопросы.
Возможности, которые у меня были за пределами классной комнаты, были столь же ценными. Java не был языком, который рассматривался в большинстве моих курсов, однако у меня была возможность поработать над ним в бизнес-проекте, которым руководил один из моих профессоров. Я получил практический опыт написания Java, работы с базами данных MySQL и создания образов Docker. Изучение Java было особенно полезным, так как большинство сервисов Sprout написано на нем.
Есть много других навыков, которые я приобрел за время учебы в бакалавриате, которые я считаю само собой разумеющимися, например, навигация в командной строке и понимание основных концепций программирования. Это распространенное заблуждение, что, поскольку большинство тем, изучаемых на бакалавриате, носят теоретический характер, они не подготовят вас к карьере инженера-программиста. Однако я считаю, что верно и обратное: навыки, которые вы изучаете в бакалавриате, имеют значение, даже если они не применимы напрямую к вашей повседневной работе.
Информатика — чрезвычайно широкая область
CS охватывает множество специализаций, таких как искусственный интеллект, машинное обучение и наука о данных. Опыт, который вы получаете в бакалавриате, служит фундаментальным знанием, которое может пригодиться вам в различных ролях начального уровня, не ограничивающихся разработкой программного обеспечения. Переход от бакалавриата к штатной должности дает возможность изучить, какая роль и специальность вам подходят.
Если вы хотите начать карьеру в области разработки программного обеспечения, Sprout — отличное место для начала.