Archiwum | emil@fuse.pl

Musisz być kimś

![ojej](http://bronikowski.com/wp-content/uploads/2014/09/ojej.png)

Jeśli zdolność do odczuwania wątpliwości jest miarą inteligencji, to jestem bardzo inteligentnym typem. Raz do roku muszę wykonać jakiś piruet wokół własnych idei, sprawdzić, czy to co uważam za słuszne jest nadal słuszne, czy tylko przyzwyczaiłem się do myśli, że jest.

W tym sensie jestem jak puenta peerelowskiego dowcipu: „Mam swoje poglądy, ale się z nimi zupełnie nie zgadzam”.

Na początku wakacji spędziłem kilka godzin w towarzystwie Leszka Tarkowskiego, który zawodowo zajmuje się tłumaczeniem meandrów programowania pracownikom różnych firm okołotechnologicznych. Nasza rozmowa kręciła się wokół różnych tematów (kobiety, wino, śpiew), ale najdłużej utknęliśmy właśnie na edukacji informatycznej, a dokładniej na tym, jak ciężki to kawałek chleba.

Programowanie to wielowarstwowy problem, który przypomina lalkę-Matrioszkę. Kiedy wyciągasz pincetą absurdalnie małą lalkę rejestrów okazuje się, że w środku żyją jeszcze mniejsze, te które są opisane „dostęp do pamięci” czy „utylizacja pamięci podręcznej procesora”. Na dodatek niektóre rozkładają się też na boki, tworząc lalki identycznych rozmiarów, ale inaczej pomalowane i te też mają swoje mniejsze odpowiedniki w środku.

Prawdziwą sztuką jest wybrać tylko te rzeczy, które są ważne. Jak to mówimy: „wybrać najlepsze narzędzia do pracy, którą masz zamiar wykonać”. Problem z tą metaforą jest taki, że nie odzwierciedla ona stanu rzeczywistego. Kiedy mamy upiłować rurkę to bierzemy do ręki piłę i piłujemy. Piła piłuje. W ekstremalnych przypadkach jest instrumentem w kapeli podwórkowej, ale ogólnie piłuje. Najlepsze narzędzie do pracy. A jak chcę przetworzyć kawałek pliku tekstowego, to co jest lepsze: Perl, Ruby czy Python? Znam przynajmniej dwie osoby, które powiedzą, że C. Mój przyjaciel, który administruje, powie że wszystko da się zrobić potokami i Awkiem. Wszystkie te odpowiedzi są poprawne i wszystkie rodzą kolejne problemy: wyrażenia regularne, unicode w Pythonie 2.x, absolutnie wszystko w temacie ciągów znaków w C.

Zróbcie eksperyment: spróbujcie wyobrazić sobie jak wytłumaczyć procedurę wczytania pliku, pobrania któregoś wyrazu i wyświetlenia go na ekranie, ale użyjcie do tego swojej wiedzy na temat tego, co się może spieprzyć i co może być potrzebne żeby na serio mieć świadomość, co się dzieje?

Co to jest plik? Czy plik da się odczytać? Otworzyć go jako ‘r’ czy ‘rb’? Czy nie jest za duży żeby go wczytać naraz? W Pythonie użyć file czy context managera with? Obsługiwać stdin?

Jestem pewien, że możecie bez zastanowienia rozwlec ten problem jeszcze bardziej.

Oczywiście jest to dzielenie włosa na czworo, jak większość debat o programowaniu. Rodzi to jednak pytanie w mojej głowie: kiedy mówimy o „uczeniu mas programowania” to gdzie tak naprawdę chcemy się zatrzymać? Mamy uczyć programowania, konkretnego języka programowania czy przekazać ogólną wiedzę, która pozwoli uczniom wybrać to, co im się podoba?

Dla mnie idealną sytuacją byłoby przekazywanie wiedzy ogólnej. Niestety, aby zamienić wiedzę ogólną na zdolność programowania potrzebna jest odrobina pasji i uporu.

Powszechną naukę programowania sprzedaje się czasem jako wymóg teraźniejszości (i przyszłości), porównuje się ją do nauki czytania i pisania, podwalin reszty edukacji. I to bardzo słuszna koncepcja, poza kontekstem.

Kiedy uczono nas pisać i czytać nikt nie mówił nam, że to po to abyśmy mogli napisać bestsellery. Często gęsto nauka programowania odbywa się w kontekście „bycia nowym Cukiergórą, zrobienia aplikacji, wspierania nowej ekonomii”. Może to naiwne z mojej strony, ale zawsze widziałem podstawową edukację jako coś odłączonego od czynnika ekonomicznego. Możemy posadzić wszystkich w ławkach i wyłożyć im „Hello, World” w dowolnej ilości języków programowania, a i tak większość uczniów odpisze zadanie domowe, tak jak Ty i Ty odpisywaliście zadania z chemii i biologii. Oczywiście mieliście w klasie „olimpijczyków” matematyki, fizyki i języka obcego, mieliście też pewnie kogoś, kto klikał komputery — zgaduję, że to Wy — i może część z nich zamieniła swoją pasję w zawód.

I żebym nie był źle zrozumiany: każdy powinien posiadać wiedzę technologiczną i każdy, kto chce, powinien móc odebrać edukację, która pozwoli mu zostać programistką lub programistą. Nie każdy zostanie i nie powinno się próbować sprzedawać dziedziny nauki jako lewar do podnoszenia PKB.

Edukacja powinna służyć ludziom, a nie politykom, którzy akurat wymyślili budowanie Krzemowej Doliny w Twoim mieście.

Kiedy słyszę czasem, że „współczesny dziennikarz powinien potrafić napisać sobie bota, który śledzi wydarzenia na Twitterze” to zaczynam sobie wyobrażać, że autor takiej propozycji nie bardzo wie, co powinien robić dziennikarz. Jeżeli dziennikarz będzie miał świadomość, że dane są udostępniane przy pomocy API i że można coś zautomatyzować to będzie bardzo dobrze. Wtedy dzwoni się po ten procent ludzi, którzy zdecydowali się zostać programistami i oni szast-prast wypluwają jakiś kawałek kodu. Wtedy mamy kompetentnego dziennikarza i kompetentnego programistę tworzącego wartość dodaną. W idealnym świecie cyber-haker-futurystów byłoby dwóch słabych dziennikarzy, którzy czytają Twittera.

Jest mi bardzo ciężko wytłumaczyć moją wizję cyfrowej edukacji. Spędziłem całe (bez żartów) życie ryjąc — ryjem naprzód — norę w górze wiedzy informatycznej. I po tych trzydziestu latach nadal czuję, że jakiś facet produkujący komputery zaworowe w latach sześćdziesiątych mógłby mnie złapać za wszarz, złamać na kolanie jak strzelbę, wsadzić mi w tyłek kapiszony i naciskając moszną wystrzelić z nozdrzy. Shit’s hard.

Może mówię z pozycji kogoś, kto w swojej głowie uchodzi za sprytnego drania, który „własnymi rencami, wszystko”, ale na serio nie widzę opcji żeby Ci sami ludzie, którzy zapisują dokumenty Worda na pulpit nagle odnaleźli w swoim sercu chęć do napisania drugiego Instagrama.

Naszym celem (jeżeli mogę się włączyć w szereg ludzi, którym nauka leży na sercu) powinno być stworzenie środowiska w którym ludzie chętni są mile widziani, co nie zawsze było naszą mocną stroną. Dlatego ważne jest otwarte oprogramowanie, dlatego ważna jest dokumentacja i przykłady, dlatego trzeba robić „pracę u podstaw”.

Jesteśmy obecnie świadkami technologicznej gorączki złota: wszyscy wiedzą, że jest złoto do wzięcia, słyszeli o ludziach, którzy ledwie postawili nogę na działce górniczej, a już potknęli się o fortunę. Nikt już nie pamięta, że podczas gorączki złota najlepiej było sprzedawać sprzęt górniczy.

Programowanie jest często jak praca w dziewiętnastowiecznej kopalni: brud, pot, kiepska dieta, kilka osób i kilka osłów. Jeżeli już chcesz być w tej kopalni to upewnij się, że nie jesteś osłem.

* * *

Mówiąc o: Szóstego grudnia, roku bieżącego, w mieście Łodzi odbędzie się pierwsza edycja Django Girls, gdzie będę szatniarzem/sprzątaczem. Szczegóły można uzyskać od Marty lub Justyny.