
Всем добра! Я руковожу агентством web/mobile разработки, поэтому заинтересован, чтобы моя команда росла в скиллах. Тем временем рынок меняется, постоянно выкатываются обновления, а найти действительно сильных специалистов все сложнее.
У нас есть запросы на PHP-бэкендеров, фронтендеров, проджектов и дизайнеров. На первых – самый большой, так как изначально костяк команды занимался созданием программных продуктов на Yii, Laravel и Symfony.
Сейчас из 300 кандидатов на вакансию Мидла откликаются лишь 1-2 человека, которые действительно им являются. Что уж, разработчики, претендующие на позицию Джуна, не знают даже базы. И как быть?
Можно взять и надеяться, что сотрудник обучится всему сам на внутренних песочницах, по рекомендуемым материалам и задавая вопросы старшим. На практике же ребятам нелегко заниматься самообразованием, иногда даже губительно, а лишний раз тревожить коллег они стесняются.
Можно отправить их на сторонние распиаренные IT-курсы. Но мы же понимаем, насколько общее представление в них дается. И часто оно не бьется с реалиями, особенно в разработке. В итоге – обучение пройдено, оплачено, а снова возвращаемся к неспособности закрывать боевые задачи.
Можно никого не нанимать и сидеть на месте, отказываясь от крупных проектов. Однако довольствоваться малым и не желать расти – это не про бизнес. Рано или поздно тебя просто съедят.
Мы нашли ответ в разработке своей программы повышения квалификации. Не только для того, чтобы закрыть проблему с нехваткой специалистов, но и чтобы разом прокачать всех участников команды.
Рассказываю, как выглядит создание курса изнутри и во сколько он нам обошелся.
Как разрабатывалась обучающая программа для бэкендеров

Инициатором создания курса выступил IT-директор компании Дмитрий. Он давно вынашивал идею о системе, которая даст свободу в выборе специалиста под проект. Ведь если все сразу находятся на одном высоком уровне, то есть уверенность, что с поставленными задачами справится любой из подопечных.
Дмитрия поддержали руководители отделов разработки (РОРы). Они распределили программу по блокам, чтобы каждый подготовил для слушателей то, в чем более силен.
Откуда взяли темы для обучения
При выборе наполнения своей программы мы не смотрели на уже имеющиеся рыночные курсы. Ориентировались сугубо на то, что необходимо нам, и логичность последовательности.
Анализировали скиллы команды и выявляли, что требует более глубокого изучения.
Раз в квартал мы проводим грейдирование, чтобы отслеживать динамику развития разработчиков и помочь им наглядно увидеть, что нужно подтянуть в хардах. Ребята отвечают на вопросы, которые составляются под заявленный грейд, и выполняют практическое задание. Потом мы смотрим на результаты и фиксируем нынешний уровень навыков для дальнейшей стратегии индивидуального роста.
Исходили из опыта на проектах старших специалистов.
«Чтобы определиться с направлениями курса, я открыл гугл док и начал записывать все, что хотел передать ребятам. Был момент, когда я без конца дополнял этот список – пришлось самого себя останавливать. Иначе мы бы не смогли закончить обучение в адекватные сроки. К тому же это наш дебютный курс, поэтому решил дать те знания, которые наиболее актуальны для рабочих реалий и востребованы на рынке.»

Дмитрий
IT-директор
Как работали над структурой корпоративного курса
Наше обучение направлено именно на повышение квалификации бэкендеров, а не ввод в профессию. Руководители включили в него углубленные блоки, которые без базовых знаний сложно воспринимать. Но на старте Дмитрий специально для разогрева поставил урок «История создания языка программирования PHP», чтобы разработчики плавно вошли в учебный процесс.
Создатели курса поставили себе цель – не день без слайда, чтобы ускорить его подготовку. Понятно, что были загруженные дни, когда заняться «творчеством» не получалось. Но благодаря такому девизу процесс практически не останавливался.
На выходе получилось 5 модулей, которые включают 47 занятий:
PHP
ООП
Архитектура
Базы данных
Автоматические тесты / CI/CD
Какими информационными источниками пользовались
Наша база знаний формировалась из реальных кейсов специалистов компании и материалов авторитетных разработчиков. Помимо конвертации практики от боевых задач, мы анализировали статьи, печатные и электронные издания.
Для модуля «Архитектура» Дмитрий не ограничивался окружением PHP, а взял данные, что связаны с Java и C#. В них лучше описаны базовые принципы структуры кода, которые присущи всем высокоуровневым языкам.
При подготовке вдохновлялись следующими книгами, которые наиболее ценны в среде разработчиков:
«Мастер-класс. Совершенный код», Стив Макконнелл;
«Рефакторинг: улучшение существующего кода», Мартин Фаулер;
«Принципы, паттерны и методики гибкой разработки на языке C#», Роберт Мартин и Мика Мартин;
«Идеальный программист. Как стать профессионалом разработки ПО», Роберт Мартин;
«Чистый код: создание, анализ и рефакторинг», Роберт К. Мартин;
Implementing Domain-Driven Design и Domain-Driven Design Distilled, Вон Вернон;
Domain-Driven Design: Tackling Complexity in the Heart of Software, Эрик Эванс;
«Паттерны объектно-ориентированного проектирования”, Эрих Гамм, Ричард Хелм, Ральф Джонсон и Джон Влиссидес.
Каждый сторонний аспект, который хотели донести спикеры, трижды проверялся.
Как проходило обучение
Официально курс стартовал 18 марта 2024 года. Формат занятий выбрали классический – оффлайн-лекции два раза в неделю с возможностью подключения онлайн. В среднем урок длился в рамках академического часа – 45-50 минут.

Занятия записывались на камеру. Готовые видео скидывали в чат учеников курса, чтобы те могли в любой момент их пересмотреть, особенно если фактически отсутствовали во время лекции. Еще это делалось на будущее, если мы захотим выложить программу в общий доступ.
Спикерами стали сами создатели курса: IT-директор Дмитрий и руководители отделов разработки Даниил и Михаил. Каждый рассказывал ту тему, которую готовил.
«Изначально я планировал вести лекции с планшета, но в итоге от такого формата отказался – было не очень удобно. Поэтому выбрал другой вариант – перечитывать материал перед занятием и повторять ключевые моменты. Конечно, был определенный страх перед выступлениями, например, если что-то забуду или растеряюсь при ответе на вопрос. Моей мотивацией стало повышение квалификации не только других разработчиков, но и своей собственной, личностностной.»

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

Дмитрий сделал еще один способ проверки усвоения материала. Назвал его «Генерал знаний» – участники получали батончики Mars за правильные ответы по прошлому материалу и самый интересный вопрос в конце занятия. Возможно, этот формат кому-то покажется детским, но он работал: разработчики не боялись задавать любые вопросы и лучше запоминали сказанное.

В конце обучения мы провели контрольное тестирование. Нам было важно понять, как ребята прослушали программу и что закрепили. По результатам всем ученикам выдали сертификаты о прохождении курса.
Условия прохождения курса для сотрудников
Чтобы проделанная работа не оказалась напрасной, с каждым обучающимся заключили ученический договор. Ключевое условие соглашения – проработать в компании 1,5 года после прохождения программы. Если специалист покинет команду по своей инициативе, то должен возместить обучение полностью или частично. Стоимость курса для одного разработчика мы оценили в 130 тысяч рублей.
Этот пункт принес пользу и HR-отделу: выявили тех ребят, кто потенциально может уйти.
Проблемы в создании собственного курса
При разработке любого решения возникают сложности, и корпоративное обучение – не исключение.
Где найти ресурсы?
Я боялся дополнительно нагружать руководителей, чтобы не отнимать у них время, рассчитанное на клиентские проекты. Но им самим была интересна подготовка, поэтому мы договорились о партнерстве в правообладании обучающей программой и вышли за пределы рабочего графика.
Ребята потратили около 4 месяцев, чтобы создать полноценный курс. И все равно что-то дорабатывалось уже в процессе обучения. Это и не хорошо, и не плохо – просто факт, что требуются огромные человеческие ресурсы. К тому же мы записывали занятия на камеру, поэтому добавляется время на обработку видео и минимальный монтаж.
Кто будет вести лекции?
Создать курс – одно дело, другое – грамотно его преподнести.
Если уроки ведет эксперт без педагогических навыков, значит, есть большой риск, что обучение пройдет безрезультатно. Профессионалы в сложных областях нередко объясняют материал запутанно, не упрощая подачу и стараясь передать как можно больше.
Привлечение коуча тоже имеет негативные последствия. Сторонний спикер может представить материал более структурировано и доступно, но нет гарантии, что он глубоко владеет темой курса. Это приведет к тому, что приглашенный человек не ответит на все вопросы учеников и потеряет авторитет в их глазах.
Нам в этом плане повезло – преподавателями стали те, кто разрабатывал обучение. Наши руководители постоянно общаются с клиентами и привыкли говорить на понятном языке.
Как мотивировать сотрудников?
В коллективе всегда найдутся люди, которые не проявляют интерес к получению новых знаний.
Причины на это разные:
удовлетворенность текущим уровнем навыков и отсутствие потребности в развитии;
страх неудач или неуверенность в своих способностях, опасение показать некомпетентность перед коллегами;
недостаток ресурсов, времени или финансов для обучения;
отсутствие поддержки со стороны руководства.

Чтобы мотивировать сотрудников, помимо перспектив к повышению ЗП с ростом скиллов, важны и нематериальные стимулы. Один из таких – перенятие опыта от востребованного специалиста.
Представьте, Сеньор раскладывает по полочкам все знания, которые он приобрел за десять с лишним лет в боевых задачах. Вам не придется закапываться в документации и огромных статьях – нужно прослушать лекции и взять то, чего не хватает для развития.
Что получили в итоге и сколько потратили
Официально курс завершился 20 сентября 2024 года. Мы сразу убедились в его пользе на наших разработчиках. Многие советы и моменты они ежедневно применяют в решении задач. И теперь смотрят на определенные участки кода под другим углом.
Заключительный в 2024 году грейд показал, что результаты у тех, кто прослушал лекции, улучшились.
При разработке занятий и изучении материалов прокачивались и сами РОРы. Как говорится: «Хочешь в чем-то разобраться – научи этому других») На самом деле здесь речь про «освежить память» и набустить софт-скиллы.
Корпоративное обучение также является плюсом для отдела кадров. Курсы от работодателя привлекают соискателей, которые заинтересованы в профессиональном развитии. Талантливые специалисты склонны оставаться в компаниях, которые инвестируют в рост их навыков.
Итоговая себестоимость нашего курса – 485 000 рублей. Она рассчитана из часов руководителей, которые затрачены на подготовку.
На данный момент «Программа повышения квалификации PHP-разработчиков» доступна только сотрудникам агентства. Но я уверен, что она может быть полезна и другим бэкендерам.
Сейчас размышляем над тем, выпустить или нет курс в общий доступ. Что думаете?
Комментарии (32)
magaffy
21.01.2025 08:01Я понимаю ваш страх, что сотрудник пройдет обучение и уйдет в другую компанию, но ученический договор это худшее, с чем я сталкивался в работе
Итоговая себестоимость нашего курса – 485 000 рублей ...
Стоимость курса для одного разработчика мы оценили в 130 тысяч рублейВо-первых многовато заложили (даже на распиареных сайтах дешевле курсы), а во-вторых, если у вас нет лицензии на преподавательскую деятельность, то увы, ученический договор не имеет веса и будет работать, пока сотрудник это не узнает)
ceomt Автор
21.01.2025 08:01Мы загорелись самим курсом и его целями, только потом пришли к мысли о страховке. В себестоимость не заложены проведение занятий, проверка изученного и монтаж роликов, но, конечно, все еще раз будет взвешиваться, если решимся выпустить. Спасибо за мнение.
FurySeer
21.01.2025 08:01Какая страховка у новоиспеченного сотрудника на случай, если на нем по этому договору начнут ездить полтора года?
ceomt Автор
21.01.2025 08:01У нас есть четко прописанные регламенты, которые работают в обе стороны. Ну и писать могу много, но все свои гарантии сотрудник понимает еще на собесе. Есть ребята, которые в агентстве уже 5 и более лет, с самого начала.
FurySeer
21.01.2025 08:01Ваша страховка - поставить человека на деньги, его страховка - ваши регламенты? Гарантии на собесе? Так потребуйте с сотрудника гарантий на собесе с его стороны и достаточно. Почему вы так не делаете?
ceomt Автор
21.01.2025 08:01Даже мыслей нет в такой интерпретации. И то, и другое - добровольное письменное соглашение, обучение в целом по желанию, без принуждения. Мы изначально даем список задач еще при трудоустройстве, и не можем выйти за его пределы. У нового сотрудника сразу есть на руках гарантии, у нас - 0. Я не могу говорить за всех, но вот так, когда полностью официальная компания.
FurySeer
21.01.2025 08:01Повторяю вопрос - почему вы не ограничиваетесь честным словом соискателя при найме, если сами готовы предоставить в качестве гарантий лишь слова?
ceomt Автор
21.01.2025 08:01Если документы, оформленные по ТК, - лишь слова, то, получается, что и мы берем равноценное честное слово.
FurySeer
21.01.2025 08:01Вы не ответили на вопрос. Вы честное слово, что не будете ездить, вам - что не уйдут. Никаких выставлений счетов. Если у вас так замечательно работается, то какие риски?
lovaz
21.01.2025 08:01А почему они должны начать "ездить" на разработчиках? В чем проблема, если такое случится, оплатить курс? Или не проходить этот, а купить другой, если есть желание поучиться? У Скилфэктори, Нетологии и прочих все за деньги. Вполне адекватная страховка с учетом того, что спецов в IT постоянно хантят.
magaffy
21.01.2025 08:01"Ездить" может и сильно сказано, но зачем повышать мотивацию сотруднику, если он итак никуда не уйдет?
magaffy
21.01.2025 08:01Но ведь ваше обучение взаимовыгодное. Сотрудник получает знания, благодаря которым в вашей компании может вырасти в грейде (возможно), вы получаете более прокачанного сотрудника. win-win, зачем вам еще и ученический в такой ситуации? Если у вас хорошие условия, он и так не убежит)
ceomt Автор
21.01.2025 08:01Добрый. Да, обучение будет взаимовыгодным, если сотрудник в ближайшее время после него не получит оффер, например, от банка с зп 2Х и не уйдет молча в закат) Тут какие условия не создавай, а на рынке разработчиков всегда найдется что-то заманчивее. В целом я не открыл ничего нового своим решением с договором. И считаю его вполне логичным: прохождение этой программы - исключительно по желанию сотрудника, любые приличные курсы стоят денег. Мы лишь создали свой. Для повышения навыков у нас есть еще и абсолютно ни к чему не принуждающие мит-апы, живая библиотека и WiKi с полезными и практическими материалами, внутренние проекты-песочницы.
magaffy
21.01.2025 08:01Интересно, какой уровень зп у вас в компании, если разработчику могут предложить х2 после прохождения внутреннего курса.
Этот пункт принес пользу и HR-отделу: выявили тех ребят, кто потенциально может уйти.
Кажется, что не совсем "исключительно по желанию сотрудника"
ceomt Автор
21.01.2025 08:01ЗП индивидуально: направление, грейд, оклад, оклад +kpi (смотря какой сотрудник)... Банки в целом могут себе позволить по вышке рыночной планки идти.
И ведь не одно и то же: принуждать к обучению и взять себе на заметку (что человек не стал проходить курс из-за пункта отработать 1,5 года или возместить стоимость полностью или частично)?
FanatPHP
21.01.2025 08:01Интересно, где в реальном коде можно применить функцию, которая отдаёт 80000 рандомных значений. А точнее, почему вместо неё нельзя применить функцию, которая отдаёт одно рандомное значение, вызвав её 80000 раз.
ceomt Автор
21.01.2025 08:01Можно, но тема была "генераторы", и на основании данного "хулиганского примера" была задача минимальным изменением кода снизить потребление памяти, используя как раз генераторы.
FanatPHP
21.01.2025 08:01Я так и подумал, но тут есть нюанс: генераторы не имеют отношения к потреблению памяти. Собственно, данный пример это как раз прекрасно и иллюстрирует: память экономит написание осмысленного кода (вызывать функцию не 1 раз, а 80000), а не генератор.
Я просто надеялся, что поскольку курс делают практикующие специалисты, то и примеры они будут брать из практики, а не про кошечек и собачек. Но, в общем, это было наивное ожидание: разумеется, не на всякий аспект языка можно найти пример из непосредственной практики. И всё же я бы порадовался примеру, в котором генератор используется по своему назначению: для написания более удобного кода.
ceomt Автор
21.01.2025 08:01Тут моя вина, я взял первое, что попалось из ДЗ для "галочки" - для вставки в текст. Благодарен за развернутый коммент, принял во внимание.
FanatPHP
21.01.2025 08:01Если честно, мне ужасно не хочется выглядеть занудой. Но ещё я ужасно не люблю недопонимания :)
В общем, я имел в виду пример не для статьи, а для курса. То, что он в статье - это как раз нормально. А вот в курсе он как раз довольно слабый. Просто в реальной жизни очень редко, практически никогда нельзя заменить массив генератором. Даже для "случайных" чисел, которые чаще всего используются в примерах про "экономящие память" генераторы, скорее всего требуются не просто случайные, а случайные уникальные. То есть, уже выданные номера надо где-то хранить. И никакой экономии не будет. Не говоря уже о каких-то реальных данных.
Достоинство генератора не в том, что он "экономит память", а в том, что он может превратить цикл в массив. То есть взять любой цикл получения данных, и подать на вход функции, которая ждёт массив. И в итоге не функцию вызывать внутри цикла, а наоборот - внутрь функции передать цикл. Это часто позволяет написать более удобный или универсальный код.
А память он экономит только на таких вот вырожденных и не имеющих практического смысла примерах.
demoniz
21.01.2025 08:01Безусловно пример о котором мы говорите синтетический и не имеет ни какого практического применения в реальной жизни. Если есть голова на плечах и опыт, то можно большинство задач решить без использования генераторов и с низким потреблением памяти. Вот только достаточно большое количество разработчиков совершенно не думает о ресурсах. Важно познакомить с генераторами и посеять зерно о том что не стоит бездумно наполнять память данными и показать к чему это может привести. Есть масса проектов, где разработчик выбирает из базы все значения и обходит их в цикле. В результате проект работает до того момента пока данные не перестанут помещаться в памяти. Далее увидев это разработчик увеличивает память. По истечению времени все повторяется, и вот сервер уже вместо 500 рублей в месяц стоит 3000 рублей, а ведь можно было просто оптимизировать код. И в данном случае можно как раз использовать генераторы для получения данных пачками.
FanatPHP
21.01.2025 08:01Важно познакомить с генераторами и посеять зерно о том что не стоит бездумно наполнять память
К сожалению, вы здесь повторяете ошибку, которая, как я надеялся, подробно объяснена в комментарии выше. Давайте я попробую ещё раз. Только вы не раздражайтесь и не обижайтесь. Возможно, дело исключительно в формулировках, но в текущем виде они доносят неверную мысль.
Вышеприведённая цитата буквально вбивает в головы ваших учеников мысль о том, что генераторы экономят память, и являются чуть ли не панацеей. Повторюсь - возможно, вы не имели этого в виду. Но в такой формулировке она звучит именно так. И это тонкий момент, который надо увидеть. Смотрите. Вот вы пишете,
Есть масса проектов, где разработчик выбирает из базы все значения и обходит их в цикле.
Совершенно верно. И ниже вы сразу говорите про генераторы. При том, что
Во-первых, есть гораздо более простое и очевидное решение. Не получать из базы сразу все значения. Но вы его не упоминаете.
А во-вторых, в основе "экономии памяти" генератором лежит именно оно. Вы берёте код, который вместо получения всех значений разом, берет их по одному, и помещаете его в генератор.
Но вашей формулировкой вы сбиваете фокус с этого очевидного решения на генератор. И это представляется мне большой ошибкой.
Ответ на вопрос, как экономить память - это "не получать все значения разом, а получать и обрабатывать по одному". Очень простой, очевидный и универсальный.
А "использовать генератор" - это всего лишь частный случай применения этого подхода. К сожалению, многие студенты, воспитанные на этом утверждении, умудряются писать код, в котором внутрь генератора помещают то же самое получение всех значений разом. И их логика при этом безупречна: "Генератор же экономит память"!
Понимаете, о чём я?
Вы в своих объяснениях пропускаете ключевой момент: тот самый подход, "получать по одному, а не скопом", который на самом деле экономит память.
И не даже не упоминаете условие, при котором генератор действительно может "сэкономить память". При том, что это условие надо наоборот, подчеркивать специально: "если надо обработать большой поток данных, но функция-обработчик ожидает массив".
При такой вводной - когда функция-обработчик данных ожидает на вход массив, который она будет перебирать через foreach - решением для экономии памяти действительно является генератор. В основе которого, тем не менее, будет лежать универсальный подход "получать по одному".
demoniz
21.01.2025 08:01Все верно. Это всего лишь частный случай применения подхода. Безусловно экономия памяти ни каким магическим способом сама по себе не появится...
К сожалению, многие студенты, воспитанные на этом утверждении, умудряются писать код, в котором внутрь генератора помещают то же самое получение всех значений разом. И их логика при этом безупречна: "Генератор же экономит память"!
С таким к счастью не встречался, звучит ужасно, но это один из моментов для переосмысления определенных трактовок и объяснений по данной теме...
FanatPHP
21.01.2025 08:01С этой точки зрения для приближения к реальности задачу стоило бы развернуть наоборот: функция не отдаёт массив, а принимает. Скажем, у нас есть уже существующая функция, которая принимает на вход массив. Но при большом объеме обрабатываемых данных тратится много памяти. При этом данные поступают из какого-либо потока - файла или например базы данных. Вот в этом случае в функцию имеет смысл передавать вместо массива генератор.
В итоге нам не придётся для экономии памяти переписывать код, обрабатывающий массив, помещая его в функцию, которая вызывается внутри цикла получения данных - как это пришлось бы делать до появления генераторов. А всего лишь надо будет немного переписать код, получающий эти данные - не в массив, а в генератор.
demoniz
21.01.2025 08:01В презентациях по теме генераторов есть реальные примеры кода которые можно применить на практике. Например, обработка большого объема данных из базы пачками (чанками, если угодно). Скрин который Вы увидели это лишь мимолетная проверочная работа, что информация не прошла мимо ушей. Она нужна была как сигнал к тому, что мы можем перейти к Coroutine, пояснение по которым без понимания генераторов бессмысленно на мой взгляд...
randvell
21.01.2025 08:01Брать деньги за ВНУТРЕННЕЕ обучение для действующих сотрудников компании - большей дичи трудно придумать. Никто так не заинтересован в повышении качества разработки, как сам бизнес и все линейные руководители. Я понимаю если бы вы устраивали буткэмп для студентов и брали к себе по завершению курса, но ваш подход мне чужд.
Любые агентства мне представляются галерами, которым главное продать разработчика заказчику, а дальше уже это проблема разработчика и его прямого руководителя. Но все же за репутацией то надо хоть как-то следить, чтобы недоученный джун не положил прод тяжёлыми запросами?
Касательно ценника - никому не нужны пхп курсы от ноунейм конторы за такие деньги. Посмотрите OTUS который уважают в php-комьюнити, посмотрите других конкурентов. Зачем идти к вам за дорогой и необкатанной компиляцией из чужих курсов?
FanatPHP
21.01.2025 08:01Извините, а можно уточнить, откуда такой пиетет перед Отусом? Есть какой-то источник объективной оценки? Так-то их курсы я не видел, но если судить по их статьям на Хабре, то там всё очень плохо.
randvell
21.01.2025 08:01Не могу дать комментариев касательно пиетета. Я пощупал их курс "PHP разработчик" из одного зеленого приложения, мне понравился материал. Думал о покупке, но в итоге приобрел Symfony. На php я все же почти пять лет пишу, и большую часть из первого курса наверняка знаю. А вот Symfony меня давно интересовал, но все не доходили руки. Материал хорошо структурирован, показывают некоторые тонкости неочевидные, по домашкам дают подробную обратную связь, в чате можно спрашивать сложные вещи, и на них скорее всего даже ответят, если это не совсем оффтоп.
Плюс у них есть лицензия, так что можно получить сертификат (пофиг) и налоговый вычет (приятно). Насчет остальных курсов ничего не скажу, может хорошие, может плохие. А вот Каморин клевый дядька и явно сильный разраб, кто с ним лично знаком, все хорошо отзывались, так что рекомендую.
FanatPHP
21.01.2025 08:01Ну то есть это ваше личное мнение, под которое вы подписали всё РНР коммюнити?
ceomt Автор
21.01.2025 08:01Добрый. Недоученных джунов и не продашь. Да и, действительно, дорога репутация. А вот про сам курс - интересная оценка, т.к. "чужих курсов" никто не использовал. По ценнику, правда, надо думать. Но за этим и выпустил статью и поэтому честно благодарю за мнение.
lovaz
С одной стороны, молодцы, что заморочились, с другой - не факт, что обучение подойдет другому агентству, нужны промо.
ceomt Автор
Думаю над этим, но курс в целом для PHP-разработчиков.