Всем привет, мы в Айтишном Поиске!
Цель нового цикла статей о специальностях в том, чтобы дать читателю представление, чем в целом занимаются в IT-индустрии, и что делают люди на конкретных позициях, вакансии к которым можно найти на любом рекрутинговом ресурсе.
Виды деятельности в ИТ крайне разнообразны, так что есть из чего выбрать
(сопоставив их с вашими склонностями, взять то, что ближе по душе).
Список специальностей не претендует на исчерпывающую полноту; скорее, задача: покрыть 80% самых популярных, затратив на это 20% времени.
Я расскажу о тех, с кем работал за последние 17 (на дату написания статьи) лет, и о чьей работе имею четкоё представление.
Пожалуй, какие-то из перечисленных специальностей являются более важными, чем другие, но порядок моего рассказа это отражать не будет, он более-менее случаен.
Хотя, над самой систематизацией пришлось немало попотеть.
(У статьи, как и у других, есть видео-версия).
Программирование
Далеко не одни только программисты (или же разработчики ПО / Software Developers / Software Development Engineers)
Специальности “просто программист” сейчас уже не существует, потому что областей разработки ПО стало слишком много, для каждой необходимо знание своих языков, инструментов и подходов. Как итог - объём знаний просто перестал физически влезать в одну голову.
Так что программистские специальности сгруппированы вокруг множества подразделов, которые мы сейчас и рассмотрим.
Бэкенд / Backend
Бэкенд-разработка ведется в серверной части клиент-серверной архитектуры (здесь следовало бы сразу поговорить об этой концепции, но мы заготовим её на будущее, как тему отдельной статьи).
Чаще всего речь про Web-системы, то есть работающие в Интернет-среде (а, может, и Интранет, то есть внутренней корпоративной сети).
Для современного бэкенда характерен упор на микросервисы - (обычно)
небольшие, условно независимые программы, выполняющие свою ограниченную часть работы общего функционала системы. Предшественники микросервисов - монолиты - тоже не сдают позиции, и остаются популярным выбором.
На тему “Монолиты vs. Микросервисы” сломано много копий, и на каждом
следующем витке развития IT маятник общественного одобрения качается в
ту или иную сторону. Мы рассмотрим преимущества и недостатки этих
подходов в отдельной статье.
Иногда особенностью бекенда является хайлоад - работа систем в условиях
особенно высоких нагрузок - большом количестве сетевых взаимодействий
(примерный нижний порог хайлоада оценивается в сотни/тысячи запросов в
секунду, верхний порог - десятки тысяч, в пределе переваливающий за 100
тысяч обрабатываемых запросов в секунду).
Адаптация бэкенда к хайлоаду - крайне увлекательное занятие, требующее знаний из самых разных областей айти.
Специальности в бэкенде чаще всего сгруппированы вокруг языков программирования:
- Java-разработчик/программист
- Go-разработчик
- Python-разработчик, и так далее
У каждого языка есть свои инструменты разработки бэкенда - фреймворки,
например Spring в Джаве или Django в Питоне. Когда вы метите на бэкенд
специальность, фреймворки становятся обязательны к освоению; одного
только знания языка зачастую бывает недостаточно.
Фронтенд / Frontend
Во фронтенде разработка сфокусирована на клиентских частях программ - то
есть c тем, чем пользователь взаимодействует напрямую через графический
интерфейс (Graphic User interface / GUI).
Сейчас, обычно, когда говорят про фронтенд, имеют ввиду Web-фронтенд -
работающий в Веб-браузере (Google Chrome, Firefox, Edge и других).
Есть еще вариант разработки фронтенда на фреймворке Electron,
но там под капотом, по сути, тот же веб-браузер (Chromium, на базе
которого работает Chrome). Многие современные приложения, из тех что вы
ставите на свои Виндоус и Maки (например Discord или Twitch) - пример
веб-фронтенда на Electron’е.
В современном фронтенде не обойтись без уверенного знания JavaScript, а
лучше, его продолжателя - TypeScript. В будущем, мы обязательно
поговорим про различия языков с динамический и статической типизацией
(где яркие примеры это JavaScript и TypeScript соответственно).
Также, важно владеть HTML и CSS - это языки не программирования, но разметки, форматирования и управления стилями визуальных частей Web.
Специальности во фронтенде чаще всего сгруппированы вокруг веб-фреймворков, каждый из которых, как отдельная технология, требует предварительного и планомерного освоения.
Тройка самых популярных фронтенд-фреймворков это Angular, React и Vue.js. Наверное, 90% вакансий фронтендера имеют в себе один из этих фреймворков в требованиях.
Также важно и знание популярных JS библиотек (например jQuery, Lodash).
Однако, во фронтенде не стоит (да и не получится) ограничиваться погружением в один только фреймворк и библиотеки - важно получать знания из широкого спектра областей: освоить протоколы сетевого взаимодействия, основы ИТ-безопасности (хотя бы на уровне понимания инструментов, применяемых во фронтенде), принципы кроссбраузерности, кроссплатформенности, концепции Single Page Application (SPA), Progressive Web Application (PWA).
Как было упомянуто в начале, фронтенд это обычно web, но не всегда.
Разработка графического интерфейса происходит и в сфере Mobile, и,
отчасти, для Desktop, но о них чуть ниже.
Фулстек / Fullstack
Фулстек - это комбинирование бэкенд и фронтенд разработки внутри одной специальности.
С одной стороны, это удобное сочетание: программисты становятся более
универсальными (и, кстати, взаимозаменямыми); разработка конкретной
фичи может вестись Front-To-Back (от начала до конца) тем же самым
человеком, что снижает затраты на согласование работы бэкенд и фронтенд
частей.
Но есть и минусы: каждому конкретному разработчику требуется более
широкий профиль разнородных познаний. То есть в дилемме развития
компетенций в глубину или в ширину - выбор делается в сторону
последнего. Я сам проработал как Fullstack несколько лет, перед тем как
предпочел сосредоточиться на бэкенд разработке - перевыбрал “глубину”.
Иногда, фулстек специальность - это комбинация бэкенд и фронтенд инструментов, например: Java+Spring и Angular+Typescript (так было в моём случае).
Но есть инструменты, сочетающие в себе и бэк, и фронт. Например с Node.js можно писать на Javascript и на клиенте, и на сервере, таким образом,
шаря (от share - поделиться [кодом], т.е. дать возможность исполнять
один и тот же код в разных модулях) часть кодовой базы.
Есть и более экзотичные варианты фулстек разработки, например с использованием Kotlin/JS - расширения бэкендового языка Kotlin (преемника Джавы), позволяющего писать на нем и для фронтенда.
Встроенные системы / Embedded
Embedded-разработка сконцентрирована вокруг встроенных систем - компьютеров, (чаще всего миниатюрных), выполняющих специфический круг задач (в отличие от систем общего назначения, типа настольных ПК). Например, это электронная начинка бытовой техники, автомобильных систем, промышленного и медицинского оборудования.
Интересными из актуальных направлений, связанных с embedded мне видятся робототехника (которая, впрочем, не ограничена одним embedded),
концепция Internet of Things (IoT) и базирующиеся на ней технологии Умного Дома.
На embedded-специальностях из языков программирования обычно требуются С, C++, и в некоторых случаях Assembler под конкретную архитектуру контроллера, с которым идет работа.
Желательными являются познания в электронике и электротехнике (в первой - больше физики, во второй - упор на практику).
Хорошим подспорьем может стать опыт с такой платформой как Arduino (Вот, например, хорошая вводная статья), посмотрите, может вам зайдёт, даже как хобби.
ПО для embedded пишется с учётом серьёзных ограничений по объему памяти, быстродействия и механизмам отладки целевых систем. То есть железо обычно маломощное, и заменять его на более дорогостоящие комплектующие не целесообразно - получится совсем другой итоговый ценник, и, вероятно, понадобятся другие поставщики.
Это заметное отличие, от, например бекенда, где иногда можно закидать
проблемы дополнительным “железом”, что стало особенно просто с переходом backend в “облачные” сервисы.
Мобайл / Mobile
Современные смартфоны совмещают в себе как embedded на уровне железа, так и разработку на уровне приложений их операционных систем, которая и
выделена в специальность “мобильная разработка”.
Разработка программ на мобильных устройствах имеет больше отличий, чем сходств с бэкендом и фронтендом. Здесь, отчасти, и ограничения на
производительность целевых устройств, как в embededd.
Как вы знаете, сейчас на рынке остались два лагеря: Android и iOS; остальное - уже незначительные проценты.
iOS-разработчики занимаются софтом исключительно для Apple-устройств. Для iOS понадобится знание языков Swift и Objective-C, а также знание
инструментов взаимодействия с операционной системой - iOS SDK (Software
Development Kit - так называется набор инструментов, библиотек и
документации для разработки на конкретной платформе).
В то же время, Android-разработчики могут действовать в более широкой
области, так как Android является отчасти открытой системой и не
ограничен мобильниками и планшетами, а может работать, например в Smart
TV и другой бытовой технике, хотя, это и небольшая доля рынка.
Для Android-разработки нужно знание Kotlin, и, точно также, инструментов взаимодействия с системой - Android SDK.
Десктоп / Desktop
Десктоп-разработка сосредоточена на создании программ для привычных всем ПК, то есть настольных компьютерах или ноутбуках.
Эта сфера несколько потеряла популярность после повсеместного перехода на Web (в том числе и на Web-интерфейсы), но всегда остается
востребованной.
Важные, повсеместно используемые программы, такие как веб-браузеры (для доступа к тому же Web!), программы-срéды разработки (называемые IDE - Integrated Development Environment), например, Intellij IDEA, XCode;
офисные программы типа Microsoft Word, Excel, и множество другого
профессионального софта - всё результаты трудов десктоп-разработчиков.
Популярным языком для десктоп разработки является C# (перенявший пальму первенста у Delphi, господствовавшего в среде Windows десктоп-приложений не одно десятилетие); на C# написано множество современных продуктов Microsoft, и различный корпоративный бизнес-софт.
Часто бывает востребован C++, например с фреймворком Qt (успешным во многом благодаря инструментарию создания графических интерфейсов Qt Designer).
Пишут и на Java, где ярким примером будет лидер рынка IDE (сред разработки) - Intellij IDEA, и, кстати, популярнейшая игра Minecraft (которая теперь называется Minecraft Java Edition, в то время как Minecraft Bedrock
Edition для мобильных и консолей написан уже на C++), но игр мы коснемся чуть позже.
Кстати, языки Swift и Objective-C, (на которых пишут для Apple iOS),
используются и для macOS - операционной системы для настольных Mac, а
значит, попадают в область десктоп разработки.
Системное программирование / System
Еще одна сфера, доля которой в разработке сокращается (не в абсолютном
выражении, а за счет роста доли других сфер), но являющаяся критически
важной и никогда не исчезающей - это системное программирование. В
чём-то оно перекликается с embedded, и некоторые упрощенные
классификации объединяют системную и embedded разработки в одну область.
Системное программирование - о создании низкоуровневых компонентов.
“Низкоуровневый” - значит не “низкого качества”, а лежащий ближе к
физическому устройству компьютера, чем к прикладным программам. Это,
например, операционные системы и их составляющие части, такие как
драйверы, утилиты.
К другим примерам работы системного программиста можно отнести компиляторы и интерпретаторы языков программирования.
Синтезом системной и embedded разработки являются firmware - прошивки устройств, например сетевого оборудования типа роутеров.
В каком-то смысле, системная разработка это Rocket Science от IT, сфера
сложная и требующая глубокого знания компьютерной архитектуры,
информатики и устройства операционных систем.
Но никогда не стоит пасовать перед сложностью, если вам интересно
заниматься столь фундаментальными вещами. Конечно, в System приходят не
сразу, а по прошествии времени и накоплению опыта в смежных областях
разработки.
Применяемые языки, как и в embedded - С/С++ и вариации ассемблера.
Геймдев / Gamedev
Думаю, многие (как и я), впервые проявили интерес к айти после знакомства с компьютерными играми в детстве. Интересно было не только играть, но и
разобраться самому - как создавать подобное?
Геймдев - это индустрия разработки видеоигр. Хотя, можно было бы относиться к ней, просто как к одной из категорий, перечисленных ранее, но я выделил ее. Почему?
Хотя бы потому, что gamedev-вакансии обычно постятся на обособленных
площадках, да и во всей индустрии - “своя атмосфера”. Наверное, из-за
того, насколько люди горят здесь своей работой (горят, и, увы, сгорают -
тенденции к авральным переработкам в gamedev широко известны - там это
называют “кранчи”).
Эта одна из немногих областей, где вам реально пригодится знание математики, особенно при работе с 2D/3D-графикой.
Здесь ценится знание специфических инструментов, например игровых движков, таких как Unity или Unreal Engine.
Помимо общепринятых C++ или C#, многое пишется и на своих внутренних
скриптовых языках, или на малораспространённом за пределами геймдева
языкe Lua (к примеру, это основной язык платформы Roblox).
Геймдев - это не только программирование, но еще и анимация, арт, игровой
дизайн. Тема, на самом деле, огромная, и крайне меня интересующая; я
даже подумывал завести для нее отдельный канал, но, пока, боюсь
разорваться между разными направлениями.
На этом мы заканчиваем с чисто разработчискими/программистскими специальностями.
Однако, это была только вершина айсберга, в следующей статье рассмотрим работу в других аспектах жизненного цикла ПО.
Если вам нравится в Айтишном Поиске - подписывайтесь на наш Ютуб и Телеграмм каналы:
До встречи!