Чем занимается веб-разработчик и что нужно уметь для первой работы
Веб-разработчики — самые востребованные из программистов. Этих специалистов много, но работу найти сравнительно легко.
Слово «веб-разработчик» кажется вполне понятным — очевидно же, что он разрабатывает что-то для веба. На деле всё не так просто. Современный интернет мало похож на веб девяностых или нулевых: технологий столько, что уследить за всем сразу просто нереально. Поэтому в профессии веб-разработчика есть три больших специализации:
Нельзя быть в чистом виде 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.
🌐 Кто такой Web Developer: гайд по профессии
Игорь Карпекин карпекин
Для построения новостного сайта, браузерной игры или сервиса видеоконференций требуются разные компетенции, однако базовые технологии одни и те же. Данный материал подготовлен при поддержке факультета веб-разработки онлайн-университета GeekBrains, где происходит освоение соответствующих компетенций.
Базовые технологии
Под Web Developer обычно понимают программиста, который умеет работать и на стороне клиента, и на стороне сервера. Универсального программиста, который может сделать проект с нуля, разбирается в базах данных, конфигурировании сервера, безопасности, называют Full Stack Web Developer. Более узких специалистов – Backend Web Developer и Frontend Web Developer.
Базовые технологии Frontend
HTML – язык разметки страниц, костяк веб-страницы. С помощью HTML мы подключаем JS-скрипты и CSS-стили и определяем элементы страницы: текст, заголовки, поля ввода информации, переключатели и кнопки.
CSS – язык описания стилей элементов, с помощью которого добиваются качественного отображения страницы.
JavaScript – скриптовый язык, который служит для придания страницам динамики. За счет JavaScript элементы реагируют на действия пользователя. JavaScript также взаимодействует с бэкэндом. При усложнении логики и росте кодовой базы лучше использовать не чистый JavaScript, а фреймворки, о которых мы расскажем позже.
Базовые технологии Backend
На стороне сервера может использоваться множество технологий и различных языков программирования. Рассмотрим самые востребованные из них.
| Язык/технология | Зарплата, тыс. руб | Количество вакансий (на 15.09.20) | Популярность на GitHub (среди перечисленных технологий) | Популярность на StackOverflow, % |
| PHP | 200 | 4500 | 3 | 26.2 |
| Java | 250 | 2200 | 2 | 40.2 |
| Python | 160 | 1808 | 1 | 44.1 |
| Node.JS | 205 | 1456 | 4 | 24.5 |
| ASP.NET | 160 | 1314 | 5 | 18.7 |
Общие технологии продвинутого уровня
Развертывание инфраструктуры
Веб-разработчик должен уметь разворачивать инфраструктуру для полноценной работы своего веб-приложения. Такими компонентами являются:
Тестирование
Наши статьи по теме:
Системы контроля версий
Сложное веб-приложение невозможно за приемлемое время написать одному человеку: для этого необходима команда специалистов, которые разделяют между собой обязанности и ведут распределенную кодовую базу. Для этого используются системы контроля версий, самой распространенной из которых является Git. Знание GIt гарантированно потребуется при трудоустройстве веб-девелопером.
Наши статьи по теме:
Пакетные менеджеры
Продвинутый Frontend
Представим, что вы изучили синтаксис выбранного языка и его основные концепции. Теперь нужно выбрать фреймворк – каркас приложения, который задает архитектурные правила и содержит основные части веб-приложения.
| Фреймворк | Количество вакансий | Репозиториев на GitHub | Популярность StackOverflow, % | Уровень сложности | Зависимостей в npm |
| React | 4 280 | 73 458 | 35.9 | ⭐⭐ | 48 718 |
| Angular | 2 364 | 20 142 | 25.1 | ⭐⭐⭐ | 13 579 |
| Vue | 2 021 | 21 776 | 17.3 | ⭐ | 21 575 |
Продвинутый Backend
Backend-фреймворки менее разнообразны – обычно есть 1-2 лидера, которые занимают существенную часть рынка, а остальные либо узко специализированы, либо технологически отстают от лидеров. Для PHP такими фреймворками являются Symfony и Laravel, для Java – Spring и JSF, для Python – Django, Pyramid и Flask, для Node.JS – Express.JS, Meteor.JS и Koa.JS.
Ниже представлена сравнительная таблица оценки популярности PHP-фреймворков.
| Фреймворк | Установок через composer | Зависимых проектов | Популярность на GitHub | Количество вакансий |
| Laravel | 104 726 623 | 9 548 | 22 048 | 1 085 |
| Symfony | 52 561 771 | 3 971 | 23 880 | 819 |
| Phalcon | 29 504 | 2 | 10 232 | 47 |
| CodeIgniter | 773 857 | 65 | 18 071 | 52 |
| Yii | 10 393 997 | 11 540 | 217 | 890 |
| CakePHP | 6 027 870 | 1 649 | 8 234 | 10 |
| Slim Framework | 13 410 045 | 1 329 | 10 723 | 19 |
| Lumen | 535 795 | 53 | 6 900 | 45 |
Данные по количеству вакансий указаны по данным сервиса hh.ru, остальные данные взяты с сервиса packagist.org.
Продвинутый Web Developer: паттерны проектирования
Независимо от типа разработки, кроме знания технических деталей, потребуется и понимание паттернов – общих, устоявшихся методов проектирования информационных систем. Без этого любой современный фреймворк покажется набором магических конструкций.
Книги по паттернам:
Наши публикации о паттернах:
Практическое освоение технологий
Книги, документация и курсы дадут теорию, закрепить которую можно только с помощью практики. Приобрести навыки можно различными способами.
Домашние проекты
Ресурсы с задачами для программистов
Опыта проектной разработки от решения задачей вы не получите, однако глубже узнаете выбранный язык программирования и специфические алгоритмы, которые понадобятся в работе.
Присоединяйтесь к проектам на GitHub
Выберите интересный проект и вносите в него полезные правки, исправляйте ошибки, пишите дополнения к интересующим вас библиотекам или фреймворкам. Это поможет не только развить технические навыки, но и даст понимание практики командной разработки и знакомств в сфере IT. Активный аккаунт на GitHub выгодно выделит вас среди других кандидатов на роль веб-программиста. Вы всегда можете показать, в какие проекты вы отправляли код, и сами примеры кода.
Заключение
Веб-программирование – сложная, но интересная область. Безусловно, можно стать веб-разработчиком и своими силами, но есть и более легкие решения. Например, вы можете пройти курс факультета веб-разработки онлайн-университета GeekBrains. Информация в курсе хорошо структурирована, с вами будет работать личный наставник, а портфолио пополнится 4 актуальными проектами.
Кто есть кто в разработке. Developer, QA, BA, PM — кто все эти люди?
Очень часто, даже в кругу ИТишников, люди не понимают, кто за что отвечает в процессе разработки. Давайте разложим все по полочкам.
Developer — разработчик
Это человек, который посредством определенного языка программирования пишет программу, которая выполняет то, что нужно заказчику. Тут следует обратить внимание, что далеко не каждый, кто пишет код — разработчики. Код пишут не только девелоперы, но и QA Automation (специалист автоматизации тестирования), DevOps (администраторы автоматического разворачивания систем), Data scientist и другие. Специальностей, в которых требуется написание кода, действительно много. Чем отличается девелопер от остальных? Тем, что написание кода — это его основная работа, все остальные специалисты используют код как служебный инструмент для выполнения своей основной работы.
Например, у нас в Foxminded есть курсы девелоперов: Java, Android, C#/.net, Frontend, Salesforce.
QA (quality assurance) — тестировщик
Человек, занимающийся тестированием программного обеспечения с точки зрения его соответствия техническому заданию. Работа тестировщика напрямую связана с проверкой готовой работы программиста (дизайнера, девопса или других специалистов) на соответствие ТЗ, который написал заказчик.
Например, у нас есть курс Automation QA.
PM (project manager) — менеджер проектов
Руководитель проекта. На проекте могут работать ряд специалистов: программисты, тестировщики и пр. Все вместе они выпускают какой-то конкретный продукт. Проджект менеджер отвечает за то, чтобы этот продукт был готов вовремя и соответствовал требованиям заказчика. По факту, PM является представителем всей команды перед заказчиком. В большинстве случаев у PM не один, а несколько проектов, поскольку нагрузки от одной команды не слишком много. Достаточно одного статус-митинга в день и, при необходимости, отстоять интересы команды. Это не требует участия 8 часов в день, поэтому project manager ведет одновременно в среднем 3-5 проектов. Такую профессию может выбирать человек ответственный, который любит организовывать работу других людей, которому нравится чувство завершенности проекта. По факту, это как прораб на стройке — на нем команда и эта команда должна сдать проект в срок. Тут нужно быть именно руководителем.
Team Lead (техлид, тест-лид) — руководитель команды
Это технический специалист. Часто, это самый сильный специалист (и/или самый организованный) специалист в команде. Техлид — у программистов, тест-лид — у тестировщиков. Этот человек отвечает перед project manager за свою команду. Team Lead распределяет обязанности между другими членами команды, определяет загрузку человека, доносит пожелание/недовольства команды до руководства, берет на себя ответственность за выбор технического решения задачи. Такой человек есть в каждой команде. Назначается или официально, или неофициально (команда все равно выбирает кого-то, к кому прислушивается больше).
Как правило, карьерная лестница в ИТ выглядит так: Junior, Middle, Senior, Team Lead (или архитектор — это другая ветвь развития). Team Lead потом обычно идет в Project Manager и повышается до руководителя. Либо он идет в архитекторы и становится экспертом над несколькими командами. Архитектор выполняет роль технического специалиста, который отвечает за несколько проектов, связанных между собой. Должностей архитекторов мало, в некоторых компаниях такой позиции вообще нет.
Account manager
В разных компаниях эта должность может называться по-разному, но по сути этот человек является адвокатом клиента перед вашей компанией. Если заказчика нет на связи или у него нет времени, то вопросами проекта (на стороне клиента) занимается именно Account manager. Как правило, этот человек намного лучше разбирается в бизнесе клиента, чем в вашей сфере. В идеале, это прямой представитель компании, делегированный к вам на время разработки продукта. Бывает эту должность смешивают с Customer Success или другими. Все очень зависит от конкретной компании.
Buisness analyst
Бизнес-аналитик (он же Product Owner) тоже работает на стороне заказчика. Этот человек принимает решения касательно выпускаемого продукта с учетом анализа бизнеса. Утрированно: эта кнопка должна быть красная или синяя? Buisness analyst решает, какой вариант с точки зрения бизнеса будет эффективнее. Обычно именно этот специалист пишет документацию по проекту. Он собирает требования заказчика и именно он является последним человеком, который решает, как будет выглядеть продукт с точки зрения бизнеса. Если такие решения принимают разработчики — это очень плохо, поскольку они не знаю специфики бизнеса.
Опять же, в разных компаниях могут быть соединены должности Buisness analyst и Account manager. Но если говорить в идеале, то выглядит это примерно так: у клиента может быть несколько проектов. Account manager следит, чтобы каждый из них продвигался и был закрыт вовремя. А Buisness analyst это представитель клиента по каждому конкретному проекту и знающий его в деталях.
Может возникнуть вопрос по DevOps. Бывают админы, с которыми программисты и тестировщики практически не работают. Обычно они поднимают пустой не наполненный сервер и передают для дальнейшей работы. Но если ваш проект имеет микросервисную архитектуру (нужно поднять огромное количество серверов) то тут уже идет более тесная взаимосвязь.
О должностях можно говорить очень долго. Перечисленные выше есть +/- во всех компаниях и выполняют примерно одни и те же функции. А есть должности, придуманные компаниями для себя, тут можно копаться до бесконечности.
Классификация разработчиков по рангам боевых искусств
В своём блоге я взаимозаменяемо использую термины «программист», «кодер», «разработчик» и «инженер», чтобы избежать тавтологии. Тем не менее я считаю, что между этими словами и другими аналогичными есть некоторые различия.
В этой статье обсудим набор типичных существительных для обозначения человека, который пишет код. Я дам свою интерпретацию, как эти термины соотносятся с уровнем мастерства.
Толкование значений
Представленные здесь определения не являются официальными. Я не знаю каких-то формальных определений или принятого стандарта. Тем не менее, у многих людей есть твёрдое мнение по этому вопросу. Мое понимание каждого термина основано на 30 годах опыта в индустрии программного обеспечения, но я абсолютно готов к тому, что другие не согласятся с моей интерпретацией.
Не хочу спорить или убеждать людей с иным мнением. Вообще, вряд ли тут можно говорить о правильном или неправильном мнении. Тем не менее, если вы ещё не сформировали позицию по данному вопросу, надеюсь, что это руководство внесёт некоторую ясность.
Трёхсторонний подход
Для ясности каждый термин получит три характеристики:
1. Уровень мастерства
Описание уровня квалификации для этого термина, в моей интерпретации.
2. Параллель с рангами боевых искусств
Аналогия с рангами боевых искусств. В частности, сравним технический уровень навыков с цветами поясов у мастеров боевых искусств.
3. Пример кода
Пример того, как человек этого уровня должен подойти к простой программистской задаче. Определение тут тривиальное и не задумывалось как реалистичный пример. Цель — сравнить и обсудить уровень квалификации. Простотой пример подобран так, чтобы подойти специалисту любого уровня. Вот какую проблему мы рассмотрим:
Пожалуйста, подыграйте мне и представьте эту задачу как промежуточную для гораздо более сложной. В нашей вымышленной Вселенной задача требует серьёзных размышлений и имеет много потенциальных решений и подходов. Представьте, что это центральный модуль системы, которую нужно масштабировать.
Я буду использовать Ruby для тривиальных примеров реализации. Код достаточно прост: он понятен, даже если вы не знаете Ruby.
3. Список
Пояса боевых искусств
Когда я жил в Италии в юности — около 20 килограммов назад — то несколько лет практиковал дзюдо и кунг-фу. Тогда я узнал, что во многих боевых искусствах уровню мастерства соответствует цвет пояса. Обычно цвет изменяется от белого к чёрному, где уровень опыта соответствует темноте пояса.
Новичок носит белый пояс, потому что у него нет опыта. Белый цвет означает «новый и чистый». По мере тренировки пояс темнеет, демонстрируя прогресс. Цвет олицетворяет грязь, накопленную с тяжёлой работой и потом. Мастер боевых искусств с многолетним опытом в конечном итоге достигает чёрного пояса, который означает высокий уровень знаний и навыков.
Традиционно пояса были только чёрные или белые. В последние десятилетия появилось больше цветов. Сегодня в разных школах боевых искусств используются разные цвета. Схема зависит от стиля, школы и страны.
Почему мы говорим о боевых искусствах?
Цвета поясов используются, чтобы провести параллель между навыками создания программного обеспечения и навыками мастера боевых искусств. Для этого возьмём цветовую схему, обычно используемую в Европе: белый, жёлтый, оранжевый, зелёный, синий, коричневый и чёрный.
В следующей таблице показаны уровни разработчика, о которых я говорил. Для каждого показан цвет пояса и должность, которую обычно дают специалисту этого уровня:
| Уровень профессионала | Уровень боевых искусств (цвет пояса) | Пример должности |
|---|---|---|
| Новичок | Белый | |
| Хакер | Уличный боец (без пояса) | |
| Кодер | Жёлтый | Джуниор-разработчик (Jr.Dev) |
| Программист | Оранжевый | Разработчик ПО |
| Исследователь (Computer Scientist) | Зелёный | Разработчик ПО (Software Developer) |
| Разработчик ПО | Синий | Старший разработчик ПО (Sr. Software Dev) |
| Инженер-программист (Software Engineer) | Коричневый | Ведущий разработчик (Principal Dev) |
| Архитектор ПО (Software Architect) | Чёрный | Архитектор ПО |
Уровень инженерных навыков связан с техническими способностями и навыками командной работы. Название должности — пример, как человека на этом уровне называют в отрасли (это сильно зависит от компании и региона).
Новичок: белый пояс
С чего-то нужно начинать, и обычно это уровень «вообще нет опыта». Новичок в разработке программного обеспечения — это тот, кто только что познакомился с программированием и находится на ранних этапах обучения. Новички ещё не могут уверенно программировать и не понимают простых программ, не сверившись с книгами, учебниками или не спросив совета у опытного товарища.
Новички способны писать рабочий код, но часто не понимают деталей, почему этот код работает. Они тратят много времени на поиск фрагментов кода на StackOverflow или подобных сайтах и совмещение этих фрагментов, пока что-нибудь не заработает.
Мощные инструменты — это не то, что надёжные навыки
Чтобы ещё больше всё запутать, многие «современные» языки и фреймворки позволяют кому угодно генерировать структуру и некоторые реализации сложных программ без понимания, что происходит за кулисами. Например, запуск простого приложения Ruby on Rails и приём HTTP-запросов можно организовать с помощью нескольких команд из командной строки.
Вот как это делается под *nix:
$ gem install rails
…
$ rails new website
…
$ cd website
$ bin/rails server
.
Не поймите меня неправильно. Инструменты вроде Ruby on Rails позволяют быстро выполнить работу, и они великолепны. На самом деле я считаю фантастикой возможность сократить время на написание начального стандартного кода. Это отличное начало проекта, но здесь достаточно лишь белого пояса.
Настоящая схватка начинается там, где учебник заканчивается, где инструменты не могут автоматически сгенерировать нужное вам приложение. Чтобы двигаться дальше, нужно стать кодером.
Пример
Если новичок захочет написать программу, которая суммирует набор чисел с помощью Ruby, то может загуглить вопрос и найти такую страницу. Это первый результат в выдаче Google на момент написания этой статьи. На странице StackOverflow самый заплюсованный ответ с 524 голосами:
Конечно, это работает. Вот пример:
Это может работать у новичка, но он не понимает особенностей этого кода. Насколько он читаем? Насколько быстро выполняется по сравнению с другими вариантами? Легко ли его поддерживать? Почему он работает? Что именно произойдёт при выполнении этой строки? Сколько используется процессорного времени? Определены ли переменные sum и x после выполнения этой строки?
Начинающий разработчик на Ruby не знает ответов на большинство из этих вопросов.
Кодер: жёлтый пояс
Кодер может без посторонней помощи собрать много строк компьютерного кода для решения простых проблем. Результат будет не очень красивым, но кодер понимает, почему программа работает, и он успешно выполняет задание.
Первый необходимый шаг
Я назвал свой блог CoderHood, потому что каждый, кто зарабатывает на жизнь программированием, в какой-то момент достиг уровня кодера. Слово Coderhood отражает жизнь разработчика в мире технологий, начиная с первого жёлтого пояса.
Основное различие между новичком и кодером в том, что кодер способен писать код и понимать его. Они может не понимать в деталях, что происходит за кулисами, но он знает, почему написал именно такой код.
В отрасли кодеру обычно присваивают должность вроде «младшего разработчика» (jr. developer) или стажёра (developer in training).
Пример
Я думаю, что «Ruby-кодер» сможет придумать большинство нижеперечисленных методов вычисления суммы массива целых чисел и понять разницу между ними:
Если вам интересно, некоторые из этих методов ужасны, но они работают.
Хакер: джинсы без пояса
Я включил в список «хакера», потому что меня попросили об этом. Но он не слишком хорошо подходит для нашей дискуссии.
Не главный навык
Я не считаю, что «хакерство» является необходимым навыком на пути развития разработчика программного обеспечения. Такой опыт полезен, чтобы научиться тестировать и защищать программные приложения и системы, но я не вижу здесь описания общего «уровня навыков». Я бы классифицировал это как некую область дейстельности, а не уровень технического мастерства. На самом деле уровень квалификации хакера может быть любой. Некоторые из них удивительны, а другие не очень.
Поскольку хакерство не является необходимым шагом в развитии разработчика, по моей аналогии, у хакера нет традиционного пояса. Они больше похожи на уличных бойцов, носящих джинсы.
Некоторые из них злые головорезы, другие пытаются выжить, третьи — хорошие ребята, которые защищают остальных, но большинство где-то посередине.
Много видов «хакеров»
Есть много типов хакеров. Некоторые умеют программировать, другие нет. Значение слова зависит от контекста и от того, кто его использует. Некоторые общие определения:
Некоторые примеры
Тип 3
Хакер типа 3 может выбрать такой вариант суммирования массива целых чисел:
Способ работает, по крайней мере, на некоторых системах, но это… «полный хак». Так делают неквалифицированные хакеры, умеющие программировать. Они решают вопросы сомнительными способами, обычно выполняя нечитаемые команды командной строки, пока каким-то образом не получат желаемый результат.
Тип 5
Хакеры типа 5 работают на очень низком уровне. Такие навыки нелегко приобрести и они могут быть очень ценными, если вы пытаетесь настроить защиту программного обеспечения или создать чрезвычайно высокопроизводительные приложения. Я никогда не был «хакером», но я программировал на низком уровне (C и ассемблер) и по-прежнему в глубине души считаю себя специалистом по низкоуровневому программированию.
Хакеры 5-го типа могут быть фантастическими уличными бойцами, с безумными навыками, которые утрут нос многим профессиональным программистам на некоторых специализированных задачах. Такие «хакеры» могли бы суммировать массив целых чисел с помощью ассемблера примерно так.
Программист: оранжевый пояс
Программист может писать функционирующие приложения, понимает основные алгоритмы и знает основы информатики. Он может заставить программу работать, даже если она будет не очень масштабируемой и поддерживаемой в долгосрочной перспективе. Как правило, программист хорошо работает в одиночку. Не факт, что он будет хорошим командным игроком.
Большинство разработчиков останавливаются на этом уровне, особенно если не планируют изучать теорию информатики. Программисты могут написать приличный код и работать в индустрии программного обеспечения на этом уровне в течение всей карьеры.
С точки зрения должности, программистов часто именуют «разработчиками программного обеспечения» (Software Developer) или «инженерами-программистами» (Software Engineer).
В простом примере суммы массива целых чисел программист может написать код таким образом:
Этот код реализует полезную команду командной строки для суммирования списка чисел. Если вызвать её без параметров, она отображает полезное сообщение об использовании. В противном случае печатает стандартную выдачу. Вот пример использования:
$./sum
Usage:
sum [список целых чисел, разделённых пробелами]
$ sum 1 2 3
6
Это «комплексное решение», самодокументируемое и несколько абстрактное, поскольку программу можно вызвать из командной строки.
Исследователь: зелёный пояс
Исследователь (computer scientist) изучал информатику или в школе, или на работе. Он имеет хорошее понимание таких понятий:
Один только статус «компьютерного учёного» не делает вас отличным программистом. Здесь как будто нарушается аналогия с цветами поясов. Но это не так. Подумайте с такой стороны: даже в мире боевых искусств есть специализации. Некоторые зелёные пояса лучше других делают некоторые вещи. Прогрессия нелинейная. Цвет пояса часто представляет собой уровень опыта и количество труда, затраченного на овладение боевым искусством, а не обязательный уровень мастерства в каждом аспекте.
Учёный, вероятно, напишет такой же код для суммы чисел, как и программист. Разница в том, что учёный может сразу сказать, что сложность этого алгоритма O(n) времени. Как уже упоминалось, это элементарный пример, но вы уловили мысль.
Разработчик программного обеспечения: синий пояс
Разработчик программного обеспечения способен осилить более крупные и сложные проекты. По сравнению с программистом и исследователем он:
Пример
В простом примере суммы целых чисел разработчик программного обеспечения может решить проблему путём создания службы, предоставляющей Web API. Интерфейс принимает набор целых чисел и возвращает сумму.
Я полагаю, что приложение будет хорошо документировано и поддерживать настройки, сопровождаться тестами, иметь правильную структуру кода и легко обслуживаться другими разработчиками.
На Ruby основное приложение с использованием Sinatra может выглядеть примерно так:
Хороший разработчик программного обеспечения хорошо осведомлён о многих ограничениях этого решения по сравнению с другими. Например, оно ограничено суммой набора чисел, которая помещается в URI; здесь нет явной проверки на ошибки, строки должны начинаться с числа и т. д.
Инженер-программист: коричневый пояс
Разница между разработчиком (software developer) и инженером-программистом (software engineer) тонкая; я это полностью признаю. Эти термины обычно используются как синонимы. Тем не менее, я предполагают, что инженер-программист — специалист, имеющий знания в области информатики и большой опыт в качестве разработчика программного обеспечения. Основные отличия:
Пример
Инженер-программист может написать приложение как разработчик, создав службу и предоставив API, чтобы взять набор целых чисел. Но я считаю, что решение инженера будет включать в себя некоторые улучшения:
Пример становится глупым
Как видите, слишком простой пример на этом этапе становится немного глупым. Он сводится к обсуждению, как улучшить и так избыточное решение тривиальной проблемы.
Например, управление кэшем с результатами простых операций над небольшим набором чисел, скорее всего, тяжелее и медленнее, чем простые вычисления. Кэш имел бы смысл в случае огромного массива чисел для передачи в API, но тогда список не поместится в URI запроса.
Вы можете переместить список чисел в тело запроса, но тогда он больше не будет RESTFUL API, и запрос больше не будет кэшироваться. В этот момент возникнет соблазн изменить запрос на POST, но так он никогда не станет кэшируемым. В любом случае, обсуждение может продолжаться и продолжаться.
Критическая часть
Видите, что происходит? По мере совершенствования навыков разработчика и усложнения проектов происходит забавная вещь. Проблемы всё больше отдаляются от «основного кода». Вместо этого они всё больше уходят на обработку контекста, в котором работает основной код.
В результате высококвалифицированные разработчики тратят большую часть времени на совершенствование таких аспектов системы, как масштабируемость, производительность, проверка ошибок, надёжность, сопровождаемость, абстракция, переносимость, обработка граничных условий и т. д.
Кроме того, они узнают, как работать более эффективно или улучшить взаимодействие с другими разработчиками и как подойти к работе, чтобы минимизировать риски и т. д. Разработка программного обеспечения уходит от кодирования в сторону инженерных систем и решения проблем.
Архитектор программного обеспечения: чёрный пояс
Все разработчики и инженеры должны быть в состоянии проектировать части систем и продуктов, которые собираются построить. «Архитектор программного обеспечения» выводит этот навык на более высокий уровень и делает выбор при проектировании высокоуровневых взаимодействий более крупных программных систем, разработанных другими инженерами.
Пример
В нашем примере, среди прочего, архитектор может нарисовать такую диаграмму, чтобы направить разработку сервиса для суммирования целых чисел:
Чтобы эффективно решать такие задачи, архитектору программного обеспечения требуются годы опыта работы на всех уровнях. Этот практический опыт входит в мышечную память. Он позволяет архитектору принимать правильные решения высокого уровня, не зацикливаясь на деталях.
Тем не менее, я не верю в чистых архитекторов, то есть инженеров, которые полный рабочий день принимают решения на высоком уровне. Думаю, что надёжный архитектор должен спускаться на уровень отдельных деталей и выходить оттуда, когда это необходимо. Он готов регулярно и эффективно погружаться в код.
В боевых искусствах чёрный пояс — учитель и наставник. Думаю, что обучение и наставничество также являются задачами архитектора программного обеспечения. Преподавание, о котором я говорю, не прямое (лекции), но больше делается на примере, показывая путь и направляя людей к принятию своих решений.

















