Как я, Java разработчик, делаю курс для Java разработчиков? Выпуск #1

Я делаю это с азартом) и полным погружением, с желанием создать курс, который сам хотел бы пройти в свое время. А знаете, с чем я сталкиваюсь, пока делаю курс? Сейчас расскажу три самых ключевых пункта.

Как я, Java разработчик, делаю курс для Java разработчиков? Выпуск #1 Программирование, IT, Онлайн-курсы, Онлайн-школа, За кадром, Закулисье, Длиннопост

#1. Много новых ИНТЕРЕСНЫХ задач

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

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

Естественно (и небезобразно) все запускается в Docker.

Вот вам один из интересных кейсов: одно из первых домашних заданий - создать мини-веб-проект на Java без использования Spring / Spring Boot.

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

Так вот, для этой домашки каждому Java приложению выделяется 48 мегабайт для его оперативной памяти, а для контейнера в целом - 64 мегабайта.

Знал ли я, как регулировать размер доступной оперативной памяти (RAM) для Docker контейнера? Нет, раньше я об этом не задумывался, так как это не было необходимостью. В средах, таких как Kubernetes, за это обычно отвечали другие инструменты, и напрямую регулировать размер RAM не требовалось. Однако, было ли мне интересно узнать об этом? Конечно!

#2. Много НОВЫХ интересных задач

Делать домашки и запускать их на своем компьютере – это конечно здорово, но что, если домашка прикольная, а никому это не покажешь?

Даже друзьям, даже санитарам IT-леса – специалистам из HR.

И тут я однажды такой: "А ЧТО, ЕСЛИ СДЕЛАТЬ ХОСТИНГ ДЛЯ СТУДЕНТОВ?"

И мой мозг такой:

Как я, Java разработчик, делаю курс для Java разработчиков? Выпуск #1 Программирование, IT, Онлайн-курсы, Онлайн-школа, За кадром, Закулисье, Длиннопост

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

Да, задача в целом очень простая, если вытаскивать наружу порты.

от сделал один студент две домашки, а другой — три.

Например, в первой домашке, мы делаем веб проект который занимает порт 8080, во второй домашке используется порт 8081, в третьей 8082.

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

Как я, Java разработчик, делаю курс для Java разработчиков? Выпуск #1 Программирование, IT, Онлайн-курсы, Онлайн-школа, За кадром, Закулисье, Длиннопост

Окей, значит, надо им выдавать порты последовательно и делать маппинг этих портов. То есть для первого студента и его домашек выдаем порта 8000-8002. Для второго студента порты 8003-8005. Но что, если они будут выполнять домашки не последовательно? И, например, первый сделает три домашки, а второй только одну?

Хм... Значит, алгоритм провальный. Что насчет реестра?

Кто-то первый делает домашку, и она заливается на сервер. Анализируется порт из домашки и привязывается на первый свободный порт, начиная с 8000. А для пущей надежности еще и в Бд сохраняется. Возьмем для этого SQLite. Ну а что? Многопоточки пока нет, а работать с SQLite из Bash очень удобно.

А еще динамически меняем или дополняем конфиги в Nginx, чтобы пробрасывать нужную домашку на нужный путь. И порт. И еще и домен.

Точно! Домен!

# 3. МНОГО новых интересных задач

С доменом все плюс-минус просто. Покупаем за 200 рублей домен и...

И понимаем, что нам нужно делать новые поддомены для каждого студента.

Думаем как это сделать. Окей, можно использовать wildcard.

То есть если бы мы купили домен example.com, то в настройках DNS можно всего одну настройку добавить (*.example.com) вместо того чтобы править эти настройки каждый раз для каждого нового студента.

И тогда для студента с юзернеймом ivan будет свой собственный поддомен:

ivan.example.com

Пробрасываем порт домашки на 80 порт и открываем в браузере и...

И понимаем что нужен HTTPS.

А как? Как сделать HTTPS для *.example.com? А так вообще можно?

А Let's Encrypt так сможет?

Как оказалось сможет)

В итоге после прочтения нескольких статей, и настройки всего необходимого получаем хостинг для студентов своими руками с HTTPS на чистом Bash + SQLite + Docker + Nginx + Let's Encrypt.

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

Лига программистов

1.5K постов11.4K подписчиков

Добавить пост

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

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

1
Автор поста оценил этот комментарий
Интересно то, что вы изобретаете Nomad
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

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

1
Автор поста оценил этот комментарий

я к тому что можно записать подробный видос на эту тему)
вот мой ютуб про бэк на джвае кстати - https://www.youtube.com/channel/UC4btYD6I3BVGZEXfsW5E6gQ

раскрыть ветку (1)
Автор поста оценил этот комментарий

теперь понял) спасибо за идею) отличная мысль)

Автор поста оценил этот комментарий

ниасилил вопрос) я тут многопоточку изучаю, не могу найти внятное объяснение happens-before на русском

раскрыть ветку (1)
Автор поста оценил этот комментарий

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

показать ответы
1
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
Автор поста оценил этот комментарий

о чем еще можно написать, как считаете?)

1
Автор поста оценил этот комментарий
Интересно то, что вы изобретаете Nomad
раскрыть ветку (1)
Автор поста оценил этот комментарий

о чем еще можно написать, как считаете?)

1
DELETED
Автор поста оценил этот комментарий
Не, ну норм придумал
раскрыть ветку (1)
Автор поста оценил этот комментарий

о чем еще можно написать, как считаете?)

1
Автор поста оценил этот комментарий

В принципе похожим образом и коммерческий опыт можно зарабатывать вчестную почти ) Нужен только знающий человек, кто организует ci/cd, сравнимый хотя бы с унылыми НИИшками и ООО

раскрыть ветку (1)
Автор поста оценил этот комментарий

о чем еще можно написать, как считаете?)

3
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
Автор поста оценил этот комментарий

о чем еще можно написать, как считаете?)

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

окей) напишите мне в телеграм чтобы я добавил вас в группу будущего потока)

https://t.me/maks_atygaev

1
DELETED
Автор поста оценил этот комментарий
Не, ну норм придумал
раскрыть ветку (1)
Автор поста оценил этот комментарий

не, ну спасибо)

1
Автор поста оценил этот комментарий

В принципе похожим образом и коммерческий опыт можно зарабатывать вчестную почти ) Нужен только знающий человек, кто организует ci/cd, сравнимый хотя бы с унылыми НИИшками и ООО

раскрыть ветку (1)
Автор поста оценил этот комментарий

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


со знающим человеком было бы намного проще конечно) я пока не могу себе позволить кого-то нанять в помощь) поэтому иногда консультируюсь со знакомыми DevOps)

организовать CI/CD, в целом, задача вполне выполнимая даже для разработчика слабо владеющего навыками DevOps)

показать ответы
1
Автор поста оценил этот комментарий
Встал в очередь, джун ждун
раскрыть ветку (1)
Автор поста оценил этот комментарий

в очередь на что?) на курс? на следующую статью?) джун на Java?

показать ответы
1
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
Автор поста оценил этот комментарий

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

текущий курс, который я делаю, нацелен на людей которые уже начали свою работу (интерны / джуны / мидлы).

для совсем новичков этот курс неподъемный. Для тех кто только начинает мне кажется на рынке и YouTube уже и так полно хороших материалов)

3
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

им необязательно) просто некоторые домашки прикольные и ими может захотеться поделиться) плюс меньше съедаем ресурсов у студента курса + чуть ближе к реальной жизни)

3
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
Автор поста оценил этот комментарий

но и в DevOps поиграться тоже хорошо)