Анна Буянова (Anna Codes)
407 subscribers
83 photos
2 videos
1 file
154 links
Бэкенд-разработчица (Ruby). Иногда делаю образовательные проекты.

Личный канал о разработке ПО, программировании (на Ruby и не только), образовании в it.

лс: @lightalloy
Download Telegram
Слоёная модель конкурентности в Ruby, прекрасное описание и визуализация
Отсюда

#ruby@anna_codes
👍61
Ruby Newbie

В ноябре я закончила работу над курсом по Ruby (он же мой дипломный проект для магистратуры).
Хочу закрыть этот этап, поэтому расскажу чуть больше о курсе и его результатах.

Уже рассказывала на онлайн-митапе, но хочется зафиксировать и в текстовом виде.

Первая часть про идею и что курс из себя представляет.

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

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

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

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

Чему можно было научиться?
- использовать инструменты разработчика (консоль, гит, редактор и тд)
- писать простые программы на руби
- создавать, проектировать базы данных (sqlite), писать запросы (на минималках)
- писать простые веб-приложения (пробовали rack, синатру, rails)

В качестве теории в основном давала статьи из октрытых источников.
Для практики - местами так же подбирала упражнения из открытых источников, часть делала сама (тоже вдохновляясь источниками :)

Например, по бд брала за основу своё прошлое занятие по реляционным субд; по ruby on rails просто прошли туториал из гайдов; написали игру на ruby2d (похожую на ту, что в книжке про геймдев на Ruby, но без gosu); по raсk и синатре - написала небольшие туториалы.

Конечно, за 12 недель все эти темы глубоко не изучить, особенно занимаясь всего по 3-4 часа в неделю. Основаная активность была на синхронном занятии, на самостоятельную работа большинство тратило от нуля до пары часов в неделю (кто тратил - молодцы, эффект был лучше 💪)

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

Инструкции к курсу открыты, на гитхабе (предлагайте свои изменения в пулл-реквестах).

#магистратура@anna_codes #ruby_newbie@anna_codes #моё@anna_codes
❤‍🔥12🔥10👍3🎉31
👩‍🎓 Ruby Newbie. Результаты курса 👩‍🎓

Первая часть, о самом курсе, тут

К сожалению, далеко не все приступили к обучению. Примерно 40% не дошли до начала курса. В принципе это не редкость, даже на платном обучении такое бывает. Сначала нам интересно и мы рвёмся учиться, а потом оказывается, что обучение не вписывается в жизнь или возникают форс-мажоры.

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

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

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

Многие отметили, что понравилось делать игру, хотя я сомневалась в этой идее: ну что там, лупим по фигурке и считаем кол-во попаданий ))
Делали с использованием ruby2d: это хороший гем, чтобы "поиграть" и для обучения "от успеха", быстро видно результат. К сожалению, совсем заброшена: pr не ревьюят, нет активности в issues (хотя последние изменения были не очень давно). Но для обучения использовать это не помешает, краткая и понятная документация.

Ещё из полезного - универсальные навыки (кроме Ruby), но именно на этом курсе хотелось бы, чтобы в Ruby было больше заинтересованности.

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

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

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

Что бы я точно поменяла, если бы проводила ещё один запуск: добавила бы этап отбора, возможно, в формате прохождения 1-2 уроков самостоятельно. Либо просто увеличить группу и рассчитывать на то, что они отвалятся.

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

Возможно, интереснее будет сделать другие проекты (например, мастермайнд или книжный клуб) - когда я это осилю :D

Репозиторий с материалами , можно делать свои предложения в виде pr.

#магистратура@anna_codes #ruby_newbie@anna_codes #моё@anna_codes
👍2312❤‍🔥11
Посмотрела keynote Матца на Rubyconf 2024, он впервые с 2019 года выступил офлайн.
Просмотров примерно, как у меня на "Как я делала курс по Ruby" (это потому что руби умер? но у меня тоже по руби...)

Рассказал о важных изменения в Ruby на протяжении всей истории:

От:
- YARV (Yet Another Ruby VM) (2007, ruby 1.9), который в своё время в 4-5 раз ускорил выполнение кода

Через:
- поддержку юникода (2013)
- изменения работы Garbage Collector'а
- и другие важные (ракторы, yjit) и не очень важные (single-line def :) штуки

До:
- Ruby.wasm (руби в браузере) и prism (новый парсер Ruby)

А что в следующих версиях Ruby?

Обещает изолированные пространства имён (refinements+packages). Хотели в Ruby 3.4.0 , но Сатоши был занят, поэтому в 4.0
Посмотрим, как будет реализовано

Долго рассуждает про Automated Typing . Предполагает, что скоро это будет прошлый век - писать типы руками, сравнивает статическую типизацию с МКПП, типа сейчас уже редко встретишь.

Тем временем, я вожу только механику и даже не пробовала автомат. Никогда не приходила в голову эта аналогия, поэтому особенно понравилось.
Статическую типизацию тоже мало пробовала, и не в коммерческом коде, вот такое противоречие.

А как у вас насчёт акпп/мкпп и динамической/статической типизации? 😏

Следующий доклад хочу про ракторы посмотреть.
А вот ещё про GVL хороший.

Весь плейлист

#ruby@anna_codes
👍12👾3🔥1
Посмотрела доклад Коичи Сасада про ракторы.

Не так много нового про сами ракторы, зато дал хороший "рефрешер" о проблемах параллелизма :

Чем отличается параллельное выполнение от конкурентного?
- одновременное выполнение vs переключение между несколькими задачами

GVL/GIL в Ruby:
- ограничивает одновременное выполнение потоков, за счёт этого избавляет от многих проблем параллелизма
- иногда параллельное выполнение возможно, если один из потоков выполняет I/O операцию

Что за ракторы и зачем они?
- Руби-акторы
- появились в Ruby 3.0 (2020)
- для параллельного выполнения кода
- у каждого рактора есть свой GVL: потоки внутри одного рактора будут работать в основном конкурентно, а не параллельно.
А вот потоки внутри разных ракторов могут выполняться параллельно.

Почему нельзя просто взять и выполнять Руби-потоки параллельно?
(с точки зрения разработчиков языка)
- у потоков, запущенных в рамках одного процесса, общее пространство памяти, нужно следить за shared mutable objects, а это сложно
- в руби много shared mutable стейта + основные структуры типа строк и массивов не потокобезопасные

Есть мнение из 1995 года, что нужно вообще запретить параллельное выполнение потоков, т.к слишком сложно следить "вручную" (смотрите картинку :)

Какие есть варианты избавиться от сложности?
- запретить мутабельные объекты (elixir/erlang)
- отслеживать с помощью типов (Rust)
- ограничить mutations (clojure)
- отслеживать мутации и лочить внешними средствами (clang, helgrid/valgrind)
- запретить шарить объекты, форкать процессы (shell, druby)
- отделить shareable и не shareable объекты - Ракторы!

Что относительно нового:

- M:N планировщик тредов, появился в Ruby 3.3.0
M руби-тредов теперь "мапятся" на N тредов ОС, (N = количество ядер, M > N)
Описание в трекере
По умолчанию M:N планировщик в главном ракторе выключен, тогда всё работает, как обычно: 1 рубишный поток соответствует одному потоку ОС.

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

Интересно, дойдёт ли когда-нибудь до production-ready 🤔
Но надо понимать, что мы всегда в ракторе - посмотрите Ractor.current.

Можно глянуть планы и обширный список проблем с ракторами в трекере

#ruby@anna_codes
👍6❤‍🔥4🔥43👏1
Привет!

Давно не стримили. Теперь давайте про Ruby.

Обсудим, куда идёт Ruby, а куда рельсы:
- что нового обещают в руби
- идеи dhh, one-person framework
- рельсовый фронтенд
- ИИ + руби
- is ruby dead
- куда перекатываться, если что 😁

Буду с подругами: мы с Катей рубистки, Олеся разрабатывает платформу для интерактивных курсов по музыке с бэкендом на Ruby on Rails.

В воскресенье 27 апреля, в 16:00

Заходите послушать и поговорить. После - афтепати на свободную тему

#стрим@anna_codes #ruby@anna_codes
🔥14❤‍🔥83👍3
Статья для подготовки к стриму "Rails: when "nothing changed" is the best feature"😏

Порадовала цитата про падающий нокогири:

Recently I had to implement a tiny backend app. I dusted off Rails and everything was the same. Same commands, same gems, even nokogiri crashed the same way during bundle install, just like 10 years ago…


И коммент от Матца. Завтра обсудим )

#ruby #rails
8❤‍🔥1👍1
Привет!

Пока готовилась к стриму, узнала, что в апреле была RubyKaigi и там было много интересного.

Например, Matz всё-таки анонсировал Ruby 4.0 в этом году.
На всякий случай сделал это 1 апреля, чтобы если что, сказать, что шутка ))

Ещё рассказывал про Ruby и AI

Из того, что обещал в прошлом году:
Изолированные пространства имён , презентация
Бинарники из руби - на уровне игрушки, но и Матц упоминал в виде "мечты"

Мне показалось, много низкоуровневого, но может на РубиКайги всегда так. Кто был? )

Пока записей докладов нет, но можно посмотреть тенденции и некоторые презентации:

Типизация
rbs via tests
steep
sorbet

JIT
YJIT , презентация
ZJIT

IoT/микроконтроллеры
mruby/c and data-flow programming for small devices
MicroRuby
PicoRuby

Ракторы/GC
Toward Ractor local GC

Оптимизация Ruby
JRuby
Low-level Ruby Observability APIs

Ускорение Class#new

Расписание

Есть что-нибудь интересное? Keynote от Матца точно надо будет глянуть

#ruby@anna_codes
11👍5🔥51
Интересный доклад от Ирины Назаровой, СЕО Evil Martians.

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

Рассказывает, почему новые стартапы выбирают руби и рельсы. Точнее сами основатели рассказывают.
Всё как мы любим - продуктивность, developer experience, близость к бизнесу.

Также уделила время ai-инструметам для руби и рельсовому фронтенду (hotwire, rubyui, инерции)

Ещё понравился интерактив с poll everywhere, тоже рубишным. Надо попробовать )

Выбрали бы рельсы для своего нового стартапа? 😏

#ruby@anna_codes
👍10💯2❤‍🔥1
На самом деле основная мысль другая )
Я посмотрела половинку, не очень удобно на японском. Можно послушать, если вы учите японский или фанатеете от Матца.

А вот краткое содержание keynote от Perplexity:

1. Reverse Alpha Syndrome (Обратный альфа-синдром)

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

2. Роль ИИ в программировании

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

3. Каким должен быть язык программирования для эпохи ИИ?

- Python — очевидный ответ, но речь не об этом.
- В будущем программирование всё больше будет напоминать общение на естественном языке: мы будем формулировать задачи "по-человечески", а не только писать код.
- Однако, как и в математике, иногда нужен формальный, точный язык для сложных идей — поэтому программные языки не исчезнут.

4. Статическая типизация и ошибки


- Сейчас статическая типизация (как в C, Java) помогает быстрее находить ошибки.
- Но если ИИ станет достаточно умным, возможно, такие ошибки будут автоматически исправляться или предотвращаться.
- Главная ценность языков — не только в типах, но и в удобстве, выразительности, удовольствии от программирования.

5. Критерии идеального языка для ИИ-эры


- Простота — лаконичность, минимум лишнего.
- Выразительность — возможность ясно и коротко выражать сложные идеи.
- Масштабируемость — язык должен подходить и для маленьких скриптов, и для больших промышленных проектов.
- Поддержка DSL (Domain Specific Languages) — возможность создавать "языки внутри языка" для разных задач.

---

Заключение

- Не стоит бояться ИИ, но важно помнить о балансе: не становиться "слугой" машины.
- Выбирайте инструменты, которые делают вашу работу интересной и приятной.
- Ruby создавался ради удовольствия от программирования — и это должно оставаться главным критерием!

#ruby@anna_codes
👍127