Prezentacja o Ruby'im - klasa algorytmiczna

Witam!

Mam na jutro przygotować max 2-3 godzinną prezentację o Ruby’im. Publiczność będzie dość nietypowa - licealiści (klasa), którzy na co dzień piszą wyłącznie w C++, patrząc tylko na złożoność i czas wykonywania algorytmów :wink: (zadanka z tego roku: http://2009.v-lo.tcs.uj.edu.pl/problems.html ).

Ogólny zarys: krótka historia (max kilka zdań), przedstawienie najważniejszych cech języka, zastosowanie i przez większość czasu klepanie programów, które najlepiej pokażą miodność tego języka (i ogrom dostępnych rozszerzeń). To co mi na razie do głowy przychodzi:

  • “hello world”, działanie na tabelach, stringach itp (+porównanie z kodem C)
  • prosty bot jabbera (xmpp4r-simple)
  • kalkulator (dodawanie) z GUI - Shoes
  • coś z ProjectEuler(?)
  • i inne (wasze pomysły?)

Mielibyście jeszcze jakieś propozycje? Chodzi mi głównie o zainteresowanie publiki, która nie ma żadnego pojęcia np. o obiektowości (jedna, max dwie osoby wiedzą co to klasa), ale za to potrafią zapisać algorytm Manachera i KMP…

PS: Całość oczywiście w ShowOff :wink:

My robiliśmy kiedyś prezentację o Rubim w ramach SRUG-u. Nie jest najwyższych lotów (większość pewnie będzie też zbyt skomplikowana), ale może cokolwiek Ci się przyda: http://github.com/SRUG/srug-1

Przede wszystkim zrób krótki, ale dobry wstęp. Wytłumacz, że era 1 języka do wszystkiego już się skończyła i kluczowe jest dobieranie technologii do zadania (początkujący zwykle nie zdają sobie z tego sprawy i wszystko chcą pisać w tym pierwszym języku). Ważne jest byś nie próbował przedstawić Rubiego jako leku na wszelkie zło, tylko jaki świetne narzędzie do wielu zadań.

Następnie przedstaw podstawowe zalety Rubiego, tj. ekspresyjność, dynamiczne typowanie, wbudowana obsługa duuuuuuuuużych liczb, wbudowane regexpy, hashe. Pokaż to na przykładach.

Jeśli nie znają OOP to nie ma sensu im tego pokazywać bo nie zrozumieją. Project Euler jest dobrym rozwiązaniem, tylko trzeba wybrać te proste zadania, których rozwiązanie to kwestia 1-3 linijek.

Powodzenia :). Napisz jak wyszła ta prezentacja i jakie były reakcje innych.

Dzięki, nie patrzyłem tak na to.

Tak robię - stawiam na dużo małych przykładów, aby pokazać jak najwięcej fajnych rzeczy - od dupereli jak tablica[-1]; że sortowanie to po prostu #sort, a nie sort(vector.begin(), vector.end()); przez wszechobecne bloki (#select, #collect), aż do przedziałów, stringów, 2**10000 itp.

Mam wybrane kilka, właśnie takie które można zrobić bardzo “rubyish way” w 1 linijce.

Dzięki. Musi wyjść, bo “wykładowca” już mi wpisał maxa za zaległy sprawdzian :wink:

Aha, mam problem z wyborem programu, który napiszę pod koniec jako wisienkę na torcie :wink: Na razie mam jeden sensowny pomysł - wspomniany wcześniej bot jabbera (zdalne sterowanie komputerem) - http://gist.github.com/427725 . Sam kod jest bardzo prosty, gorzej, że korzysta z bardziej “zaawansowanych” technik.

Robiłem niedawno prezentację o Ruby w ramach Akademii Inżyniera “Szlif” na polibudzie, tu są slajdy showoffa:
http://github.com/tomash/showoff-szlif-ruby – miałem podobny problem jak Ty, trzeba było zareklamować język przy założeniu braku wcześniejszego kontaktu :slight_smile:

Jeśli chodzi o live coding, to możesz:

Daruj sobie projekt typu Euler, wyalienujesz ludzi. No chyba że coś rozwiązywalnego w jednej linijce zajebiście-funkcyjnego-łańcuchowania :wink:

Koniecznie przedstaw tutorial z tryruby.org, serio. Ma wszystko to, co potrzeba, by osoba, która nie zajmowała się wcześniej programowaniem na serio, powiedziała “O mój jeżu, ale to Ruby jest zajebiste!”. Opieram się tutaj na własnych doświadczeniach.

Za czasów gimnazjum (no co? :P) szukałem języka “dla siebie” i strasznie irytowało mnie to, że w takim na przykład C++ muszę stosować masę nie-wiadomo-co-znaczących-skrótów - dla laika to po prostu było uciążliwe.

No i prezentacja Spoiling The Youth With Ruby z tegorocznego EuRuKo - jest tam kilka cennych rad.

Tomash - co do bloga w Railsach w 15 minut: za duże stężenie “OMG so cool” i całej railsowej magii chyba nie byłoby na początek zbyt dobre :> Ewentualnie po tej prezentacji zaczęliby pisać coś przy pomocy RoR bez znajomości Ruby.

Aczkolwiek też jestem bardzo ciekaw reakcji.

Ale Sebcioz będzie to prezentował srogo programującym w C++ licealistom. Czyli połączenie przyzwyczajenia do jednego z najpaskudniejszych języków świata plus wiek, w którym “wie się wszystko”. Niełatwe ma zadanie, powinien bardziej właśnie nadepnąć im na ambicje: na Ruby przesiadają się najlepsi (pomimo jego wyraźnych wad) i ma wiele rzeczy których w C++ nie ma, z czego część dość trudnych (pr. funkcyjne) :slight_smile:

A to nie jest tak, że oni piszą wszystko na odpieprz? Ale racja, warto byłoby pokazać zalety Ruby nad C++. Sebcioz, spróbuj jakieś średniej długości zadanie w C++ zawrzeć w dwóch, trzech linijkach w Ruby ;]

Dobre :wink:

Taa, jasne - jak na razie 70% z nich nie miała kontaktu z HTMLem :expressionless:

Ogólnie to oni patrzą na C++ bardziej jak na narzędzie, a nie jakieś bóstwo. Zawsze mogę powiedzieć, że ja jestem pragmatykiem i używam tego co mi w danej chwili jest potrzebne (nie wbijam śrub młotkiem, ani nie wkręcam gwoździ śrubokrętem).

Chodzi o sam kod? Jeśli tak to różnie. Generalnie nie jest tragicznie, ale są też ludzie, którzy nawet tabów nie dają :expressionless:

No właśnie coś +/- takiego będzie.

Ja ostatnio zrobiłem na zajęciach z podstaw Rubiego przykład w Sinatrze. Genialna prostota, a można rozwijać to na wiele różnych sposobów (dodam, że zmieściłem się z prezentacja w półtorej godziny i jeszcze został mi czas na pytania). Np. mogą mieć pod spodem dowolny programik i mieć do niego interfejs w postaci formularza. Zaczynając od najprostszych 2+3, a kończąc na jakiś skomplikowanym algorytmie obliczeniowym. Oczywiście fakt, że nie mieli styczności z HTMLem jest problemem, ale wytłumaczenie najbanalniejszych rzeczy, typu paragraf i lista nie powinno zająć więcej niż 5 minut.

Jak im uświadomisz, że “tak, możecie to umieścić w sieci i wszyscy będą mogli zobaczyć waszą genialną aplikację”, to myślę, że część złapie się na ten haczyk. Niech to samo spróbują zrobić w C, czy C++ - ciekaw jestem ilu w ogóle uda się zrobić aplikację pokazującą cokolwiek w przeglądarce.

Natomiast próba robienia czegoś w Railsach zdecydowanie odpada. Nie starczy czasu nawet na skonfigurowanie środowiska.

Ha, i po wszystkim. Wyszło dużo lepiej niż myślałem.

Prezentacja prowadzona na luzie (80% to improwizacja). Wstęp typowy: hello world, puts vs print (DRY), 2**10000 itd. Przy tablicach (#pop, #shift, #<<, #[-1] itp) ludzie zaczęli się dopytywać o złożoność i wydajność - kazałem czekać :wink: Dalej bloki, hashe., zakresy, a w końcu tekst, że trzeba być pragmatykiem i umieć dobrze wybierać narzędzia, że w aplikacjach internetowych wydajność języka nie ma tak ogromnego znaczenia (większość requestu to pobieranie danych do przeglądarki, połączenia z bazą, cache itp) :wink: Na koniec jeszcze jakieś proste zadanka z ProjectEuler (np. liczby pierwsze (primes = Prime.new, primes.next)) i Shoes (kalkulator).

O dziwo, ludzie w większości byli raczej zainteresowani. Może coś z nich jeszcze będzie :smiley: