В предыдущей статье мы поговорили про уровни разработчика ПО, теперь настало рассказать вам про специализации.
Как и среди врачей, в мире нет универсальных программистов, способных одновременно хорошо разрабатывать веб-сайты, мобильные, десктопные и серверные приложения, заниматься системным программированием и администрированием, разработкой баз данных, систем с искусственным интеллектом, и многим-многим другим. Конечно, хороший программист знает в общих чертах о многих областях ИТ, но как правило хорошо владеет только одной или двумя. Например, человек может делать серверные приложения с использованием баз данных, а мобильный разработчик может также сделать веб-сайт.
Можно ли хорошо разбираться во всех областях ИТ? Ответ - нет, на данный момент это уже невозможно. Человеку просто не хватит жизни чтобы во всём разобраться и понимать как всё работает. В мире ИТ уже созданы сотни различных языков, форматов, протоколов, фреймворков, операционных систем, библиотек, баз данных, инструментов для разработки и т.д. Как и врач, разработчик должен в целом понимать как работает программное обеспечение (начиная от микроконтроллеров и заканчивая прикладным ПО), а также обычно специализируется в одной (реже в нескольких) областях.
Итак, какие же основные специализации разработки ПО сейчас существуют? Я предлагаю сначала разделить специализации на большие области, охватывающие множество специализаций. Разработчик может владеть несколькими специализациями как из одной, так и из разных областей. Итак, вот основные области и входящие в них специализации:
Системное программирование
Данная область охватывает в себя разработку ПО, непосредственно взаимодействующего с "железом" (с процессором, памятью, контроллерами, сетью, устройствами ввода-вывода и т.п.). Она включает в себя разработку драйверов, операционных систем, систем управления базами данных (СУБД), различных утилит и инструментов, компиляторов и языков программирования.
Данное системное ПО является связующим между прикладным ПО и железом, на котором оно работает. Благодаря этому когда мы пишем прикладную программу (например игру или текстовый редактор), то нам не нужно задумываться на каком железе эта программа будет работать (процессор Intel или AMD, какая видеокарта будет или жёсткий диск и т.д.). Прикладная программа работает поверх системного ПО, которое скрывает детали железа внутри компьютера. Если вы написали программу на компилируемом языке программирования, то затем компилятор (специальная программа) преобразует вашу программу в машинный код, который уже может выполняться на конкретной операционной системе. Кстати не только компьютера, системное ПО есть и во многой бытовой технике, например в роботах-пылесосах, кофеварках и т.д.
Как правило, системное программирование требует знания низкоуровневых языков, таких как Ассемблер или Си.
Собственно специализации в данной области обычно разделяются по типам разрабатываемого системного ПО:
- разработка драйверов
- разработка операционных систем
- разработка СУБД
- разработка инструментов разработки и языков программирования для прикладного ПО
- и т.д.
Разработка настольных приложений
Такие приложения также называют десктопными (от слова desktop, что означает настольный компьютер). Они устанавливаются на компьютер и исполняются локально. Примерами таких программ могут служить веб-браузер, текстовый или фото редактор, программы для монтажа видео и многое другое. В качестве пользователя таких программ выступает как правило один человек.
Десктопные программы могут быть как элементарными, так и очень сложными, также в них требуется создание пользовательского интерфейса с кнопками, меню и т.д.
Разработка таких приложений ведется на самых разных языках: Java, Delphi, C++, C# и других. Соответственно специализации разработчиков делятся как по используемым языкам программирования, так и по типам разрабатываемых приложений (кто-то специализируется на программах обработки видео, кто-то делает текстовые редакторы, кто-то веб-браузеры и т.д.).
Back-end разработка
Back-end разработка - это разработка ПО без пользовательского интерфейса, которое работает на сервере и обслуживает как правило запросы множества пользователей, поэтому такую разработку также называют серверной.
Сервер в данном случае имеет два значения. Первое - это физическая машина (компьютер), доступная по локальной сети или через интернет, второе - это специальная программа (например веб-сервер или сервер приложений), которая располагается на физическом сервере, получает и перенаправляет запросы пользователей на конкретное приложение.
Пользователи отправляют запросы на сервер с использованием самых разных способов, это зависит уже от конкретного сервера и приложения. Самих приложений на программе-сервере может быть сколь угодно много, поэтому сервер должен определить по запросу к какому приложению он относится. После обработки запроса приложением программа-сервер отправляет пользователю ответ.
Примеров такого серверного ПО вокруг полным-полно. Многие сайты в интернете имеют серверную часть, которая позволяет формировать динамический контент. Запросы к этому серверному ПО отправляет веб-браузер когда пользователь нажимает на ссылку, кнопку на странице, или при другом событии. После получения и обработки ответа от сервера веб-браузер отображает полученные данные.
Помимо веб-сайтов серверная часть также нужна многим приложениям для мобильных устройств, а также некоторым десктопным программам.
Серверное ПО, как и десктопное, также может быть как элементарным, так и чрезвычайно сложным. Для его разработки используется множество языков, например: PHP, Python, Java, C# , Ruby и другие. Серверные разработчики специализируются как правило по используемым языкам.
Front-end разработка
Если у веб-сайта есть серверная часть (back-end), то должен быть и пользовательский интерфейс (front-end). Front-end - это программа, которая выполняется в веб-браузере локально на компьютере пользователя. Она обрабатывает все события, возникающие при нажатиях на кнопки, ссылки и других действиях. Также эта программа отправляет запросы на сервер и получает ответы, изменяя при этом интерфейс сайта.
Разработчики front-end как правило специализируются на используемых фреймворках для создания таких приложений, которых насчитывается несколько десятков. Но данная специализация довольно размыта, поскольку переход с использования одного веб-фреймворка на другой не составляет особых проблем для опытного веб-разработчика.
Game dev
Если вы хотите делать игры, то ваш путь - становиться game developer, т.е. разработчиком игр. Поскольку игры бывают самые разные (как по типам, так и по сложности), пишутся на самых разных языках, то и специализаций здесь довольно много.
Мобильная разработка
Разработчики мобильных приложений (они же "мобильщики") делают программы для установки на мобильные телефоны, планшеты и другие устройства, поддерживающие соответствующую платформу, под которую разрабатывается мобильное приложения. На данный момент в мире есть две основные платформы: Android и iOS. Соответственно и разработчики как правило специализируются на какой-либо одной их них (но некоторые умеют разрабатывать приложения под обе платформы).
Специализированная прикладная разработка
Данный тип разработки предполагает создание программ с использованием специализированных инструментов и языков. Примерами специализаций здесь могут быть 1С-программист, SAP-программист, разработчик программ для математического анализа и многое другое.
Искусственный интеллект
Под данным понятием объединены самые различные специализации: машинное обучение, распознавание образов, анализ и работа с большими данными и прочие хитрости, за которыми на самом деле будущее.
Это чрезвычайно обширная, сложная и интересная область.
Итак, мы рассмотрели основные области и специализации разработчиков ПО. Как же определиться с направлением, кем становиться? Всё зависит от вашей задачи и интересов. Надеюсь, следующая статья поможет вам принять правильное решение.