niedziela, 15 maja 2011

Dlaczego się nie uczymy?

"Dlaczego się nie uczymy?" - To tytuł prezentacji, która pojawiła się nie tak dawno an portalu infoq : Why Dont We Learn. Prezenter opisuje mechanizmy jakie towarzyszą zdobywaniu nowych umiejętności a całość zespolona jest w prawdziwą(lub nie) historię z jego życia. Kto chce może obejrzeć prezentacje, natomiast poniżej opiszę 4 etapy zdobywania wiedzy według modelu NLP. Weźmy za przykład naukę umiejętności pisania czystego kodu.


Niekompetencja nieświadoma - nie wiem, że nie wiem


Wyobraź to sobie. Zainteresowałeś się programowaniem jeszcze w szkole średniej gdzie na zajęciach informatyki tworzyłeś pierwsze programy wypisujące po sto razy z rzędu słowo DUPA na ekran monitora. Zauważyłeś, że proces kreacji programu komputerowego generuje pozytywne uczucia, więc poświęcałeś mu coraz więcej i więcej czasu zostawiając w tyle niedzielnych informatyków. Być może zacząłeś pisać programy komercyjnie (cz nielegalnie), poszedłeś na studia gdzie tylko utwierdziłeś się w przekonaniu, że jesteś jednak kimś wybitnym a świadectwem tego były wytworzone serwisy PHP ,które przeplatały linie HTMLa i SQLa ale przecież tak doskonale działały i wyglądały. Innym dziełem był program wisielec napisany w jednej linijce instrukcji "for".


Pewnego dnia, na jeden z tysiąca możliwych sposobów docierają do ciebie informacje burzące twoja homeostazę informatyczną - twój kod jest chu**wy. Takie zdarzenie może przybrać wiele form :

  • wkleiłeś kod na forum i zostałeś zjechany
  • pochwaliłeś się kodem na rozmowie rekrutacyjnej i zostałeś zjechany
  • ktoś odziedziczył twój kod i akcie wybuchu frustracji zjechał cię

Jest to moment krytyczny ponieważ powyższe zdarzenie powoduje aktywację naturalnych mechanizmów obronnych jak "confirmation bias" (nie wiem jakie jest polskie tłumaczenie) czy cały wachlarz samo-oszukiwań zawierający się na "dysonans poznawczy". Opiszę kiedyś bliżej te mechanizmy jakkolwiek w skrócie będzie to wyglądać tak, że twój umysł podświadomy będzie szukał potwierdzenia, że ludzie na forum to debile, osoba rekrutująca na pewno nie zna się na rzeczy bo nie umiała dobrać krawata do swetra zaś osoby które odziedziczyły twój kod to w zasadzie tez debile bo tylko debile nie potrafią operować jednoliterowymi nazwami zmiennych
Gdy Jednak uda ci się opanować chochliki umysłowe dalej jest już z górki.


Niekompetencja świadoma - już wiem, że nie wiem


Wiesz, że twój kod jest niedoskonały ale nie wiesz jaki powinien być. Co robić? Trzeba odnaleźć informację i na ich bazie zdobyć nową wiedzę - nic prostszego. W tym przypadku wpisujesz w google frazę "czysty kod" i chłoniesz wiedzę. Wiedzę można chłonąć w sposób poprawny i niepoprawny (drugi model celebrowany w większości polskich szkół). Problem "Jak się uczyć" to temat rzeka i warto samemu się nim zainteresować traktując jako swoistą meta-wiedzę o dobywaniu nowych umiejętności. Poniżej jeden z masy ciekawych linków :
Dreyfus model of skill acquisition


Kompetencja świadoma - już wiem, że wiem


Trudno stwierdzić, kiedy następuje przejście do tego etapu w przypadku tematu czystego kodu.
Zdobywasz nową wiedzę, uczestniczysz w dyskusjach. Pojawiają się kolejne problemy ale masz wystarczającą bazę wiedzy by znaleźć odpowiedź na większość z nich. Zaczynasz sam optymalizować swoja pracę i zdobytą wiedzę przekazywać innym. W pewnym momencie zauważasz, że kiedy myślałeś o tym czy zamknąłeś drzwi w samochodzie powstał całkiem zgrabny kawałek kodu. Własnie przeszedłeś do ostatniego etapu :


Kompetencja nieświadoma - nie myślę o tym, że wiem

Ten stan łatwiej wytłumaczyć na przykładzie jazdy rowerem czy samochodem. To stan kiedy już nie myślisz w którą stronę idzie dźwignia skrzyni biegów gdy wrzucasz piaty bieg bo całą swoją uwagę skupiasz na bluzganiu kierowcy przed tobą. W tym stanie obydwie te czynności wychodzą ci perfekcyjnie.


Będąc na tym etapie tworzysz dobry kod głównie skupiając się na ogólnej architekturze, ryzykach i problemach które czekają dwa lub trzy kroki przed tobą. I kiedy czujesz w palcach swoje doświadczenie i pływasz w poczuciu mistrzostwa kodu jakiś debil na forum mówi ci, że coś można jeszcze zrobić lepiej....