OLGA DRENDA: Czy dziewczyny programują inaczej?
MAGDA WILCZYŃSKA: Nie, myślę, że nie ma takich różnic. Dziewczyny może na początku są mniej pewne siebie, ale jak już zaczną, to radzą sobie równie dobrze. Czasem, jeśli ktoś wie, że programowała dziewczyna i ma przy tym niedobre intencje, to doszukuje się różnicy. Jeśli nie wie, kto programował – nic nie zauważa.
Czyli to taki stereotyp?
Takiego myślenia jest coraz mniej. Kiedy zaczynałam pracę, programistka była niezwykłym zjawiskiem. Teraz to robi coraz mniejsze wrażenie, bo programujących dziewczyn jest po prostu coraz więcej. O to chodzi nam w Geek Girls Carrots – żeby nie budziło już to w nikim specjalnych emocji.
Magdalena Wilczyńska
Programistka, absolwentka informatyki UW. Uczestniczyła w realizacji projektów o najróżniejszej tematyce – od bankowości internetowej po symulację kolonii piesków preriowych dla rządowego labu w Kalifornii. Związana z organizacją dla kobiet z IT – Geek Girls Carrots, gdzie prowadzi warsztaty programowania, głównie w języku Python.
Geek Girls Carrots to warsztaty z założenia „kobiece”. Z powodu barier psychologicznych?
I tak, i nie. Mężczyźni też mogą na nie przyjść, jeśli tylko mają ochotę. Ale są skierowane do kobiet, żeby je ośmielić, pomóc im zacząć i uwierzyć, że programowanie jest też dla nich.
Jakie osoby przychodzą na warsztaty? Początkujące, czy takie, które miały już styczność z programowaniem?
Motywacje są bardzo różne. Głównie przychodzą osoby bardzo początkujące, ale jest też sporo osób, które kiedyś coś tam robiły, jednak nie sprawiało im to wielkiej frajdy albo nie czuły się w tym mocne. Często dziewczyny przychodzą na comiesięczne spotkania „karotek”, na których ktoś opowiada o tym, czym się zajmuje: programistki o swoich projektach, właścicielki firm o tym, czym się zajmują na co dzień, jakie aplikacje piszą. Wtedy dziewczyny przypominają sobie, że kiedyś napisały jakiś program w szkole – i próbują swoich sił na nowo.
Dla kogoś, kto nie miał do czynienia z programowaniem, to nieznany teren, do tego abstrakcyjny. Jak próbujesz wprowadzać nową wiedzę? Przez analogie, porównania?
Nikt z nas nie ma żadnego przygotowania pedagogicznego i trochę eksperymentujemy. Korzystanie z analogii bardzo się przydaje. Rysujemy, machamy rękami, opowiadamy dowcipy. Raz pokazaliśmy kawałek kodu i pytaliśmy ludzi, co ich zdaniem ten kod wykonuje.
Kiedyś objaśniałam, jak działa lista w Pythonie na przykładzie kolejki na poczcie. Chciałam pokazać, że to struktura danych, na której można sobie ustawić kolejkę, czyli obsłużyć pierwszą osobę i, jeśli wszystko pójdzie dobrze, pomyślnie przejść do następnej. Każdy element listy to był jeden petent, który, jeśli jego sprawa nie była załatwiona, musiał iść na koniec kolejki. Często korzystamy z gry „kamień-nożyczki-papier”: pokazujemy, w jaki sposób podejmowana jest decyzja, kto wygrał, w jaki sposób działa pętla, jeśli nie chcemy grać raz, tylko kilka razy. Zdarzyło nam się też kilka razy poeksperymentować z urządzeniami, które można programować przy pomocy Pythona – zobaczyć, że robot się przesuwa, czy macha ręką, zaprogramować odkurzacz, żeby pojechał w prawo albo zamigał światełkami. Nie ma chyba nic lepszego, niż pozwolić ludziom na jak najwcześniejsze eksperymentowanie. Wtedy na własnej skórze mogą spróbować, co działa, a co nie. Wtedy nawet jak się popełni kilka błędów, to człowiek lepiej zrozumie i zapamięta.
Magdalena Wilczyńska / fot. Bartek Warzecha
Co to znaczy myśleć jak programista?
Chyba zawsze myślałam jak programista, nawet zanim zaczęłam programować, więc jest mi trochę trudno powiedzieć, co to znaczy, ale na pewno ważna jest umiejętność rozbicia problemu na kroki, potem rozwiązywanie ich, a jednocześnie zdolność zauważenia, że niektóre kroki można uprościć, albo że się powtarzają. Z podręcznika z moich czasów studenckich zapamiętałam, że programowanie jest trochę jak gotowanie. Trzeba wziąć książkę kucharską, trochę mąki, dodać jajka, wody, coś tam zagnieść, włączyć piekarnik na konkretną temperaturę... napisanie programu to podobna rzecz, tylko bez książki kucharskiej. Trzeba wyobrazić sobie zadanie do wykonania, problem do rozwiązania, a potem wymyślić, co po kolei trzeba zrobić, żeby osiągnąć cel. I z tym często ludzie mają problem. Mówimy ma warsztatach: „chcemy, żebyście napisali kawałek kodu, który wykona to i to”. I wtedy, nawet jeżeli pokazywaliśmy podobny kod wcześniej i uczestnicy mają wszystkie klocki do tego, żeby ułożyć sobie rozwiązanie, to często rozkładają ręce i mówią: „no dobrze, ale jak zacząć?”. Być może to kwestia doświadczenia. Po jakimś czasie coś zaskakuje, ludzie zauważają, że jakaś linijka pojawiała się już w innym programie.
Ile zwykle trzeba czasu, żeby zrozumieć?
To znów kwestia wprawy. Każda godzina pracy z kodem poza naszymi zajęciami jest tak naprawdę bezcenna, dlatego, że każda samodzielna praca – nawet, jeżeli to będzie walka z jedną linijką kodu, która nie wiadomo, dlaczego działa tak, a nie inaczej – pozwala lepiej utrwalić to, czego się nauczyliśmy do tej pory. Szybciej uczą się osoby, które robią coś poza naszymi warsztatami, a kursów online dla początkujących jest teraz mnóstwo. To nie jest czarna magia, tylko trzeba ćwiczyć.
Mówisz, że sama wciąż się uczysz, jak prowadzić zajęcia. Co cię zaskakuje ze strony uczestniczek i uczestników?
W zasadzie wszyscy zaskakują, bo koniec końców okazuje się, że uczestnicy szybciej zaczynają łapać, o co chodzi, niżby nam się wydawało: myślimy, że coś jest trudne, że powolutku, a tu szast-prast, wszyscy się nudzą i chcą dodatkowe zadanie. Pani Renata, w wieku w zasadzie już emerytalnym, przyszła na weekendowy kurs Django Carrots (warsztaty programowania w języku Python, we frameworku Django). Miała plan, że kiedy przejdzie już na emeryturę i będzie mieć więcej czasu, to założy firmę, i sama chciała zrobić swoją stronę internetową. To fantastyczna osoba, która nie bała się zadawać pytań. Uczestnicy generalnie nie boją się pytać, ale jest kilku, którzy robią to bardzo wnikliwie i właśnie do nich należała pani Renata.
ROZMOWY Z PROGRAMISTAMI
Programiści, koderzy, projektanci interakcji to ukryci rzemieślnicy i artyści dzisiejszej kultury, w dużej mierze cyfrowej. Kod ubrany w grafikę trafia na nasze ekrany i determinuje sposób użycia i doświadczenia danego tekstu, dźwięku, filmu. Hybrydowych form nie da się zredukować do ich poszczególnych elementów. W nowym cyklu przeprowadzamy rozmowy z programistami, którzy umożliwiają ich powstawanie.
Rozmowa z Michałem Szotą.
Rozmowa z Tomaszem Buszewskim.
Zaczynacie od języka Python – dlaczego?
Jest prosty i ma bardzo niską barierę wejścia. Przede wszystkim jest językiem, w którym bardzo szybko można zrozumieć napisany kod – bo zrozumienie kodu to jedna sprawa, a napisanie – całkiem inna. Python ma na tyle przejrzystą składnię, że większość osób, kiedy zobaczy kawałek kodu, jest w stanie przewidzieć, co ten program wykona, jaki będzie efekt. Python ma wiele bardzo interesujących bibliotek, dzięki którym można bardzo szybko eksperymentować z grafiką, wizualizacjami, pisaniem prostych gier czy programowaniem serwisów internetowych.
Drugi w kolejności pod względem popularności jest chyba JavaScript.
Jest coraz popularniejszy dlatego, że jest coraz więcej serwisów napisanych całkowicie w JavaScripcie. To język trochę trudniejszy i specyficzny, bo wykonywany na ogół w środowisku przeglądarki. Trudno zrozumieć niuanse, programować też nie jest prosto, ale bardzo szybko można nauczyć się robić superefektowne rzeczy. To język, którego ludzie chcą się uczyć, bo widzą praktyczne korzyści i szybkie efekty.
Masz do czynienia z programowaniem od czasów żółwika Logo. Czy nowe języki są dziś przystępniejsze?
Zdecydowanie tak. Taką zmianę na plus widać tak naprawdę na przykładzie JavaScriptu. Kiedyś trzeba było pamiętać, żeby program był kompatybilny ze wszystkimi przeglądarkami, bo jeżeli pisało się aplikację webową, to znaczyło, że użytkownicy będą z niej korzystali na różnych przeglądarkach. Wykrywanie tych różnic na piechotę to był jakiś armagedon. Dzisiaj już nie trzeba się tym tak martwić, bo używa się odpowiednich bibliotek, jak jQuery czy Angular. Inni programiści zdjęli nam te problemy z głowy. Pojawia się też coraz więcej języków z czytelniejszą składnią. Przed Pythonem używałam Perla, którego wciąż bardzo lubię i nie dam na niego powiedzieć złego słowa, ale czasem ludzie patrzą na kod w Perlu jak na czarną magię. W Pythonie nie trzeba stawiać średników na końcu linijki – przez to kod staje się bardziej przejrzysty. Im więcej ludzi programuje, tym więcej powstaje języków, szkieletów do budowy aplikacji (frameworków) i bibliotek, które ułatwiają pracę programistom.
Magdalena Wilczyńska / fot. Bartek WarzechaSą też języki wprowadzające, jeśli ktoś chce zacząć zupełnie od przedszkola. Czy to dobry pomysł?
Na przykład Scratch, którego wariantów jest kilka. Ten język stawia na wizualizację kodu i wszystkie warianty wyglądają podobnie: mamy okno edycyjne, do którego przeciąga się fragmenty kodu reprezentowane jako segmenty układanki. Tak można sobie złożyć program. Jest to napisane o tyle sprytnie, że nie wszystkie elementy pasują do siebie – bloczki nie pozwolą na złożenie czegoś, co kompletnie nie ma sensu, aczkolwiek to też nie wyklucza napisania wadliwego programu. Zaletą Scratcha jest to, że nie pokazuje od razu kodu, co często wywołuje panikę. To przypomina stare książki do informatyki dla dzieci, gdzie programy rozpisane były na diagramy i drzewa decyzyjne. Przy pomocy strzałek przechodziło się do kolejnego etapu.
Ale czy taki wizualny samouczek nie utrudnia potem przejścia na czysty kod?
Nie, przynajmniej w wersji angielskiej w bloczkach jest to, co odpowiada instrukcjom w każdym języku programowania – struktury takie jak for albo while. To nie jest oderwane od rzeczywistości, więc łatwo potem przejść do normalnego kodu.
Dlaczego twoim zdaniem umiejętność programowania jest przydatna? Co daje znajomość kodu?
Programowanie przydaje się w dwóch wymiarach. Po pierwsze, zaczyna się trochę inaczej myśleć również o normalnych problemach – rozkłada się je na procedury, stara się systematyzować działanie w niektórych przypadkach. Z drugiej strony, mija strach przed nowymi technologiami. Na przykład – wiele osób, które pracują w biurze w Excelu, nie wie, że można sobie zaprogramować makro w języku Visual Basic i ułatwić sobie pracę. To dotyczy czasem nieoczekiwanych obszarów, radzenia sobie z jakimś interfejsem programistycznym, którego człowiek by normalnie nie dotknął, tylko robił wszystko ręcznie. Teraz w ogóle coraz więcej mamy urządzeń, które trzeba zaprogramować, na przykład inteligentne domy, w których można włączać i wyłączać żarówki za pomocą smartfona. Takich połączeń będzie coraz więcej, nasze życie będzie naszpikowane urządzeniami, które będą ze sobą współpracować. Dobrze jest myśleć o nich jako o rzeczach wykonujących program, który ktoś napisał i zapewne nie jest idealny. Jeżeli coś nie działa, to znaczy, że pewnie jest błąd w programie i pewnie potrzeba aktualizacji, która tego błędu nie ma. Nauka programowania pomaga zrozumieć to, co się dookoła dzieje, urządzenia przestają mieć magiczny wymiar.
Co jest twoim zdaniem najciekawszego w programowaniu?
Chyba to, że jest to narzędzie, przy pomocy którego można coś tworzyć. Można mieć jakiś pomysł, przełożyć go na język programowania i po prostu zrealizować.
Jaka jest różnica między programistą a informatykiem? Ludzie często używają tych pojęć wymiennie.
Informatyk niekoniecznie musi umieć programować. Zwykle umie, bo wykształcenie informatyczne obejmuje w jakimś zakresie naukę programowania, ale kiedy ktoś się zajmuje np. bezpieczeństwem sieci komputerowych w firmie albo uczy informatyki w szkole, to tak naprawdę o programowaniu może nie mieć pojęcia, bo nie musi. Wystarczy, że umie obsługiwać ileś programów potrzebnych mu do codziennej pracy. Programista pisze aplikacje i ma do czynienia z kodem.
Ale niekoniecznie umie sobie naprawić komputer?
Niekoniecznie. Ja na przykład nie umiem [śmiech].