Курс помогает расширить и систематизировать знания по разработке бэкенда, сократить кривую обучения до лида с 5 до 2 лет и стать грамотным техническим специалистом. Авторы разбирают лично изученные грабли и рассказывают о подходах и практиках, которые применяют ThoughtWorks, Yandex и Google.
Разработка Enterprise-приложений на Java и Kotlin без боли и сожалений
Формат
Лекции и практические задания + курсовая работа
Объём
48 часов лекций и практик
+ д\з с подробным разбором кода от кураторов
Длительность
3 месяца
+2 месяца на курсовой проект, если решите его делать.
Все знают, что ПО нужно писать правильно, но всё равно пишут как получится.

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

Курс не учит очередной хайповой технологии, а раскрывает универсальные принципы и современные подходы лидеров отрасли: как заложить крепкий фундамент проекта, выстроить эффективные процессы и выжить в постоянно меняющихся условиях. Мы отвечаем на три фундаментальных вопроса:
Как разработать продукт, за который не стыдно
Проблема. По началу всё идёт хорошо, но потом проект превращается в зиккурат из костылей и противоречий. Бизнес требует новых фич и не даёт времени на рефакторинг, который «не нужен пользователям». На проде всплывают удиви­тельные баги. Никто не знает, как работает ключевой модуль, а кто знал — уже на пенсии, ушёл к конкурентам или умер. Когда же проект переписывают заново, он за полгода возвращается в прежнее состояние.

Решение. Мы поговорим о подготовке архитектуры к постоянным изменениям. В разделе о Domain Driven Design вы узнаете, как строить софт, который решает проблемы, а не создаёт их. Вы увидите, что на самом деле между технарями и бизнесом нет противоречий. Ещё мы разберём, как собирать требования и договариваться с бизнесом, а также что такое разработка через тестирование и зачем она нужна.
Пример гексагональной архитектуры проекта

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

Решение. Вы поймёте, как выстроить инфраструктуру проекта, которая будет помогать команде. Узнаете, что же такое Continuous Integration и Continuous Delivery на самом деле. Разберем, как сделать релизы скучной и даже унылой рутиной.
Коммит, деплой на прод и результат на графике мониторинга

Как перестать выгорать и начать жить
Проблема. Синдром самозванца. Раздражающая необходимость постоянно переключаться с дизайна системы на имена переменных. Вынужденные компро­миссы с менеджерами, которые приводят к нерабочим результатам. Бесконечные конференции, статьи и книги, которые состоят из воды и решений, бесполезных в текущем контексте. Второй год невозможно уйти в отпуск, потому что всё сразу сломается. Назначили тимлидом и непонятно, что делать и куда двигаться.

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

Чем наш курс отличаются от других?
1
Мы рассказываем и показываем только то, что пережили сами, и опираемся на опыт авторитетов в индустрии и исследования. В курс вошёл наш опыт хождения по граблям (на двоих 20+ лет) и лучшие практики Thoughtworks, Яндекс и других компаний, где нам довелось поработать.

Мы обобщили все пережитое в собрание знаний, которое сами бы хотели иметь лет пять назад. Если вы поймёте, о чём мы говорим, то работать иначе уже не сможете.
2
Мы преподаём систему методологий и практик разработки. Какие-то из них вы наверняка уже пробовали. Если у вас не получилось, то только потому, что одно без другого не работает.

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


Ведём вебинары тоже сами. На экране вы увидите ту же говорящую голову, что и в лекциях.


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

Вы сможете выбрать интересные темы, по которым мы снабдим вас соответствующей литературой. Как говорил Умберто Эко, непрочитанное важнее прочитанного.

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

О чем ты узнаешь:
  • Какие бывают требования и какую роль они выполняют
  • Как подстраиваться под постоянное изменение требований
  • Различие в водопадном подходе и Agile с точки зрения требований
  • В чем разница между UseCase и UserStory, что из этого и когда использовать
  • Как разрабатывать требования и не утонуть в неопределенности
Практика: Разработка требований через построение карт пользовательских историй
2. Инфраструктура проекта
Инфраструктура проекта — все те инструменты, которые используются для изготовления проекта, а так же для его размещения. По идее, они должны помогать разработчикам и, как следствие, обеспечивать бОльшую производительность, но на деле мержреквесты висят месяцами, билдсервер все время занят, а когда приходит очередь собрать ваше изменение, то билд падает без видимых причин, нужно лезть и разбираться. Разбираемся, как сделать инструменты действительно полезными

О чем ты узнаешь:
  • Что такое CI на самом деле
  • Зачем в современном мире нужен trunk-based development
  • Когда правильно организовывать репозитории
  • Всегда ли нужны code-review
Практика: построение процесса непрерывной интеграции
3. Архитектура: с высоты птичьего полета
Архитектура — основа всей системы. Именно она определяет успех предприятия, а не то, сколько новомодных фреймворков напихано в проект. Поначалу на нее не обращают внимания, а когда вспоминают, то проект уже идет ко дну.

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

О чем ты узнаешь:
  • Какие основные проблемы сопровождают проект на уровне кода
  • Какие метрики кода существуют и зачем они нужны
  • Что такое SOLID на самом деле и зачем он нужен
  • Как организовывать модульность и какие способы ее оценки существуют
  • Как защитить свою архитектуру
Практика: разбор проекта на основе метрик
5. Эволюция проекта: от MVC до Clean Architecture
На небольшом примере рассматриваем эволюцию проекта, какие кризисы он переживает и зачем все это нужно. Узнайте, на каком этапе развития находится ваш проект и что его ждет, если ничего не предпринять.
6. Sensible defaults
Практики, которые используются в приличных заведениях и чтобы от них отступить нужны веские причины.

О чем ты узнаешь:
  • Как экстремальное программирование помогает справиться с неопределенностью
  • Разработка через тестирование (TDD) — что это такое и почему тесты всего лишь побочный эффект методологии.
  • Как парное программирование экономит время
Практика: парное программирование по TDD
7. Domain-Driven Design
Самая сложная часть курса и мозг вашего приложения. Разбираемся, почему разработчикам так тяжело понимать заказчиков и пользователей, а добавление одной кнопки требует 5 человекомесяцев.

О чем ты узнаешь:
  • Как работают стратегические паттерны и зачем они нужны
  • Из каких строительных блоков состоит модель предметной области
  • Почему так важно понимать что ты разрабатываешь
  • Как коммуникация между бизнесом и технарями влияет на успех проекта
Практика: EventStorming и разбор примера кода на основе тактических паттернов
8. Микросервисы
Микросервисы обычно продаются как серебряная пуля и лекарство от всех болезней. На практике же внедрение микрсосервисов ради микросервисов ведет к многочисленным проблемам, которые перекрывают всю пользу.

О чем ты узнаешь:
  • Как понять действительно ли вам нужны микросервисы
  • Каких проблем добавляют микросервисы
  • Основные паттерны и антипаттерны при построении микросервисных архитектур
  • Где находятся границы микросервисов и причем тут Domain-Driven Design
9. Взаимодействие с внешним миром
Современные программы как правило не работают по-одиночке. Они постоянно с кем то общаются, будь то пользователи или же другие программы. И с последними даже чаще. Казалось бы, делов-то, всего лишь отправить пакет по сети. Но те, кто хоть раз затевал интеграцию, знают сколько граблей там спрятано.

О чем ты узнаешь:
  • Какие есть способы взаимодействия программных систем
  • Чем они характеризуются
  • Как выбрать подходящую модель взаимодействия
  • Какие организационно-технические средства помогут сделать процесс интеграции менее болезненным
Практика: изучение паттернов на примере кода
10. Тесты и тестирование
Писать тесты или нет? Если да, то для чего? И почему наши тесты снова "протухли"? Ставим точку в этих вопросах.

О чем ты узнаешь:
  • Какие виды тестов существуют
  • Чем они характеризуются и для чего нужны
  • Что такое пирамида тестирования и почему именно пирамида, а не ромб или квадрат
  • Как поддерживать отслеживать качество тестов и поддерживать их в надлежащем виде
  • Зачем на самом деле нужен тестировщик

Практика: разбор пирамиды тестирования на примере проекта
Примеры лекций
Мы постарались выкинуть из лекций всё лишнее и сосредоточиться на главном — знаниях, проверенных на опыте.
Обзор слоеной архитектуры. Оцениваем плюсы и минусы
Менторы-основатели школы
Евгений Лукьянов
В недавнем прошлом старший разработчик в Яндекс. Деньгах. Главный архитектор медицинского стартапа.

Пишет код за деньги с 2009 года. Java/Kotlin-разработчик, участвовал в разработке медицинского и измерительного оборудования, помогал проводить Универсиаду в Казани, писал софт для крупных билетных операторов, налаживал техпроцессы и программировал в Behavox (UK). Участвовал в создании Яндекс. Кассы, наладил выпуск банковских карт Яндекса и разрабатывал единую платформу для платёжных сервисов.

Начинал с прошивок для железа и десктопа на asm и C/C++, затем перебрался в энтерпрайз. С 2014 варится в финтехе. Работал ведущим программистом ГК FIX: проектировал и разрабатывал банковские системы, менторил новичков, проводил стажировки, выступал на внутренних митапах.

Интересуется IT-безопасностью и построением надёжных систем, ведёт собственные проекты.

Сергей Бухаров
Lead Developer Consultant в ThoughtWorks

10 лет в IT. Начинал в казанских около государственных компаниях и единорогах. Разрабатывал бэкенд мобильного приложения для Swedbank — крупнейшего банка Прибалтики. Пять лет провёл в автоматизации медицины, где баги могут стоить жизни. Там научился отказоустойчивости и DDD. Участвовал в разработке стартапов, медицинских систем, банковского ПО, а также монструозных телеком-систем, обрабатывающих чудовищный СМС-трафик.

Сейчас работает в сингапурском отделении ThoughtWorks, под одним логотипом с Мартином Фаулером и Нилом Фордом. Компания стояла у истоков Agile manifesto и широко известна применением лучших практик. В ThoughtWorks Сергей консультирует команды клиентов по архитектуре проектов, участвует в разработке стратегий рефакторинга и обучении. Проводит вебинары и семинары по архитектуре.

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

Профиль Сергея в LinkedIn

Евгений и Сергей ведут блог и телеграм-канал, в которых рассказывают о своём опыте, бэкенд-разработке, граблях, коммитах и инсайтах.

Блог практикующих бэкенд-разработчиков
Телеграм-канал
Формат курса
Это дистанционный курс с лекциями, практикой и курсовой.

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

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

Шаги:

  1. Создать максимально простой проект из одного модуля — один эндпоинт по адресу localhost:8080/hello, который отдаёт строку "Hello world" и тест на него. Возьмите любой фреймворк, который вам нравится. Система сборки — Gradle (Kotlin DSL).

  2. Настроить сборку проекта одной кнопкой, по которой будет проверяться достаточность тестового покрытия, code style, искаться библиотеки с уязвимостями. и пр. Смотри требования к проекту

  3. Настроить CI-сервер GitHub Actions. CI сервер должен использовать для сборки ту же "одну кнопку", что и в задании

Требования к проекту:


  1. Деплоймент-юнит должен собираться одной кнопкой (build.sh).

    • Проект со всей инфраструктурой должен разворачиваться и запускаться локально также одной кнопкой (run.sh для запуска, shop.sh для остановки) через docker-compose

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

    • Проект не должен содержать нарушений code-style.

    • Проект не должен содержать warning'ов.

    • Покрытие тестов должно быть не меньше чем определенное значение (для начала это не так важно сколько, но попробуйте сделать 80%).

    • Разработчик должен легко понимать, почему упала сборка (как локально, так и на CI-сервере).

    • Любой билд на главной ветке не должен содержать RC или SNAPSHOT-зависимости.

    • Должна быть возможность видеть список зависимостей, которые можно обновить (для них вышла новая версия).

    • Все коммиты в главную ветку должны оказываться на выбранном стенде.

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


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

Можете сюда добавить какие-то свои идеи, но те пункты, что перечислены — максимально желательны.
После лекций вы пишете курсовой проект: большое практическое задание, соединяющее воедино все пройденные темы. Несложный, но максимально приближенный к боевым условиям мини-проект для самостоятельной работы. Закрепите на практике материал курса, что называется пропустив его через себя.
  1. Использование чистой архитектуры и Domain-Driven Design
  2. Индивидуальная обратная связь от преподавателей
  3. Можно использовать как полигон для собственных экспериментов
  4. Будет что показать будущему работодателю
  5. Язык - Kotlin. Даже если пишете на других языках (особенно на Java), все равно будет полезно, мы используем только базовые конструкции языка
Курсовая доступна в тарифе Максимальная прокачка.
Необходимые знания
Курс рассчитан на практикующих разработчиков. Чтобы во всём разобраться и получить от курса максимум пользы, вам потребуются:
  1. Владение Java и Kotlin.
  2. Опыт работы на коммерческих проектах.
  3. Знакомство с основными паттернами и инструментами разработки.
Если вы только начинаете изучать программирование, вам будет сложно. Начинающим мы советуем начать с курса других авторов:
Backend-разработка на Kotlin.
Что ожидать от курса
При условии, что вы посмотрите все лекции, сделаете практику и прочтёте хотя бы половину из списка литературы.

  1. Систематизируете знания и справитесь с синдромом самозванца. Познаете принципы и основные грабли энтерпрайза.
  2. Получите полное руководство по созданию энтерпрайз-приложений.
  3. Разберётесь, что не так с вашим приложением, и разработаете план его улучшения.
  4. Будете готовы к собеседованиям в крупные компании. Вас не поставят в тупик вопросы про SOLID

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

Мы знаем, что учиться новому сложно. Поэтому мы будем периодически напоминать вам о сроках сдачи домашних работ и курсовой и мотивировать в меру сил.
Отзывы наших студентов
Тарифы
По предыдущим потокам мы знаем, что не у всех есть время и силы для максимального погружения. Поэтому курс доступен в нескольких вариантах
Опции
Экспресс
Базовый
Максимальная прокачка
Начало занятий
Сразу
Сразу
По расписанию
Доступ к материалам
3 месяца
7 месяцев
7 месяцев
Лекции и практики в записи
Конспекты лекций
Доступ к Reference application
Возможность задавать вопросы авторам через форму
Практические задания для закрепления материала
Персональная проверка д/з с обратной связью от авторов
Практические занятия через Zoom, ответы на вопросы, живое человеческое общение
Общение с авторами в Telegram
Проверка курсовой работы авторами курса, с обратной связью
Доступ в закрытое сообщество выпускников
Карьерная консультация от авторов, при завершении курсовой
Экспресс
Начало занятий Сразу
Доступ к материалам 3 месяца

Лекции и практики в записи
Конспекты лекций
Доступ к Reference application

Возможность задавать вопросы авторам через форму

Начать обучение
Базовый
Начало занятий Сразу
Доступ к материалам 7 месяцев

Лекции и практики в записи
Конспекты лекций
Доступ к Reference application

Возможность задавать вопросы авторам через форму

+Практические задания для закрепления материала

+Персональная проверка д/з с обратной связью от авторов


Начать обучение
Максимальная прокачка
Начало занятий По расписанию
Доступ к материалам 7 месяцев

Лекции в записи, практики через Zoom
Конспекты лекций
Доступ к Reference application

Возможность задавать вопросы авторам через форму
+Общение с авторами в Telegram
Практические задания для закрепления материала

Персональная проверка д/з с обратной связью от авторов

+Практические занятия через Zoom, ответы на вопросы, живое человеческое общение

+Курсовая - большое практическое задание, соединяющее воедино все пройденые темы
+Проверка курсовой работы авторами курса, с обратной связью

+Доступ в закрытое сообщество выпускников

+Карьерная консультация от авторов, при завершении курсовой
Застолбить место
Запись на курс
Тариф Базовый
Ваш email
Напишем, когда начнётся набор
Ваше имя
Чтобы мы знали, как к вам обращаться
Как долго вы в отрасли
Это поможет нам понять ваш уровень
Запись на курс
Тариф Максимальная прокачка
Ваш email
Напишем, когда начнётся набор
Ваше имя
Чтобы мы знали, как к вам обращаться
Как долго вы в отрасли
Это поможет нам понять ваш уровень
Запись на курс
Тариф Максимальная прокачка+
Ваш email
Напишем, когда начнётся набор
Ваше имя
Чтобы мы знали, как к вам обращаться
Как долго вы в отрасли
Это поможет нам понять ваш уровень
Ответы на вопросы
Как пройти курс за счет компании?
Мы дадим вам чек, чтобы вы компенсировали часть стоимости, или подготовим договор на обучение с вашей компанией. У нас нет лицензии вуза, поэтому вы не сможете получить налоговый вычет.
А вдруг мне не хватит скилов?
Напишите нам на course@stringconcat.com, мы свяжемся с вами и поможем оценить ваш уровень.
А если я не знаю Java и Kotlin и не собираюсь на них переходить?
Знание Java и Kotlin не критично. Курс на самом деле не про языки, а про практики разработки, подходы и концепции. Поэтому вы освоите главное и без знания языка.

Java и Kotlin нужны для домашек и курсовой. Мы много работали с этими языками, знаем их особенности и сможем подсказать по коду. Так же тщательно ревьюить на других языках мы не сможем, поэтому выбирайте вариант «Экспресс».
Поможете с рабочим проектом?
Да. На практических занятиях можно задавать вопросы и по рабочим проектам. А если вам нужно больше нашего участия, напишите нам на course@stringconcat.com и мы вместе подумаем как вам помочь.
У меня остались ещё вопросы!
Напишите нам на course@stringconcat.com, мы ответим.
Вариант «Экспресс»
Для тех, у кого нет времени на домашние работы и курсовую.
Оплачивая курс, вы соглашаетесь с публичной офертой.

После оплаты мы пришлем приглашение в телеграм потока и ссылку для входа в личный кабинет. Мы рассылаем их вручную, это может занять некоторое время.
Вариант «Экспресс» в рассрочку
Для тех, у кого нет времени на домашние работы и курсовую.
Оплачивая курс, вы соглашаетесь с публичной офертой.

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

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

После оплаты мы пришлем приглашение в телеграм потока и ссылку для входа в личный кабинет. Мы рассылаем их вручную, это может занять некоторое время.
Вариант «Индивидуальный»
Всё, как в Базовом, но вы работаете над своим проектом.
Мы сможем помочь не со всяким проектом. Он может быть слишком сложен и вы не успеете его сделать на курсе. Для надёжности мы оцениваем проекты заранее.
Вариант «Индивидуальный» в рассрочку
Всё, как в Базовом, но вы работаете над своим проектом.
Мы сможем помочь не со всяким проектом. Он может быть слишком сложен и вы не успеете его сделать на курсе. Для надёжности мы оцениваем проекты заранее.