Пропал на неделю, потому что как не в себя коммитил в code-basics.com
В общем я давно хотел добавить ассистента, который бы помогал учиться. Неделя тыкания в openai, изучение либ для бека, фронта, подключение стримминга (привет ActionCable), создание утилиты для загрузки курсов а асистента. В общем проделан большой путь и получилось вроде как неплохо.
Отдельно написал загрузчика курсов в асситенты. Писать было одно удовольствие, зацените код https://github.com/hexlet-basics/hexlet-basics-assistant
Что по пути узнал и чему научился:
⁃ В openai внутри есть RAG, соответственно считай готовая база куда надо просто вгрузить данные, дальше все работает само.
⁃ Работу со стримами для подготовки файлов мне полностью сделал chatgpt, так как либы в js не умеют в последовательную запись (либо устарели)
⁃ Количеством параллельно обрабатываемых файлов с уроками можно рулить через пакет p-queue, очень простая и полезная либа
Вот так работает:
На самом code-basics подрубил либу ruby-openai и соединил ее со стримингом через ActionCable. Шок в том, что этот код мне полностью написал chatgpt и он оказался рабочим с первого раза. Как фронт так и бек. Правда сначала я попробовал работать через ActionController::LIve, но уперся в то что он рвал коннекты и был не надежен. С ActionCable я до этого не работал, но готовая реализация получилась за час.
На фронте я потратил пару дней на либу ai/sdk от Vercel. Все проклял, у них вроде как все есть и бек с фронтом дружат из коробки. Но там свой хитрый алгоритм, который не доописан, поэтому я долго не мог добиться того чтобы с бека приходило все как надо (он мешал сообщения). В итоге оно еще и не работает с ws, поэтому пришлось chatgpt просить написать реализацию для ActionCable и он сделал это сходу. При этом я полностью перерыл исходники этого sdk и с помощью chatgpt разобрался в его кишках.
По пути выяснилось две проблемы:
⁃ На фронт надо передавать дельты без обработки, а то теряются \n и потом на выводе сломанный маркдаун
⁃ ActionCable асинхронный поэтому чанки путаются, пришлось дополнительно внедрять нумерацию и выпрямления порядка
Вот тут можно посмотреть исходник: https://github.com/hexlet-basics/hexlet-basics/blob/8d83e74d398b47571997b4d04eef1b010cedbf55/app/javascript/components/Chat.tsx
Ну и затестите как оно работает: https://code-basics.com/ru/languages/javascript/lessons/logic-combine-expressions
p.s. там в процессе еще немного секьюрити в порядок привести надо, я этим занимаюсь :)
В общем я давно хотел добавить ассистента, который бы помогал учиться. Неделя тыкания в openai, изучение либ для бека, фронта, подключение стримминга (привет ActionCable), создание утилиты для загрузки курсов а асистента. В общем проделан большой путь и получилось вроде как неплохо.
Отдельно написал загрузчика курсов в асситенты. Писать было одно удовольствие, зацените код https://github.com/hexlet-basics/hexlet-basics-assistant
Что по пути узнал и чему научился:
⁃ В openai внутри есть RAG, соответственно считай готовая база куда надо просто вгрузить данные, дальше все работает само.
⁃ Работу со стримами для подготовки файлов мне полностью сделал chatgpt, так как либы в js не умеют в последовательную запись (либо устарели)
⁃ Количеством параллельно обрабатываемых файлов с уроками можно рулить через пакет p-queue, очень простая и полезная либа
Вот так работает:
➜ hexlet-basics-assistant git:(main) make assistant-load L=css
bin/dev.js load css
Repository: https://github.com//hexlet-basics/exercises-css
Clone to: /var/folders/mk/qlh1ntvj27581bntpj_gx9qh0000gn/T/hexlet-basics/exercises-css
Cloning repository...
Repository cloned
Directory for prepared files: /var/folders/mk/qlh1ntvj27581bntpj_gx9qh0000gn/T
css-10-basics-10-introduction.txt
css-10-basics-20-connection.txt
css-10-basics-35-basics-style.txt
css-10-basics-30-style.txt
На самом code-basics подрубил либу ruby-openai и соединил ее со стримингом через ActionCable. Шок в том, что этот код мне полностью написал chatgpt и он оказался рабочим с первого раза. Как фронт так и бек. Правда сначала я попробовал работать через ActionController::LIve, но уперся в то что он рвал коннекты и был не надежен. С ActionCable я до этого не работал, но готовая реализация получилась за час.
На фронте я потратил пару дней на либу ai/sdk от Vercel. Все проклял, у них вроде как все есть и бек с фронтом дружат из коробки. Но там свой хитрый алгоритм, который не доописан, поэтому я долго не мог добиться того чтобы с бека приходило все как надо (он мешал сообщения). В итоге оно еще и не работает с ws, поэтому пришлось chatgpt просить написать реализацию для ActionCable и он сделал это сходу. При этом я полностью перерыл исходники этого sdk и с помощью chatgpt разобрался в его кишках.
По пути выяснилось две проблемы:
⁃ На фронт надо передавать дельты без обработки, а то теряются \n и потом на выводе сломанный маркдаун
⁃ ActionCable асинхронный поэтому чанки путаются, пришлось дополнительно внедрять нумерацию и выпрямления порядка
Вот тут можно посмотреть исходник: https://github.com/hexlet-basics/hexlet-basics/blob/8d83e74d398b47571997b4d04eef1b010cedbf55/app/javascript/components/Chat.tsx
Ну и затестите как оно работает: https://code-basics.com/ru/languages/javascript/lessons/logic-combine-expressions
p.s. там в процессе еще немного секьюрити в порядок привести надо, я этим занимаюсь :)
В подкасте вместе с Ириной Назаровой (CEO «Злых марсиан») мы разобрали, почему модель Open Core стала одним из доступных способов для разработчиков запустить собственный бизнес без чрезмерных инвестиций в маркетинг и продажи.
Выпуск будет полезен всем, кто хочет построить свой бизнес, оставаясь в технической зоне комфорта.
https://youtu.be/OY62kYMdM4M
Альтернативные платформы: ВК Видео | Аудио
https://youtu.be/OY62kYMdM4M
Выпуск будет полезен всем, кто хочет построить свой бизнес, оставаясь в технической зоне комфорта.
https://youtu.be/OY62kYMdM4M
Альтернативные платформы: ВК Видео | Аудио
https://youtu.be/OY62kYMdM4M
YouTube
Бизнес на открытом коде: как ЗЛЫЕ МАРСИАНЕ зарабатывают там, где другие теряют | Ирина Назарова #38
В этом выпуске мы подробно разобрали, почему модель Open Core стала одним из самых доступных способов для разработчиков запустить собственный бизнес без чрезмерных инвестиций в маркетинг и продажи. Вместе с Ириной Назаровой (CEO «Злых марсиан»), мы обсудили…
Принцип на все времена: Command-Query Separation
CQS очень простой принцип программирования, применение которого встречается на каждом шагу. Обычно его формулируют так: “задавая вопрос, не изменяй ответ”. Представьте что у вас есть функция, которая проверяет валидность объекта
Может ли она что-то менять? Большинство скажет что это не логично и будет право. Она не должна ничего менять. На практике же, это происходит тут и там. В тех же Rails, вы легко встретите внутри модели колбек
Однажды, когда я собесил человека на наставника в Хекслет, мы как-то по пути выяснили, что у них там в коде во время запроса каких-то опций, они удалялись из списка опций, мы обсудили этот момент, я чуть-чуть рассказал про CQS и разработчик мне ответил, что после разговора пойдет переписывать код :)
Почему это вообще важно? Тут можно сказать про принцип наименьшего удивления. Код, который меняет что-то на проверку/запрос данных, вводит в ступор всех кто с ним работает. Систему можно проектировать так чтобы этого не было и код делал ровно то, что он заявляет. Есть правда пара исключений, это отложенная инициализация, но снаружи она выгялядит всегда так, как будто изменения не было. И второе, это разного рода аналитика во время работы, например подсчет числа визитов при запросе страницы.
Кстати да, это правило распространяется на все вокруг. Именно поэтому в HTTP существует GET, который можно кешировать так как он сам не меняет данные (но данные могут поменяться по другим причинам), а POST всегда меняет, поэтому кеширование к нему не применяется.
Буквально недавно мы разговаривали с Тагиром и он поделился тем как в Java работает форматирование дат. Оказалось, что в Java есть объект SimpleDateFormat, и он непотокобезопасен. Почему? Потому что метод, который вроде бы просто форматирует дату в строку, на самом деле меняет внутреннее состояние объекта. И если два потока одновременно вызовут
В результате приходится либо каждый раз создавать новый SimpleDateFormat, либо оборачивать его в ThreadLocal, либо использовать DateTimeFormatter из более нового API, который как раз спроектирован с учётом CQS — он ничего не мутирует.
Такие детали, на первый взгляд мелочи, но на практике они и создают разницу между кодом, который легко читать и расширять, и кодом, в котором ты боишься вызвать метод, потому что не знаешь, что он там делает под капотом.
Но это что касается вопросов. А что насчет команд? Тут уже не так очевидно, почему если мы выполняем действие (`setSomething()`,
Во-первых, это снова вопрос читаемости и предсказуемости. Метод с названием
Во-вторых, это помогает отделить побочные эффекты от чистых вычислений. Когда метод возвращает что-то, возникает иллюзия, что это «безопасно» — можно просто вызвать и использовать результат. Но за кулисами может происходить что угодно: удаление из базы, отправка письма, пересчёт кэша. Такое поведение тяжело тестировать и отлаживать.
Это не значит, что действия никогда ничего не возвращают. Иногда они могут вернуть, например, true или false, чтобы явно показать успех или неудачу. Более того, в некоторых ситуациях невозможно соблюдать CQS, например, при открытии файла на запись (создается файловый дескриптор).
Ссылки: Телеграм | Youtube | VK
p.s. Признавайтесь, писали такой код?
CQS очень простой принцип программирования, применение которого встречается на каждом шагу. Обычно его формулируют так: “задавая вопрос, не изменяй ответ”. Представьте что у вас есть функция, которая проверяет валидность объекта
user.isValid()
. По смыслу эта функция проверяет данные по каким-то правилам и возвращает true/false.Может ли она что-то менять? Большинство скажет что это не логично и будет право. Она не должна ничего менять. На практике же, это происходит тут и там. В тех же Rails, вы легко встретите внутри модели колбек
before_validation
, в котором можно сделать любое изменение, которое сработает на вызов valid?
. И этим часто пользуются, я был свидетелем, как в коде удалялись связи у пользователя. Но тоже самое встречается налево и направо у программистов во всех языках.Однажды, когда я собесил человека на наставника в Хекслет, мы как-то по пути выяснили, что у них там в коде во время запроса каких-то опций, они удалялись из списка опций, мы обсудили этот момент, я чуть-чуть рассказал про CQS и разработчик мне ответил, что после разговора пойдет переписывать код :)
Почему это вообще важно? Тут можно сказать про принцип наименьшего удивления. Код, который меняет что-то на проверку/запрос данных, вводит в ступор всех кто с ним работает. Систему можно проектировать так чтобы этого не было и код делал ровно то, что он заявляет. Есть правда пара исключений, это отложенная инициализация, но снаружи она выгялядит всегда так, как будто изменения не было. И второе, это разного рода аналитика во время работы, например подсчет числа визитов при запросе страницы.
Кстати да, это правило распространяется на все вокруг. Именно поэтому в HTTP существует GET, который можно кешировать так как он сам не меняет данные (но данные могут поменяться по другим причинам), а POST всегда меняет, поэтому кеширование к нему не применяется.
Буквально недавно мы разговаривали с Тагиром и он поделился тем как в Java работает форматирование дат. Оказалось, что в Java есть объект SimpleDateFormat, и он непотокобезопасен. Почему? Потому что метод, который вроде бы просто форматирует дату в строку, на самом деле меняет внутреннее состояние объекта. И если два потока одновременно вызовут
.format(…)
, то они могут получить некорректный результат. Это классический пример нарушения CQS: метод, выглядящий как query (просто возвращает значение), внезапно ведёт себя как command — вносит изменения.В результате приходится либо каждый раз создавать новый SimpleDateFormat, либо оборачивать его в ThreadLocal, либо использовать DateTimeFormatter из более нового API, который как раз спроектирован с учётом CQS — он ничего не мутирует.
Такие детали, на первый взгляд мелочи, но на практике они и создают разницу между кодом, который легко читать и расширять, и кодом, в котором ты боишься вызвать метод, потому что не знаешь, что он там делает под капотом.
Но это что касается вопросов. А что насчет команд? Тут уже не так очевидно, почему если мы выполняем действие (`setSomething()`,
doSomething()
, то данные лучше не возвращать?Во-первых, это снова вопрос читаемости и предсказуемости. Метод с названием
deleteUser(id)
должен просто удалить пользователя, а не возвращать его профиль. Когда действие возвращает что-то, разработчики начинают полагаться на это значение: передавать его дальше, использовать как флаг, делать выводы.Во-вторых, это помогает отделить побочные эффекты от чистых вычислений. Когда метод возвращает что-то, возникает иллюзия, что это «безопасно» — можно просто вызвать и использовать результат. Но за кулисами может происходить что угодно: удаление из базы, отправка письма, пересчёт кэша. Такое поведение тяжело тестировать и отлаживать.
Это не значит, что действия никогда ничего не возвращают. Иногда они могут вернуть, например, true или false, чтобы явно показать успех или неудачу. Более того, в некоторых ситуациях невозможно соблюдать CQS, например, при открытии файла на запись (создается файловый дескриптор).
Ссылки: Телеграм | Youtube | VK
p.s. Признавайтесь, писали такой код?
Telegram
Организованное программирование | Кирилл Мокевнин
Как из джуниора дойти до мидла, а потом и до синьора
Ютуб https://youtube.com/@mokevnin
Связь для предложений: @kirillpublic
Ютуб https://youtube.com/@mokevnin
Связь для предложений: @kirillpublic
Смотрите что я вам принес. Отлично поболтали с Мурычем про js и программирование в целом. Деды бухтят https://www.youtube.com/watch?v=wv_qgOI60ao
Альтернативные ссылки: Аудио | vk
Альтернативные ссылки: Аудио | vk
YouTube
Как писать JS-код, который не будет тормозить? Советы от Demi Murych | Максим Бобров #39
В этом выпуске мы пообщались с легендарным реверс-инженером Деми Мурычем, который поделился своим опытом и нетривиальными взглядами на JavaScript. Обсудили, как правильно работать с var, let и const, затронули актуальные вопросы производительности, а также…
Как программист, я больше всего люблю:
- Удалять код, а не добавлять его
- Уменьшать количество используемых систем
- Заменять кастомные решения, на стандартные
- Использовать готовые решения, вместо написания своих
- Принимать административные решения, а не технические
- Удалять код, а не добавлять его
- Уменьшать количество используемых систем
- Заменять кастомные решения, на стандартные
- Использовать готовые решения, вместо написания своих
- Принимать административные решения, а не технические
В этом выпуске мы поговорили с Петром Зайцевым из Percona, который раскрыл историю и эволюцию популярных баз данных: MySQL, Postgres, MariaDB и других решений. Обсудили, как MySQL оказалась в руках Oracle и к чему это привело, как возникли форки вроде MariaDB и почему в итоге всё чаще стали выбирать Postgres. Пётр также рассказал, почему баз данных становится всё больше, как бизнес-модель и «идеология» вендоров влияют на то, что мы видим под капотом, и почему он продолжает верить в open source-подход.
youtube.com/watch?v=TgT7fjyzZzY
Альтернативные ссылки: Аудио | vk
youtube.com/watch?v=TgT7fjyzZzY
Альтернативные ссылки: Аудио | vk
YouTube
Postgres против MySQL: что решает выбор базы данных | Петр Зайцев |#40
В этом выпуске мы поговорили с Петром Зайцевым из Percona, который раскрыл историю и эволюцию популярных баз данных: MySQL, Postgres, MariaDB и других решений. Обсудили, как MySQL оказалась в руках Oracle и к чему это привело, как возникли форки вроде MariaDB…
Ух, последнее время навалило и я плотно занялся разработкой платформы Хекслета спустя несколько лет, после того, как я перестал писать туда код. На днях мы делаем большой релиз с выкаткой ИИ-ассиснта вроде того, что я сделал в code-basics.com. Хочу поделиться несколькими историями, которые в процессе возникли и как ИИ немного поменял мой подход к работе.
Удаление Docker Compose
Возможно вы скажете что я сошел с ума, но упрощая одно, Docker Compose делает сложным многое другое. Работа редактора, постоянное переключение внутри/снаружи (опять же история команд), сложности с сервисами (например интеграционные тесты), сложности с рестартом (когда это происходит по внутренним причинам а не снаружи). Все это сопровождает работу в Compose каждый день, а сетап окружения, по факту, делается один раз, в самом начале. Поэтому лучше один раз потратить чуть больше времени, зато потом не париться. Тем более сейчас все не так уж сложно: mise, overmind, caddy + базы и другие штуки прямо в докере, вместе работают как надо. Даже обвязка в виде команд занимает меньше строк чем docker-compose конфигурации:
В общем сначала я сделал это на code-basics.com, теперь мы это делаем и на репе Хекслета
Замена старья на Chatgpt
В коде наших проектов, как и во многих других, очень много мелких изолированных задачек, которые не всегда можно решить с помощью готовых библиотек. Например автокомплит для серверного html с поддержкой нужного UI, небольшой markdown редактор для разных textarea (крупные не подходят) с поддержкой bootstrap, все это либо отсутствует и надо пилить самим, либо крайне устарело. Подобные штуки редко поддерживают постоянно.
Я всегда избегал писать все это самостоятельно и мы долгое время были на устаревших либах, переодически вставляя туда костыли. А тут я попробовал просто генерить эти штуки. И пошло, за короткое время мы выкинули кучку либ, которые годами не обновлялись, при этом получили на каждую задачу по одному файлу от 50 до 150 строк, которые почти целиком сделал chatgpt.
Главное пожалуй то, что эти куски изолированы и в них не надо разбираться. Любой рефакторинг это снова отдал в chatgpt весь код целиком и попросил поправить, например, я так добавлял поддержку localStorage в редактор, который он мне сгенерил. И черт побери, это меняет отношение к коду и к тому что там делается. Подобный код перестает восприниматься мной как трата времени на написание не релевантных бизнесу либ.
Такая же история у меня была с интеграцией @sdk/ai от vercel. Я потратил целый день пытаясь его завести, мне даже пришлось полностью перелопатить его кишки в итоге я не смог его нормально завести для своих задач (смог, но с большим количеством подпорок). В конце я просто плюнул и сгенерил себе react hook, который делает все нужное (коммуникация с сервером, отправка прием данных). Посмотрите какая красота: https://github.com/hexlet-basics/hexlet-basics/blob/main/app/javascript/hooks/useAssistantStream.ts
Я не уверен что решился бы сам его писать. Не потому что не могу, а потому что не хочу тратить на это время. А щас это перестало быть проблемой.
Ссылки: Телеграм | Youtube | VK
Удаление Docker Compose
Возможно вы скажете что я сошел с ума, но упрощая одно, Docker Compose делает сложным многое другое. Работа редактора, постоянное переключение внутри/снаружи (опять же история команд), сложности с сервисами (например интеграционные тесты), сложности с рестартом (когда это происходит по внутренним причинам а не снаружи). Все это сопровождает работу в Compose каждый день, а сетап окружения, по факту, делается один раз, в самом начале. Поэтому лучше один раз потратить чуть больше времени, зато потом не париться. Тем более сейчас все не так уж сложно: mise, overmind, caddy + базы и другие штуки прямо в докере, вместе работают как надо. Даже обвязка в виде команд занимает меньше строк чем docker-compose конфигурации:
# Procfile.dev
webserver: make services-webserver-run
vite: make services-frontend-run
app: make services-app-run
jobs: make services-jobs-run
В общем сначала я сделал это на code-basics.com, теперь мы это делаем и на репе Хекслета
Замена старья на Chatgpt
В коде наших проектов, как и во многих других, очень много мелких изолированных задачек, которые не всегда можно решить с помощью готовых библиотек. Например автокомплит для серверного html с поддержкой нужного UI, небольшой markdown редактор для разных textarea (крупные не подходят) с поддержкой bootstrap, все это либо отсутствует и надо пилить самим, либо крайне устарело. Подобные штуки редко поддерживают постоянно.
Я всегда избегал писать все это самостоятельно и мы долгое время были на устаревших либах, переодически вставляя туда костыли. А тут я попробовал просто генерить эти штуки. И пошло, за короткое время мы выкинули кучку либ, которые годами не обновлялись, при этом получили на каждую задачу по одному файлу от 50 до 150 строк, которые почти целиком сделал chatgpt.
Главное пожалуй то, что эти куски изолированы и в них не надо разбираться. Любой рефакторинг это снова отдал в chatgpt весь код целиком и попросил поправить, например, я так добавлял поддержку localStorage в редактор, который он мне сгенерил. И черт побери, это меняет отношение к коду и к тому что там делается. Подобный код перестает восприниматься мной как трата времени на написание не релевантных бизнесу либ.
Такая же история у меня была с интеграцией @sdk/ai от vercel. Я потратил целый день пытаясь его завести, мне даже пришлось полностью перелопатить его кишки в итоге я не смог его нормально завести для своих задач (смог, но с большим количеством подпорок). В конце я просто плюнул и сгенерил себе react hook, который делает все нужное (коммуникация с сервером, отправка прием данных). Посмотрите какая красота: https://github.com/hexlet-basics/hexlet-basics/blob/main/app/javascript/hooks/useAssistantStream.ts
Я не уверен что решился бы сам его писать. Не потому что не могу, а потому что не хочу тратить на это время. А щас это перестало быть проблемой.
Ссылки: Телеграм | Youtube | VK
В июне пройдет первая большая онлайн-конференция Хекслета. Пожалуйста, заполните анкету, это поможет нам сделать ее максимально полезной. Среди всех, кто отправит форму и оставит телеграм, разыграем рюкзак Хекслета. Итоги подведем 19 мая.
Выпуск про тимлидов уже доступен для просмотра. Вы узнаете, как устроена настоящая командная динамика, что делать, если «всё рушится», и почему работа тимлида — это не про власть, а про ответственность. Не пропустите — разговор откровенный, местами жёсткий, но крайне полезный для всех, кто хочет расти в IT.
https://www.youtube.com/watch?v=_qJ_rU8-S90
Альтернативные ссылки: Аудио | vk
https://www.youtube.com/watch?v=_qJ_rU8-S90
Альтернативные ссылки: Аудио | vk
YouTube
Тимлидерство от А до Я: влияние, управление, делегирование | Александр Кучук #41
В этом выпуске мы поговорили с Сашей Кучуком — тимлидом с 11-летним опытом, который последние шесть лет работает в крупных и малых компаниях, включая топовые бигтехи. Обсудили, как на самом деле устроена жизнь тимлида, почему программирование — не стрессовая…
Универсальный стек для работы без Docker Compose
Удивительное рядом. Как оказалось, многие разработчики зашли в разработку когда в их проекте уже был Docker Compose и они не видели других способов работы. Когда-то я рассказывал как перейти на Docker Compose, а теперь пришла пора говорить о том, как работать без него :)
Docker Compose, в первую очередь, нужен для унификации среды разработки, чтобы сетап был единым независимо от того, где вы его разворачиваете и что там на машине было установлено. Как ни странно, все это было и до него, например через Vagrant (Кто еще застал разработку через него?). Переход на Compose произошел из-за повального движения в сторону легковестных контейнеров, а не полноценных виртуальных машин. К тому же Docker становился стандартом в продакшене, что давало возможность переиспользовать Dockerfile для разработки и продакшена. Но реальная жизнь оказалась сложнее. По порядку:
1. Единый Dockerfile для продакшена и девелопмента это миф и работает только в примитивных случаях
2. Постоянные сложности с настройкой сервисов, так как работа внутри контейнера часто требует особой конфигурации, запуска в хедлес режимах и указания специальных переменных окружений.
3. Compose значительно усложняет процесс разработки: внутри/снаружи, установка зависимостей, персистентность (игра с волюмами).
4. Compose требует шаманств в работе с редактором. Чтобы заставить работать lsp сервера и линтеры, нужно научить их ходить во внутрь контейнера, либо как-то имитировать идентичный сетап снаружи.
В итоге решая буквально одноразовую задачу по первоначальному сетапу, Compose значительно ухудшает сам процесс разработки, с которым мы сталкиваемся каждый день. Можно ли отказаться от него, не потеряв те преимущества, которые он дал? На 100% нельзя, но можно сделать достаточно хороший сетап, который уберет большую часть проблем и точно будет намного приятнее в использовании. Что для этого надо?
1. Автоматизация команд с зависимостями. Тут берем Make или его аналог https://www.youtube.com/watch?v=pK9mF5aK05Q
2. Mise - универсальная тулза для установки языков: https://mise.jdx.dev/
3. Overmind: Менеджер процессов, позволяет запускать наборы сервисов как DC: https://github.com/DarthSim/overmind (раньше для этого использовали Foreman, формат кстати остался тот же)
4. Как ни странно тот же Docker. Например не имеет смысл ставить базу прямо в систему, ее можно запускать так же в контейнере, но без Compose
Все это можно подсмотреть в нашем продакшен проекте https://github.com/hexlet-basics/hexlet-basics/blob/main/Makefile
Что еще? Пожалуй главная засада это первоначальная настройка вашей операционки. В маке что-то надо поставить через brew, в ubuntu через apt. Но опять же, решается все это крайне просто через тот же Make:
Но даже в этом случае, подготовить сетап не сложнее чем написать docker-compose.yml (в реальности последний написать сложнее, если это связано с конфигурацией сервисов под работу внутри контейнеров). А вот использование будет на порядок проще.
Ссылки: Телеграм | Youtube | VK
Удивительное рядом. Как оказалось, многие разработчики зашли в разработку когда в их проекте уже был Docker Compose и они не видели других способов работы. Когда-то я рассказывал как перейти на Docker Compose, а теперь пришла пора говорить о том, как работать без него :)
Docker Compose, в первую очередь, нужен для унификации среды разработки, чтобы сетап был единым независимо от того, где вы его разворачиваете и что там на машине было установлено. Как ни странно, все это было и до него, например через Vagrant (Кто еще застал разработку через него?). Переход на Compose произошел из-за повального движения в сторону легковестных контейнеров, а не полноценных виртуальных машин. К тому же Docker становился стандартом в продакшене, что давало возможность переиспользовать Dockerfile для разработки и продакшена. Но реальная жизнь оказалась сложнее. По порядку:
1. Единый Dockerfile для продакшена и девелопмента это миф и работает только в примитивных случаях
2. Постоянные сложности с настройкой сервисов, так как работа внутри контейнера часто требует особой конфигурации, запуска в хедлес режимах и указания специальных переменных окружений.
3. Compose значительно усложняет процесс разработки: внутри/снаружи, установка зависимостей, персистентность (игра с волюмами).
4. Compose требует шаманств в работе с редактором. Чтобы заставить работать lsp сервера и линтеры, нужно научить их ходить во внутрь контейнера, либо как-то имитировать идентичный сетап снаружи.
В итоге решая буквально одноразовую задачу по первоначальному сетапу, Compose значительно ухудшает сам процесс разработки, с которым мы сталкиваемся каждый день. Можно ли отказаться от него, не потеряв те преимущества, которые он дал? На 100% нельзя, но можно сделать достаточно хороший сетап, который уберет большую часть проблем и точно будет намного приятнее в использовании. Что для этого надо?
1. Автоматизация команд с зависимостями. Тут берем Make или его аналог https://www.youtube.com/watch?v=pK9mF5aK05Q
2. Mise - универсальная тулза для установки языков: https://mise.jdx.dev/
3. Overmind: Менеджер процессов, позволяет запускать наборы сервисов как DC: https://github.com/DarthSim/overmind (раньше для этого использовали Foreman, формат кстати остался тот же)
4. Как ни странно тот же Docker. Например не имеет смысл ставить базу прямо в систему, ее можно запускать так же в контейнере, но без Compose
Все это можно подсмотреть в нашем продакшен проекте https://github.com/hexlet-basics/hexlet-basics/blob/main/Makefile
Что еще? Пожалуй главная засада это первоначальная настройка вашей операционки. В маке что-то надо поставить через brew, в ubuntu через apt. Но опять же, решается все это крайне просто через тот же Make:
macos-setup:
brew install overmind caddy
Но даже в этом случае, подготовить сетап не сложнее чем написать docker-compose.yml (в реальности последний написать сложнее, если это связано с конфигурацией сервисов под работу внутри контейнеров). А вот использование будет на порядок проще.
Ссылки: Телеграм | Youtube | VK
Во многих фреймворках создание нового ресурса - это одна команда. А вот удаление - ручной, многосоставный, рутинный ад. Вы создаёте файлы: модель, миграцию, контроллер, тесты. Потом передумываете, а файлы уже лежат в git. Что дальше?
Если повезет через
* удалить файлы модели, миграции, контроллера, вьюх,
* откатить миграцию,
* удалить строчки в routes,
* проверить, ничего ли не осталось.
И без команды удаления это прямо задалбывает. Так например происходит в Laravel, особенно если косякнул с именем чего-нибудь. Потом сидишь и ручками трешь.
Для всего этого добра можно было бы придумать обратную команду, которая чистит любой сгенерированный ресурс с его связями, но почему-то так получилось, что это есть в небольшом количестве фреймворков. В первую очередь я говорю про Rails, который это в принципе популяризировал.
В Rails есть команда, которая удаляет всё одним движением. То есть на каждый генератор, есть “удалятел”, который подчищает все то, что было добавлено генератором.
Генерация
Удаление
Крутяк да? А как вы удаляете то, что вам нагенерилось?
Ссылки: Телеграм | Youtube | VK
Если повезет через
git clean
, но обычно руками:* удалить файлы модели, миграции, контроллера, вьюх,
* откатить миграцию,
* удалить строчки в routes,
* проверить, ничего ли не осталось.
И без команды удаления это прямо задалбывает. Так например происходит в Laravel, особенно если косякнул с именем чего-нибудь. Потом сидишь и ручками трешь.
Для всего этого добра можно было бы придумать обратную команду, которая чистит любой сгенерированный ресурс с его связями, но почему-то так получилось, что это есть в небольшом количестве фреймворков. В первую очередь я говорю про Rails, который это в принципе популяризировал.
В Rails есть команда, которая удаляет всё одним движением. То есть на каждый генератор, есть “удалятел”, который подчищает все то, что было добавлено генератором.
Генерация
bin/rails generate model User name:string
invoke active_record
create db/migrate/20250424120000_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
Удаление
bin/rails destroy model User
remove db/migrate/20250424120000_create_users.rb
remove app/models/user.rb
remove test/models/user_test.rb
remove test/fixtures/users.yml
Крутяк да? А как вы удаляете то, что вам нагенерилось?
Ссылки: Телеграм | Youtube | VK
Telegram
Организованное программирование | Кирилл Мокевнин
Как из джуниора дойти до мидла, а потом и до синьора
Ютуб https://youtube.com/@mokevnin
Связь для предложений: @kirillpublic
Ютуб https://youtube.com/@mokevnin
Связь для предложений: @kirillpublic
Хекслет.Клуб - общаемся, растем технически и в карьере, строим личный бренд
Организованное программирование | Кирилл Мокевнин pinned «Хекслет.Клуб - общаемся, растем технически и в карьере, строим личный бренд»
Хекслет.Клуб официально открыт! Значит рассказываю. У меня давно была идея, объединять не только тех кто хочет вкатываться в it, но и тех кто уже работает и кому важен профессиональный рост, карьерный рост, возможность увеличить свой нетворк, если нужно переехать и устроиться куда-то зарубеж.
Как устроен клуб (к чему мы идем)
Внутри находится чат, в котором присутствуют как обычные участники, так и менторы, которые специализируются на помощи в прокачке. Чат состоит разговорных и автоматических топиков, в которые попадают истории от участников:
- Собеседования: Опыт прохождения участниками мидловых и синьорских собеседований с вопросами и требованиями
- Компании: Отзывы и рассказ о внутренней кухне работы компаний, в которых работают участники
- Менторы: Отчеты менторов и о менторах, с описанием планов развития
В разговорных чатах обсуждается все от алгоритмов и курсов до построения личного бренда.
Сам клуб управляется через бота https://t.me/HexletClubBot Через него дается доступ к чату, в этом же боте собраны полезные ссылки и база знаний клуба.
Ну что, поехали) Жду всех там
Ссылки: Телеграм | Youtube | VK
Как устроен клуб (к чему мы идем)
Внутри находится чат, в котором присутствуют как обычные участники, так и менторы, которые специализируются на помощи в прокачке. Чат состоит разговорных и автоматических топиков, в которые попадают истории от участников:
- Собеседования: Опыт прохождения участниками мидловых и синьорских собеседований с вопросами и требованиями
- Компании: Отзывы и рассказ о внутренней кухне работы компаний, в которых работают участники
- Менторы: Отчеты менторов и о менторах, с описанием планов развития
В разговорных чатах обсуждается все от алгоритмов и курсов до построения личного бренда.
Сам клуб управляется через бота https://t.me/HexletClubBot Через него дается доступ к чату, в этом же боте собраны полезные ссылки и база знаний клуба.
Ну что, поехали) Жду всех там
Ссылки: Телеграм | Youtube | VK
Telegram
Хекслет Клуб (Бот)
Наш клуб помогает разработчиком расти в карьере и зарплате. От создателей Хекслета
Заменит ли ИИ программистов? Вокруг себя вижу много панических настроений на эту тему, поэтому пост. Начну с анекдота
Клиент вызывает мастера починить сломавшийся станок.
Мастер приходит, осматривает станок, берет молоток, слегка ударяет в одном месте — станок снова работает.
Мастер выписывает счет на $500.
Клиент возмущается:
— За что $500? Вы же только один раз молотком ударили!
Мастер спокойно отвечает:
— За удар молотком — $5. За то, чтобы знать, куда ударить — $495.
ИИ действительно может генерировать куски кода, но написать код != создать работающую систему. Программирование это не только набор символов в редакторе. Это анализ требований, архитектура, проектирование системных взаимодействий, поддержка, развитие. ИИ не умеет брать на себя всю полноту инженерной ответственности: понимать зачем, почему и в каком контексте разрабатывается продукт.
Кроме того, задача программиста - не просто написать решение, а проанализировать его стоимость: насколько оно сложно в поддержке, сколько ресурсов потребует в будущем, сколько будет стоить исправление ошибок и адаптация под изменения. Иногда работа специалиста не в том, чтобы реализовать то, что попросили, а в том, чтобы предложить более дешевую, простую и надежную альтернативу.
Еще один важный момент: ИИ в своей природе в основном "копипастит" уже существующие паттерны кода, но не создает новых абстракций. Создание абстракций требует понимания сути задачи, компромиссов между сложностью и гибкостью, предвидения будущих изменений. Это работа мышления, а не перебора вариантов. Создание правильных абстракций определяет, насколько система будет масштабируемой, понятной и живучей. ИИ пока остается на уровне механического исполнения без глубокого понимания задач.
И наконец: реальные проекты - это не изолированные кусочки кода. Это сложные системы с множеством взаимосвязанных компонентов: базы данных, кэш-сервисы, очереди, микросервисы, балансировщики нагрузки, десятки или сотни серверов. Ошибки в таких системах проявляются не там, где был написан код, а на стыках между частями, под нагрузкой, в редких пограничных случаях. Диагностика и исправление таких ошибок требуют системного мышления, опыта и понимания работы всей инфраструктуры целиком. Пока ИИ не способен взять на себя такую ответственность.
Миф: ИИ сделает всех равными
Кажется, что с ИИ теперь каждый сможет делать то же самое, что и крутой разработчик. Но на практике ИИ становится инструментом в руках человека. Чем опытнее человек, тем лучше он ставит задачи ИИ, проверяет результаты и направляет процесс. Это усиливает разницу между сильными и слабыми разработчиками: кто умеет думать становится еще продуктивнее, кто не умеет, тонет в посредственных результатах.
Миф: ИИ заменит джунов
В этом утверждении зашито представление, что джуны нужны для выполнения каких-то базовых задач с которыми справится любой дурак. Поэтому без ии нам приходилось их нанимать, а вот с ии они больше будут не нужны. Компании нанимают джунов по другим причинам. Они готовы вкладываться в людей, чтобы вырастить из них квалифицированных специалистов. То есть никто не нанимает джуна, для того, чтобы он остался джуном. Тогда это был бы не джун, а вполне себе опытный, но очень низкоквалицированный специалист на низковалифицированную задачу.
Миф: Нужно срочно менять профессию
Как и с любой новой технологией, реальный сценарий это не исчезновение профессии, а её изменение. Появится больше задач по интеграции ИИ в продукты, по проектированию взаимодействия между человеком и машиной, по валидации и контролю качества того, что делает ИИ. Уйдут рутинные задачи, вырастет ценность проектирования, системного мышления и креативности.
Что действительно меняется
* Рутинные задачи действительно будут автоматизироваться.
* Навыки работы с ИИ становятся частью базового набора разработчика.
* Возрастет ценность знаний о системах, архитектуре, бизнесе.
Что вы об этом думаете?
Ссылки: Телеграм | Youtube | VK
Клиент вызывает мастера починить сломавшийся станок.
Мастер приходит, осматривает станок, берет молоток, слегка ударяет в одном месте — станок снова работает.
Мастер выписывает счет на $500.
Клиент возмущается:
— За что $500? Вы же только один раз молотком ударили!
Мастер спокойно отвечает:
— За удар молотком — $5. За то, чтобы знать, куда ударить — $495.
ИИ действительно может генерировать куски кода, но написать код != создать работающую систему. Программирование это не только набор символов в редакторе. Это анализ требований, архитектура, проектирование системных взаимодействий, поддержка, развитие. ИИ не умеет брать на себя всю полноту инженерной ответственности: понимать зачем, почему и в каком контексте разрабатывается продукт.
Кроме того, задача программиста - не просто написать решение, а проанализировать его стоимость: насколько оно сложно в поддержке, сколько ресурсов потребует в будущем, сколько будет стоить исправление ошибок и адаптация под изменения. Иногда работа специалиста не в том, чтобы реализовать то, что попросили, а в том, чтобы предложить более дешевую, простую и надежную альтернативу.
Еще один важный момент: ИИ в своей природе в основном "копипастит" уже существующие паттерны кода, но не создает новых абстракций. Создание абстракций требует понимания сути задачи, компромиссов между сложностью и гибкостью, предвидения будущих изменений. Это работа мышления, а не перебора вариантов. Создание правильных абстракций определяет, насколько система будет масштабируемой, понятной и живучей. ИИ пока остается на уровне механического исполнения без глубокого понимания задач.
И наконец: реальные проекты - это не изолированные кусочки кода. Это сложные системы с множеством взаимосвязанных компонентов: базы данных, кэш-сервисы, очереди, микросервисы, балансировщики нагрузки, десятки или сотни серверов. Ошибки в таких системах проявляются не там, где был написан код, а на стыках между частями, под нагрузкой, в редких пограничных случаях. Диагностика и исправление таких ошибок требуют системного мышления, опыта и понимания работы всей инфраструктуры целиком. Пока ИИ не способен взять на себя такую ответственность.
Миф: ИИ сделает всех равными
Кажется, что с ИИ теперь каждый сможет делать то же самое, что и крутой разработчик. Но на практике ИИ становится инструментом в руках человека. Чем опытнее человек, тем лучше он ставит задачи ИИ, проверяет результаты и направляет процесс. Это усиливает разницу между сильными и слабыми разработчиками: кто умеет думать становится еще продуктивнее, кто не умеет, тонет в посредственных результатах.
Миф: ИИ заменит джунов
В этом утверждении зашито представление, что джуны нужны для выполнения каких-то базовых задач с которыми справится любой дурак. Поэтому без ии нам приходилось их нанимать, а вот с ии они больше будут не нужны. Компании нанимают джунов по другим причинам. Они готовы вкладываться в людей, чтобы вырастить из них квалифицированных специалистов. То есть никто не нанимает джуна, для того, чтобы он остался джуном. Тогда это был бы не джун, а вполне себе опытный, но очень низкоквалицированный специалист на низковалифицированную задачу.
Миф: Нужно срочно менять профессию
Как и с любой новой технологией, реальный сценарий это не исчезновение профессии, а её изменение. Появится больше задач по интеграции ИИ в продукты, по проектированию взаимодействия между человеком и машиной, по валидации и контролю качества того, что делает ИИ. Уйдут рутинные задачи, вырастет ценность проектирования, системного мышления и креативности.
Что действительно меняется
* Рутинные задачи действительно будут автоматизироваться.
* Навыки работы с ИИ становятся частью базового набора разработчика.
* Возрастет ценность знаний о системах, архитектуре, бизнесе.
Что вы об этом думаете?
Ссылки: Телеграм | Youtube | VK
В этом выпуске подкаста «Организованное программирование» у меня в гостях Евгений Кот — легендарный эксперт, известный своими увлекательными разборами психологических и социальных тем. Мы глубоко погрузились в тему культурного кода, обсудили разницу в подходах к работе и тонкости взаимодействия в международных командах. Поговорили о том, какое значение имеют софт-скиллы в США, Европе и других странах, и поделились личными историями успешной (и не очень) адаптации к новым профессиональным и жизненным реалиям. Вы узнаете, как выстроить эффективную коммуникацию в многонациональных коллективах, как воспитание и культурные установки влияют на прxофессиональный рост, и почему культурные различия могут стать не только препятствием, но и серьезным преимуществом для вашей карьеры. Не пропустите — вас ждут уникальные инсайты и полезные практические советы, которые помогут вам успешно реализоваться в международной среде!
https://www.youtube.com/watch?v=V0Du67scNvU
Альтернативные ссылки: Аудио | vk
https://www.youtube.com/watch?v=V0Du67scNvU
Альтернативные ссылки: Аудио | vk
YouTube
Почему ваша амбициозность в Европе может обернуться одиночеством | Евгений Кот #42
В этом выпуске подкаста «Организованное программирование» у меня в гостях Евгений Кот — легендарный эксперт, известный своими увлекательными разборами психологических и социальных тем. Мы глубоко погрузились в тему культурного кода, обсудили разницу в подходах…
Как я делаю подкасты?
Не знаю пригодится вам или нет, но поделюсь тем, какой я использую подход для организации подкаста.
Подкаст я делаю не один, у меня есть помощник (буду говорить “продюсер”), который помогает с подготовкой гостей, монтажом и выкладкой подкаста. Это можно делать и самостоятельно, но я бы тратил реально очень много времени. Так что оно того стоит.
Темы и гости
Начальный план был поговорить с друзьями :) Потом уже в процесс стало вырисовываться, что классно идти по языкам, это нравится аудитории. Классно делать дебаты (я планирую несколько в ближайшее время), тут ИИ подтянулся и другие идеи появились. В общем пока оно идет, идей появляется больше чем слотов для вебинаров, поэтому тут все просто.
Что касается гостей, то недостатка в них нет. Я смотрю ребят которые выступали на конфах, других подкастах, много и часто пишут или являются признанными экспертами и адвокатами в их стеке. Ну и друзья конечно :)
Процесс
Выглядит так:
1. я договариваюсь с гостем о подкасте и времени. Заношу все это в спец табличку где есть график записей и отдельный список гостей с контактами
2. Гость бронирует слот и ему в календарь падает мероприятие с ссылкой на памятку, где написаны правила, рекомендации, как подготовиться, как оно будет проходить и так далее.
3. Продюсер высылает гостю форму, в которой гость отмечает как его представить, чем он занимается, какие штуки хочет попиарить и так далее.
4. Продюсер проводит с ними плановый техчек за 3-2 дня. Иногда это приводит к тому, что гость берет таймаут на докупку оборудования или смены локации. Плюс тут же проверяется что была заполнена форма и даются рекомендации по тому, как лучше провести подкаст
5. В день X мы записываемся и прощаемся с гостем
6. Продюсер берет исходники, делает из них аудио и видео версии, иногда (если требуется) дает послушать для доработки и готовит все это добро к выкладке. В этот момент он присылает мне варианты заголовков и описаний на согласование. Тут включается seo и chatgpt.
7. В воскресение с утра подкаст выходит на всех площадках (включая аудио).
8. Я делаю посты в соц сети.
Время
Самый гемморой это договариваться о времени. У всех разные часовые зоны, дети, планы, отпуска. Поэтому я сразу сделал ход конем, создал отдельный календарь под запись с единственным слотом в неделю в cal.com. Ну и просто сбрасываю его гостю, пока договариваемся о подкасте, а гость уже сам вписывается когда ему удобно. Изредка мой слот им не подходит и только в таких случаях мы начинаем договариваться вручную о конкретном дне. Буквально вчера я записал такой подкаст, а вот сегодня уже записываюсь по расписанию (пришлось два раза в неделю, чтобы нагнать график).
Само планирование я делаю раз в месяц-два. Сажусь, выбираю гостей и начинаю всем писать. Обычно после этого календарь забивается на пару месяцев вперед. Кстати, это всегда удивляет гостей, когда они видят, что ближайший слот только через месяц. Далеко не у всех такой горизонт планирования.
Техника
Мы долго искали комбинацию инструментов, которая бы нас устроила и остановились на микрофоне podmic и встроенной в мак камере. Мы сознательно отказались от камеры сбоку, которую часто применяют в записи подкастов. Это довольно сложная конфигурация для нас и гостей, при этом влияние на просмотр подкаста это вроде как не оказывает.
Софт
Стандартная схема записи подкастов это довольно утомительное занятие. Скачать и вовремя и правильно запустить audacity, записывать видео с двух устройств и потом все это залить на файлообменник. Я сразу хотел от всего этого убежать. Перепробовав десяток разных сервисов, мы вернулись к старому доброму стримярду, который за прошедшие годы научился делать локальную запись (то есть интернет как в зуме уже не влияет) и автоматически закачивать ее в облако. Поэтому для гостя и меня запись выглядит так, мы заходим в студию стримярда, жмякаем record и в конце end record. Дожидаемся пока студия скажет что все залито (обычно это происходит моментально) и расходимся.
Для выкладки аудио подкаста юзаем https://transistor.fm/
Не знаю пригодится вам или нет, но поделюсь тем, какой я использую подход для организации подкаста.
Подкаст я делаю не один, у меня есть помощник (буду говорить “продюсер”), который помогает с подготовкой гостей, монтажом и выкладкой подкаста. Это можно делать и самостоятельно, но я бы тратил реально очень много времени. Так что оно того стоит.
Темы и гости
Начальный план был поговорить с друзьями :) Потом уже в процесс стало вырисовываться, что классно идти по языкам, это нравится аудитории. Классно делать дебаты (я планирую несколько в ближайшее время), тут ИИ подтянулся и другие идеи появились. В общем пока оно идет, идей появляется больше чем слотов для вебинаров, поэтому тут все просто.
Что касается гостей, то недостатка в них нет. Я смотрю ребят которые выступали на конфах, других подкастах, много и часто пишут или являются признанными экспертами и адвокатами в их стеке. Ну и друзья конечно :)
Процесс
Выглядит так:
1. я договариваюсь с гостем о подкасте и времени. Заношу все это в спец табличку где есть график записей и отдельный список гостей с контактами
2. Гость бронирует слот и ему в календарь падает мероприятие с ссылкой на памятку, где написаны правила, рекомендации, как подготовиться, как оно будет проходить и так далее.
3. Продюсер высылает гостю форму, в которой гость отмечает как его представить, чем он занимается, какие штуки хочет попиарить и так далее.
4. Продюсер проводит с ними плановый техчек за 3-2 дня. Иногда это приводит к тому, что гость берет таймаут на докупку оборудования или смены локации. Плюс тут же проверяется что была заполнена форма и даются рекомендации по тому, как лучше провести подкаст
5. В день X мы записываемся и прощаемся с гостем
6. Продюсер берет исходники, делает из них аудио и видео версии, иногда (если требуется) дает послушать для доработки и готовит все это добро к выкладке. В этот момент он присылает мне варианты заголовков и описаний на согласование. Тут включается seo и chatgpt.
7. В воскресение с утра подкаст выходит на всех площадках (включая аудио).
8. Я делаю посты в соц сети.
Время
Самый гемморой это договариваться о времени. У всех разные часовые зоны, дети, планы, отпуска. Поэтому я сразу сделал ход конем, создал отдельный календарь под запись с единственным слотом в неделю в cal.com. Ну и просто сбрасываю его гостю, пока договариваемся о подкасте, а гость уже сам вписывается когда ему удобно. Изредка мой слот им не подходит и только в таких случаях мы начинаем договариваться вручную о конкретном дне. Буквально вчера я записал такой подкаст, а вот сегодня уже записываюсь по расписанию (пришлось два раза в неделю, чтобы нагнать график).
Само планирование я делаю раз в месяц-два. Сажусь, выбираю гостей и начинаю всем писать. Обычно после этого календарь забивается на пару месяцев вперед. Кстати, это всегда удивляет гостей, когда они видят, что ближайший слот только через месяц. Далеко не у всех такой горизонт планирования.
Техника
Мы долго искали комбинацию инструментов, которая бы нас устроила и остановились на микрофоне podmic и встроенной в мак камере. Мы сознательно отказались от камеры сбоку, которую часто применяют в записи подкастов. Это довольно сложная конфигурация для нас и гостей, при этом влияние на просмотр подкаста это вроде как не оказывает.
Софт
Стандартная схема записи подкастов это довольно утомительное занятие. Скачать и вовремя и правильно запустить audacity, записывать видео с двух устройств и потом все это залить на файлообменник. Я сразу хотел от всего этого убежать. Перепробовав десяток разных сервисов, мы вернулись к старому доброму стримярду, который за прошедшие годы научился делать локальную запись (то есть интернет как в зуме уже не влияет) и автоматически закачивать ее в облако. Поэтому для гостя и меня запись выглядит так, мы заходим в студию стримярда, жмякаем record и в конце end record. Дожидаемся пока студия скажет что все залито (обычно это происходит моментально) и расходимся.
Для выкладки аудио подкаста юзаем https://transistor.fm/
Статистика прохождений курсов на https://code-basics.com/ru за последние 28 дней. Из очевидного: к праздникам активность падает, а питон традиционно самый востребованный курс. Из неожиданного: ts уделывает js, а c# занимает по популярности аж второе место
Правда надо учитывать, часть курсов есть номинально, то есть внутри уроков то кот наплакал. Но все это можно накоммитить прямо гитхаб: https://github.com/hexlet-basics
Правда надо учитывать, часть курсов есть номинально, то есть внутри уроков то кот наплакал. Но все это можно накоммитить прямо гитхаб: https://github.com/hexlet-basics
В этом выпуске мы поговорили с Борисом Трушиным — учителем математики с 26-летним стажем в «Фоксфорде» и автором популярных YouTube-каналов. Jбсудили, зачем программистам нужна математика, какие навыки она развивает и как алгоритмическое мышление помогает в любой профессии. Разобрали распространённые стереотипы о «гуманитариях» и IQ-клубах, выяснили, почему не стоит сводить образование к запоминанию формул и механическому списыванию задач.
Поговорили о роли родителей и преподавателей в поддержке интереса ребёнка, о том, как важно давать возможность учиться на ошибках и сосредоточиться на понимании, а не на оценках. Затронули тему ЕГЭ: что в нём работает, а что можно улучшить, чтобы экзамен проверял по-настоящему глубокие знания, а не умение «тренироваться под тест». И, конечно, обсудили, чем искусственный интеллект уже сегодня помогает учиться и какие риски несёт будущее, где ChatGPT и подобные системы становятся персональными ассистентами.
Вы узнаете живые истории из школьной практики, получите советы по развитию логики и сможете применить их в подготовке к любому вызову — от собеседования в IT до повседневных задач. Не пропустите — этот выпуск даст вам чёткое представление о том, как математика формирует мышление и какую роль в обучении играет человек и технологии!
https://youtube.com/watch?v=QVOA8QrgJvA
Альтернативные ссылки: Аудио | vk
Поговорили о роли родителей и преподавателей в поддержке интереса ребёнка, о том, как важно давать возможность учиться на ошибках и сосредоточиться на понимании, а не на оценках. Затронули тему ЕГЭ: что в нём работает, а что можно улучшить, чтобы экзамен проверял по-настоящему глубокие знания, а не умение «тренироваться под тест». И, конечно, обсудили, чем искусственный интеллект уже сегодня помогает учиться и какие риски несёт будущее, где ChatGPT и подобные системы становятся персональными ассистентами.
Вы узнаете живые истории из школьной практики, получите советы по развитию логики и сможете применить их в подготовке к любому вызову — от собеседования в IT до повседневных задач. Не пропустите — этот выпуск даст вам чёткое представление о том, как математика формирует мышление и какую роль в обучении играет человек и технологии!
https://youtube.com/watch?v=QVOA8QrgJvA
Альтернативные ссылки: Аудио | vk
YouTube
Математики vs. гуманитарии в IT-профессиях | Борис Трушин #43
В этом выпуске мы поговорили с Борисом Трушиным — учителем математики с 26-летним стажем в «Фоксфорде» и автором популярных YouTube-каналов. Обсудили, зачем программистам нужна математика, какие навыки она развивает и как алгоритмическое мышление помогает…