Путь веб-разработчика. ИНТЕРВОЛГА – "точка роста"

Когда в 2004 году я окончил университет, в городе почти не было команд разработчиков.
Где работать, у кого набираться практического опыта?
Выбор был прост: “админом” или “в Москву”. Или уйти из профессии.
Сейчас я преподаю разработку в ВУЗах, руковожу большим коллективом и мне важно, чтобы в Волгограде хотели жить толковые молодые ребята, чтобы наш город не считался “тухлым местом”.
ИНТЕРВОЛГА успешно работает на клиентов, но не только в этом смысл.
Наша ключевая социальная роль – дать возможность местным талантам вырасти, “встать на крыло” и получить свободу выбора.
Степан Овчинников, ген.директор.

Суть статьи коротко

ИНТЕРВОЛГА умеет развивать веб-программистов с “почти нуля” до уровня уверенного профессионала (Senior / Архитектор). Это происходит постоянно. Для воспроизводимости процесса мы разработали все нужные материалы и хотим рассказать как все работает.

ИВ – отличное место для старта карьеры: за 4-5 лет “толковый студент” станет серьезным специалистом, для которого открыты все дороги.

В этой статье описан “правильный трек развития веб-разработчика”. 

В следующей статье будут описаны уровни компетенции “Стажер”, “Junior”, “Middle”, “Senior” и “Architect”,  даны примеры заданий. 

Что и зачем делает компания?

В ИНТЕРВОЛГЕ работает более 70 человек . Мы создаем веб-сервисы, интранет-порталы, крупные интернет-магазины и системы автоматизации процессов. 

Наши клиенты – крупные производственные компании, успешные интернет-магазины и аптечные сети. Мы выросли из крохотной веб-студии потому, что умеем меняться и развивать людей в компании.

Мы приносим пользу сотням компаний и делаем реальное дело. Одна из ключевых наших ценностей – правильная производственная культура.

Что такое современная веб-разработка

Программист создает программу из ничего, он ощущает себя буквально творцом новой Вселенной. 
Фредерикс Брукс. 
«Мифический человеко-месяц, или Как создаются программные системы»

Современная веб-разработка это не “клепать сайтики и лендинги”. Сейчас все делается в интернете: торговля — в интернет-магазинах, заказ документов – в личных кабинетах, торги – онлайн.

Как это работает? Технологии делают мир все более “цифровым”. Браузер становится инструментом номер 1, а веб-разработчики – программистами номер 1. Где бы вы ни работали – вы будете работать с вебом.

ИНТЕРВОЛГА связывает разные системы (банковские, торговые, интеллектуальные) в единый комплекс: сложный внутри, простой для человека. Поэтому мы называемся “компетентный веб-интегратор”.

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

Middle-разработчик решает специальные задачи: разработка онлайн-личных кабинетов, интегрированных с несколькими внешними системами, внедрение электронной подписи, ускорение работы сервисов.

Специалисты уровня Senior и Architect решают необычные задачи: внедрение новых технологий в веб-приложения, создание нестандартной архитектуры и разработка высоконагруженных систем.

Сегодня программист – тот, кто меняет мир, делает его удобнее, проще, быстрее.


Пирамида способностей программиста или "что качать на старте"

Чтобы стать профессионалом в определенной области, требуется в среднем 10 тысяч часов осознанной практики.
Осознанная практика – это целенаправленное систематическое улучшение навыков под руководством более опытного наставника.
Малькольм Гладуэлл. «Гении и аутсайдеры»

Как стать программистом? Точнее, как стать хорошим веб-программистом? Нужно ли заканчивать "информатику" в хорошем ВУЗе? Или хватит месячных курсов? Или "с книжкой и мышкой" все можно изучить?

Этот вопрос очень часто возникает у нас на собеседованиях, когда кандидат вдруг понимает (иногда после первого же вопроса) что его знания поверхностны и неадекватны реальным задачам.

Три "кита", на которых стоит профессия любого разработчика на любом стеке технологий, это алгоритмизация, базы данных и программирование (язык + ООП + паттерны) .

Что такое алгоритмизация?

Информации, получаемой из Матрицы, гораздо больше, чем ты можешь расшифровать.Ты привыкаешь к этому. Скоро твой мозг сам делает перевод. Я уже даже не вижу код. Я вижу блондинку, брюнетку и рыжую.

Из кинофильма “Матрица”.

Простыми словами "алгоритмизация" — это умение быстро решать простые задачи по памяти. Любая программа создается из "блоков" (кирпичиков). Вариаций этих кирпичиков вообще говоря много и выучить их за раз сложно. Нужно много практиковаться.

Близкий "житейский" аналог — вождение автомобиля. Начинающие водители управляют автомобилем неуверенно, часто сомневаясь какую педаль нажать и в какой момент. На первых порах новички то и дело уводят взгляд с дороги и переводят его на педали или ручку КПП, чтобы понять в каком “режиме” находится автомобиль и какую команду можно ему дать. Это всегда приводит к медленной реакции и иногда к ДТП.

Ту же ошибку совершает программист, когда для поиска элемента в массиве идет "гуглить".

Алгоритм — это набор простых команд для решения задачи любой сложности с учетом всех нюансов. Умение найти (создать) подходящий алгоритм для конкретной задачи клиента – это и есть работа программиста. 

Самое главное – нужно уметь делить задачу на части. Потом понять как сделать каждую часть. Потом научиться находить оптимальные решения.

Близкий "житейский" аналог технического навыка "алгоритмизации" – ремонт вентилятора. Что делать, если "не крутится"? Проверить/сменить розетку, потом рукой крутануть лопасти, потом "прозвонить" провод.

Логика очевидна: "разделил на части и проверил каждую". Удивительно, но многие люди не умеют так мыслить. У настоящего программиста это "в крови".

Когда с "делением на части" все хорошо, вы умеете делать простые вещи, нужно правильно решать стандартные программистские задачи. "Придумывать" решение не нужно, его нужно знать.

Например, это классические задачи поиска элемента в отсортированном массиве, определение "поместится ли квадрат в круг", нахождение наибольшего "незанятого фигурами" прямоугольника на шахматной доске.

Часто спрашивают: "А это зачем? Почему я в 21 веке должен уметь сортировать массив или искать пересечение прямоугольников, ведь существуют готовые библиотеки даже для компьютерного зрения?”

Есть 2 причины. Первая – применяя готовый алгоритм, программист должен знать как он работает, что быстрее для каких данных и почему. Только так он сможет выбрать правильный метод.

Вторая – если вы знаете как работают стандартные функции, вы сможете написать свою, когда стандартная не подойдет. Очень часто программисты сталкиваются с задачами, для которых решение нужно придумать.

Это как вождение автомобиля. Любителю хватит знаний “где руль” и “куда давить”. Профессионал не только в деталях изучил все органы управления, он еще понимает физику движения и думает на 2 шага вперед. 

Кто пройдет сложную трассу лучше, быстрее, безопаснее и красивее – думаю, объяснять не нужно. Вы сами-то кем хотите быть? 

Какие технологии нужно знать программисту?

Давайте определимся из чего вообще состоит профессионализм разработчика. В помощь – иллюстрация, предложенная Алексеем Шкарупа по аналогии с пирамидой потребностей Маслоу

Временные рамки это – примерное время освоения при классическом пути (начиная с ВУЗа).

Пир.png

Про алгоритмизацию написано выше, и “по уму” эти знания дают в школе/ВУЗе. Тратится на них 1-2 года, и этот период определяет высоту вашего будущего профессионального взлета. Если вы не освоите алгоритмизацию, то никогда не станете настоящим программистом.

Обязательно нужно изучать базы данных и уметь решать конкретные задачи на SQL. Во-первых, БД очень широко используются в практике. Ни одна современная программа не обходится без БД, в 99% случаев — классической реляционной. Во-вторых, они прекрасно выстраивают логическое мышление.

Понимая алгоритмы, программист учится придумывать структуру программы (это называется Проектирование) и писать код.

Конкретные языки программирования осваиваются довольно быстро, если знать алгоритмизацию. На старте почти все равно “на чем учиться”. В большинстве языков отличается только синтаксис.Чем ближе вы к профессии, тем важнее конкретный язык. Для серверной (backend) веб-разработки один из самых популярных языков – PHP. На момент написания этой статьи на нем написано 79% всех сайтов в мире .

Особенности языка можно изучить довольно быстро. Если вы учите второй или третий язык, через неделю вы решите первую осмысленную задачу. А вот на “знаю в совершенстве” потребуется не менее года практики.

Постоянное применение языка и решение задач логично приводит к идее фреймворка. Это набор полезных функций, компонент, блоков для решения задач. Все большие проекты сделаны на фреймворках.

Например, для фронтенд-разработки язык Javascript вообще не имеет альтернативы, только он работает в современных браузерах. А вот JS-фреймворков существует несколько сотен, и выучить все не получится.

Фреймворки часто включают сотни модулей/классов/расширений и постоянно развиваются. Освоение фреймворка займет у вас несколько месяцев как минимум.

Многие самоучки идут по “легкому”, но неверному пути: вместо алгоритмизации начинают учить фреймворк. И уже через пару месяцев практики заявляют что умеют программировать. Наши собеседования они проваливают уже через 10 минут после начала.

Конкретные технологии (например AJAX, серверный рендеринг JS, push&pull, распределение нагрузки по гео-кластеру, профилировка долгих запросов в xhprof, очереди сообщений, NoSQL базы данных) бесконечно разнообразны. Учить их можно вечно.

Эту пирамиду нужно проходить “снизу вверх”. Если вы начнете с фреймворка и напишете красивое резюме, но не будете знать как работает “голый JS” или “чем get-запрос отличается от post” – профи вам не быть. 


Какие задачи нужно решать? 

Первый этап – “старт”. Сначала нужен навык уверенного и правильного решения относительно простых задач. Чаще всего это игровые, математические или логические задачи. 

Для навыка “быстро пишу простой код” нужно прорешать на любом языке программирования любой из классических сборников задач по программированию. Например, Златопольского

Вам может показаться странным решение 1000 скучных задач, но каждый хороший программист делал это в начале своего пути. Кто-то – в институте, кто-то в школе, наши дети будут делать это в детских садах.

Если задачи даются вам легко, попробуйте пропустить десяток. Цель – научить вас быстро, правильно и оптимально преобразовывать данные, оперировать условиями и циклами.

“Школа” дает навык решения относительно простых задач. Чаще всего это игровые, математические или логические задачи. Это очень полезно, но это еще не реальные задачи.

Такой метод обучения у медиков называется “методом свинцовой ж*пы”. Простите за грубость, но из народного творчества слов не выкинешь. Осознанно и в больших объемах его используют студенты мед. ВУЗов. Больше зубрежки и заучивания чем у них представить трудно. Но хороший медик должен знать сколько точно костей в руке у человека, как называется каждая и за что отвечает. Единственный метод этого добиться — сидеть и учить. Долго учить. Пока пятая точка не станет свинцовой.

Второй этап – “практика”. Нужно писать код, в котором через год вы сможете разобраться. Чтобы при появлении новых требований не приходилось все переписывать с нуля. Чтобы при росте проекта в 100 раз он остался “поддерживаемым”. Чтобы при добавлении в команду программистов они не покусали вас за странный стиль.

Это очень сложный переход. Многие программисты не делают его никогда: они становятся разработчиками “одной программы” или всегда пишут проекты не более чем в 200 строк. Это не уровень профи.

Чтобы научиться, нужно решать большие задачи в коллективе и параллельно читать правильные книги. Например, Роберта Мартина “Чистый код” . В нашей корпоративной библиотеке эта книга есть.

“Большие задачи” – реальные сервисы, которыми пользуются люди, где команда состоит минимум из 2 человек, и состоящие из тысяч строк кода. Такие проекты формируют уверенного специалиста.

Третий этап – “мастерство”. Оно включает освоение конкретных фреймворков в рамках выбранного стека технологий. Вы должны научиться решать реальные современные задачи на высоком уровне.

Более сложная и более полезная книга – Шаблоны корпоративных приложений Мартина Фаулера . Ее тоже нужно прочитать, примерно через год-полтора работы в профессии.

А зачем? Можно просто закончить 3-месячные курсы “веб-разработчика”?

Удивительно часто на собеседование приходят “как бы программисты”. У них за плечами курсы, несколько мест работы, портфолио с красивыми сайтами (странная манера, как будто мы ищем веб-дизайнера).

При этом на простейший вопрос типа “что такое cookies” или “как работает подгрузка сообщений в ленте ВКонтакте” люди часто не знают ответа, у них даже версий толком нет.

Такие люди часто “выучили” конкретный веб-фреймворк (бек-Laravel или фронт-Angular) до того, как решили свои первые 10 задач “на поиск элемента в дереве”.

Хороший программист знает теорию и применяет на практике, все время думая “как сделать правильно”.
На “спинном мозге” и “копировании кусков кода из гугла” далеко не уедешь. Нужна база и практика.

Как получить эту “базу”? Где правильно учиться? Есть два пути. Первый – 4-5 лет в хорошем ВУЗе. Только очно. В Волгограде мы готовы рекомендовать ИМИТ ВолГУ или ФЭиВТ ВолгГТУ. 

Второй – несколько лет упорного самообучения и практики. Можно стать сильным программистом без профильного образования, если у вас светлая голова, открытое сердце, а вы сами готовы много работать.

В ИНТЕРВОЛГЕ есть хорошие специалисты с ИТ-образованием (их много) и отличные самоучки (единицы). В любом случае базовые знания нужно развивать не менее 4 лет, чтобы достичь мастерства.

Короткие курсы полезны, чтобы получить базовые знания и понять “куда рыть самому”. Профессионалом они вас не сделают. 

Тестовые задания “на входе” и открытые учебные материалы

Мы готовы брать на стажировку и работу людей не ниже определенного “минимального уровня”. Этот уровень проверяется задачами, опубликованными на странице вакансий или практики/стажировки .

Если вы умеете программировать, но не хватает знаний по веб-разработке, можно посмотреть наши открытые лекции по веб-разработке (видеозаписи и презентации) . На старте это очень полезно.


Развитие программиста: Стажер – Junior – Middle – Senior – Architect

В 2017 году ИНТЕРВОЛГА уже публиковала свою матрицу компетенций веб-разработчика . По сей день это самый обширный и подробный план развития специалиста в нашей отрасли.

В 2020 году мы собрали отзывы и пожелания по матрице и аттестациям, посмотрели как поменялся технологический стек. Разработчики и руководители потратили много времени на поиск истины.

Мы опубликовали новую матрицу компетенций вместе с планом развития. Мы считаем что это и есть ответ на вопрос “как из новичка стать гуру веб-разработки”.

Оцените статью:
Хочу у вас работать

Вы можете войти, используя аккаунт одной из социальных сетей

Выбрать файл