Kaczuszka Programisty
Kaczuszka programisty
Programiści mają metodę szukania błędów, która nazywa się „metodą gumowej kaczuszki” (rubber duck debugging).
Stała się szerzej znana dzięki książce Andrew Hunta i Davida Thomasa “Pragmatyczny programista” (The Pragmatic Programmer), wydanej w 1999 roku. Pomysł jest bardzo prosty: jeśli kod nie działa i nijak nie można zrozumieć dlaczego, programista stawia obok siebie gumową kaczuszkę i zaczyna tłumaczyć jej swój kod. Co dzieje się w każdej linijce, skąd bierze się dana wartość, dokąd jest przekazywana i co powinno wydarzyć się dalej.
I gdzieś w trakcie tego tłumaczenia programista nagle się zatrzymuje: “Tutaj pobieram dane, potem przekazuję je tutaj, następnie funkcja powinna... Chwileczkę”.
Kaczuszka oczywiście nic nie powiedziała.
Dowiedziałam się o tej metodzie już po tym, jak odkryłam w Krakowie sklep z gumowymi kaczuszkami. Jest ich tam mnóstwo - kaczuszki różnych profesji, postacie, podróżnicy, muzycy. Ogólnie rzecz biorąc, są przezabawne. I bardzo spodobała mi się myśl, że takiej kaczuszki można używać nie tylko przy programowaniu.
Na przykład do ćwiczenia rozmów. Po przeprowadzce do innego kraju czasami bardzo brakowało mi możliwości wcześniejszego przećwiczenia zupełnie zwyczajnych sytuacji. Zwłaszcza wtedy, kiedy język już znasz, potrafisz ułożyć sobie zdanie w głowie, ale powiedzenie go żywemu człowiekowi z jakiegoś powodu okazuje się znacznie trudniejsze.
Można poprosić kaczuszkę o lek w aptece. Można powiedzieć jej, że ma się umówione spotkanie na konkretną godzinę. Można kilka razy powtórzyć zdanie w innym języku, które za nic nie chce zabrzmieć tak, jak powinno. Kiedy później trzeba będzie powiedzieć to samo w aptece, przynajmniej nie będzie to już pierwszy raz.
I wcale nie musi chodzić o język obcy. Kaczuszce można po raz pierwszy powiedzieć: “Chciałabym porozmawiać o podwyżce” - i posłuchać, jak to w ogóle brzmi. Potem powiedzieć jeszcze raz, zorientować się, że w życiu nie powiedziałabym tego właśnie w taki sposób, znaleźć inne sformułowanie i spróbować ponownie.
Z kaczuszką można przećwiczyć trudną rozmowę, przeczytać tekst, który później trzeba będzie przeczytać przed ludźmi, opowiedzieć jej to, czego właśnie się uczymy. Można jej zaśpiewać, jeśli śpiewanie przy kimś na razie trochę przeraża. W ogóle podoba mi się pomysł, żeby coś ważnego najpierw powiedzieć tam, gdzie niczym nie ryzykujemy.
Kaczuszka nie oceni wymowy, nie zdziwi się prośbą o podwyżkę i nie zrobi dziwnej miny, jeśli za piątym razem zdanie nadal brzmi źle. Można zaczynać od początku tyle razy, ile się chce.
Kaczuszce można też ponarzekać i tutaj, moim zdaniem, sprawdza się wręcz doskonale. Można wrócić do domu, posadzić ją przed sobą i opowiedzieć, jaki okropny był dzisiejszy dzień. Ponarzekać na szefa, pozłościć się na człowieka, który działa nam na nerwy, opowiedzieć, co zrobił, co należało mu odpowiedzieć i co najchętniej odpowiedziałoby się teraz.
I wcale nie trzeba w tym momencie być obiektywnym ani rozpatrywać sytuacji ze wszystkich stron. Kaczuszka nie zacznie bronić drugiej osoby, nie zaproponuje spojrzenia na sprawę z innej perspektywy i nie powie, że tamten człowiek na pewno miał swoje powody. I nikomu niczego nie powtórzy.
Czasem to już całkiem dużo.
Najbliższy pierwotnej metodzie programistów jest jednak jeszcze inny sposób - można po prostu spróbować o czymś pomyśleć na głos. Nie rozwiązywać problemu, nie urządzać sobie samodzielnie konsultacji psychologicznej i nie zadawać wcześniej przygotowanych pytań. Po prostu wybrać coś, co akurat zajmuje nam głowę, posadzić przed sobą kaczuszkę i zacząć jej o tym opowiadać.
Mówić wszystko, co przychodzi do głowy na ten temat. Można przeskakiwać z jednego wątku na drugi, powtarzać się, wracać, urwać zdanie w połowie. Można coś powiedzieć i od razu zorientować się: “Nie, właściwie wcale tak nie myślę”.
I właśnie tutaj robi się ciekawe, dlaczego tak podoba mi się pomysł mówienia na głos. Kiedy myślimy po cichu, myśl może dość długo krążyć mniej więcej po tej samej trasie. Nie musimy przy tym kończyć zdań, tłumaczyć tego, co wydaje nam się oczywiste, ani szczególnie dbać o to, jak jedna myśl łączy się z drugą. Kiedy zaczynamy opowiadać, coś się zmienia.
W psychologii poznawczej istnieje pojęcie „samowyjaśniania” (self-explanation). Proces ten jest badany od kilku dekad. W klasycznej pracy Michelene Chi i jej współpracowników analizowano, w jaki sposób studenci pracują z gotowymi rozwiązaniami zadań z fizyki. Studenci, którzy później lepiej radzili sobie z zadaniami, częściej nie tylko czytali rozwiązanie, ale wyjaśniali sobie, dlaczego wykonano dany krok, łączyli go ze znanymi już zasadami i lepiej zauważali miejsca, których tak naprawdę nie rozumieli.
Później efekt ten badano także w innych pracach. Powstały również metaanalizy wskazujące, że samowyjaśnianie może pomagać w rozumieniu i uczeniu się. Jednocześnie samo wypowiadanie wszystkiego, co pojawia się w głowie, i próba wyjaśnienia czegoś nie są dokładnie tym samym. W metaanalizie badań nad “myśleniem na głos” (think aloud) Mark Fox, K. Anders Ericsson i Ryan Best stwierdzili, że samo wypowiadanie bieżących myśli przeciętnie nie poprawiało trafności wykonywania zadań. Kiedy jednak proszono ludzi o opisywanie lub wyjaśnianie własnych myśli i działań, sposób wykonywania zadania już się zmieniał.
Dlatego z kaczuszką jednak bym rozmawiała. Na głos albo przynajmniej półgłosem.
Na przykład: “Kaczuszko, nie mogę zdecydować, co chcę dzisiaj robić. Miałam iść na siłownię, ale kompletnie mi się nie chce. Chociaż powinnam się ruszać, ostatnio mało się ruszam. Mogę pobiegać. Nie, biegać też nie chcę. To może w ogóle niczego nie chcę? Nie. Siedzieć w domu też nie chcę. Chcę wyjść. Po prostu nie chcę dzisiaj nigdzie jechać i nie mam ochoty na ludzi. Ale spacerować chcę. Mogę przecież po prostu pójść na długi spacer. Dlaczego właściwie uznałam, że aktywność fizyczna koniecznie musi być treningiem?”
Zaczęłyśmy od tego, że nie mogę się zmusić do wybrania treningu, a skończyłyśmy na tym, że najwyraźniej całkiem dobrze wiem, czego chcę.
Oczywiście nie zawsze tak będzie. Można przez dziesięć minut opowiadać kaczuszce o swoim życiu i nie dojść do żadnego odkrycia. W końcu to tylko kaczuszka. Ale podoba mi się sam proces.
W głowie bardzo łatwo zostawić myśl w skróconej postaci: “nie chcę”, “muszę”, “boję się”, “nie wiem”. Kiedy opowiadamy komuś, nawet gumowemu, ten skrót trzeba stopniowo rozwinąć: “Nie chcę, bo...”, “Muszę, bo...”, “Boję się, że...”, “Nie wiem, ale wiem przynajmniej to...”. I czasami własne dokończenie zdania okazuje się zaskakujące.
Chyba właśnie na tym polega dla mnie największa zaleta kaczuszki. Niczego za człowieka nie rozwiązuje, nie udziela rad, nie zadaje właściwych pytań i nie próbuje doprowadzić do pożytecznego wniosku. Można z nią ćwiczyć, można jej czytać, śpiewać, narzekać, złościć się, opowiadać o czymś, czego nijak nie udaje się poukładać w głowie. I po prostu słuchać tego, co samemu się przy tym mówi.
Oczywiście do tego wszystkiego gumowa kaczuszka nie jest konieczna. Można rozmawiać z figurką, kubkiem albo dowolnym innym przedmiotem zdolnym wystarczająco długo zachowywać zainteresowane milczenie. Ale ponieważ można dziś kupić naprawdę luksusowe gumowe kaczuszki, nie widzę powodu, żeby odmawiać sobie dobrego narzędzia pracy.
Źródła
Hunt, A., Thomas, D. (1999). The Pragmatic Programmer: From Journeyman to Master. Addison-Wesley Professional.
https://books.google.com/books?id=5wBQEp6ruIAC
Chi, M. T. H., Bassok, M., Lewis, M. W., Reimann, P., Glaser, R. (1989). Self-Explanations: How Students Study and Use Examples in Learning to Solve Problems. Cognitive Science, 13(2), 145-182.
https://onlinelibrary.wiley.com/doi/10.1207/s15516709cog1302_1
Bisra, K., Liu, Q., Nesbit, J. C., Salimi, F., Winne, P. H. (2018). Inducing Self-Explanation: A Meta-Analysis. Educational Psychology Review, 30, 703-725.
https://doi.org/10.1007/s10648-018-9434-x
Fox, M. C., Ericsson, K. A., Best, R. (2011). Do Procedures for Verbal Reporting of Thinking Have to Be Reactive? A Meta-Analysis and Recommendations for Best Reporting Methods. Psychological Bulletin, 137(2), 316-344.
https://pubmed.ncbi.nlm.nih.gov/21090887/