Naciśnij ESC aby opuścić wyszukiwarkę

Nick Montfort „Odkrywanie kodu. Wprowadzenie do programowania w sztuce i humanistyce” (fragment)

Nowości wydawnicze /

Nick Montfort Odkrywanie kodu. Wprowadzenie do programowania w sztuce i humanistyce (fragment)

tł. Michał Tabaczyński

Korporacja Ha!art, 2018

 

Niektórym programowanie kojarzy się z wiedzą fachową, profesjonalizmem i niepojętymi trudnościami technicznymi. Nie sądzę, aby musiało ono być bardziej przerażające niż pisanie czy szkicowanie. To po prostu konwencjonalne określenia rozmaitych aktywności – kreatywnych i badawczych.

Żadna wiedza programistyczna nie jest potrzebna, żeby korzystać z tej książki, tak samo jak żadnych kompetencji nie wymagają kursy prowadzone na jej podstawie. Ale ci, którzy już swobodnie czują się w pracy programisty, także mogą skorzystać z Odkrywania kodu – szczególnie wówczas, gdy ich dotychczasowa praca była czysto odtwórcza i polegała na wdrażaniu określonych systemów czy rozwiązywaniu konkretnych problemów. Zakładam jednak, że czytelnicy nie mają żadnego przygotowania programistycznego.

Moje podejście do programowania zakłada poszukiwanie w nim potencjału eksploracyjnego: zdolności do nakreślania perspektyw, wymiany myśli oraz dociekań odnośnie do istotnych problemów. Prowadzone przeze mnie dyskusje, szkolenia i prelekcje dotyczące programowania zawierają w sobie także rozpoznania odnoszące się do miejsca, jakie technologie obliczeniowe (computation) i programowanie (programming) zajmują w kulturze. Pod tym określeniem kryje się związek programowania z przetwarzaniem różnego rodzaju mediów, a także – szerzej – z metod i problemów sztuki i humanistyki.

Książka ta została napisana tak, by można ją było czytać, siedząc przed komputerem, by umożliwić czytelnikom programowanie w czasie lektury. A właściwie została ona pomyślana tak, by stanowiła część układu obejmującego człowieka, książkę i komputer – tę część, która pozwala człowiekowi zdobywać wiedzę. Uważam, że po przeczytaniu tego wprowadzenia powinno się zacząć używać książki do pracy programistycznej.

Niekiedy namawiam czytelniczkę, by podążała za wskazówkami i przepisała kod bezpośrednio z książki, po to, by dzięki temu zaznajomiła się i oswoiła z praktycznymi aspektami wprowadzania danych oraz tworzenia programów. Kiedy indziej znów namawiam czytelnika do przećwiczenia pewnych modyfikacji (niektóre z nich są nieznaczne, inne – bardziej istotne) istniejących programów. Prezentuję też starannie dobrane ćwiczenia: od nieskomplikowanych po bardziej złożone. W jeszcze innych przypadkach podaję specyfikację programu, która opisuje, jak ma on działać wedle określonej procedury. I chociaż takie ćwiczenia nie realizują eksperymentalnego potencjału programowania, to ich zadaniem jest dostarczenie użytkownikom szerokiego spektrum doświadczeń programistycznych, aby pogłębić opanowanie przez nich kodu i programowania. […]

Niektóre książki i kursy nauki programowania przekazują użytkownikom wiedzę dotyczącą różnych algorytmów sortowania oraz szczegółów ich działania w czasie i przestrzeni. To niezmiernie ciekawe tematy i zapewne nieodzowne dla kogoś, kto zechce zdobyć podstawy do gruntownego opanowania wiedzy informatycznej (tym terminem oddajemy angielskie science of computation). Jeśli więc ktoś już teraz wie, że jego celem jest zdobycie umiejętności na poziomie stopnia zawodowego z nauk informatycznych albo nawet zdobycie takiego stopnia, powinien raczej poszukać innej książki albo zapisać się na kurs, który pomoże opanować ten materiał. Co więcej, jeżeli ktoś chciałby zdobyć jedynie wiedzę dotyczącą programowania, a nie interesuje go eksploracyjny wymiar programowania ani też związki pomiędzy techniką komputerową a kulturą, z łatwością znajdzie dobre i krótsze podręczniki (jak choćby drugie wydanie Learn to Program Chrisa Pine’a, w którym autor wykorzystuje język Ruby do nauki podstawowych zasad programowania). I analogicznie, jeśli ktoś nie chce nauczyć się programowania, a interesują go związki technik obliczeniowych ze sztuką i naukami humanistycznymi, znajdzie całą masę książek i artykułów, które się tym zajmują. Jedna z nich to książka, której jestem współautorem (wraz z dziewięcioma innymi osobami): 10 PRINT CHR$(205.5+RND(1)); : GOTO 10 – przynosi ona pogłębione studia na temat programu o jednoliniowym kodzie w języku BASIC, opisując go w wielu kulturowych kontekstach.

Należałoby w tym miejscu określić, czym Odkrywanie kodu. Wprowadzenie do programowania w sztuce i humanistyce nie jest. Nie jest to książka, której stawia sobie za cel zapoznanie czytelnika z jakimś konkretnym językiem programowania. Nie uczy również profesjonalnego kodowania czy tworzenia typowych „produktów” inżynierii oprogramowania. Nie jest też – o czym było już wcześniej – kompletnym kursem dla początkujących informatyków, którzy chcą sami zgłębiać tę dziedzinę wiedzy. Niewątpliwie ta książka stanowi uzupełnienie edukacji informatycznej, jednak jej cele są oparte na innych fundamentach, mianowicie: dociekaniach na polu sztuki i humanistyki prowadzonych przy pomocy technik komputerowych.

Oto książka o tym, jak myśleć z pomocą technologii komputerowych, w szczególności – o tym, jak rozważać istotne kwestie sztuki i humanistyki przy pomocy narzędzi programistycznych. Ufam, że oferuje ona początkującym programistom na tyle rzetelną wiedzę, by mogli – dzięki lekturze i zawartym tu ćwiczeniom – zwiększyć orientację w posługiwaniu się językami programowania, posiąść podstawowe umiejętności w zakresie współpracy nad projektami oraz uświadomić sobie, że technologie komputerowe w istotnym stopniu wiążą się z kulturą oraz intelektualnymi problemami sztuki i humanistyki. Mam też nadzieję, że praca z tą książką odkryje potencjał programowania jako metody badawczej i artystycznej, a przynajmniej – że odkryje tego potencjału wystarczający zakres. Jeśli tak się stanie, czytelnicy będą kontynuowali swoje programistyczne przygody i poszukiwania po tym, jak wyczerpią możliwości, które tu zaproponowałem.

Eksploracja a eksploatacja

„Eksploracja” – zarówno jako aktywność, jak i pewna perspektywa – jest obecna w dyskusjach w wielu kontekstach, ale tu chciałbym się przyjrzeć odkrywaniu w najbardziej codziennym z możliwych znaczeń.

Klient sklepu spożywczego nie musi koniecznie być zainteresowany umiejscowieniem towarów, które właśnie wprowadzono do dystrybucji, albo nowych lokalnych produktów. Zamiast tego kupujący może zwyczajnie wykorzystywać (exploit) swoją wiedzę o artykułach spożywczych, które spełniają jego wymagania co do wartości odżywczych, ceny i smaku. Taki klient zapamięta zapewne położenie tych produktów w obrębie sklepu, co umożliwi mu szybkie zebranie potrzebnych zakupów. To skuteczna metoda dokonywania sprawunków, jednak po kimś, kto ogranicza się do eksploatacji swoich nawyków, nie powinniśmy się spodziewać kulinarnych rewolucji czy nowości w stosowanej diecie. Kupujący, który nie przejawia chęci, by rozejrzeć się po odwiedzanym sklepie, nie mówiąc już o poszukiwaniach prowadzonych na targu czy w specjalistycznych sklepach, będzie pomyślnie powtarzał dotychczasowe sukcesy (jak i porażki), ale odkrywanie nowych możliwości będzie mu przychodziło z trudem. Perspektywa ta jest tym pewniejsza, gdy ów klient nie będzie pobudzany do poszukiwań nowych dań za sprawą odwiedzanych restauracji czy informacji pochodzących z opowieści innych ludzi.

Zarówno w przypadku reżimów zarządczych w organizacjach, systemów uczących się, jak i zakupów w spożywczaku jest istotne zachowanie równowagi pomiędzy eksploracją i eksploatacją. Możemy wyobrazić sobie zakupowicza, który skupia się wyłącznie na eksploracji – odkrywa nowe wciąż nowe wiktuały, ale nigdy nie wraca do swoich odkryć, żeby delektować się jakimś wyjątkowym specjałem. Czego taka eksploracja może nas nauczyć? Jak opisałem wcześniej – niczego. Nawet nie niewiele, ale zupełnie niczego nas to nie nauczy. Podejmowany za każdym razem wybór jest niezależny od wcześniejszych. Zawartość koszyka może zostać dopracowana, tylko jeśli zapamięta się najlepsze z dotychczas wybranych produktów oraz podczas kolejnych zakupów rozszerzy poszukiwania nowych składników. Większość z klientów utrzymuje równowagę pomiędzy eksploracją i eksploatacją na tej samej zasadzie co skuteczne firmy, które starają się czerpać zyski z istniejących, stabilnych branż, ale również wykorzystują nowe, znacząco opłacalne możliwości. Robot, który ma odnaleźć drogę w nieznanym sobie otoczeniu, powinien eksploatować umiejętności pokonywania dystansu, ale także poświęcić trochę czasu na eksplorację w nadziei, że może dzięki temu odnaleźć bardziej dogodny szlak.

Owszem, „eksploracja”, szczególnie w kontekście „eksploatacji”, posiada pewne negatywne konotacje, choćby związane z historią kolonializmu. W informatyce zdarzają się kłopotliwe określenia i metafory, o czym wie każdy, kto choć raz czytał instrukcję podłączania dysku podrzędnego do jednostki nadrzędnej [w języku angielskim czynność tę określają słowa „slave disc” i „master” – „niewolnik” i „pan” nie dają się tu ukryć – przyp. M. T.]. Sądzę, że część tych określeń powinna ulec zmianie, a obojętność niektórych osób zajmujących się informatyką na ten kontekst zdaje mi się niepokojąca. Choć oczywiście „eksploracja” nie zawiera w sobie takiego negatywnego wydźwięku wynikającego z historii jak słowo „podrzędny” czy „niewolnik”. A nawet proponowałbym ją jako dogodną alternatywę dla „o-panowania (jakiejś umiejętności)” [użyte w oryginale słowo „mastery” oznacza „biegłość”, jak i „panowanie”, „władzę” – przyp. M. T.]. Ta książka nie ma na celu wyrobienia w kimkolwiek kolonizacyjnych odruchów, ale raczej otwarcie jej czytelników na nowe idee i nieznane perspektywy. Eksploracja, na jaką pozwala komputer, jest w moim przekonaniu bliska tej, jakiej mogą zaznać Amerykanie, odwiedzając Paryż czy Meksyk, żeby w tych miastach odkrywać architekturę, lokalną kuchnię, organizację przestrzeni miejskiej czy historię. Chociaż więc łatwo mnie oskarżyć o turystyczne podejście, to nie sądzę, żeby moja perspektywa obejmowała najbardziej pejoratywne znaczenia słowa „eksploracja” – niezależnie od tego, jak silne są związki kolonializmu z obliczem miast dzisiejszego świata.

Koncepcja tego odkrywczego, eksploracyjnego kodowania nie ma stanowić jedynego rozwiązania czy jedynej prawdziwej orientacji wobec problemów informatyki i nie sugeruje nawet, by programiści mieli nie korzystać z istniejących formuł czy porzucić schematy postępowania. Zamiast tego przynosi pewien cenny tryb myślenia, podejścia do informatyki oraz wykorzystywania możliwości komputera do problematyzowania istotnych kwestii dotyczących tak kultury czy sztuki, jak i innych dziedzin.

Podstawowy problem dotyczący programowania polega na tym, że niewielu spośród tych, którzy zdobyli pewne umiejętności programistyczne, uczy się eksplorować te możliwości. Te dwie sfery umiejętności – programowanie oraz wiedza dotycząca funkcjonowania technologii – posiadają swoje własne, oddzielne wyzwania. I kiedy ktoś stara się poznać podstawy struktur danych oraz posiąść wiedzę charakterystyczną dla studenta informatyki, to trudno mu w tym samym czasie – na dość wczesnym poziomie doświadczenia programistycznego – wykorzystywać umiejętności kodowania jako narzędzia badawcze.

Listy oraz drzewa binarne są kluczowymi koncepcjami dla tych, którzy chcą opanować wiedzę z zakresu technologii komputerowych, jednak większość działań eksploracyjnych może się obyć bez tego rodzaju kompetencji. Wszyscy ci, których polami działalności są sztuki i humanistyka, są w stanie zastosować podstawy programowania, by odkryć, jak za sprawą kodowania można dokonywać eksploracji tych pól. Są również w stanie dowiedzieć się, jak informatyka sprzyja tworzeniu abstrakcji i dokonywaniu ogólnych obliczeń. Mogą zyskać swobodę w pracy programistycznej, nauczyć się w niej skuteczności oraz dostrzec w niej narzędzie badawcze. Ci, którzy nie planują zdobycia stopnia zawodowego z nauk informatycznych, mogą podczas pracy nad bardziej zaawansowanymi problemami, które stanowią zazwyczaj tematy kursów wprowadzających, napotkać trudność w ogarnięciu obrazu całości, zrozumieniu zasady skutecznego działania z wykorzystaniem danych lub uzyskania pewności w pracy programistycznej. Inaczej mówiąc: spoza binarnych drzew będzie im trudno zobaczyć las.

A poza tym, wiele osób, które do tej pory nie uczyły się programowania, może odnieść wrażenie, że jest ono po prostu urządzeniem, za którego sprawą można wykończyć budowlę, albo pojazdem, którym przemieszczamy się z miejsca na miejsce. O ile rzeczywiście wykorzystanie komputera w taki instrumentalny sposób potrafi dać znakomite rezultaty, o tyle da się wyobrazić jego inne, bardziej imponujące zastosowania: szkicownik, piaskownica, jednostka prototypowa, teleskop czy mikroskop. Nic nie może się równać z możliwościami komputera jako systemu badań i eksploracji. I odkrywanie kodu, o jakim tu piszę, jest właśnie wykorzystaniem technologii informatycznych przez artystów i humanistów.

Argumenty za nauką programowania?

Podczas pracy nad tą książką przejrzałem kilka popularnych podręczników do nauki gry na gitarze, nauki hiszpańskiego i wprowadzenie do wiedzy o sztucznej inteligencji. Co zaskakujące, żadna z tych książek nie zawierała rozdziału, który prezentowałby argumenty przekonujące, dlaczego warto uczyć się gry na gitarze, mówić po hiszpańsku albo rozumieć podstawy sztucznej inteligencji. Czasem tylko pojawiała się wzmianka o tym, jak to fajnie jest grać na tym instrumencie albo ile osób na świecie porozumiewa się po hiszpańsku, albo jak niezwykle interesującym polem wiedzy jest nauka o sztucznej inteligencji, jednak nie było tam żadnych mów motywacyjnych, bojowych zawołań ani żadnych innych form dopingu do poznania zasadniczej istoty tych książek. W najlepszym razie książki te stwierdzały raczej: „A więc chcesz się nauczyć grać na gitarze?” albo: „A więc jesteś gotowy na naukę hiszpańskiego?”.

A więc – jesteś gotowa i gotowy na naukę programowania jako narzędzia badań i mechanizmu kreatywności?

Poznałem wiele osób zainteresowanych programowaniem jako instrumentem zgłębiania technologii komputerowych, tekstów albo – szerzej – języka, obrazów, dźwięków, danych historycznych lub przestrzennych i wielu innych tematów. Nie każdy przejawia takie chęci, ale kiedy już zacznie się szukać takich osób, można ich znaleźć naprawdę wiele. Jeśli jesteś jedną z nich, to jest książka dla ciebie!

Tym wszystkim, którzy żyją w nieustępliwym strachu przed komputerami i matematyką, radziłbym przed rozpoczęciem zadań programistycznych wyzbyć się swoich uprzedzeń. Ludzie, którzy obawiają się czytania i konwersacji, a do tego nie wierzą, że potrafią opanować język obcy, nie są najlepiej przygotowani do rozpoczęcia nauki hiszpańskiego – powinni choćby spróbować nabrać ochoty na czytanie i mówienie przed rozpoczęciem kursu. Zaś ci, którzy przekonali samych siebie, że natura nie obdarzyła ich muzykalnością, nie są w najlepszej formie psychicznej, by zaczynać naukę gry na gitarze czy fortepianie. Najpierw może niech nabiorą ochoty na tworzenie muzyki.

Nie wszyscy podzielają przekonanie, że programowanie jest istotnym trybem intelektualnych odkryć na polu sztuki i humanistyki – nawet w obrębie tak zwanej humanistyki cyfrowej. Bywa ono postrzegane jako techniczny drobiazg, działanie peryferyjne, które można zamówić czy podzlecić. A może nawet istnieje do tego jakaś aplikacja, więc pewnie każdy wymyślony projekt da się wykonać bez pracy programistycznej. Zachęcając tu do zajęcia się tą specyficzną działalnością, rozważam niektóre z ról, jakie eksploracyjne programowanie spełniało w kulturze i informatyce, ale nie zamierzam tu wyczerpać wszystkich uzasadnień kluczowego miejsca tych doświadczeń i umiejętności w sztukach pięknych i humanistyce. Jeżeli czytelnicy spotkają kogoś, kto będzie miał wątpliwość co do przydatności programowania dla artystów i humanistów, i zechcą rozwinąć argumentację na ten temat, odsyłam do części Dodatek A: Po co nam programowanie?.

Twórcze programowanie i programowanie jako narzędzie badań

Staram się tu pomóc początkującym programistom dostrzec kreatywny potencjał technologii komputerowych oraz zrozumieć możliwości eksploracji i badań, jakie w nich tkwią. Zamierzam podzielić się spostrzeżeniami dotyczącymi sposobów realizacji tych działań, pomóc czytelnikom osiągnąć wyższy poziom swobody w pracach programistycznych oraz pokazać nowicjuszom, jak mogą pójść dalej o własnych siłach oraz podjąć naukę na tym polu, które wyda się im interesujące i pociągające.

Ta książka omawia sposoby uprawiania różnych rodzajów sztuki cyfrowej – głównie ze sfery sztuk wizualnych oraz literatury, jednak prezentowane w niej przykłady ćwiczeń wcale nie wymagają od czytelnika posiadania doświadczeń na polu poezji czy sztuki. Prezentuje ona także to, jak można podejmować działania analityczne i badawcze na podstawie materiałów tekstowych, ilustracyjnych oraz innych rodzajów danych. Jednak by odnieść korzyść z tych działań, programistka nie musi wcale koncentrować się na badaniu konkretnego medium ani przyjmować żadnej szczególnej perspektywy z pola humanistyki.

W najbardziej ogólnym ujęciu książka ta przedstawia dwa rodzaje praktyk programistycznych. Jeden polega na programowaniu, którego efektem jest stworzenie nowych typów dzieł sztuki w najszerszym rozumieniu tego słowa: zarówno w formach wysublimowanych, jak i popularnych, i z zakresu literatury, i w formach dźwiękowych, i tak dalej. Do tego zaliczają się także gry, boty i wiele innych programów komputerowych, dla których trudno o analogię w zakresie tradycyjnych sztuk pięknych. Nazywam tę dziedzinę „twórczym programowaniem” (creative computing), który to termin zapożyczam bez zmian z bardzo wpływowego czasopisma „Creative Computing”, które wychodziło w latach 1974–1985. Określenie to zdaje mi się zadowalające i wystarczająco szerokie. Dodatkowo przypomina ono o tym, że w latach siedemdziesiątych i osiemdziesiątych społeczeństwo pokładało ufność w nowe technologie, kiedy dostęp do komputerów i umiejętności programowania zataczały coraz szersze kręgi i wielu podzielało entuzjazm w stosunku do kulturowego potencjału komputera.

Drugi rodzaj praktyk określam terminem „programowanie jako narzędzie badań” (programming as inquiry). Polegają one na korzystaniu z praktyk programistycznych w celu weryfikacji pewnych danych oraz odkrywania nowych koncepcji. Nie potrzeba wcale dysponować obszernym zbiorem danych, by badawczo wykorzystać narzędzia programistyczne. Program, który nie jest wyposażony w wiele danych, pomoże zrozumieć, na czym polega losowość, albo pozwoli zrozumieć właściwości ciągu Fibonacciego. Analizując zbiory zdjęć, wnikliwy eksplorator dowie się wiele o istotnych – choć ukrytych – danych: statystykach zdjęć nocnych i dziennych albo częstotliwości wykonywania fotografii w pomieszczeniach oraz pod gołym niebem. Tego typu uogólnione różnice (higher-level differences) stają się dostrzegalne po przeprowadzeniu analizy cech szczegółowych (lower-level features), takich jak kontrast czy jasność. Takie wykorzystanie programowania – programowania jako narzędzia dociekania – uważam za pomocne dla akademików i naukowców, którym pozwoli ono na eksplorację nowych konceptów oraz zaprojektowanie przyszłych, bardziej złożonych projektów.

Faktycznie jednak „twórcze programowanie” i „programowanie jako narzędzie badań” nie stanowią wcale rozdzielnych kategorii. Program stworzony do celów humanistycznych dociekań sam w sobie jest efektem twórczej pracy, cyfrowym artefaktem, który oddaje nowy sposób myślenia. A program do generowania tekstów bądź animacji jest także rodzajem eksploracji, dociekaniem tego, na jakich zasadach słowa do siebie przystają oraz jak kształt, kreska i kolor uzupełniają się wzajemnie w ruchu.