Nauka przez analogię, czyli sztuka popełniania błędów

Nauka przez analogię, czyli sztuka popełniania błędów

Programistów, czy inżynierów w ogóle, widzi się często jako osoby, które na co dzień zajmują się rozwiązywaniem nowych, nierozwiązanych wcześniej problemów. O ile w ogólności jest w tym ziarno prawdy, to rzeczywistość jest jednak taka, że bardzo mała część problemów z jakimi spotykamy się w codziennej pracy wymaga rzeczywiście innowacyjnych rozwiązań.

Wielu początkujących programistów nie bardzo zdaje z tego sprawę i w efekcie marnuje swój czas próbując wynaleźć koło na nowo. Tymczasem czasem warto schować ambicje w kąt i zamiast samemu tworzyć nowe rozwiązanie, zastosować inną, skuteczniejszą technikę – małpowanie ze zrozumieniem, zwane też czasem nauką przez analogię.

Czego nauczyła nas szkoła?

Przeprowadźmy mały eksperyment myślowy. Wyobraź sobie, że znów jesteś uczniem szkoły. Wstajesz rano, pakujesz plecak, sprawdzasz plan – pierwsza lekcja to fizyka. Jedziesz do szkoły, lekko zaspany wchodzisz do sali i siadasz w swojej ławce. Dzień jak codzień, jak gdyby nigdy nic. Wtedy wchodzi ona – nauczycielka. Uśmiecha się podejrzanie i rozgląda się po sali, a do Ciebie powoli zaczyna docierać przerażająca prawda – dzisiaj piszecie sprawdzian.

Jeśli zawsze byłeś przykładnym uczniem (oczywiście, że byłeś 😉 ) i nigdy nie spotkało Cię coś takiego, to musisz użyć wyobraźni. Jeśli jednak byłeś jak większość dzieciaków, to z pewnością dasz radę przypomnieć sobie taką sytuację. To nic, każdemu mogło się zdarzyć. Mogłeś przecież zapomnieć albo z jakiegoś powodu nie było Cię na lekcji, na której nauczycielka zapowiadała sprawdzian. Nie ma się czym martwić, za tydzień możesz poprawić ocenę. Teraz jest jednak teraz i nie ma już ucieczki. Przygotuj długopis i wyciągnij kartkę.

Na tablicy nauczycielka zapisuje trzy zadania, po czym siada obok i diabolicznym wzrokiem rozgląda się po sali. Nie ma szans użyć ściągi czy zasięgnąć pomocy kolegów. Ci z resztą wyglądają na niemniej zaskoczonych niż Ty. W takiej sytuacji pozostają tylko dwa wyjścia – poddać się albo improwizować. Poddać się bez walki jest niehonorowo, więc wybierasz tą drugą opcję. I tu zaczynają się schody.

Fizyka na poziomie szkoły średniej jest bardzo intuicyjna. Praktycznie wszystko, czego uczą podręczniki zostało wymyślone przez naukowców z różnych epok na podstawie czystych obserwacji. Można się wręcz zastanawiać jak to się stało, że na odkrycie niektórych rzeczy trzeba było czekać aż do XVII wieku. Jednocześnie fizyka to jeden z tych przedmiotów, z którymi uczniowie mają najwięcej problemów. Powodów może być wiele, ale jednym z nich jest na pewno ogromna asymetria pomiędzy trudnością odkrycia i opisania jakiegoś zjawiska, a trudnością jego zrozumienia, kiedy już dysponujemy takim opisem.

Krótko mówiąc, masz pecha. Gdybyś się wcześniej przygotował, to do zaliczenia sprawdzianu wystarczyłby Ci talent przeciętnego trójkowego ucznia, a teraz musisz wznieść się do poziomu Galileusza i Newtona. Oczywiście może się okazać, że jesteś kolejnym wielkim geniuszem, ale jak pokazuje praktyka, większą szansę masz na krótką lekcję pokory i ponowną próbę w terminie poprawkowym.

W sumie wydaje się to dosyć oczywiste. Przez długie lata edukacji nieraz mieliśmy okazję się o tym przekonać, a mimo to w dorosłym życiu staramy się nierozsądnie często na siłę odkrywać coś nowego. W samym odkrywaniu nie ma oczywiście nic złego, ale tylko pod warunkiem, że stoi za nim dobrze uzasadniona potrzeba. Bo jeśli próbujemy rozwiązać na nowo dawno już rozwiązany problem, to nasz wysiłek jest niczym innym jak zwykłym marnowaniem czasu.

Dlaczego wykłady są nudne?

Z drugiej strony przyswajanie dobrze usystematyzowanej wiedzy nie zawsze jest łatwe. Dotyczy to właściwie całej ścieżki edukacyjnej już od pierwszych klas podstawówki, ale najbardziej daje się we znaki na studiach. Możemy tam zobaczyć jak profesorowie i doktorzy, eksperci w swoich dziedzinach, przygotowują i wygłaszają wykłady, starając się przekazać jak najwięcej spragnionemu wiedzy tłumowi studentów.

Wielkość tego tłumu bywa różna i uzależniona jest często nie tylko od ilości studentów na roku, ale również (a może nawet bardziej) od samego wykładowcy. Na każdej uczelni znajdziemy i dobrych i złych wykładowców, a opinia o nich ma nieraz niewiele wspólnego z ich faktyczną wiedzą w danej dziedzinie. Jest za to mocno związana z pewną umiejętnością, którą nie wszyscy zdołali posiąść. Umiejętnością opowiadania historii.

Cały problem polega na tym, że sposób w jaki ludzki mózg najlepiej przyswaja informacje znacznie różni się od tego, w jaki sposób te informacje są przez niego później organizowane. Można w skrócie powiedzieć, że najlepiej uczymy się metodą prób i błędów, a kiedy tych prób wykonamy wystarczająco dużo, nasz mózg tworzy model będący uogólnionym rozwiązaniem problemu. Możemy go później wykorzystać do rozwiązywania podobnych problemów, już bez potrzeby popełniania tak dużej ilości błędów.

Proces ten można najłatwiej zauważyć obserwując w jaki sposób uczą się małe dzieci, na przykład dopasowując klocki o różnych kształtach do odpowiednich otworów. Później w szkole uczą się one bardziej abstrakcyjnych rzeczy, takich jak rozwiązywanie równań, ale również robią to metodą prób i błędów, rozwiązując szereg zbliżonych do siebie zadań.

Brzmi to trochę jak zaprzeczenie tezy z eksperymentu myślowego ze sprawdzianem, ale na szczęście tylko pozornie. W całych naszych rozważaniach pominęliśmy jeden istotny czynnik – prawdopodobieństwo popełnienia błędu. Jest ono zasadniczo różne w różnych przypadkach i to właśnie od niego zależy sensowność zastosowania metody prób i błędów.

Nauka przez analogię

Przeciętnemu studentowi opanowanie rachunku różniczkowego zajmuje kilka tygodni. Isaac Newton musiał poświęcić na to kilka lat. Różnica między nimi jest taka, że dzisiejsi studenci mają okazję obserwować wykorzystanie rachunku różniczkowego w praktyce. Przychodzą na zajęcia i na żywo widzą proces rozwiązywania zadań z użyciem tego narzędzia. Sir Newton nie miał takiej możliwości – nie znał nikogo, kto mógłby mu pokazać choć kilka przykładów. Studenci mają profesorów, przykłady w podręcznikach i filmy na YouTube. Nie potrzebują wymyślać rachunku różniczkowego, na co mają niewielką szansę, ale mogą łatwo nauczyć się go naśladując innych.

Podobnie ma się sprawa z rozwiązywaniem prostych równań w szkole podstawowej, czy nawet wkładaniem kolorowych klocków w otwory o odpowiednim kształcie. We wszystkich tych przypadkach mamy najpierw możliwość obserwowania kogoś innego (nauczyciela lub rodzica) rozwiązującego dany problem na naszych oczach. Bogaci w taką obserwację możemy sami przystąpić do próby rozwiązania i jest nam w ten sposób o wiele łatwiej niż gdybyśmy mieli wymyślić wszystko od nowa.

Właściwie jeden z najstarszych mechanizmów nauki, jaki można zaobserwować zarówno u ludzi jak i u wielu gatunków zwierząt, polega na naśladowaniu zachowań innych osobników. Dzieci mają naturalną skłonność do naśladowania zachowań rodziców, a później zachowań szkolnych kolegów oraz innych osób z otoczenia. Przez naśladowanie uczymy się mówić i wchodzimy w pierwsze interakcje społeczne, a później tą samą metodą zdobywamy masę nowych umiejętności w ciągu całego życia.

Co ciekawe w przypadku umiejętności manualnych wydaje nam się to całkiem intuicyjne – wycinanki z papieru, malowanie, gra w piłkę nożną, obsługa różnych urządzeń – to rzeczy, których w oczywisty sposób uczymy się przez naśladowanie innych. Z kolei w przypadku umiejętności abstrakcyjnych, takich jak wspomniane wcześniej rozwiązywanie równań czy tworzenie programów komputerowych, o wiele trudniej jest nam zauważyć, że zdobywamy je w dokładnie taki sam sposób – obserwując jak to robią inni i próbując zrobić to samo.

Co daje małpowanie ze zrozumieniem?

Nauka przez naśladowanie innych ma trzy zasadnicze zalety:

  1. Mamy pewność, że coś w ogóle da się zrobić, co pozytywnie wpływa na naszą motywację podczas podejmowania kolejnych prób.
  2. Dobrze znamy pożądany efekt końcowy, więc łatwo jest nam ocenić, czy robimy postępy.
  3. Z grubsza mamy pojęcie w jaki sposób powinien przebiegać proces rozwiązywania danego problemu, więc nie musimy go sami wymyślać.

W przypadku nauki budowania karmnika dla ptaków wydaje się to dosyć proste – patrzymy w jaki sposób przyciąć deski, jak i gdzie wbić gwoździe i podejmujemy próbę. W przypadku pisania programów komputerowych musimy się najpierw nauczyć operować pewnymi abstrakcjami, żeby móc prowadzić sensowne obserwacje.

Tak naprawdę deski, gwoździe, młotek czy karmnik dla ptaków też są pewnymi abstrakcjami, ale je znamy od dziecka. Co innego w przypadku zmiennych, pętli, funkcji, klas, wątków, socketów i deskryptorów plików. To jest część teoretyczna, którą musimy poznać i to najlepiej nie przez wykucie definicji na pamięć, tylko przez obserwowanie w jaki sposób można tych tworów użyć. I podejmowanie samodzielnych prób.

Później z resztą jest podobnie – nie mamy na ogół potrzeby wymyślania własnych algorytmów, wzorców projektowych ani najlepszych praktyk korzystania z systemu kontroli wersji. Zamiast popełniać klasyczny błąd wymyślania wszystkiego od nowa, lepiej jest szukać podobnych rozwiązań i albo użyć ich wprost, albo się nimi “zainspirować”.

Nawet jeśli nie wyjdzie za pierwszym razem, to i tak w końcu wyjdzie szybciej niż przy pisaniu wszystkiego od zera. Lepiej jest świadomie popełnić kilka małych błędów niż nieświadomie popełnić jeden duży, bo na końcu zawsze liczy się efekt.

• • •

Taki oto miałem dzisiaj luźny przekaz. Jeśli podobają Ci się takie przemyśleniowe wpisy, to koniecznie daj mi znać w komentarzu! Kolejne wpisy techniczne już niebawem, ale chciałbym też poeksperymentować z różnymi formami i Twoja opinia na ten temat jest dla mnie ważna.

A jeśli nie polubiłeś jeszcze mojej strony na Facebooku i nie zapisałeś się na mój newsletter, to gorąco Cię do tego zachęcam. Dzięki! 🙂

Zobacz też inne wpisy:

Komentarze

  1. Cześć, niedawno trafiłem przypadkiem na twój blog. Wkręcił mnie artykuł mnie artykuł o kolejkowaniu procesów. Świetne się go czytało, a widzę że pozostałe wpisy są równie dobre. Rzadko można trafić na dobrej jakości kontent w języku polskim :). Pozdrawiam

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *