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

Насколько вы готовы к будущему?

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

Одним из таких изменений, начиная с начала 2000-х годов, стал рост облачных вычислений. Amazon выпустила AWS в 2006 году, предоставив компаниям альтернативу локальному хранилищу и его ограничениям. Позже Google и Microsoft запустили собственных поставщиков облачных услуг в Google Cloud и Azure соответственно.

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

Такие изменения могут быстро превратиться в снежный ком. Например, как инженер-программист, я видел, как люди страдали из-за того, что им не хватало навыков для работы с облачными вычислениями. Разработчики, которые не приняли облако раньше, стали менее актуальными. Они чувствовали, что не могут предоставить содержательную обратную связь, и в конечном итоге внесли меньший вклад в успех своей команды.

Эта предостерегающая история подчеркивает важность обновления вашего пояса инструментов нужными навыками по мере развития отрасли. Независимо от того, начинаете ли вы свою карьеру в области разработки программного обеспечения или руководите большой командой инженеров, важно следить за тенденциями и активно учиться.

2 главных набора навыков для разработчиков в 2023 году

В этой связи я хочу остановиться на двух тенденциях, за которыми я внимательно следил: Машинное обучение и Системный дизайн.

Это разные, но все более пересекающиеся дисциплины, и у них есть одна общая черта: будучи разработчиком или ведущим инженером в 2023 году, вы не можете позволить себе их игнорировать.

Машинное обучение (МО) — одна из самых быстроразвивающихся областей технологий. Хотя эта область развивалась десятилетиями, за последние 20 лет машинное обучение быстро вышло за рамки академической дисциплины. В начале 2000-х произошел рост больших данных, когда такие компании, как YouTube и Facebook, начали бороться с огромными объемами данных, которые они генерировали, а также хранить и анализировать их.

Огромный объем анализируемых данных сделал машинное обучение незаменимой бизнес-дисциплиной, и почти каждая отрасль приняла его принципы и системы. На самом деле, по прогнозам исследовательской компании Million Insights, к 2025 году рынок машинного обучения вырастет до более 96 миллиардов долларов США.

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

Между тем, системный дизайн уже необходим. Это стало неоспоримым набором навыков среди опытных разработчиков на работе и на собеседованиях для продвижения по карьерной лестнице. Его рост был вызван распространением распределенных систем, поддерживающих пользователей и функциональные возможности, которые зависят от постоянно подключенных устройств.

Сегодня я хочу подробнее остановиться на почему в 2023 году вам следует расставить приоритеты в изучении машинного обучения и системного проектирования. Я также дам советы по обучению. эти навыки и оставаться на переднем крае.

Машинное обучение: будущее уже наступило

Машинное обучение окружает нас повсюду. Мы уже можем наблюдать его влияние на обычные устройства и продукты, от голосовых помощников и интеллектуальных транспортных систем до поисковых систем. По мере увеличения объема больших данных машинное обучение будет становиться все более распространенным в программном обеспечении, которое мы используем каждый день. Эта тенденция означает, что разработчики, не знакомые с ML, столкнутся с неудачами в своей карьере и профессиональном росте.

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

Эти достижения подчеркивают, насколько важно разработчикам понимать машинное обучение, если они хотят сохранять конкурентоспособность в отрасли. Хотя возникающее машинное обучение не обязательно заменит роль разработчиков, оно становится для них важным навыком.

Как изучение машинного обучения поможет вам в вашей карьере

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

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

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

История предлагает урок. Разработчики, начавшие свою карьеру в 1990-х годах, столкнулись с трудностями при поиске работы, когда они перешли от настольных продуктов к компаниям FAANG, таким как Facebook и Google. Я лично знаю некоторых инженеров, которые считали, что их опыт и навыки больше не актуальны, и они не могли вносить значимый вклад в собрания, поскольку их команды перешли на облачные технологии. Я подозреваю, что то же самое может произойти с ML.

Как я рекомендую изучать машинное обучение

Несмотря на то, что машинное обучение находится на переднем крае новых технологий, пусть оно вас не пугает. Вот два совета по началу работы с ML.

  1. Вы можете успешно работать с машинным обучением, понимая основы, в том числе обладая сильными (но не обязательно исключительными) математическими навыками.
  2. Распространенное заблуждение состоит в том, что для изучения машинного обучения нужно быть математическим гением. Правда в том, что большинство людей в этой области на самом деле используют уже существующие модели, а не создают их. (Создание моделей машинного обучения — это работа специалиста по машинному обучению). Ключом к успеху в разработке с использованием машинного обучения является понимание того, как работают эти модели, и их практическое применение. Так что не позволяйте математической фобии помешать вам погрузиться в эту захватывающую область!
  3. Поскольку эта область продолжает развиваться, я ожидаю, что инженеры, работающие с моделями машинного обучения, будут сталкиваться со все более строгими собеседованиями. Стоит отметить, что облачные интервью — довольно новое явление, ставшее популярным только в последнее десятилетие. Однако я также считаю, что это всего лишь вопрос времени, когда аналогичные интервью на основе дизайна станут стандартом и для машинного обучения. Те, кто заинтересован в прохождении предварительных собеседований, должны быть в курсе и быть готовыми к этим неизбежным изменениям в процессе найма.

Некоторая тревога по поводу изменений понятна, но давайте не будем упускать из виду, насколько захватывающими являются машинное обучение и ИИ. Что касается будущих тенденций ИИ, мы видим, что генеративный ИИ уже завоевывает популярность в таких отраслях, как контент-маркетинг и создание изображений, и при достаточном финансировании будущее выглядит многообещающим. Впечатляющие алгоритмы, лежащие в основе GPT-3, DALL-E и Jasper, дают представление о том, что ждет эти технологии.

Когда вы научитесь работать с этими инструментами и моделями машинного обучения, следите за более интересными разработками.

Системный дизайн: основа современных систем

Давайте перейдем от алгоритмов к архитектуре. Я не могу не подчеркнуть: дизайн системы стал решающимиз-за распределенных систем.

Это относительно недавнее изменение. До 2010 г. ведущие инженеры Amazon, Google и Microsoft обсуждали распределенные системы, но мало кто из других компаний говорил о них. Большинство приложений работали на настольных компьютерах и не взаимодействовали с облаком.

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

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

Два примера из последних новостей помогают нарисовать картину, как я уже говорил.

  • Ваша умелая дизайнерская работа может помочь системе процветать в сложных условиях, о чем свидетельствует Stripe, избегающая простоев из-за всплесков трафика в Черную пятницу и Киберпонедельник в прошлом году. (Если вы пропустили этот бюллетень, я добавил его в свой Substack.)
  • С другой стороны, серьезный сбой может вызвать вопросы об архитектуре и дизайне системы. Именно это произошло, когда Ticketmaster рухнул под тяжестью спроса фанатов Тейлор Свифт на билеты в ноябре. (Этот информационный бюллетень также находится в моем Substack.)

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

Как изучение системного дизайна поможет вам в вашей карьере

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

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

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

Разработчики мобильных приложений. Ваше приложение изначально будет сильно зависеть от распределенных систем. Предположим, вы разрабатываете сервис совместных поездок, такой как Uber. Чтобы построить это сегодня, услуги, которые вам, вероятно, понадобятся, включают:

  • Twilio для отправки текстовых сообщений
  • Нашивка для обработки платежей
  • Карты Google, чтобы проложить маршрут
  • Yelp, чтобы найти пользователей поблизости

Так как вы также строите свою собственную распределенную систему, вам нужно будет использовать компоненты системного дизайна, концепцию, о которой я немного расскажу.

Внешние разработчики. Ваша разработка никогда не происходит изолированно. Когда вы визуализируете современное веб-приложение, ваша страница будет вызывать несколько разных распределенных систем через API.

Домашняя страница Google — хороший пример. С точки зрения веб-дизайна это просто окно поиска с логотипом. Но с точки зрения функций поиска браузер пользователя Google будет взаимодействовать с сотнями тысяч серверов через распределенные системы. Через несколько секунд между тем, как пользователь вводит условия поиска и нажимает Enter, происходит следующее:

  1. По мере того, как пользователь печатает, каждый символ передается в систему опережающего ввода через API. Typeahead меняет свой вывод с каждым дополнительным символом, ориентируясь на намерения пользователя в течение миллисекунд.
  2. Пользователь нажимает Enter, запуская несколько систем. Поисковые запросы направляются в индекс, чтобы найти релевантные веб-страницы, и на YouTube, чтобы найти релевантные видео. Если поисковый запрос совпадает с названием фильма, ресторана или книги, более специализированные системы предоставляют пользователю совершенно другой опыт. Кроме того, рекламные службы используют поисковый запрос и размещают несколько ссылок над результатами поиска.

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

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

Как я рекомендую изучать системный дизайн

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

Вот три совета, чтобы начать обучение.

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

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

Каждый из 16 стандартных строительных блоков на следующем рисунке имеет свои особенности. Вы захотите узнать, что делает каждый стандартный блок и как он взаимодействует с другими.

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

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

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

Начните делать себя незаменимым уже сегодня

У образования есть несколько фантастических возможностей для изучения как системного дизайна, так и машинного обучения. Курс Основы машинного обучения для инженеров-программистов от наших партнеров из Pragmatic Programmers предоставит вам практические знания о современных методах машинного обучения. Вы также познакомитесь с тремя основными компонентами дисциплины: контролируемое обучение, нейронные сети и глубокое обучение.

Я также очень рекомендую курс Интервью Grokking Modern System Design для инженеров и менеджеров. Он идеально подходит для того, чтобы помочь вам научиться проектировать крупномасштабные системы, такие как YouTube, Instagram и Twitter, а также дать вам возможность получить более глубокое представление о ключевых строительных блоках современного проектирования систем.

Важно отметить, что оба курса научат вас применять новые знания на практике в интерактивных средах кодирования.

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

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

Удачного обучения!

Это сообщение изначальноизEngineering Enablement, бесплатного информационного бюллетеня, доступного на Substack, от Фахима уль Хака, генерального директора и соучредителя Educative, лучшая в мире платформа для обучения разработчиков программного обеспечения.