Документ с напътствия за инструктори и организатори на Rails Girls Sofia 5.0, 23-24 октомври 2015 г., връзки към ресурси, бележки, уточнения и прочее.
Съдържание:
- Елате в 18:30 в петък и в 9:30 в събота. Академията на Телерик - бул. "Ал. Малинов" 31 (сватбен мол "Булевард", етаж 2, зала "Ultimate").
- Логнете се в Nitrous.io с данните, които трябва да са ви изпратени на имейл и го разцъкайте. Създайте Ruby on Rails контейнер и workspace във всеки потребител, който ви е изпратен.
- Прочетете правилата за How to train a robot.
- Прочетете In HTML We Trust.
- Ще се движим по тази презентация: bit.ly/railsgirlssofia5 (кодът ѝ в GitHub) - прочетете я.
- Цялата необходима документация на Sinatra е в това one-page README.
- Ползвайте тези bit.ly/railsgirlscheatsheets.
След това прочетете това ръководство.
Стартира в края на 2010 година във Финландия, като еднократно събитие, но бързо набира популярност. Днес – вече стотици събития в над 130 града по цял свят.
В България го организираме за шести път (направихме едно издание във Варна тази година). Интересът е винаги голям.
Между другото, ако харесвате идеята на събитието – винаги се търсят помощници за организацията на следващите събития, в и извън София :)
Петък вечер и събота, 23-24 октомври 2015 г.
Ще бъде в Академията на Телерик - Младост 1А, бул. "Ал. Малинов" 31 (сватбен мол "Булевард", етаж 2, зала "Ultimate"). Има места за паркиране около сградата – отпред са малко, препоръчва се да спрете отзад, вижте карта тук.
Петък от 19:00 до 21:00 и събота от 10:00 до около 18 ч. Програма тук.
Екипът ще е там по-рано в петък (около 16:30 ч.), за да се подготви залата. Ако можете да сте там по-рано, елате, ще има с какво да помогнете.
Спонсори и партньори са:
- Уникредит Булбанк
- Майкрософт
- Суперхостинг
- Телерик
- Mtel
- VMWare
- Questers
- Code Runners
И други.
Принтираме name tags, стикери, тениски, торбички, плакати. Спонсорите също предоставят рекламни материали, листи, химикалки.
Начало - събота, след събитието – 20:30 ч. Цел - социализация, особено между участниците, за да помогне за създаването на общност.
Ще е в Ink Bar, до спортната палата.
За участничките и инструкторите ще има по едно питие от спонсорите. Въпреки, че е ден преди избори за кмет в София, общината е взела решение консумацията на алкохол да не е забранена.
Да запалим участниците.
Да им покажем, че технологиите и програмирането не са изобщо толкова страшни и необятни, колкото изглеждат на пръв поглед и че това не е занаят само за богоизбрани, или за хора с бради. Че в умели ръце, технологиите се превръщат в могъщ инструмент за постигане на невероятни цели и – защо не – за промяна на света.
Ще следваме предварително дефинирана програма. Хубаво е да се стигне до крайната цел - работещо приложение, но не на абсолютно всяка цена. По-важно е у участничките да бъде събуден интерес от нещо, което им е доставило удоволствие – дали ще е писане на HTML и CSS, или ръчкане в Ruby, или промяна по приложението – това трябва вие да усетите. Бъдете гъвкави.
Петя Панайотова е една от участничките. Завършила е журналистика в Софийския университет "Св. Климент Охридски" и казва следното в мотивацията си:
"Интересът ми към уъркшопа се дължи на все по-осъзнатия ми интерес и отношение към програмирането и технологиите. Възможностите и предизвикателствата, които те предлагат, са все по-привлекателни за мен. Наскоро гледната ми точка към програмирането се промени, като това разбира се не стана изведнъж. Осъзнах, че в училище съм си създала погрешна и ограничена представа (не без ""съдействието"" на програмата по предмета, начина на преподаване и липсата на ефектива комуникация с преподавателя) за процеса на програмиране и това, което може да се постигне чрез него. Тази негативна гледна точка се е дължала на неразбиране и незадълбочен поглед. (...)"
Тези предразсъдъци и грешни представи са едни от основните проблеми, които е добре да адресираме.
Най-важното нещо са времето и мотивацията на участниците. Това е ресурсът, който в никакъв случай не трябва да пропиляваме и към който трябва да се отнасяме с изключително внимание.
Всички ние, като инструктори, имаме тежката задача да преглътнем гордостта и егото си. Не е важно ние да блеснем с нещо – важно е да се движим към основната цел на събитието и да се грижим участниците да се чувстват комфортно.
Ако не се набива на очи, че помагате, но нещата вървят – значи сте си свършили работата перфектно.
Групите са по две участнички на инструктор. Ще има групиране и разпределение и ще ви бъде изпратена информация за участничките и тяхната мотивация и бекграунд веднага, щом списъкът е ясен.
Възможно е да има такива, които да не дойдат. Допускаме малко размествания по време на самото събитие.
Ако ми пишете с желание да сте инструктор на конкретен човек, ще опитам да ви изпълня желанието.
Извадки на много, много важни моменти от ръководството за инструктори, което всеки трябва да прочете преди събитието:
- Ask students "What do you want to get out of class?" (Всеки инструктор ще получи информация за участниците си - мотивация, информация за опит, данни за контакт и др. Целта е да се настроите максимално на правилната честота.)
- Assume that anyone you're teaching to has 0 knowledge but infinite intelligence
- Admit your ignorance
- Tell people it's ok to make mistakes
- Try to avoid technical jargon
- Don't say "any questions?"; say "What questions do you have?"
- Get the students talking to each other
How to introduce yourself to the class:
- tell your story
- tell why you like programming and teaching.
- beware of bragging
- tell why you care! Why are you getting up on saturday morning to come in here?
Pace:
- Slow down! Wait much longer than you feel is comfortable for questions/comments
Темата е спорна. В ръководствата на Rails Girls насърчават copy/paste, докато има хора (включително и моята първоначална реакция), които смятат, че не трябва да се използва copy/paste.
В крайна сметка, всичко зависи от целите и времето, с което разполагаме. Някои команди на конзолата, особено тези за генериране на scaffold с определени полета, са доста дълги и дори един сбъркан символ ще доведе до нуждата от пренаписване на командата. Това отнема време и човек трябва да прецени доколко инвестираното време ще има възвращаемост и дали не е по-добре да се инвестира в обяснения на по-високо ниво.
За нашите конкретни цели - да запалим интерес и предвид времето, с което разполагаме, copy/paste се препоръчва, особено ако командата е повече от една-две думи. За кратки команди може да ги карате да ги пишат.
Метафорите са силно оръжие, но са и нож с две остриета. Лоши метафори може и да навредят. Помислете предварително за някои, използвайте ги.
Някои примери:
- MVC = Магазин: витрина, служител, складово помещение
- Бази данни = Excel файл; таблици = sheet в Excel файл
- HTML, CSS, = плодова торта с различни слоеве (тук е описано)
Ако имате добри идеи, правете PR и допълвайте този списък.
Много добра реплика при възникване на проблем е, "Чудесен проблем!", "Колко интересен проблем!", "Чудесна възможност да научим нещо ново" и прочее.
Ролята на инструктора е да напътства участничките. Избягвайте просто да им решавате проблемите и да им давате директно отговор, дори след това да го обясните. Оставете ги първо да се помъчат сами. Например, ако допуснат грешка някъде, вероятно естествената им реакция ще е „Ами, не става.“ Накарайте ги да прочетат грешката. Научете ги как да извлекат ценната информация от съобщението за грешка. Посъветвайте ги за какво да търсят в Google. Питайте ги „Какъв може да е проблемът?“ Насърчете ги и ги оставете да помислят.
С други думи, много по-ценно е да им подскажете какъв е процесът на програмиране и решаване на проблеми (четене на документация, мислене, писане на код, четене на грешки, мислене, писане на код, четене на грешки, ровене в Google/StackOverflow и т.н.)
Тънкият момент тук е, че не всеки проблем си заслужава да бъде борен по време на Rails Girls събитие, поради ограничението във времето и неща, които откровено излизат много извън обхвата на материала. Ваша роля е да прецените кои проблеми са подходящи за решение от тях и кои не са на този етап. Също така, ако усещате, че участничката се фрустрира твърде много от проблема, помогнете повече, или направо дайте решение.
Както споменахме и в секцията за реакция при проблем, оставете участничките да правят нещата сами и избягвайте да им показвате и обяснявате само вие.
Програмата е тук: http://railsgirls.com/sofia#schedule
Елате максимално рано, по възможност да не е след 18:30. Екипът ще е там от 16:30, тъй като има нужда от подготвителни действия. Ще съм благодарен на всеки, който успее да дойде по-рано, за да помага.
Начало: 18:30 Време: около 30 минути
Започва официално в 18:30. Ще я поеме някой от организационния екип. Инструкторите трябва да са по местата си, за да може да се запознаят с новодошлите, да разчупят леда и, ако им е скучно, да се мине на стъпка "Среда за разработка".
За да бъде максимално стройна организацията и да не се лутат хората, съм подготвил предварително разпределение на участничките по инструктори.
Всички инструктори трябва да имат name tags, надписани с червен маркер. При регистрация, всяка участничка ще бъде информирана как се казва нейният инструктор и ще трявба да го намери. Инструкторите ще сте подредени по азбучен ред в залата и участничките ще трябва да направят двоично търсене :)
Участничките ще имат name tags, надписани с черен маркер.
Начало: около 19:00 Време: около 20 минути
Очаква се към 19-19:10 да направим официално откриване. Ще има няколкоминутни изявления от някои от спонсорите и организаторите, както и приветствия и разяснения от мен. Възможно е да се проточи малко. След това ще преминем към играта.
Начало: около 19:20 Време: около 30 минути
След инсталацията ще преминем към играта "How to train a robot". Ще се движим по обяснителния блог пост на Ира и по инструкциите в тази презентация.
Накратко, участничките пишат съвкупност от команди на хартия, формиращи програми. Командите са предварително дефинирани. Командите управляват инструктора, който играе ролята на робот и се движи в "лабиринт", очертан с тиксо на пода. Роботът разбира само предварително дефинираните команди, само в определен ред. Трябва да са изрично разписани, не могат да се използват съкращения и неща като "... x 2". Роботът "хвърля изключения" (вие преценете как) при изчерпване на програмата, преди достигнане на целта (хартиено кексче), удар в стена, неправилна последователност на командите (вж. по-долу) и прочее. След хвърляне на изключение, започвате отначало.
Цели:
- Участничките да усетят болката от повторение на команди, за да могат да стигнат естествено до нуждата от абстракция - функция и евентуално цикъл. Тя се вкарва на следващ етап, след няколко опита за писане-изключение-дебъг-писане-изключение-дебъг.
- Да свикнат с идеята, че да грешат е не само нормално, а е съществена част от процеса ни на работа. Не е нужно, а е и невъзможно, да се напише програма от първия път, която да работи и да няма какво да се промени в нея. Цикълът експеримент-грешка е безценен за бързо достигане до качествено решение.
- Вкарване на две абстракции по естествен път - 1) функции, 2) цикли. След достигане на крайната цел веднъж, се започва дискусия какво им пречеше и какво им беше трудно/досадно. Какво биха искали да се промени в изразните средства, с които разполагат. Вкарват се абстракциите функция и/или цикъл. По възможност първо функция, след това още една итерация за цикъл. Допустимо е и двете наведнъж, ако нещата се стекат така.
- Да се насърчи колаборацията между участничките - те пишат програмата заедно.
PS: Добро въведение в играта би било:
"People think computers are really smart, but they aren't. A computer's a box with an IQ of 5, that just happens to be very good at crunching numbers very quickly. But it doesn't know how to think or how to reason. All it does is exactly what the program tells it to, without regards for the consequences of its actions. If it had legs, you could program it to jump out the nearest window, and it would do exactly that. Then you'd really see the system crash!
With that in mind, programming is basically about figuring out how to represent real-world problems as numbers for a computer to crunch, and how to explain the issue to a box with an IQ of 5 clearly enough that it will do what you want done."
Разрешени команди (по една на ред, или разделени с точка и запетая):
left step
right step
left turn
right turn
squat
pick object
stand up
Командите трябва да се изпълняват в определен ред. Ограничения и дефиниции:
- Начално състояние: намирате се изправени, в началото на пъзела, двете ви стъпала са едно до друго.
- Една "стъпка" не е крачка – премества ви точно едно стъпало/стъпка напред. Опирайте петата си в пръстите на другия крак. Тоест, когато двата ви крака са един до друг,
right step
мести десния крак пред левия, като петата на десния опира/е на нивото на пръстите на левия крак. След това трябва да следваleft step
, с което двете ви стъпала отново застават едно до друго. Тоест,right step + left step
ви мести точно една стъпка напред. left step
илиright step
може да се направи само когато двете ви стъпала са едно до друго.- Не можете да направите
left turn
илиright turn
, ако двете ви стъпала не са едно до друго. - При turn, просто се завъртате около оста си на 90 градуса в съответната посока. Двете ви стъпала остават едно до друго.
- Не може да има два пъти последователно само
left step
или самоright step
. pick object
"работи" само ако обектът (кексчето) е в радиус от около една стъпка от робота и ако роботът е приклекнал. Иначе се хвърля изключение.- Целта е изпълнена след
pick object
иstand up
, т.е.pick object
трябва да има timeout, след който да гърми, ако не следваstand up
:)
Добра идея е при изпълнение на командите да прочитате всяка команда, която изпълнявате в момента, с монотонен, безизразен, компютъризиран глас.
Общо-взето, настава един забавен хаос.
Начало: около 19:50 Време: около 10-15 минути
Вместо да се инсталира необходимия за разработка софтуер, ще ползваме cloud-базираната среда Nitrous.io.
За тази стъпка има секция в ръководството за участничките – bit.ly/railsgirlssofia5.
Безплатната регистрация от България все още не е активна и има предварително създадени и активирани акаунти, които трябва да сте получили. Ако не сте, питайте някой от екипа. Преди самото събитие се логнете в Nitrous с всеки от акаунтите и създайте Ruby on Rails workspace и контейнер, тъй като това отнема няколко минути. Самите акаунти ще си останат за участничките впоследствие.
Метафора: Всеки майстор има нужда от определен набор инструменти и си има собствена работилница, в която твори. Вместо да ви караме да отделяте време, за да се снабдите с всички необходими инструменти и да си обзаведете собствена работилница специално за това събитие, ние ще ви дадем достъп до една готова такава, под наем – това е услугата Nitrous.io.
Когато участничките се регистрират и влязат в Nitrous.io, може да им обясните какво всъщност замества тази услуга – редактор, терминал/конзола, файлова система, стартиране на процеси.
Ако прецените, че на операционната система на участничката ще е лесно да се инсталира необходимият софтуер, вижте секцията "Инсталация" в това ръководство.
Единственото нещо, което може да свалите, е Notepad2 (директен линк, x86), за да е цветен HTML-ът, който ще показвате в следващата секция. Други инструменти, които може да ползвате, са Sublime Texxt и Atom. Вие трябва да решите каквъв редактор ще бъде използван, но отделете няколко минути, в които да обясните какво е среда за разработка, какви налични инструменти за разработка на Ruby on Rails съществуват и защо предпочитате Sublime пред Атом, например. Силата на Notepad2 е че много наподобява вградения в Windows Notepad, с тази разлика, че кодът е цветен. Няма излишни неща, които да разфокусират дискусията.
За тази стъпка има секция в ръководството за участничките – bit.ly/railsgirlssofia5.
Съботният ден ще започне с кратък лекционен увод в програмирането, след което ще упражните тези неща с участничките. Преди да се стигне до програмиране изобщо, ще има кратка (ок. 30-60 мин.) загрявка с HTML и CSS. Тази загрявка ще започне още петък вечер.
Обяснението за HTML и CSS вероятно ще започнете още петък вечер, след играта с роботите. Не е нужно да го завършвате докрай. Ще може да продължите с това на следващия ден, в първата workshop сесия.
Идеята е участничките да свикнат какво е HTML (съдържание и структура) и какво е CSS (цветове, шрифтове, размери, отмествания, фон, шаренко). Да разберат, че HTML е технология (не точно език за програмиране), която е градивното блокче на интернет, на нея стъпва визуализацията на всички сайтове - това е, което се точи по жицата до нашия компютър.
Как:
Давате обещание на участничките, че след половин час ще са написали първата си уеб страница, на HTML (ако вече не са писали, разбира се; добре е да ги питате преди това). Започвате с един обикновен тесктов редактор, примерно Notepad, в който да пишат текст и да запазят файл като .html
. Внимание - на Windows е добре да изключите опцията, която крие разширенията на файловете - инструкции тук. Текстът може да е част от нещо, което да стане като страничка-визитка на участничката. Нещо такова (този HTML го има и в ръководството за участничките, за да не трябва да го помните):
<!DOCTYPE html>
<html>
<head>
<title>Dimitar Dimitrov</title>
</head>
<body>
<h1>Hi, I'm Dimitar!</h1>
<p>I'm a software developer. I mostly do web programming with Ruby on Rails.</p>
<p>I like to:</p>
<ul>
<li>Read. Who doesn't? But can we find the time?</li>
<li>Travel.</li>
<li>Solve problems.</li>
<li>Learn stuff.</li>
</ul>
<p>
<a href="mailto:[email protected]">Get in touch</a>
</p>
<p>
<img src="http://gravatar.com/avatar/9d3a04d8252ce89d5edbb0268af7ad8e?s=100" alt="That's me.">
</p>
</body>
</html>
План за обяснения (вмъкнат е и в ръководството за участничките, за да не трябва да го помните):
- HTML са командите, с които караме браузърите да рисуват неща по екрана. Суха дефиниция. След малко ще я илюстрираме.
- HTML е просто текст. Всеки текст е и HTML. Започва се с обикновен текстов файл, с разширение
.html
. Може да ползвате Notepad, или Notepad2, инсталиран в предишната стъпка, като направите уточнението, че и с Notepad става, просто с Notepad2 е цветно. Плюсът на Notepad е, че може да се демонстрира как само с вградените в операционната система инструменти, човек може да твори HTML. Бонус е когато впоследствие HTML файлът бъде отворен с по-умен редактор и когато се покаже оцветяването и нещата, които редакторът дава. Във файла участничките си пишат името на първия ред, оставят празен ред и пишат едно-две изречения за себе си. Може пак на отделни редове. Файлът се отваря с браузър. Всичко се вижда, но е на един ред. Изводи - какво значи whitespace-а за HTML (а и какво е "whitespace"). - HTML таговете са начални и крайни маркери. Задават структура. Имат сурова визия по подразбиране. Нека оградят първия ред - с името си - с
<h1>
таг. Може да го напишете на хартия, за да видят отварящия и затварящия таг и с какви скоби са. Може да им отнеме малко време да намерят символите на клавиатурата. Добре е те да си напишат тага. Запазете файла и презаредете браузъра. Обсъдете резултата - името е с големи букви и е на отделен ред. Вкарайте<p>
след това. Споменете за различните видове h1, h2, ... - Може да покажете таговете за линк, картинка и нов ред. Обърнете внимание, че таговете
<img>
и<br>
са едни от малкото, които нямат съответен затварящ им таг. Като покажете нов таг, дайте мнемоника, с която да го запомнят (img
= image,br
= (line) break,p
= paragraph,h*
= heading,a
= anchor и т.н.) - Браузърите са толерантни към невалиден HTML – това, което сме създали, формално погледнато, е само парченце от цялостен HTML документ и е невалиден такъв документ, според формалната дефиниция. Но работи. Кажете какво друго има обикновено в един валиден HTML документ –
<html>
,<head>
,<body>
. - CSS е за визия, оформление, шарено – HTML е създаден 1993 г., а CSS - 1996 г. Първоначално е имало само HTML. Покажете един сайт с включен CSS и с изключен CSS – каква е разликата, как се вижда "голият" HTML. За да може да изключите CSS-а, ще трябва да инсталирате Web Developers toolbar за Chrome/Firefox. Там има "disable stylesheets" опция. Алтернативно, в Google Chrome, може да отворите вградения developer tools, да отидете на таб "Sources", там в дървото вляво да намерите CSS документите и в текста вдясно да изтриете кода. Определено покажете CSS Zen Garden - идеята на този сайт е, че HTML-ът е един и същ, но има различни CSS стилове, които коренно променят визията. Има линкове в самия сайт към алтернативни дизайни.
- При наличие на време и желание, може да покажете как изглежда един CSS документ и да обясните двете основни неща вътре: селектори (selectors) и правила (properties). Правилата задават конкретен визуален стил – цвят, шрифт, фон, размери и прочее. Селекторите пък указват за кои парчета от HTML да важи този конкретен визуален стил.
Не е нужно да се запомня всичко това, но ще е полезно за по-лесно ориентиране впоследствие.
Отново, не е нужно да приключвате с тази стъпка петък вечер, може да продължите и събота. Добре е все пак обясненията да имат някакъв завършен вид, преди да се разотидат хората петъка.
Начало: около 20:55 Време: около 5 минути
Към 21 ч. спираме с другите занимания за деня, събираме се и правим един #Friday Hug. Може да сте виждали груповата снимка от някое от предните издания.
След това разпускаме народа да се наспи за утрешния ден.
Участниците започват да се събират от 9 ч. Ще има кафе и кексчета, плодове или нещо подобно. В 10 ч. е началото на втория ден.
Начало: около 10:10 Време: около 40 минути
Уводни думи, отново няколко думи за спонсорите, програма за деня, що е то "Rails Girls", какви са целите на събитието и какво да очакват участниците.
След тях уводната презентация ще продължи с един блиц-увод в програмирането и програмирането за уеб и напътствия за дизайн на уеб приложения. Би трябвало да приключи към 10:50.
Начало: около 10:50 Край: 13:00
Веднага след презентацията топката отново е във вашето поле и продължавате с ръководството за участничките.
Продължете от там, до където сте стигнали предната вечер. Ако имате да довършвате обяснения за HTML и CSS, продължете от вчера. Може да направите кратък (2-3 мин.) преговор, за да затвърдите някои основни неща. Ако не сте започвали с HTML и CSS, вижте секцията "In HTML We Trust" за напътствия за какво да говорите.
Може да е по-удачно преди да довършите HTML и CSS обясненията, да минете през примерите с Ruby, защото ще им е прясно от току-що приключилата лекционна част.
Начало: 13:00 Време: около 30 минути
Обядът ще е на място и е осигурен от спонсорите.
Начало: 13:30 Време: около 15 минути
След обяда ще направим Bentobox упражнението (слайдове, видео). Целта му е да покаже на учсатниците как да се ориентират в морето от термини и специфичен жаргон. За тази стъпка ще давам инструкции на място и няма нужда от особено сериозна подготовка от ваша страна.
Другата съществена цел е да се успокоим след обяда и да увеличим нивото на концентрация.
Начало: 13:45 Време: около 30 минути
След Bentobox ще има сесия от 6-8 кратки (около петминутини) презентации.
Събирам предложения за желаещи да говорят и темите им. Пишете до [email protected] с предложенията си. Вижте миналогодишните теми за вдъхновение.
Към момента имаме следните теми и предложения:
Силно препоръчителни са истории пред (суха) теория. Това прави впечатление и се запомня. Мотивационните и забавни, неангажиращи презентации са много подходящи.
Начало: около 14:15 Край: около 18:00
След lightning talks продължаваме с workshop сесията и с работата над приложението. Това ще продължи до края на събитието. Вероятно ще направим кратка кафе-пауза и почивка към 15:45 (ок. 15-20 минути).
Към 18:00 ч. закриваме събитието. Ще има не повече от 10-15 минути заключителни слова и напътствия.
Начало: след 20:30 Място: Ink Bar, до спортната палата
По едно безплатно питие за екипа, инструктори и участнички.
Туитене и шерване на снимки и текст във Facebook се насърчава. Официален хештаг: #RailsGirlsSofia.
Имаме доста пълно ръководство за това как да продължи човек след събитието. Въпреки това, може да се разшири и да се добавят още ресурси. Най-малкото има нови материали, които трябва да се добавят. Трябва обаче да внимаваме да не стане overwhelming.
Хората не продължават да се занимават много - сами им е трудно, или пък им липсва достатъчно мотивация. Затова имаме идеи.
Ще разкажем за study групите и колко успешни са се оказали те – регулярни ежеседмични срещи, на които да присъства поне един инструктор и желаещи участници, както от това, така и от минали Rails Girls събития, включително и хора, които не са били на Rails Girls.
Срещите са в init Lab. Имат си Facebook група. Засега са всеки четвъртък и петък, от 19:30 до 22:00 ч.
Набираме инструктори-доброволци. Който иска да се включи, да ни пише на [email protected] и ако ползва Facebook, да се присъедини във Facebook групата.
Повече от добре дошли са всякакви предложения за допълнения и корекции в това ръководство. Пуснете pull request в GitHub.