Чем занимается разработчик программного обеспечения
Чем же занимаются программисты, и как объяснить это остальным?
Наверное, у каждого программиста возникала ситуация, когда совершенно не знакомые с IT люди просили его объяснить, в чём же состоит суть его профессии. Так уж сложилось, что у большинства людей понятие «программист» ассоциируется либо с замкнутым гиком в очках и свитере, либо с неким гениальным красноглазым подростком-хакером — но при этом никто не знает, чем именно он занимается.
Как рассказать им об этом, не пугая страшными терминами и фрагментами кода?
Под катом я воспроизведу такой рассказ, а также развенчаю несколько мифов о программировании.
— Чем занимаются программисты? Это не так-то просто рассказать… Ответьте мне для начала: как в двух словах можно описать, например, суть профессии хирурга?
— Хирург проводит операции.
— Да, отличное описание! Ну а, скажем, футболиста?
— Играет в футбол!
— Угу, а хирург «занимается хирургией». А если без однокоренных слов?
— Пинает мяч?
— Вот это точно. А что же делает программист, кроме как «разрабатывает программы»?
— …
— Программист пишет код. Исходный код своей программы, составленный на каком-то специальном языке программирования. Точнее говоря, сначала он продумывает структуры своих данных, потом составляет алгоритмы для работы с этими структурами — ну а затем уже представляет это в виде кода.
— Что ещё за «структуры данных»? Разве он не управляет компьютером, не нажимает кнопки?
— Эх.
Миф №1: программист работает с компьютерами
Попробуйте донести до людей, что программисту для написания кода, в общем-то, совсем не нужен компьютер. Он нужен лишь для проверки корректности кода, для его тестирования — но писать сам код и составлять схемы алгоритмов вполне можно и на бумаге (хотя на экране монитора, конечно, это делать удобнее). Разработчик же просто записывает на этой бумаге набор каких-то инструкций, команд или конкретных данных (числа, текст). А кто этот набор исполняет — компьютер, телефон или особо умный робот, не так уж и важно. Программист работает с данными, а не с машинами.
— Ну как, понятно?
— То есть, программист просто сообщает машине, что бы он хотел сделать — а она это исполняет?
— Ну да, примерно.
— Так же, как начальник отдаёт распоряжения подчинённым?
— Вроде того.
— А если машина захочет исполнить это как-то по-другому?
— В смысле?
— Ну, что-то ей не понравится. Или просто исполнять не захочет.
— Так, давайте уясним раз и навсегда, что.
Миф №2: машина умеет думать
Почему-то немалое число людей реально считает, будто компьютер обладает каким-то интеллектом. На самом деле — это просто набор железок, которые думать не умеют. Они умеют лишь хранить числовые данные. Размагничен какой-то участок такой железки — значит, это ноль. Намагничен — единица. Плюс, ещё они могут складывать и вычитать эти единицы, образуя более сложные числа (о двоичной системе счисления лучше не стоит упоминать). Больше компьютер сам ничего делать не умеет, только хранить числа и оперировать ими. Это бездумный болван, который лишь выполняет команды программиста.
— В общем, код любой программы представляет собой набор команд, а компьютер их тупо исполняет.
— То есть, он не понимает сути самих команд? Но как он воспринимает текст, который я ввожу на экране?
— Когда ты крутишь педали на велосипеде — понимает ли он, что ему сейчас нужно поехать вперёд?
— Нет, но ведь едет. Поскольку его цепь преобразует вращение педалей во вращение колёса.
— Именно! Также и компьютер преобразует введённый тобой текст в набор чисел.
— Каким образом?
— У каждого символа текста есть свой числовой код, который знает компьютер. Это называется кодировкой. Например, английская «a» кодируется числом 97, а знак равенства — числом 61.
— Поэтому машина и может понимать текст, который мы ей сообщаем?
— Нет, она «понимает» не смысл. А лишь то, каким образом этот текст хранить, и как к нему обращаться.
— Выходит, сначала мы вводим текст, затем компьютер разбивает его на символы, а каждый символ уже представляет в виде числа?
— Верно. Сложные структуры представляются в виде более простых, которые и «понимает» машина.
Скажите мне, из чего состоит жилой дом?
— Ну… Из этажей.
— А из чего состоят этажи? И так далее.
— Этажи — из стен. А стены — из кирпичей. А кирпичи…
— Вот числа для компьютера — это то же, что и кирпичи для дома. Символы — это стены. Отдельные предложения — этажи. А книги — целые дома! Но у программистов есть преимущество перед строителями.
— Какое?
— Строитель не может строить целыми этажами, он вынужден всегда класть кирпичи. Даже если некий сверхмощный подъёмный кран позволит ему строить готовые этажи, он не сможет строить им целые дома или жилые кварталы. А программист сможет! Раз он уже «обучил» машину понимать конечный текст — то, по сути, он «обучил» подъёмный кран строить готовый дом за одно действие.
— То есть, программист может использовать всё более и более сложные структуры данных?
— Да. Поэтому первая из составляющих его работы — представить понятные человеку данные (текст, изображение, звук) в виде объединения более простых данных, уже понятных компьютеру. Разработчик практически «с нуля» составляет структуру, которая должна полностью описывать понятную человеку вещь — причём таким образом, чтобы эта структура была легко расширяемой и изменяемой (ведь в программу часто приходится вносить какие-то новые возможности).
— Хех! Выходит, что он строит резиновые дома из съёмных панелей!
— Примерно так. Однако, ещё ему придётся не только описать, что же ему нужно построить — но и как всё это построить. То есть, придумать алгоритм. Это вторая из составляющих его работы.
— Программист придумывает алгоритм на каждое действие?
— Именно. Поэтому алгоритмов получается очень много. Но его работу облегчает то, что одни действия могут содержать в себе другие, уже описанные им ранее.
— И здесь ему на помощь приходит язык программирования?
— Не совсем.
Миф №3: язык программирования нужен для составления алгоритмов
Нет, язык — это всего лишь инструмент. Как гитара для музыканта. Само по себе умение играть на гитаре вовсе не гарантирует славы — потому что люди, как правило, восхищаются самой музыкой, а не умением быстро и чётко дёргать струны. С другой стороны, вряд ли кто придёт посмотреть на плохого гитариста, какую бы замечательную композицию он не исполнял. Также и с ЯП: знание его синтаксиса и связанных с ним нюансов очень важно, равно как и умение писать красивый и ясный код. Однако, если человек не умеет составлять алгоритмы и структуры данных — то он не может называться хорошим программистом.
Компьютер не понимает язык программирования напрямую. Как и ранее, он представляет каждую команду языка в виде набора «простейших» команд (сохранить число, обнулить число, прибавить к нему единицу), которые он способен исполнить. «Понимает» язык программист, а машина его лишь исполняет. По сути, любой язык программирования — это набор команд, служащих для общения с нею.
— Правда, многие из нынешних языков программирования уже содержат «в себе» набор заранее составленных алгоритмов, которые разработчик может использовать в качестве готовых. Поэтому язык всё же немного облегчает процесс составления алгоритмов.
— То есть, если один программист составил какой-то алгоритм, то его тут же могут использовать другие?
— Да, и это происходит постоянно. Это одна из причин, почему отрасль IT так быстро развивается. Однако новые алгоритмы приходится составлять самому.
— А составь какой-нибудь прямо сейчас!
— Легко. Классический пример: у вас есть книга, в ней 1000 страниц. Вам нужно открыть в ней, к примеру, 875-ю страницу. Как бы вы стали это делать?
— Ну, просто пробежал от первой до 875-й, только и всего.
— Угу, и придётся тебе глядеть на номер каждой страницы. А представь, если все их уголки слиплись — сколько времени тогда пройдёт? А вот мне достаточно перебрать лишь 3 страницы!
— Как?
— Вначале я выберу страницу, которая находится посередине книги, то есть 500-ю. Потом посмотрю: в какую из образовавшихся половин должна попасть искомая страница?
— Во вторую. А дальше что?
— То же самое. Интервал с 500-й по 1000-ю я снова поделю надвое, открыв центральную страницу. Получится интервал от 750-й страницы до 1000-й, в нём я опять выберу центральную. Какой будет номер?
— 750 плюс 125… Так это же и есть 875!
— Вот видишь. Всего 3 действия! Даже если я буду не совсем точен при выборе центральной страницы, я всё равно найду нужную намного быстрее тебя. Этот алгоритм носит название «дихотомия». Хотя в реальности программисты используют куда более сложные алгоритмы.
— И ты можешь записать его на бумаге?
— Конечно. Где там моя ручка?
— Ну как, алгоритм ясен?
— Хм… Да, и впрямь ясен.
— Сейчас он записан в виде, уже слегка похожем на реальный программный код.
— А в чём отличия?
— В реальном коде все слова будут написаны на английском, а также будет заранее описана структура «книга» (помните, что я раньше рассказывал про структуры данных?). Плюс, для действий «ищем» и «удаляем» тоже будут составлены свои алгоритмы. Но в целом — всё то же самое.
— И ты занимаешься этим изо дня в день?
— В основном.
— И тебе не скучно?
— Ничуть!
Миф №4: программирование — это скучно
Конечно, разработка вполне может наскучить, если заниматься только рутинными и однообразными делами. Например, составлением очень простых алгоритмов, но в большом количестве. Или монотонным поиском ошибок в чужом коде. Но это же касается и любой другой работы — рутина везде убивает творческий процесс. А творчества в программировании немало, написание кода похоже на написание художественной книги. Только, в отличие от большинства писателей, программист сначала сам создаёт свой собственный мир (структуры данных) — а уже потом наполняет его сюжетом (алгоритмами).
Временами это действительно чистое творчество, где разработчик сам устанавливает собственные правила. Несмотря на то, что в мире данных и алгоритмов всё строго и логично, в нём присутствует своя красота. Любой программист может привести десятки примеров очень красивого кода, и ещё больше примеров уродливого. Программисты, как и все люди, тоже ошибаются: если где-то в исходном коде допущена ошибка, то задуманные алгоритмы могут работать неправильно. Поэтому код часто превращается в некий детектив — в котором идёт поиск очередного коварного бага, мешающего исполнению алгоритма, или нарушающего структуру данных…
— В шутку можно сказать, что в итоге получается какой-то детектив в выдуманном мире, выраженный с помощью языка программирования.
— А убийца в этом детективе — дворецкий?
— Ага, нулевой указатель. Бывает так, что весь отдел день-другой ловит особо назойливый баг, и каждый программист из отдела берёт на себя какой-то участок кода. Получается целое расследование, с наказанием виновных и награждением сопричастных…
— Хм, а это и впрямь интересно звучит!
— Вот видишь.
— А, скажем, я могу хоть немного научиться программированию?
— Да, конечно! Я знаю один сайт специально для этого.
Всё о профессии программиста в 2022 с нуля
9 комментариев 12.12.2020 обновлено 19 секунд назад
Программирование — это новый рок-н-рол, космические зарплаты и уверенность в завтрашнем дне. Разберемся, всё ли так на самом деле: какие бывают программисты, сколько они зарабатывают, что нужно знать и уметь, как начать карьеру в IT.
Достоверность информации гарантируем — статья вычитана и проверена десятью программистами разных специальностей.
Содержание:
Кто такой программист?
Программист — это инженер, который превращает идеи в машинный код.
Простыми словами, программист создаёт инструкции для компьютера. Компьютер выполняет эти инструкции, и получается рабочий продукт: веб-сайт, мобильное приложение, компьютерная игра.
Специализации программистов: сколько зарабатывают, что нужно знать и уметь
За термином «программист» скрываются узкопрофильные специалисты: разработчики программного обеспечения, инженеры, специалисты по безопасности и т.д. Рассмотрим основные сферы работы программиста с примерами.
01. Профессия:
мобильный разработчик
Мобильная разработка — это создание приложений для мобильных устройств: смартфонов, планшетов, гаджетов.
Где можно работать?
55% наших пользователей вообще не используют веб-версию.
Языки программирования: Java и Kotlin для Android, Objective-C и Swift для iOS, C# для Windows Phone.
Что нужно знать и уметь: у каждой платформы свой мир, свои решения и инструменты. Для работы на любой из них понадобится знание английского языка, объектно-ориентированного программирования (ООП) и паттернов архитектуры приложений (MV*).
Это базовые навыки — чтобы вырасти из стажера в специалиста, нужно учить новые технологии, например, сейчас популярна разработка на платформе Flutter. Подробнее о технологиях в статьях:
Сколько зарабатывает разработчик мобильных приложений?
По данным Хабр Карьера, средняя зп:
младшего специалиста (junior) — 59 тысяч рублей,
среднего (middle) — 115 тысяч,
старшего разработчика (senior) — 188 тысяч,
ведущего (lead) — 200 тысяч рублей.
Рост не происходит автоматически — чтобы подняться, нужно учить новые технологии.
02. Профессия:
веб-разработчик
Веб-разработка — это создание веб-приложений и веб-сайтов. Веб-разработку принято делить на фронтенд, бэкенд и фулстек.
Фронтенд-
разработчик
Как расшифровать? Фронтенд — от английского front-end, дословно — «лицевая сторона». Это лицо сайта, его интерфейс, с которым взаимодействует пользователь. Фронтендеры отвечают за работу всех видимых компонентов сайта: контент, изображения, кнопки, навигация.
Где нужен фронтенд? Везде, где есть веб-сайты: интернет-магазины, маркетплейсы, агенства и студии, СМИ, блоги, корпоративные порталы, системы автоматизации бизнеса и другие сервисы.
Базовые технологии: HTML, CSS, JavaScript и его фреймворки, TypeScript.
Что нужно знать и уметь? Фронтендер программирует интерфейс сайта, умеет пользоваться библиотеками и фреймворками, занимается адаптивной вёрсткой. Подробнее о инструментах и навыках в статьях:
Фронтендер проектирует структуру сайта и работает с заказчиком — нужны скилы дизайна UX/UI и коммуникативные навыки. Знание английского, хотя бы intermediate — обязательно для работы с кодом и самообучения.
Сколько зарабатывает фронтендер?
По данным Хабр Карьера, средняя зарплата:
младшего специалиста (junior) — 53 тысячи рублей,
среднего (middle) — 100 тысяч рублей,
старшего разработчика (senior) — 170 тысяч,
ведущего (lead) — 185 тысяч рублей.
Знание каждой библиотеки или фреймворка добавляет 10-15 тысяч к з.п.
Бэкенд-
разработчик
Как расшифровать? Бэкенд — от английского back end, дословно — тыльная сторона. Это программно-аппаратная часть сервиса, его внутренности.
Бэкенд-разработчик создаёт функции сайта, которые доступны пользователю через интерфейс. Например, фронтенд — это форма регистрации и корзина на сайте, а бэкенд — это связка полей формы регистрации с корзиной, база данных и интеграция с платёжным сервисом.
Где можно работать? Как и в случае с фронтендом — везде, где есть сайты и приложения.
Языки программирования: PHP, Python, JavaScript, Java, C#, Go, C/C++.
Что нужно знать и уметь? Бэкендер программирует на «серверных» языках, знает веб-фреймворки, работает с базами данных, пишет юнит-тесты. Подробнее в статьях:
Бэкендер, в отличии от фронтендера, может быть интровертом — это работа по техзаданию, контакт с заказчиком и пользователями ограничен. Как и в случае с фронтендом, знание английского — обязательно для работы и самообучения.
Сколько зарабатывает бэкенд-программист?
По данным Хабр Карьера, средняя зарплата:
стажёра — 35 тысяч рублей,
младшего специалиста (junior) — 55 тысяч рублей,
среднего (middle) — 105 тысяч рублей,
старшего разработчика (senior) — 170 тысяч,
ведущего (lead) — 185 тысяч рублей.
Фуллстек
разработчик
Как расшифровать? Фулстек — от английского full stack, полный стек технологий. Full Stack Developer — это универсальный программист, который может с нуля разработать функциональный продукт.
Что нужно знать и уметь? Разработчик фул-стек разбирается как в бэкенде (программно-аппаратная часть сервиса), так и во фрнтенде (интерфейс пользователя). Также, фулстек может быть внутри определенной технологии — например, full-stack JavaScript.
Есть мнение, что фул-стек разработчик — это миф. Невозможно владеть всеми технологиями одновременно и следить за разработками во всех стеках.
Где можно работать? Компании открывают должность Full Stack по разным причинам. Например, проект не сложный технически, но требует частых изменений — в таком случае, одному человеку будет проще разобраться.
Иногда фул-стека нанимают из соображений экономии, когда нет денег на целый отдел IT. В этом случае, фул-стек часто становится эникейщиком и заниматься вообще всем, в том числе заправляет принтер. 🙂
Фулстек программисты в IT-компаниях часто становятся директорами. Фулстек — это зона роста для фронтенд и бэкендера. При этом, бэкенд ближе к фулстеку технологически.
Вас могут заинтересовать статьи:
03. Профессия:
системный программист
Простыми словами, системное программирование — это программирование железа на машинном языке. Синоним: низкоуровневое программирование, LLP (low level programming).
Технологии: языки низкого уровня, а также язык Си.
Язык низкого уровня — это язык ассемблера, машинный код. Это команды для процессоров и микроконтроллеров. Код уникальный и не переносится с платформы на платформу. Для сравнения, языки высокого уровня (Java, Python, C++) — это «человеческие» языки программирования, словесные команды, которые переводятся в машинный код на компиляторе и работают на разных платформах.
Какие нужны навыки? Знание архитектуры процессора и памяти, опыт программирования на языке высокого уровня, работа с цифровой схемотехникой.
Системный программист — это полный универсал: мне приходилось как писать код, так и отлаживать железо. И часто возникала необходимость что-то паять самостоятельно. Часто собеседования на вакансию системного программиста выглядят как поиск специалиста по электронике.
Где можно работать? Везде, где нужно программировать процессоры, микроконтроллеры, драйверы:
Сколько зарабатывает системный программист?
Многие системщики работают на производствах и в государственном секторе, зарплата там ниже, чем в IT. Старший системщик в профильной IT компании может получать 100-150 тысяч рублей.
04. Профессия:
дата сайентист
Data Scientist — это программист-аналитик, который работает с большими данными и занимается машинным обучением.
Большие данные, big data — это массив неструктурированной информации, которую нужно собрать, обработать, найти закономерности и сделать выводы.
Машинное обучение — это настройка нейросетей для работы с big data.
Языки программирования: Python, R, SQL.
Что еще нужно знать и уметь? Обязательно знать математику и методы статистики. Также, нужно знать алгоритмы машинного обучения и уметь работать с базами данных.
Где можно работать? Прогнозы, аналитика и математическое моделирование нужны везде: в бизнесе, финансах, на производствах, в медицине и сельском хозяйстве.
В сфере IT, дата-сайентист разрабатывает ботов и алгоритмы. Например, Youtube и Instagram написаны на Python, а искусственный интеллект подбирает рекомендации и администрирует платформу.
Развивающиеся сферы: NLP (natural language processing — распознавание человеческой речи), компьютерное зрение, разработка алгоритмов искусственного интеллекта.
Сколько зарабатывает дата сайентист?
По данным HH.ru, джуниоры получают от 70 тысяч рублей, а опытные специалисты в среднем зарабатывают 200 тысяч рублей в месяц.
05. Профессия:
DevOps инженер
Как расшифровать? DevOps — сокращенное от development and operations. Означает взаимодействие людей, занимающихся разработкой, тестированием и операциями. Это метод автоматизации разработки, задача — быстрый выпуск качественного ПО. Девопс охватывает весь процесс производства софта: от написания кода, до релиза и поддержки.
Девопс-инеженер совмещает несколько профессий: системного администратора, разработчика, тестировщика и менеджера. Считается, что девопс — это роль для опытного сисадмина.
Что нужно знать и уметь? Девопс умеет настраивать железо и адаптировать под него код. У него есть опыт администрирования ОС Windows и Linux, он умеет работать с инструментами автоматизации, тестирования, оптимизации. Девопс может написать скрипты и код, разбирается в сетевых технологиях. Подробнее о навыках в статьях:
Еще одна специализация — это DevSecOps, Security Development. Это работа с недостатками и уязвимостями приложений. Подробнее в статье Страх и ненависть DevSecOps.
Где можно работать? В компаниях, которые разрабатывают приложения и управляют серверами. Девопсов любят IT-гиганты вроде Amazon и Facebook.
Сколько зарабатывают DevOps? Девопс-инженеры зарабатывают больше всех в айти. По данным hh.ru, начинающие девопсы получают от 100 тысяч, а опытные специалисты — от 250 тысяч рублей в месяц.
06. Профессия:
разработчик ПО
Разработка прикладного программного обеспечения — это проектирование, написание, тестирование и поддержка программ, предназначенных для пользователя. Примеры прикладного ПО: текстовые и графические редакторы, веб-браузеры, компьютерные игры, системы автоматизации для бизнеса. Синоним: десктоп-приложения.
Каждый разработчик ПО умеет программировать, но не каждый программист может разрабатывать ПО.
Разработчики программного обеспечения — это девелоперы и инженеры, которые делают ПО с нуля. Между позициями разработчика и инженера ПО есть различия.
Инженер — это опытный архитектор, который проектирует ПО с нуля. В то время как разработчик сосредоточен на определенном куске ПО, инженер видит big picture и контролирует полный цикл. Инженера можно сравнить с фулстеком.
У Software Engineer обычно очень большой кругозор. У американцев есть отличная поговорка: когда у тебя есть только молоток, все вокруг выглядит как гвоздь. Поэтому меня раздражают позиции с названиями типа Java Engineer или Ruby Engineer. Инженер не может быть привязан к языку.
Языки программирования: Python, С#, Java, JavaScript, C, C++, Delphi.
Подробнее о технологиях в статьях:
Где можно работать? В IT компаниях, которые разрабатывают прикладное ПО. Пример: вакансия в Яндексе.
Сколько зарабатывают разработчики ПО? ЗП зависит от опыта и знания конкретных технологий. По запросу software developer на hh.ru видим, что младшим специалистам (junior) в среднем предлагают 100 тысяч рублей, а старшим специалистам — от 200 тысяч рублей.
07. Профессия:
тестировщик (QA-инженер)
Тестировщик — это QA-инженер, который ищет ошибки в ПО, проверяет его качество и соответствие техзаданию.
Как расшифровать? QA — от английского Quality Assurance, проверка качества.
Младший тестировщик тестирует программы вручную, без скриптов и кода, по заранее описанным планам. Опытные инженеры по тестированию самостоятельно пишут и проводят тест-планы — часто автоматизированные, с использованием скриптов и языка программирования.
Должность тестировщика — оптимальное начало карьеры в IT, т.к. эта специальность проще других технически. QA-инженеры видят продукт со всех сторон. Пути развития — уйти в менеджеры, разработчики, либо стать ведущим специалистом по QA.
Что нужно знать и уметь? Для старта, потребуется опыт работы в технической поддержке, понимание архитектуры ПК, Linux, сетевых моделей OSI, знание основ программирования на любом популярном языке, навыки работы с инструментами тестирования.
Инструменты: багтрекеры (Bugzilla, Jira), инструменты автоматизации (Selenium), сетевые утилиты (Wireshark). Подробнее о технологиях в статьях:
Где можно работать? В IT-компаниях, разрабатывающих софт, игры, мобильные приложения, системы безопасности и т.д.
Сколько зарабатывает тестировщик?
По данным Хабр.Карьера, средняя зп:
стажёра — 35 тысяч рублей,
младшего специалиста (junior) — 50-60 тысяч рублей,
среднего (middle) — 70-80 тысяч,
старшего специалиста (senior) — от 100 тысяч рублей.
Где учиться
на программиста?
01. ВУЗы
Зачем нужно высшее образование в IT?
Абитуриенту лучше выбрать факультет информатики, либо физику, математику и другие технические специальности. Для поступления нужно сдать ЕГЭ по математике, физике или информатике, русскому языку. Вас может заинтересовать статья про высшее техническое образование для абитуриентов.
Если у вас уже есть высшее образование, можно пойти на второе высшее, выбрав заочную или вечернюю форму обучения для экономии времени. Вас может заинтересовать статья про второе высшее техническое образование.
Нужна ли программерам вышка — больной вопрос для общества. Он всегда вызывает дискуссии с переходом на личности. Я встречал отличных программеров как с вузовскими дипломами, так и с девятью классами образования. Но с дипломами я их встречал больше. Возможно, их просто в принципе больше.
Альтернатива и обязательное дополнение к высшему образованию — это онлайн курсы и онлайн-школы.
02. Курсы и школы
Это кратчайший путь в IT для всех желающих.
Достоинства курсов: структурированная информация, свободный график, домашние задания, работа с наставником.
Недостатки: свободный график требует самодисциплины, в любом случае придется много работать и усердно учиться, знания не вкладываются в голову автоматически.
Список лучших ресурсов для IT образования:
03. Книги для программистов
Для каждой специальности есть свой набор книг. Это список книг, которые могут быть полезны всем.