в чем заключается работа разработчика
Профессия: программист. Не всё однозначно
Мы писали о фронтендерах и бэкендерах, о мобильной разработке и о тестировании, но это были частные случаи. Когда человек подходит к первой или очередной профессии, он редко говорит, что станет разработчиком под iOS или проктологом, как правило это звучит «программистом» и «врачом». Специализация приходит позже, с опытом. Но чтобы твёрдо заявить, что ты хочешь стать программистом, врачом, архитектором, геологом и т.д., нужно избавиться от романтизации профессии и подойти к ней здраво и осмысленно. Даже если вы вдруг решили стать программистом, чтобы «войти в айти после 35-ти». Если говорить о программистах с позиций романтики, то это люди, которые превращают наши замыслы в код и делают жизнь лучше, проще, удобнее. Если говорить прямо, то работа программиста — напряжённый, зачастую рутинный труд с множеством плюсов и минусов. Об этом и поговорим.
Художник — Надежда Коткина, позировал — cyber_roach
Кто это?
За термином «программист» могут скрываться узкопрофильные программисты, разработчики программного обеспечения, инженеры, системные аналитики и т.д. Тем не менее, всех программистов объединяет одно — умение облечь человеческие требования в машинный код, чтобы сделать труд или развлечение автоматизированным, удобным, простым. Программист создаёт инструкции для компьютера, в результате выполнения этих инструкций получается какой-то целевой результат.
Вам стоит задуматься, не будущий ли программист вы, если…
… ваша мотивация исходит изнутри, вам нравится процесс управления компьютером, вы хотите не просто использовать программу (игру, приложение), но и знать, как она работает, модифицировать её.
… вы не ожидаете бешеных доходов и не думаете о том, что программирование — новый рок-н-ролл, первично именно желание творить магию: превращать идеи в код.
… вы знаете, как сделать лучше любую программу, любой сайт, любое мобильное приложение. Вы точно знаете, что можно хотеть от программы и мечтаете научиться делать совершенный код.
Где нужен?
Сегодня программисты нужны везде и я не думаю, что этот тренд изменится в ближайшие 10-15 лет. Программисты нужны в промышленности, науке, космосе, бизнесе, медицине, транспорте и даже не в ИТ-компаниях (шутки шутками, а вы знаете, как трудно найти отличного программиста 1С или разработчика для интернет-магазина на 1С-Битрикс?!). В общем, даже в институте церкви и благотворительности есть спрос на программистов. И это здорово, потому что вы можете не просто выбрать профессию программиста, но и соотнести её со своим увлечением: химией, биологией, механикой, связью и даже историей и лингвистикой. Более того, если вы будете сочетать в себе навыки разработки ПО и основы профильной деятельности, ваша цена на рынке здорово вырастет, а конкуренция изменится.
Поэтому вам нужно понять не столько, где работать, сколько что именно из разработки вам ближе.
Важно понимать ещё одно разделение.
Базовые требования к профессионалу
Само по себе написание кода — это не самая сложная задача, гораздо сложнее понять требования, интерпретировать их и перевести в понятный машине язык. Работать с заказчиком кода (здесь мы имеем в виду и клиента, и коллег, и работодателей и т.д.) это всегда нервы и приключения, потому что они сами не знают, что хотят, мыслят упрощённо и считают технологии всемогущими. Но если вы претендуете на то, чтобы быть профессиональным программистом, вам необходимо не только хмуро бить по клавишам, но и активно работать с людьми, с техническими заданиями, требованиями и т.д. Это отличает программиста от простого кодера.
Необходимость знания иностранных языков
Можно ли обойтись в разработке без знания иностранного (в частности английского) языка? Можно. Достаточно выучить синтаксис и слова языка программирования, мыслить и общаться вы можете исключительно на русском языке. Незнание языка не будет помехой в карьерном росте, развитии, коммуникациях в очень многих компаниях.
Однако — что даёт знание иностранного языка?
Где учиться
В современных российских вузах есть масса программистских специальностей, есть бакалавриат и магистратура, есть форматы дополнительного образования. Если вы ещё только выбираете свой вуз, то, конечно, стоит идти на специальный факультет, либо на физику, математику и другие технические специальности.
Если программирование вам нужно как вспомогательный инструмент для основной специальности, то либо поищите смежный вариант (типа медицинской кибернетики и информатики), либо обучайтесь параллельно главной специализации.
Если у вас уже есть образование, то для вас есть самообразование, различные курсы, онлайн-школы, корпоративные университеты и т.д. Вы можете изучать программирование с помощью этих средств обучения либо полностью самостоятельно или даже с ментором. О дополнительном образовании можно почитать здесь.
Обращаю ваше особое внимание: высшее образование по-прежнему важно, поскольку оно имеет значение для работодателя, нужно при переезде в другую страну, а также даёт базу, основу, которая позволит быстро развиваться в любом новом направлении.
Более того, не столько важно, какой язык программирования вы освоите, сколько важно, что вы знаете о математике, алгоритмах, вычислениях, сетевом и серверном администрировании, принципах организации сетей, стеках и проч. А эту основу как раз неплохо дают в вузах.
Лучшие книги и средства обучения
Для каждой специальности есть свой набор книг и ресурсов для обучения, но есть вещи, которые стоит прочитать всем.
Из любимых ресурсов:
Ещё одна огромная и свежая подборка полезного онлайна для программистов.
Совет: даже если вам иногда лень заниматься, слушайте лекции хотя бы фоном, так вы погрузитесь в терминологию, обратите внимание на какие-то незаметные при напряжённом изучении моменты.
Мифы профессии
Про программистов ходит очень много мифов и слухов: про характер, грубость, неумение строить личную жизнь и т.д. Но это частные случаи, которые можно найти в профессии. Например, я был одно время близок к сфере медицины и могу сказать, что там тоже немало замужних за работой и женатых на работе, немало суровых интровертов и грубых, но профессиональных ребят (скорее, задолбанных). Да и вообще сложно представить «анклав» счастья в какой-то определённой сфере.
А если программист ещё и геймер… Всегда можно найти пару 😉
Поэтому я разберу четыре самых популярных мифа.
Главный совет
Если вы учитесь быть программистом, однажды вам обязательно захочется бросить это всё, потому что путь покажется слишком длинным. Вы устанете от однообразных тренировочных задач, каждая неудачная компиляция будет вызывать тупое, болезненное отчаяние, вам будут сниться указатели, рекурсии и принципы ООП (ну или неудачные вызовы функций). Вся эта возня покажется безумного далёкой не только от вашего первого самостоятельного проекта, но и от первого корпоративного мержа…
Желание бросить — первый признак того, что вы идёте верным путём, что вы действительно напрягаетесь, а не мастрячите какой-то код методом копипаста из Google (даже не с GitHub!). Только когда вы настолько натренируетесь на простых задачах, что они вам станут противно скучными, вы сможете уверенно перейти на новый этап с отличной базой знаний.
Совет простой: не бросайте. Отвлекитесь, переспите с этими мыслями, забросьте обучение на неделю и вернитесь. Вы сами не заметите, как в голове что-то «щёлкнет» и всё встанет на свои места и вот он, первый мерж, первое код ревью, первый коммит в open source, первое выступление на митапе, свой пет-проект, первые задачи на должности миддла. Не останавливайтесь — всё будет!
Чем занимается веб-разработчик и что нужно уметь для первой работы
Веб-разработчики — самые востребованные из программистов. Этих специалистов много, но работу найти сравнительно легко.
Слово «веб-разработчик» кажется вполне понятным — очевидно же, что он разрабатывает что-то для веба. На деле всё не так просто. Современный интернет мало похож на веб девяностых или нулевых: технологий столько, что уследить за всем сразу просто нереально. Поэтому в профессии веб-разработчика есть три больших специализации:
Нельзя быть в чистом виде frontend- или backend-разработчиком, даже если занят чем-то одним. Всё равно придётся хотя бы немного разбираться в том, как взаимодействуют между собой серверная и клиентская части
веб-приложения.
Фанат Free Software Foundation, использует Linux и недолюбливает Windows. Пишет истории про кодинг и программы на Python. Влюблен в LISP, но пока что не умеет на нем программировать.
Веб-разработка — самое популярное направление в программировании. Согласно исследованию Stack Overflow за 2020 год, большинство программистов считают себя frontend-, backend- или fullstack-разработчиками. Но лидируют в рейтинге те, кто занимается бэкендом.
Это подтверждает и опрос о самых популярных технологиях среди программистов: так или иначе связанные с вебом лидируют с большим отрывом. А на первом месте здесь JavaScript — его использует почти 70% веб-разработчиков в мире.
История веб-разработки: от 1990 до 2020
В 1990 году Тим Бернерс-Ли создал первый сайт и браузер в CERN — Европейском центре ядерных исследований. Выглядел он так себе, но это была настоящая революция.
Профессиональная веб-разработка началась во второй половине девяностых после выхода первого «нормального» браузера — Mosaic, технологии CSS (каскадные таблицы стилей), языка JavaScript и Flash. Примерно в это же время появился PHP — специальный язык программирования для бэкенда, который до этого писали на чём придётся: на C, C++ или Perl. Веб быстро набирал популярность, стало выгодно делать красивые и удобные сайты — и в разработке появились хорошие деньги.
Потом были браузерные войны: каждый добавлял какие-то свои возможности, а фронтенд-разработчики сходили от них с ума. Только сейчас создатели браузеров приняли более или менее единые стандарты. В бэкенде тоже многое изменилось: PHP теснят конкуренты — например, Python, Java и JavaScript с Node.js, изначально сделанной для фронтенда.
Сейчас все идут в веб. Мировой рынок публичных облачных сервисов вырос с 56,6 млрд долларов в 2014 году до 233,4 млрд долларов в 2019 году (данные аналитической компании IDC, по отчёту TAdviser). И хотя в России рынок облачных решений развивается не так интенсивно, как в мире, но с 2014 года он вырос втрое. Поэтому и спрос на веб-разработчиков только растёт.
Какие навыки понадобятся, чтобы получить работу
От начинающего специалиста ждут понимания основ технологий, которые использует компания. Но прежде чем изучать что-то конкретное, стоит разобраться — куда вам хочется попасть и с чем там работают. Эта информация есть на сайтах с вакансиями. Требования к джунам в целом похожи, различаются только специализации. Мы составили список самых популярных требований к разработчикам — с этими навыками вы точно найдёте работу.
В списке могут встретиться незнакомые слова, но это не проблема: все они относятся к веб-разработке, и их точно можно получить на наших курсах или бесплатных интенсивах.
Backend-разработчик:
Frontend-разработчик:
Требования к начинающим fullstack-разработчикам приводить нет смысла — надо просто суммировать требования к frontend- и backend-специалистам.
Сколько получают веб-разработчики и насколько они востребованы
Веб-разработчики — самая востребованная специальность по данным работных сайтов. Приведём таблицу популярности и зарплат разных направлений веб-разработки на сентябрь 2020 года (прибавьте сюда ещё и вакансии, в заголовок которых вынесены только конкретные технологии — например, «разработчик Node.js» или «Django developer»).
Направление | Количество вакансий | Junior | Middle | Senior |
---|---|---|---|---|
Веб-разработчик | 1228 | 60 вакансий 20−50 тыс. руб. | 70−150 тыс. руб. | 100−200 тыс. руб. |
Fullstack-разработчик | 340 | 10 вакансий 30−60 тыс. руб | 80−150 тыс. руб. | 120−230 тыс. руб. |
Backend-разработчик | 1099 | 40 вакансий 40–60 тыс. руб | 80−150 тыс. руб. | 120−200 тыс. руб. |
Frontend-разработчик | 2159 | 67 вакансий 30−60 тыс. руб | 80−150 тыс. руб. | 120−200 тыс. руб. |
Миф о том, что fullstack-разработчики — это десантники среди программистов и получают они в среднем больше остальных, не подтвердился. А более высокий порог вхождения на деле не помогает даже junior-специалистам получать больше.
Какие веб-технологии популярны в мире и зачем это новичку
Чтобы быть востребованным на рынке труда, неплохо понять, за какими технологиями будущее и что важно изучать уже сегодня. Stack Overflow ежегодно публикует отчёты о технологиях, программистах и зарплатах. На 2020 год самые распространённые веб-фреймворки — jQuery, React, Angular и ASP.NET. Причём jQuery хоть и лидирует, но каждый год теряет популярность — это уже устаревшая технология.
Большинство веб-разработчиков любят ASP.NET Core, React.js, Vue.js, а вот Angular.js, Drupal, WordPress и jQuery они считают просто ужасными. В ближайшее время планируют изучать React.js, Vue.js, Angular и Django. Если же говорить о серверных технологиях, то среднестатистический опытный разработчик любит и хочет изучить Linux, Docker и Kubernetes — они лидируют с большим отрывом.
Это не просто перечисление инструментов, а важная статистика — в исследовании участвовало 65 тысяч разработчиков. Из них 54 тысячи — более пяти лет в профессии. Так что эти данные можно считать коллективным мнением экспертов. Когда будете планировать своё развитие в профессии, обязательно учитывайте это.
Как проще всего изучить основы
веб-разработки
Познакомиться с JavaScript/CSS/HTML удобнее всего в образовательном разделе сайта Mozilla, а получить обзорное представление обо всех современных
веб-технологиях — в видеокурсе от Mail.ru. Этого будет достаточно, чтобы определиться со специализацией и понять, куда двигаться.
Системно изучить веб-разработку, попрактиковаться на реальных задачах и получить обратную связь от опытных профессионалов-менторов можно на нашем курсе «Профессия веб-разработчик».
Программы с продвинутыми возможностями для CSS и собственным синтаксисом. С ними удобно работать, а на выходе код можно конвертировать в CSS.
Чем же занимаются программисты, и как объяснить это остальным?
Наверное, у каждого программиста возникала ситуация, когда совершенно не знакомые с IT люди просили его объяснить, в чём же состоит суть его профессии. Так уж сложилось, что у большинства людей понятие «программист» ассоциируется либо с замкнутым гиком в очках и свитере, либо с неким гениальным красноглазым подростком-хакером — но при этом никто не знает, чем именно он занимается.
Как рассказать им об этом, не пугая страшными терминами и фрагментами кода?
Под катом я воспроизведу такой рассказ, а также развенчаю несколько мифов о программировании.
— Чем занимаются программисты? Это не так-то просто рассказать… Ответьте мне для начала: как в двух словах можно описать, например, суть профессии хирурга?
— Хирург проводит операции.
— Да, отличное описание! Ну а, скажем, футболиста?
— Играет в футбол!
— Угу, а хирург «занимается хирургией». А если без однокоренных слов?
— Пинает мяч?
— Вот это точно. А что же делает программист, кроме как «разрабатывает программы»?
— …
— Программист пишет код. Исходный код своей программы, составленный на каком-то специальном языке программирования. Точнее говоря, сначала он продумывает структуры своих данных, потом составляет алгоритмы для работы с этими структурами — ну а затем уже представляет это в виде кода.
— Что ещё за «структуры данных»? Разве он не управляет компьютером, не нажимает кнопки?
— Эх.
Миф №1: программист работает с компьютерами
Попробуйте донести до людей, что программисту для написания кода, в общем-то, совсем не нужен компьютер. Он нужен лишь для проверки корректности кода, для его тестирования — но писать сам код и составлять схемы алгоритмов вполне можно и на бумаге (хотя на экране монитора, конечно, это делать удобнее). Разработчик же просто записывает на этой бумаге набор каких-то инструкций, команд или конкретных данных (числа, текст). А кто этот набор исполняет — компьютер, телефон или особо умный робот, не так уж и важно. Программист работает с данными, а не с машинами.
— Ну как, понятно?
— То есть, программист просто сообщает машине, что бы он хотел сделать — а она это исполняет?
— Ну да, примерно.
— Так же, как начальник отдаёт распоряжения подчинённым?
— Вроде того.
— А если машина захочет исполнить это как-то по-другому?
— В смысле?
— Ну, что-то ей не понравится. Или просто исполнять не захочет.
— Так, давайте уясним раз и навсегда, что.
Миф №2: машина умеет думать
Почему-то немалое число людей реально считает, будто компьютер обладает каким-то интеллектом. На самом деле — это просто набор железок, которые думать не умеют. Они умеют лишь хранить числовые данные. Размагничен какой-то участок такой железки — значит, это ноль. Намагничен — единица. Плюс, ещё они могут складывать и вычитать эти единицы, образуя более сложные числа (о двоичной системе счисления лучше не стоит упоминать). Больше компьютер сам ничего делать не умеет, только хранить числа и оперировать ими. Это бездумный болван, который лишь выполняет команды программиста.
— В общем, код любой программы представляет собой набор команд, а компьютер их тупо исполняет.
— То есть, он не понимает сути самих команд? Но как он воспринимает текст, который я ввожу на экране?
— Когда ты крутишь педали на велосипеде — понимает ли он, что ему сейчас нужно поехать вперёд?
— Нет, но ведь едет. Поскольку его цепь преобразует вращение педалей во вращение колёса.
— Именно! Также и компьютер преобразует введённый тобой текст в набор чисел.
— Каким образом?
— У каждого символа текста есть свой числовой код, который знает компьютер. Это называется кодировкой. Например, английская «a» кодируется числом 97, а знак равенства — числом 61.
— Поэтому машина и может понимать текст, который мы ей сообщаем?
— Нет, она «понимает» не смысл. А лишь то, каким образом этот текст хранить, и как к нему обращаться.
— Выходит, сначала мы вводим текст, затем компьютер разбивает его на символы, а каждый символ уже представляет в виде числа?
— Верно. Сложные структуры представляются в виде более простых, которые и «понимает» машина.
Скажите мне, из чего состоит жилой дом?
— Ну… Из этажей.
— А из чего состоят этажи? И так далее.
— Этажи — из стен. А стены — из кирпичей. А кирпичи…
— Вот числа для компьютера — это то же, что и кирпичи для дома. Символы — это стены. Отдельные предложения — этажи. А книги — целые дома! Но у программистов есть преимущество перед строителями.
— Какое?
— Строитель не может строить целыми этажами, он вынужден всегда класть кирпичи. Даже если некий сверхмощный подъёмный кран позволит ему строить готовые этажи, он не сможет строить им целые дома или жилые кварталы. А программист сможет! Раз он уже «обучил» машину понимать конечный текст — то, по сути, он «обучил» подъёмный кран строить готовый дом за одно действие.
— То есть, программист может использовать всё более и более сложные структуры данных?
— Да. Поэтому первая из составляющих его работы — представить понятные человеку данные (текст, изображение, звук) в виде объединения более простых данных, уже понятных компьютеру. Разработчик практически «с нуля» составляет структуру, которая должна полностью описывать понятную человеку вещь — причём таким образом, чтобы эта структура была легко расширяемой и изменяемой (ведь в программу часто приходится вносить какие-то новые возможности).
— Хех! Выходит, что он строит резиновые дома из съёмных панелей!
— Примерно так. Однако, ещё ему придётся не только описать, что же ему нужно построить — но и как всё это построить. То есть, придумать алгоритм. Это вторая из составляющих его работы.
— Программист придумывает алгоритм на каждое действие?
— Именно. Поэтому алгоритмов получается очень много. Но его работу облегчает то, что одни действия могут содержать в себе другие, уже описанные им ранее.
— И здесь ему на помощь приходит язык программирования?
— Не совсем.
Миф №3: язык программирования нужен для составления алгоритмов
Нет, язык — это всего лишь инструмент. Как гитара для музыканта. Само по себе умение играть на гитаре вовсе не гарантирует славы — потому что люди, как правило, восхищаются самой музыкой, а не умением быстро и чётко дёргать струны. С другой стороны, вряд ли кто придёт посмотреть на плохого гитариста, какую бы замечательную композицию он не исполнял. Также и с ЯП: знание его синтаксиса и связанных с ним нюансов очень важно, равно как и умение писать красивый и ясный код. Однако, если человек не умеет составлять алгоритмы и структуры данных — то он не может называться хорошим программистом.
Компьютер не понимает язык программирования напрямую. Как и ранее, он представляет каждую команду языка в виде набора «простейших» команд (сохранить число, обнулить число, прибавить к нему единицу), которые он способен исполнить. «Понимает» язык программист, а машина его лишь исполняет. По сути, любой язык программирования — это набор команд, служащих для общения с нею.
— Правда, многие из нынешних языков программирования уже содержат «в себе» набор заранее составленных алгоритмов, которые разработчик может использовать в качестве готовых. Поэтому язык всё же немного облегчает процесс составления алгоритмов.
— То есть, если один программист составил какой-то алгоритм, то его тут же могут использовать другие?
— Да, и это происходит постоянно. Это одна из причин, почему отрасль IT так быстро развивается. Однако новые алгоритмы приходится составлять самому.
— А составь какой-нибудь прямо сейчас!
— Легко. Классический пример: у вас есть книга, в ней 1000 страниц. Вам нужно открыть в ней, к примеру, 875-ю страницу. Как бы вы стали это делать?
— Ну, просто пробежал от первой до 875-й, только и всего.
— Угу, и придётся тебе глядеть на номер каждой страницы. А представь, если все их уголки слиплись — сколько времени тогда пройдёт? А вот мне достаточно перебрать лишь 3 страницы!
— Как?
— Вначале я выберу страницу, которая находится посередине книги, то есть 500-ю. Потом посмотрю: в какую из образовавшихся половин должна попасть искомая страница?
— Во вторую. А дальше что?
— То же самое. Интервал с 500-й по 1000-ю я снова поделю надвое, открыв центральную страницу. Получится интервал от 750-й страницы до 1000-й, в нём я опять выберу центральную. Какой будет номер?
— 750 плюс 125… Так это же и есть 875!
— Вот видишь. Всего 3 действия! Даже если я буду не совсем точен при выборе центральной страницы, я всё равно найду нужную намного быстрее тебя. Этот алгоритм носит название «дихотомия». Хотя в реальности программисты используют куда более сложные алгоритмы.
— И ты можешь записать его на бумаге?
— Конечно. Где там моя ручка?
— Ну как, алгоритм ясен?
— Хм… Да, и впрямь ясен.
— Сейчас он записан в виде, уже слегка похожем на реальный программный код.
— А в чём отличия?
— В реальном коде все слова будут написаны на английском, а также будет заранее описана структура «книга» (помните, что я раньше рассказывал про структуры данных?). Плюс, для действий «ищем» и «удаляем» тоже будут составлены свои алгоритмы. Но в целом — всё то же самое.
— И ты занимаешься этим изо дня в день?
— В основном.
— И тебе не скучно?
— Ничуть!
Миф №4: программирование — это скучно
Конечно, разработка вполне может наскучить, если заниматься только рутинными и однообразными делами. Например, составлением очень простых алгоритмов, но в большом количестве. Или монотонным поиском ошибок в чужом коде. Но это же касается и любой другой работы — рутина везде убивает творческий процесс. А творчества в программировании немало, написание кода похоже на написание художественной книги. Только, в отличие от большинства писателей, программист сначала сам создаёт свой собственный мир (структуры данных) — а уже потом наполняет его сюжетом (алгоритмами).
Временами это действительно чистое творчество, где разработчик сам устанавливает собственные правила. Несмотря на то, что в мире данных и алгоритмов всё строго и логично, в нём присутствует своя красота. Любой программист может привести десятки примеров очень красивого кода, и ещё больше примеров уродливого. Программисты, как и все люди, тоже ошибаются: если где-то в исходном коде допущена ошибка, то задуманные алгоритмы могут работать неправильно. Поэтому код часто превращается в некий детектив — в котором идёт поиск очередного коварного бага, мешающего исполнению алгоритма, или нарушающего структуру данных…
— В шутку можно сказать, что в итоге получается какой-то детектив в выдуманном мире, выраженный с помощью языка программирования.
— А убийца в этом детективе — дворецкий?
— Ага, нулевой указатель. Бывает так, что весь отдел день-другой ловит особо назойливый баг, и каждый программист из отдела берёт на себя какой-то участок кода. Получается целое расследование, с наказанием виновных и награждением сопричастных…
— Хм, а это и впрямь интересно звучит!
— Вот видишь.
— А, скажем, я могу хоть немного научиться программированию?
— Да, конечно! Я знаю один сайт специально для этого.