Найти в Дзене

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

Всем привет, мы в Айтишном Поиске! Цель нового цикла статей о специальностях в том, чтобы дать читателю представление, чем в целом занимаются в IT-индустрии, и что делают люди на конкретных позициях, вакансии к которым можно найти на любом рекрутинговом ресурсе. Виды деятельности в ИТ крайне разнообразны, так что есть из чего выбрать
(сопоставив их с вашими склонностями, взять то, что ближе по душе). Список специальностей не претендует на исчерпывающую полноту; скорее, задача: покрыть 80% самых популярных, затратив на это 20% времени. Я расскажу о тех, с кем работал за последние 17 (на дату написания статьи) лет, и о чьей работе имею четкоё представление. Пожалуй, какие-то из перечисленных специальностей являются более важными, чем другие, но порядок моего рассказа это отражать не будет, он более-менее случаен. Хотя, над самой систематизацией пришлось немало попотеть. (У статьи, как и у других, есть видео-версия). Программирование
Далеко не одни только программисты (или же разработчи

Всем привет, мы в Айтишном Поиске!

Цель нового цикла статей о специальностях в том, чтобы дать читателю представление, чем в целом занимаются в 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).

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

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

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

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

YouTube

Telegram

До встречи!