С тех пор, как несколько месяцев назад я приехал в Берлин, чтобы работать старшим инженером по внешнему интерфейсу, я встречал множество людей, которые задавали мне один (или все) из следующих вопросов: «Что вам нужно сделать, чтобы работать в качестве разработчик?» «Чем вы занимаетесь изо дня в день?» «Могу ли я начать в 30?» В этой статье я собираюсь дать ответы на некоторые из них и пролить свет на этот прекрасный (и запутанный) мир программного обеспечения.

С чего начать?

В мире, где количество информации, которую мы ежедневно получаем, больше сбивает нас с толку, чем проясняет, программирование не является исключением. Если вы начнете искать ресурсы о чем-то конкретном (например, React, Angular), вы можете найти тысячи и тысячи постов, видео и статей. Проблема в том, что многие из них быстро устаревают и могут содержать ошибки.
Существуют такие платформы, как Udemy и Pluralsight, где можно получить курсы очень хорошего качества по очень низкой цене. В долгосрочной перспективе инвестиции в 10 долларов за профессиональный курс окупаются, и, исходя из моего опыта, много времени тратится впустую на поиски качественных бесплатных руководств. Когда вы только начинаете, очень важно иметь профессиональный курс с периодическими обзорами, где вы можете доверять тому, что изучаете.

Технологии и направленность

Другой вопрос, который я обычно получаю, касается разницы между Backend, Frontend и Fullstack разработчиком.

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

Сегодня наиболее широко используемыми языками в этой области являются Python, Java, Ruby, C#, Go, Javascript (NodeJS) и Rust. У каждого есть свои преимущества и недостатки, но если бы мне пришлось давать рекомендации, я бы склонялся к Python, Javascript и Go.

Основными необходимыми навыками для должности Backend программиста я считаю знание языка из перечисленных выше; связанный фреймворк (NodeJS для Javascript, Rails для Ruby и т. д.); SQL для работы с реляционной базой данных (MySQL, SQLServer и т. д.) и Git (для контроля версий).

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

Javascript — бесспорный король в этом отношении. Тем не менее, есть разные варианты использования фреймворка или библиотеки: React, Angular и Vue — три жизнеспособных варианта на сегодняшний день.

Чтобы работать фронтенд-разработчиком, нужно знать Javascript, CSS, HTML, Git и некоторые из упомянутых выше фреймворков. Знание Typescript — это то, на что стоит обратить внимание, но не обязательное требование.

Fullstack-разработчик имеет опыт работы как с Frontend, так и с Backend, и может работать с обеими частями системы. Существует много дискуссий о требованиях к разработчику Fullstack, которые выходят за рамки этого вводного поста.

Один день из жизни разработчика

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

Существует общая классификация компаний, в которых можно работать: Продуктовые компании и фабрики программного обеспечения. Оба имеют преимущества и недостатки.

Производственная компания. В целом рабочий ритм более стабильный и спокойный. Компания разрабатывает продукт, и все ресурсы направляются на достижение этой цели. Рабочие процессы и процессы более организованы, но возможностей для обучения меньше, поскольку эти компании, как правило, сосредоточены на одном языке и платформе. Примеры продуктовых компаний: Airbnb, Facebook, The New York Times, Aklamio и др.

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

Сегодня компании обычно работают с Agile-методологиями работы (Scrum, Kanban), где установлен спринт в 2 недели работы (или столько, сколько нужно, но обычно 2). Этот спринт представляет собой набор требований, которые все участники проекта обязуются решить в согласованные сроки. Существует «совещание по планированию», на котором эти требования оцениваются, планируются, а тикеты (рабочие единицы) создаются и оцениваются.

В начале каждого дня обычно проводятся 10-минутные собрания (называемые «ежедневными» собраниями), на которых каждый разработчик быстро объясняет, над чем он работает, и есть ли какие-то препятствия, мешающие ему выполнить задачу своевременно. В конце спринта обычно проводится собрание под названием «ретро» (ретроспектива), на котором команды оценивают, что получилось хорошо, что пошло не так, что можно улучшить, что должно остаться прежним и т. д.

Мне 30 лет, не поздно ли оседлать волну?

Нет, определенно нет. Мне всегда нравится вспоминать случай с бывшим коллегой, который начал изучать программирование в 27 лет и к 29 годам работал в крупной консалтинговой фирме, получая очень хорошую зарплату. то же время, ни та же стартовая линия. Но если вам нравится этот мир, я могу заверить вас, что нет места, которое предлагает больше возможностей, чем это, в любом возрасте.

Прошли те времена, когда нужно было быть математическим гением, чтобы работать в мире программного обеспечения. Сегодня вам нужно только использовать навыки логического мышления, настойчивость и открытость, чтобы постоянно учиться и меняться.