Специальности в IT. Программирование

Специальности в IT. Программирование

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

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

Список специальностей не претендует на исчерпывающую полноту; скорее, задача - покрыть 80% самых популярных, затратив на это 20% времени.

Я расскажу о тех, с кем работал за последние 17 (на дату написания статьи) лет, и о чьей работе имею четкоё представление.

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

Хотя, над самой систематизацией пришлось немало попотеть.

(У статьи, как и у других, есть видео-версия).

Программирование

Далеко не одни только программисты (или же разработчики ПО / Software Developers / Software Development Engineers)

Специальности “просто программист” сейчас уже не бывает, потому что областей разработки ПО стало слишком много, для каждой необходимо знание своих языков, инструментов и подходов. Как итог, объём знаний просто перестал физически влезать в одну голову.

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

Бэкенд / Backend

Бэкенд-разработка ведется в серверной части клиент-серверной архитектуры (здесь следовало бы сразу поговорить об этой концепции, но мы заготовим её на будущее, как тему отдельной статьи).

Чаще всего речь про Web-системы, то есть работающие в Интернет-среде (а может и Интранет, то есть внутренней корпоративной сети).

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

На тему “Монолиты vs. Микросервисы” сломано много копий, и на каждом следующем витке развития IT маятник общественного одобрения качается в ту или иную сторону. Мы рассмотрим преимущества и недостатки этих подходов в отдельной статье.

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

Адаптация бэкенда к хайлоаду - крайне увлекательное занятие, требующее знаний из самых разных областей айти.

Специальности в бэкенде чаще всего сгруппированы вокруг языков программирования:

  • Java-разработчик/программист
  • Go-разработчик
  • Python-разработчик, и так далее

У каждого языка есть свои инструменты разработки бэкенда - фреймворки, например Spring в Джаве или Django в Питоне. Когда вы метите на бэкенд специальность, фреймворки становятся обязательны к освоению; одного только знания языка зачастую бывает недостаточно.

Фронтенд / Frontend

Во фронтенде разработка сфокусирована на клиентских частях программ, то есть тем, с чем пользователь взаимодействует напрямую через графический интерфейс (Graphic User interface / GUI).

Сейчас, обычно, когда говорят про фронтенд, то имеют ввиду Web-фронтенд - работающий в Веб-браузере (Google Chrome, Firefox, Edge и других).

Есть еще вариант разработки фронтенда на фреймворке Electron, но там под капотом, по сути, тот же веб-браузер (Chromium, на базе которого работает Chrome). Многие современные приложения, из тех что вы ставите на свои Windows и 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).

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

На этом мы заканчиваем с чисто разработчискими/программистскими специальностями.

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

Если вам нравится в Айтишном Поиске - подписывайтесь на наш Ютуб и Телеграмм каналы:

До встречи в следующем выпуске!

1
Начать дискуссию