ОНЛАЙН-КУРС «‎ИСКУССТВО НАПИСАНИЯ СЕРВИСА НА GO»

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

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

Курс разделён на две части – семь основных модулей, посвящённых непосредственно сервису, и два дополнительных модуля, посвящённых его горизонтальному масштабированию, деплою и мониторингу (В РАЗРАБОТКЕ).

Верхнеуровневая архитектура

Верхняя оценка по нагрузке

ПРОГРАММА

1

Модуль первый. Вводный

В этом модуле мы должны понять правила игры, научиться проходить уроки, выполнять задачи и сдавать рубежные контроли. Также мы с высоты птичьего полёта посмотрим на архитектуру (bird's eye view) и осознаем, что же нам предстоит сделать за курс.

К концу модуля у тебя должен быть настроен Git-репозиторий, содержащий скелет проекта и необходимые для грамотной разработки мелочи вроде линтеров, запускатора локальных задач, логирования, конфигурации и debug-сервера.
2
Модуль второй. Становится интереснее
В этом модуле начнем с запуска зависимостей с помощью docker-compose. Первое на очереди – хранилище PostgreSQL. Чтобы два раза не вставать, сразу прикрутим Sentry.

Передохнем от докеров и поиграемся с кодогенерацией – нам понадобятся идентификаторы сущностей. Будем генерировать их типы. Чтобы идентификаторы не повисли до лучших времен, сразу их заиспользуем: обратно сгенерируем гошную обвязку над хранилищем, предварительно по косточкам разобрав схему данных.

Добавим ещё одну зависимость, которая решит за нас задачу аутентификации и (частично) авторизации – Keycloak. Заведём новый контейнер в docker-compose, познакомимся с фронтенд частью сервиса (не пугайтесь, она будет готовой), добавим пользователей в Keycloak и напишем HTTP-клиент к нему.

Вишенка на торте этого модуля – обмазаться Swagger. Напишем спецификацию клиентского API, сгенерируем обвязку, навесим миддлварей.

К концу модуля у тебя должна быть СУБД и код по работе с ней, решена задача аутентификации и авторизации, сформирован каркас клиентского API.
3
Модуль третий. Архитектура
Новый модуль – новые вызовы.

Начнем с обзора архитектурных принципов, на которые будем ориентироваться при разработке сервиса. TL;DR: мы будем стараться делать всё хорошо. Слоистая архитектура, правильное выстраивание направления зависимостей – наше всё.

Сменим теорию практикой. Будем от и до делать первый usecase – получение истории сообщений в чате клиента банка. Запилим слой репозитория. Запилим юзкейс, который будет этим репозиторием пользоваться. И всё? Нет, ещё добавим мяса в хендлер, который сгенерировали в прошлом модуле. Готовый юзкейс протестируем – запустим UI и посмотрим, как получаем сообщения.

Закрепим усвоенное в предыдущем уроке – сделаем ещё один хендлер, но теперь по отправке сообщения в чат. Перед тем, как бросаться в бой, всё же почитаем немного теории про идемпотентность. Пощупаем E2E-тесты. И, как водится, глядя в заготовку, реализуем отправку сообщения.

В конце модуля у нас должны быть два работающих API-метода.
4
Модуль четвертый. Сложные приколы
Новый модуль, модуль кодинга.

Outbox. Мы делаем всё надежно, атомарно, поэтому без реализации этого широко известного в узких кругах паттерна не обойтись. На входе, как обычно, теория, тесты и верхнеуровневое API компонента.

Outbox-у нужен кто-то, кто будет отправлять события в шину данных (спойлер – это будет Kafka). Будем этого кого-то называть продюсером. Задача продюсера инкапсулировать в себе логику по шифрованию сообщения и взаимодействию с Kafka. По традиции – теория, заготовка с тестами. Чтобы тебя не мучать при написании интеграционных тестов, конфигурацию Kafka в docker-compose даём сразу 🙈

Идёт четвертый модуль, а менеджеры, которые помогают клиентам решать проблемы, сидят неохваченными. Охват начнем с написания компонентов "пул менеджеров" и сервиса их загруженности. Первый компонент – выдает незанятых менеджеров, готовых помочь своим клиентам (т.е. заставляет работать). Второй компонент следит за тем, чтобы менеджер не слишком много работал (мы ведь просвещенные капиталисты и заботимся о всех, не так ли?).

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

В конце модуля продолжает складываться пазл. Добавится парочка хитрых сервисов, начнется работа над менеджерским API.
5
Модуль пятый. РАБотаем!
Добро пожаловать в новый модуль. Продолжим кодить интересные штуки.

Начнем с WebSocket. Чат-сервис требует красоты, сообщения должны появляться в real-time, без перезагрузки страницы. Первым делом сформулируем идеологию их применения. Затем почитаем теоретические выжимки, чтобы точно понимать происходящее, и, наконец, приступим к делу – реализуем пакет, инкапсулирующий в себе работу с вебсокетами. Он будет апгрейдить соединение до вебсокетного, поддерживать его пингами-понгами, читать события из некоего "потока" (реализуем чуть погодя), писать их в WS-соединение.

Продолжим собирать кусочки пазла – реализуем тот самый "поток" событий. Спойлер: в конце урока мы сможем увидеть, как отправленное событие в одной вкладке, появится в другой вкладке 🥳 Публичный API компонента "потока" мы уже знаем. Будут тесты, осталось сделать так, чтобы они проходили. Заведем события в openapi-схему, покодогенерируем, сделаем адаптер и начнем их писать в "поток".

AFC. На входе будет Docker-образ специально обученного искать "опасные" сообщения контейнера. Его мы и называем AFC-эмулятор. Эмулятор либо блокирует, либо разрешает публикацию сообщения пользователя. Наша задача – обрабатывать "вердикты" эмулятора. Готовьтесь к написанию Kafka-консумера 😎

В конце модуля у нас с тобой будет готовый скелет вебсокетов, который останется только обогатить новыми типами событий. Поток событий также будет реализован. Будет поддержана AFC-обработка сообщений.
6
Модуль шестой. Менеджерский флоу
Новый модуль. Чутка передохнем, нагрузки будет поменьше!

Реализуем компонент, распределяющий проблемы пользователей (как звучит-то) на менеджеров. О том, что менеджер назначен на какую-то проблему нужно уведомлять не только менеджера, но и пользователя (не зря мы заводили всякие потоки и вебсокеты в прошлом модуле). Но штука не в этом. Здесь не будет привычных тестов, на которые можно опираться. Надо будет написать всё самим, опираясь на словесное описание. Прямо как в реальной жизни 🙈

На втором уроке реализуем историю сообщений для менеджера, почти по аналогии с клиентом. Ограничения на видимость будут только слегка другие. Ещё напомним, что у менеджера есть ещё и сам список чатов, чтобы решать проблемы разных пользователей. Надо будет сделать ещё и это. После того, как вы это сделаете, посмотрите, как легко заезжают новые ручки 💅

Вишенка на торте – урок так и называется. Научим менеджера отправлять сообщения. По стандарту заведем: ручку, юзкейс, пару методов в репозитории, outbox-задачу. После реализации можно будет залогиниться клиентом и менеджером, и попробовать попереписываться.

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

Мне подойдет курс?

Подойдет, если выражение ниже возвращает для тебя true:



1. Ты видишь в описании курса интересные термины / приёмы
и чувствуешь в себе силы освоить их.

2. Ты сеньор-помидор, который хочет лишний раз проверить
свои скиллы и закрепить их.

3. Ты обладаешь опытом бекенд-разработки или в целом уверенно программируешь в любой другой сфере.

4. Ты знаком с Go выше уровня “Go Tour”.

5. У тебя достаточно свободного времени.
return (1 || 2 || 3) && 4 && 5

Отзывы истинных мастеров GOLANG

І. Вступление.
Перед тем как я пошёл на курс я уже был знаком с творчеством авторов.
Я проходил курс на основе материалов Антона на площадке Отус (ещё в 2021). Прошёл курс по ошибкам и панике на площадке Stepik от Антона и Дмитрия. И, наконец, запрыгнул в последний вагон третьего потока курса (опоздал на полторы недели к началу), о котором пишу отзыв. Мои ожидания в части материала были на основе моего предыдущего опыта, но, скажем прямо, этот курс не похож ни на один из тех трёх, что я перечислил. В одном из предыдущих отзывов один продвинутый разработчик охарактеризовал этот курс как "раскраска для разработчика", если бы я согласился с этим утверждением, то я бы назвал эту раскраску с припиской в стиле "hard". Мне показался этот курс больше квестом, чем раскраской. При этом я нисколько не жалею, а очень даже рад, что успел запрыгнуть в этот курс и даже прошёл уже 6 модулей из 7-ми. Ну а теперь подробности.

II. Достоинства и недостатки.
- Достоинство и недостаток в одном флаконе это "выкладываться по полной".
- Практикоориентированность курса на особой высоте. Теории минимум, но она есть. тоже относится и к достоинству и к недостатку курса, в зависимости от вашего уровня. Но всё-таки ссылки к теме прохождения курса есть и они спасают от "рытья по всем интернетам".
- У проекта есть рамки на первых 6 модулях, на седьмом позволяется "улететь в космос" на своём космическом корабле :) Как ни странно это тоже и достоинство и недостаток. Ну не буду я использовать ORM в обычной
работе на Го(это одна из рамок курса), этому я ещё в Отус научился. Но в этом курсе его использование оправдано и я согласился с выбором авторов. В последствии прибежал за помощью к ребятам, чтобы помогли перевести то что мы изучили в обычную стандартную библиотеку (спасибо Дмитрию за подсказку).

III. Просто достоинства.
  • Тесты авторов были для меня как квесты, понял тест - решил квест. У авторов дар писать тесты. Есть чему и поучиться и позавидовать(как бы это не звучало), лучше конечно учиться, чем завидовать.
  • Мемы в тему, как обычно на высшем уровне, кстати они тоже поддерживают настрой, помогали не унывать, когда процесс буксовал, кто проходил курсы по ошибкам и панике понимают о чём я.
  • Все задачи жизненные, применимы тут же в работе.

V. По процессу моё ИМХО и просто советы:
Уровень подготовки разработчика
Сложность на уровне. Разработчик должен быть осведомлённым. Докер на базовом уровне, ореп-арі(он же swagger), go text.template, обработка ошибок, defer, понимание как устроен test.Suite ну либо разобраться "по ходу пьессы", тогда закладывайте на это время, websocket, если не имели с ним дело, лучше пощупать перед курсом (опять же если только на курсе, то плюс время на тему).
Умение дебажить свой код и код в тестах. Почитать заранее про встраиваемые структуры в Go.
Еще перед курсом можно почитать про gomock, если вы его не используете в работе(есть такие ?).
Управление каналами в Go тоже надо знать. Короче ТЕОРИИ ЯЗЫКА Go в курсе нет, только практика.
Если с теорией всё хорошо, то будет просто трудно, а не невозможно как трудно.
Внимательность к каждой фразе и слову в тексте авторов. Сами знаете кто в деталях.
И если эти детали упустить будет не сложно, а очень сложно.
Если вы не синьёр с многолетним опытом, не ходите на этот курс без прохождения курсов авторов про ошибки и панику.
Во первых на тех курсах вы сможете понять стиль в менее жёстких временных рамках, во вторых поучиться правильно понимать как писать красивый код заранее, в третьих получить всё-таки удовольствие, а не разочарование и ощущение загнанной лошади
хотя может и от этого можно получить удовольствие ? решать уже вам).
Время сразу умножайте на 3 не прогадаете надо же не только пописать но и вникнуть в тему и почитать и разобраться с багом. (хотя у меня было и умножить на 4)
Предревью - комментарии по часто встречаемым ошибкам(в конце модуля) -
очень помогают осознать в себе среднестатистического разработчика,
что не только я один тут так понаписал (не в обиду коллегам сказано),
и исправиться до ревью.
За это спасибо авторам.

Целина пройдена, есть подсказки по совсем сложному в комментах, надеюсь их перенесут на новую платформу, я в курсе, что мой отзыв читают сами авторы, к вам, ребята, большая просьба сохранить все комменты, что были по теме прохождения.
Они прям экономят ценное время "рытья не в ту степь".
Не тратьте время зря - модули 2 и 3 очень объёмные, лучше методично их начинать делать сразу не откладывая до
пятницы.
Остальные модули норм, просто трудные, задачки посложнее объёма поменьше, либо просто уже всё равно :).
(Эта фраза была написана до 6-го модуля, оставляю без изменений) 6й модуль вне конкуренции с другими, сейчас выбираю его самым объёмным, т.к. 7й модуль мною ещё не осилен.
Где взять время - думайте заранее, перед курсом (отпуск, договоренности с руководством, другие способы), иначе академ будет вам "дышать в спину".
Не пренебрегайте решениями авторов(я этим грешил вначале), там можно встретить наводку как сделать следующее быстро и просто,
а не через одно место накостылить.
Отдельный респект авторам за 6-й модуль. Если бы этого модуля не было, я бы так и не понял что до сих пор меня
"водили просто за ручку" и показывали как можно.
Модуль номер шесть это полностью самостоятельное прохождение всего материала, что изучался до этого.
Позволил закрыть белые пятна, что просто не виделись в предыдущих модулях.
Также можно убедиться каково вообще с нуля всё писать и чтобы получился готовый продукт.
Да возможно мне показался этот модуль несколько затянутым и нудным, но он был точно полезным.
Кстати этот модуль у меня занял больше всего времени, непрерывность курса дало все же усталость к его концу.

V. По результату.
  • Вынес и буду использовать в работе общую настройку проекта,
  • Увидел и получил навыки на практике как красиво запускать сервисы в main,
  • Архитектурные решения и паттерны рассматриваемые в курсе буду использовать в проектах на работе.
  • Сделал выводы про работу со всякими надстройками над БД(ORM), и даже просветился об этом на вебинаре.
  • Посмотрел и попользовал красивую интеграцию kafka в проекте.
  • Наконец-то "от и до" увидел генерацию сваггера прямо в боевой код, и как это красиво получается.
  • Просветился и увидел на практике е2е тесты и еще раз интеграционные тесты.
  • Пощупал проброс необходимых авторизаций в тесты (где такая необходимость была нужна)
  • На собственном опыте узнал с чего начать собственную кодогенерацию, и как это помогает в работе.
  • Еще раз пощупал асинхронщину (немного, но достаточно) в разных прикладных задачах.
  • На практике "приоткрыл дверь" зашифрованной передачи данных, и доверия к получаемой информации.
  • Внёс вклад в тестирование кода. Поймал пару кейсов что тесты прошли, но мой код не правильный (ревью помогло это отловить). Один раз даже получил мастер класс от Антона по отлову моих багов, как это красиво делать.
На основе полученного опыта, наконец настроил свой VSCode и теперь интеграционные тесты запускаю по кнопке (ну да олд скул и всё такое - раньше я делал это исключительно из командной строки)

VI. Благодарность авторам:
Проходя курс я опять увидел насколько он качественный и продуманный, сколько в него вложено энергии, знаний и сил.
В очередной раз авторы оправдали моё доверие и создали качественный продукт.
Заканчиваю общеизвестной фразой одного из отзывов:
Аффтар пиши исчо !
  • Больше всего наверно запомнился outbox pattern, так как до этого я с таким не сталкивался, и на первый взгляд может показаться, что он не нужен, но в реальности повышает надежность, хоть и размазывает какую-то логику по приложению
  • Больше всего понравился подход авторов к курсу. Подход очень обстоятельный.
  • Возиться с инфраструктурой на второй неделе, особенно с sentry. В авито его используют, но я так понимаю, в модно-молодежных проектах уже используют другие системы (возможно я ошибаюсь), в любом случае он гемморойный
  • Я очень много нового для себя вынес, как и в целом по Go, так и по разным прикольным инструментам (как засетапить логгер и прочее)
  • Доволен сервисом и хочется его дорабатывать (после отдыха)
  • Самые интересные 4-я и 5-я недели, так как там было много нового (outbox, взаимодействие с afc и т.д.), хотя они и самые сложные
  • Самая жесткая неделя — 5-я, опять же кафка, websocket пришлось пописать интересный код
  • Самая скучная неделя — 2-я, озвучивал выше — много возни с инфрой (я не очень люблю)
  • Больше всего времени убил как раз на конкурентный код в outbox (не знал как правильно блокировки сделать) и на работу с кафкой и сокетами
  • Оценку по нагрузке на среднестатистического человека я бы умножал минимум на 2, а в реальности наверно на 3-4. Часто 4 часа превращались в 12-16 часов
  • Правила прохождения очень помогли, в первую очередь не писать много лишних вопросов в чате из-за невнимательности
  • Code Review - супер. Тут сказать нечего, все по делу и быстро
  • Скорость реагирования на вопросы меня устроила. Конечно, когда ты погружен в задачу, хочется, чтобы тебе ответили как можно скорее, но все мы люди и должны отдыхать. Авторы тоже :)
  • Вебинары — классный способ узнать много нового из первых уст, да и просто потрещать на общие темы разработки.
  • Я пришел с весьма странным грейдом :) Я пришел на проект 08.2022 с грейдом примерно junior+ как fullstack node.js, сейчас уже пару месяцев лид :). В реальности до уверенного мидла не хватает аглосиков. И большую часть кода я пишу не на Go, поэтому пришлось попотеть
  • Порекомендовал бы курс тем, у кого есть время и большая мотивация стать хорошим разработчиком. Уровень middle и выше. Менее опытным тоже можно, но готовьтесь страдать :)
  • Вы попали в мои ожидания на 99.99%
  • Насчет других курсов сложно сказать. В 2021 проходил курс по Django. В сравнении ваш курс гораздо сложнее в плане технологий, требуемых знаний и результата, но и лучше организован и продуман (не смотря на заниженную временную оценку). Да и результат тут совершенно другой — в разы круче
  • Насчет ваших других курсов — с удовольствием. Хоть они и не очень дешевые в абсолютных значениях, но они точно стоят своих денег
Данный курс настолько объёмен, что и отзыв на него в один абзац не уложить. Начнём с того, кому он нужен. Я бы сказал, что он нужен всем, кто пишет бэк на го, если бы он не отнимал столько сил и времени. К моменту старта курса я уже почти год работал на должности синиора, и функционально всё, что мы сделали, я мог написать и сам, и основная мотивация была - поучиться у уважаемых ребят, как делать не просто чтоб работало, а по красоте. И всё же, почти каждую неделю я тратил оба выходных и ещё пару вечеров. Стоило ли оно того с т.з. потраченных денег? Да, вне всяких сомнений. Я очень много оттуда для себя почерпнул. Стоило ли оно того с т.з. потраченных сил и времени? Тоже отвечу да. Потому что чудес не бывает. Хороший прогресс требует большого количества сил и времени. Другое дело, что надо себе честно ответить на вопрос, а есть ли у меня эти деньги, и достаточно ли у меня мотивации, чтоб пройти его целиком, а не забросить на 3 неделе? Если есть, то однозначно вписывайтесь, буст мощнейший.

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

Что по технологиям и охвату. Сервис написан целиком. Т.е. там не только чистый гошный код обмена сообщениями через вебсокет, а весь обвес: таскфайл, свагер, дебаг сервер, клиентский и менеджерский апи, прикручены сентри, сделана авторизация в киклоаке, сообщения в постгре, продьюс сообщений в кафку, написаны все необходимые фоновые задачи и пр. пр. пр.. Конечно, не следует ожидать, что если вы близки к 0 в постгресе или кафке, то после курса станете боссом. Чудес не бывает. Но продвинуться точно получится. Хотя не сказать, что работы с кафкой много. Останавливаюсь конкретно на них, потому что это основа современного гошного стека: golang, postgres, kafka.

Были некоторые решения авторов, которые лично мне показались спорными. Наиболее яркий пример - использование entgo. Очередная байда, чтоб не писать чистый SQL, при том, что для решения задач и возникающих трудностей всё равно абсолютно необходимо разобраться на уровне постгреса, запросов, а потом сообразить, как это сделать в entgo. Авторы пояснили, зачем выбрали entgo - попробовтаь, потренироваться. Ну ок, принято, попробовали, потренировались.

С "творчеством" авторов знаком уже третий год, кредит доверия огромный. И каждый раз они его оправдывают: работа проделана колоссальная, реакция на фидбек - быстрая и адекватная, по замечаниям курс апдейтится и правится, на вопросы авторы отвечают достаточно быстро и добросовестно, ошибок в курсе исчезающе мало. Т.е. если у вас не проходит какой-то тест, и вы уверены, что у авторов ошибка, у вас ошибка :)

Два вебинара во время курса - по факту просто приятный созвончик пообщаться. Хотя, конечно, на все заданные вопросы были даны ответы.

Я наверное не буду тут расписывать конкретику: что именно вы для себя унесёте после прохождения курса. Список длинный, у каждого свой, наверняка я не упомяну кучу моментов, потому что мне они были понятны и до курса, в общем, возникнет искажённое представление. Посмотрите техрадар. Ну а вкратце: у вас будет написанный вами production-ready сервис, в котором есть работа с базой, с кафкой, с вебсокетом, api для фронта, фоновые задачи (асинхронщина).

В общем, основной вопрос, который надо себе задавать: дойдёте ли вы до конца. Самое бестолковое, что можно сделать - это заплатить и отвалиться через пару недель.

Насколько мы не попали в оценку по нагрузке? 🙈 Уровень меткости - Кержаков))))

Краткое резюме - курс мне зашёл)
Необычный получился опыт, напоминающий «раскраску для разработчика» - общие контуры есть, а цвета / наполнение оставляют студенту)

Особо выделил бы следующие моменты:
  • интегральный подход к построению сервиса - от архитектуры до тестирования
  • качественные практики разработки на Го, проверенные временем и опытом (именно за ними и шёл)
  • прикольные отдельные фишки, которые можно утащить в себе в проект (например, либа для аргументов или генерация клиентов по спекам для е2е тестов)
  • живое общение с авторами и ламповая атмосфера на курсе в целом.
  • МНОГО ПРИКОЛЬНЫХ МЕМОВ

Чего мне не хватило:
  • чего-нибудь с нагрузочным тестированием и дальнейшим тюнингом нашего сервиса/инфры исходя из результатов (по типу того, как было с оптимизацией запросов)
  • завершенности второй части, чтобы сразу пройти инфровый трек
  • некоторых теоретических подводок к темам (но соглашусь, что у курса задачи давать теорию нет)

TLDR; всё круто, аффтор пиши исчо))
Прекрасный курс!

Это реально единственный мною пройденный курс: где ты много теории превращаешь в практику, при том твой код, проверяют на реально хорошем уровне и не просто проходишь какие то задания, а делаешь по настоящему интересное приложение.
Я как раз хотел что-то такое написать и тут появляется курс, где тебя ведут за руку и говорят как писать с минимальным необходимым набором. Да пришлось попотеть с изучением дополнительных инструментов, но оно того стоило.

Я пришел в ГО с другого языка, где было много архитектурных подходов и мне как раз было интересно, как можно писать на GO проекты в примерно таком же подходе, скажем мягко так, в стиле "enterprise" уровня и как по мне - авторы с этим, отлично справились.

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

Что для меня было новым в этом курсе: до этого я почти не работал со свагером и поэтому на него убил просто уйму времени для понимания как он работает с нюансами, которые хотели авторы. И также я не имел опыта, напрямую настраивать веб-сокеты на ГО (и я кстати как раз хотел напрямую поработать с сокетами), что также повлияло на скорость исполнения мною некоторых заданий.

Были и вебинары, и обратная связь и помощь в чате - все получилось на высшем уровне. Авторам реально не безразлично как вы проходите курс. Это бывает реально редко.
Отдельная тема Code Review - там не проходят мимо как на многих курсах, а-ля работает и ладно. Если вы написали плохо пахнущий код, вас обязательно попросят это переписать) и объяснят как. Это как по мне, очень важно при обучении!

Единственное во что, как по мне, не попали авторы, это время по нагрузке исполнения заданий. Если наверное будет набита рука писать много и в таком стиле код, наверное и вправду можно было бы попасть где-то в запланированное время, но местами это просто не реально и будете тратить где-то в раза 3 больше времени смело. Авторы это слышат и скорее всего подкорректируют этот момент :)

И пусть я был одним из первопроходцев этого курса, авторы с первого раза создали сразу достойный курс, не без косяков конечно, но это мелочи!

Мои ожидания от курса в целом оправдались! Я рад что его прошел и рад что есть люди, которые дают отличный опыт и транслируют его в курсах!


Я бы порекомендовал этот курс всем, кто особенно пришел с других языков и имеет базу знания языка GO, она тут будет нужна. Хочет быстро понять и увидеть, как можно писать проекты. Также будет полезно и тем кто уже давно работает на GO, чтобы увидеть что-то новое или проверить свои навыки.

Благодарю за отличный курс!
В целом на протяжении курса я много раз проходил через цикл
Отрицание, Гнев, Торг, Депрессия, Принятие

Хотя не первый курс, который я прохожу, но первый на котором я выгорел.

Курс очень сложный и я считаю это плюс, так как новые навыки и знания усваиваются с кровью и потом.

Очень интересно копаться в keycloack и поддерживать пул web socket соединений, даже если учесть что keycloack вряд ли будет в будущих проектах, а либа gorilla ws deprecated - это все-таки архитектурные паттерны и конкретные реализации не так важны.

Вот где как мне кажется сложность излишняя это 6-7 недели. На неделях 1-5 всегда были какие-то новые технологии и паттерну

1 неделя task, lint и тд
2 keycloack, codegen
3 архитектура, cursor
4 outbox, ws
5 Kafka

На 6-7 неделе ничего такого я не вижу, тупо имплементация очередных use case, однотипная работа. И у меня действительно сложилось впечатление, что я работаю на 2й работе, а не прохожу курс. Наверное поэтому за последние 2 недели я так не дошел до фикса 6 пулл реквеста, и не приступал к 7й неделе.

UPD: PR 7 недели я все-таки сделал, воспользовался багом, что одну и ту же функциональность можно сдать дважды.

Added: сейчас задумался что 7 неделя будет полезна, но не в рамках курса. Если среди студентов будут энтузиасты, то они могут обсудить как реализовать загрузочное тестирование, обменяться кодом. Учитывая, что у всех на руках ±один сервис и почти идентичный API это будет полезнее чем искать информацию на stackoverflow.

Название «неделя» для шагов я считаю не удачным. Шаги очень не равномерны. Главная моя ошибка была попытка уложиться в недельный интервал и это привело к жестким переработкам. Где-то я не правильно понимал задание и тратил много времени не нужную работу, хотя в итоге это помогло разобраться как работает keycloack, например. На вторую неделю, по скромным оценкам, я потратил 30 часов.

Комменты в ПР не всегда ясны, в принципе как и некоторые формулировки в задании. Но под конец курса таких проблем почти не было, видимо я привык. Считаю, что мою реализацию ws conn pool недооценили: я не закрываю клиентский контекст, но поражать долгие обсуждения в комментах тоже не хотелось. Мб будет обсуждать реализацию в чате, хотя спойлеры в чате иногда расстраивали.

Степик разочаровал. Очень долго грузятся страницы, особенно когда нет поиска и приходится протыкивать все уроки. Без поиска очень грустно. Главная проблема в середине курса это поле Problem.solved_request_id, я так и не понял когда мы его должны были добавить, от этого моя реализация немного уродлива, а переделывать сейчас нет сил.

Из хорошего - все остальное

Очень интересный курс, интересные проблемы и решения(транзакции) и авторская подача с заготовками очень импонирует.

Кодогенерация ID просто супер.

Жду курс по тестам или придется самому разбираться. Очень хочется унести интеграционные тесты к себе в проект. (Кстати хочется чтобы это еще никак не нарушало ничьих авторских прав).

Лайв прохождение сложнее чем оффлайн, но в целом и свои плюсы так же есть.

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

Спасибо :)
Курс мощнецкий. Есть некоторые решения, которые у меня, например, вызвали сомнения, но учитывая то, насколько он большой, сколько в нём всего, это малая доля.

Моё мнение, курс категорически стоит своих денег, но.
Во-первых, он рассчитан на уровень мидл и выше. Конечно, может попробовать и джун, но надо понимать, что на пару месяцев у него появится вторая работа (ещё и более сложная, чем основная). И на всякий случай уточню. Джун - это не тот, кто только что закончил курс на Отусе, а тот, кто работает джуном, имеет реальный коммерческий опыт.
Во-вторых, авторы слегонца промазали с оценкой по времени. Не знаю, будут ли они пересматривать сроки, но если нет, на 7 недель придётся попрощаться с личной жизнью, вечерами, выходными.

На всякий случай уточню - я закончил все 7 недель, но последнюю пока не сдавал. Это я к тому, что представление у меня есть о всей первой части курса.

Если что, это восторженный комментарий, просто в моей манере. Я почерпнул оттуда очень много. А я на го работаю уже три года. Не жалею ни разу о том, что прошёл курс. Хотя как у меня плавилось кресло, когда очередная суббота с воскресеньем уходили на него полностью, не передать.
Ниже длинющий отзыв недовольного нытика - слабонерным просьба не читать.
Курс вообще не зашел, было как то тяжко делать и без удовольствия, с трудом заставляя себя. По сравнению с паниками и ошибками как то совсем не то.
Я синьёр-помидор, во всяком случае так считаю, хотя да много чего не знаю, так как работа в целом рутиная - перекладывание джисончиков с веба в бд и обратно))
Если кратко: где теория?, почему кроме написанию бизнес логики ничему не учат?
Курс получился не про техногологии и патерны, а про бизнес логику чата.
Что я ждал от курса: увидя техрадар подумал о круто, по опыту двух предыдущих курсов - авторы расскажут кучу интересных вещей и покажут как правильно. Понимал что вряд ли все охватят, но хоть что-то охватят. А в итоге: курс больше похож на курсовую работу к какому то другому курсу - практически весь текст в курсе это описание задания, а где теория? Немного тут написал практических примеров в коменте. И этот комент должен быть в тексте на мой взгляд. По мне - пусть курс раздуется это только лучше. Погрепте фразу "Пишите в комментариях..." и хот бы эти места допишите, пожалуйста.

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

Другая проблема с заданиями - не знаю почему, но где-то первые 4-5 недель код проекта кажется незнакомым как будто не я его создал, из-за этого задания начинают бесить, как если бы устроился на новую работу и тебе каждую неделю дают задания допиши за коллегой пулреквест, который он бросил - он там что-то наделал - да умное и тесты крутые, но ты как то раздражаешься, постоянным дописыванием и додумыванием чего же хотел сказать автор и осознанием того что это опять рутинная бизнес логика))

Да и еще бесящий момент когда авторы говорят "все как в реальности на работе" - для меня самая ужасная фраза - я от работы бегу в курс чтоб не завянуть, а мне предлагают опять погрузится во что-то не особо интересное))
А еще раздражало когда шла пятая неделя, но авторы все еще просят opts.Validate() самим писать))

В общем был бы я автором я бы упростил задания до неприличия, но расширил теорию. И если нужно просто скопипастить что-то по ссылке из литературы то так бы и писал, а не усложнял жизнь (я 4 часа пытался сам сентюри композер написать не знамо зачем). Сделал бы упор на модные вещи, вебсокеты, кафку, прото, трейсы и да задачу pub-sub оставил бы, а юзкейсы выдавал бы готовыми.

Честно говоря не знаю и не очень понял на кого рассчитан курс, если на начальный уровень, то они скорее всего встрянут уже на компоузе и клоаке, и нужно будет объяснять докер и мидлвари. С виду курс на средний уровень рассчитан, но тогда не ясно, а чему мы учим, типа писать юзкейс и хендлеры в отдельных пакетах? Если на высокий уровень, то где теория о кафке, вебсокетах, и зачем тогда столько заданий на хендлеры?

Фактически мы только хендлеры и пишем, а вебсокеты и кафка у нас для галочки.
Моё виденье идеального курса: налепили папки и таск файл, написали под чутким подробном руководством юзкейс и хендлер и больше по курсу по минимуму пишем хендлеры и юзкейсы - пользуемся заготовками. А уделяем больше времени теории и практике по интересным вещам по неделям: база cte, блокировки, миграции; грейсфулшатдаун, логи и тест-сюты, докеры-кубернейтсы; вебсокеты в подробностях (пин-понги, как реализуем, как оно проблемно будет через джинкс балансится); кафка и все сложности (количество консьюмеров и партиций, при балансинге приложения, exact once); протобаф и взаимодействие между сервисами, трейсинг.

Да курс может быть не одним законченным цельным приложением на одну тему, а отдельными частями, но я не вижу проблемы с этим.
По неделям: 5-я неделя получилась перегружена, а 6-я скучная так как к этому моменту ты уже и так понял как хендлеры писать и тесты, и ты нудно пишешь их еще пару раз. 7-ю неделю не хочется делать т.к. понимаю что времени потрачу больше чем задумано и не интересно (как-нибудь в свободное время сам кратос поковыряю, спасибо за наводку), лучше бы просто с 5 и 6-й недели ребалансировали на 7-ю.

Разбиение курса на две части не поддерживаю, для меня трейсинг и мониторинг неотъемлемая часть и доводы авторов как то сомнительны, что это не интересно - трейсы в егере и графана всегда интересны, возможно это даже на первых этапах надо давать и нагрузочное тестирование))

Чтобы я точно выкинул из курса это:
  1. entgo - прям ничего хорошего на мой взгляд, ванильная работа в го с БД достаточно проста, и как то противоестественно смотрятся комбайны с кривыми запросами. Ванильный го-скл используют подавляющее большинство компаний, а учить чему то не слишком хорошему и популярному странно. Но главу с оптимизацией запросов с энтом как пример лажы оставил бы естественно.
  2. sentry - не понятно зачем на неё тратили время - по курсу не используется, да к тому же сбрасываются её юзеры и проекты при отчистки постгреса перед запуском е2е тестов.
  3. keycloak - пугающий монстр - в целом имеет право на жизнь т.к. понятно что и редирект на авторизацию и токен дает и юзеры в нем, но как то для меня не ясно стоило ли не малое время на его интеграцию того чтоб не заменить его своим мелким сервисом авторизации.
  4. дескриминаторы в свагере - это новый сырой функционал, без которого легко обойтись
Что добавил бы в существующий:
  1. описание ваших сют тестов, сделано красиво (была пара вопросов), но в курсе не раскрыто как авторы упрощают себе тесты.
  2. про пулконектов к БД для скл драйвера, и нормальные миграции, а не энтовские.
Что я вынес из курса: таск файл, организацию тест сютов с базовым классом и первый раз увидел работающий swagger-first подход))
Но всё равно спасибо за труд, проект сервиса круто написан, и понимаю что очень много времени было вложено в шлифовку и разбиение на части - реально ошибок нет.
Шел на курс «Пишем сервис на Go”в надежде увидеть как может выглядеть настоящий прод реди сервис, функционал которого посложнее чем перекладывание json’ов. Его я увидел, даже больше (отдельное спасибо да блоки с веб-сокетами!). Нужно быть готовым к тому, что мир разделится на до и после и на свой код/сервис, скорее всего, вы без слез не взгляните)

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

Приятно удивил code review проводимый авторами, т.к отмечались всякие детали/нюансы, который от меня ускользали.

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

На выходе имеем кучу практик и знаний, которые хочется применять в пет проектах, в новых и старых сервисах. С нетерпением жду вторую часть курсе.

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

Авторам:
Из того что хотелось бы изменить - быть терпимее. Как вы на одной из встреч говорили, есть проблема учителя. Когда и в голову не может прийти, что ученик может этого не знать. В какой-то момент потерял чувство, что могу писать по любой проблеме. Также такое чувство было из-за осознания «затянутости» курса, что авторы планировали закончить раньше, а тут это все. Но возможно, я сам это все додумал)
Курс очень полезный! Такое ощущение, что мне удалось поработать под руководством мастера, познав на опыте много разных нюансов. Собственно за этим и шёл.

На курс я пришёл с восьмилетним опытом программирования на PHP, курсом по Go (от OTUS), а так же курсом по "Продвинутой работой с ошибками в Go" (от этих же авторов).

Знания о работе с ошибками мне очень пригодились, так что рекомендую изучить перед посещением данного курса.

По временным затратам курс весьма объёмный. Я занимался по 2-3 часа вечерами по будням и 5-6 часов в субботу.

Рекомендую всем желающим получить практический опыт написания проекта на Go, а так же познакомится со множеством различных инструментов и техник.
Я не могу назвать себя мидлом в го, но в другом языке да. После курса уже может быть и смогу) По оценке тоже согласен, это, считай, вторая работа и надо вкалывать. В последних неделях нужно много тестов писать. Это прикольно, но не очень быстро. Может кому copilot помогал в этом 🙂 Сейчас доделываю седьмую неделю, так как дедлайн подвинулся, решил там навертеть побольше. Своих денег курс стоит однозначно 👍
Что вам не понравилось больше всего?
Некоторые полезные советы находятся в конце модуля. То есть ты сделал задачу, ожидаешь что можно отдать на ревью, а потом видишь заметки, обратите внимание на частые ошибки и идешь переписывать. Почему нельзя эти поинты оставлять рядом с заданием

Насколько мы не попали в оценку по нагрузке? 🙈
Авторы немного слукавили в некоторых модулях (как минимум в 6м). Например, они дают примерное время на решение, в качестве задания говорят, что код покрыт на всех уровнях. Но в авторских решениях outbox джобы тестами не покрыты. Получается их или не надо было покрывать, или авторы круто срезали углы и потратили меньше времени

Довольны ли вы получившимся сервисом?
Вполне

Какой из модулей был самым жосcким? Почему?
6й - никто почти не вел за руку

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

На что убили больше всего времени? А на что меньше всего?
На взаимодействие с kafka, outbox job + event stream. Их было сложнее всего дебажить

С каким грейдом вы пришли на курс? Какой стек у вас был?
PHP backend (стаж 10 лет).

Кому бы вы порекомендовали этот курс, а кому посоветовали бы воздержаться от него?
Рекомендую воздержаться новичкам, кто не знаком с docker, kafka. Просто пройденных курсов по golang будет не достаточно

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