To był taki krótki, fajny i wymowny cytat na wstęp a teraz jeszcze jeden dłuższy ale równie fajny i przepełniony niebagatelną informacją :
Jeszcze metaforyczny rysunek i można zaczynać.
"Don't be blind,"
Na wzmianka o tym efekcie natrafiłem w fajnym kursie o tym "jak się uczyć" - Learning How to Learn, który jest w tej chwili dostępny na courserze. Efekt ten jest tam jest przedstawiony jako jedna z większych przeszkód w nabieraniu nowych umiejętności - no bo jeżeli wciąż powtarzamy te same schematy to trudno zaadoptować się do nowych podejść.
Żeby było bardziej naukowo wspomnimy o jednym z eksperymentów, który zademonstrował ów efekt. Generalnie była to scena ze szklanej pułapki 3 gdzie trzeba było odpowiednio przelewać wodę z jednego pojemnika do drugiego i do trzeciego.
Były dwie serie ćwiczeń gdzie jedna grupa rozwiązywała tylko drugą serię, w której istniało szybkie rozwiązywanie "równania" z użyciem tylko 2 z 3 zbiorników lub dłuższe z użyciem wszystkich trzech. Ta grupa bez problemów znalazła efektywne rozwiązanie z dwoma zbiornikami.
Druga grupa wcześniej robiła jeszcze inne ćwiczenie gdzie trzeba zawsze było użyć wszystkich trzech zbiorników i oni niestety w drugiej części eksperymentu zawsze używali wszystkich trzech zbiorników chociaż prostsze rozwiązanie z dwoma zbiornikami było w zasięgu reki.
Więcej info i dokładniejszy opis znajduje się w linku wikipedi poniżej - jest tam również wzmianka, iż uwaga od prowadzącego "nie bądźcie ślepi" pomagała znacznej ilość uczestników z grupy "z doświadczeniem" znajdować bardziej efektywne rozwiązanie.
Na końcu będzie więcej linków ale pewnie i tak nikt ich nie przeczyta także tutaj jest dobre miejsce na jeden najbardziej wyczerpujący :
I Kilka fajnych zeń cytatów bo jak mówiłem pewnie i tak nikt tych linków czytać nie będzie :
"When people test a theory, they look for evidence that is consistent with what they already believe rather than objectively assessing any evidence even if it might disconfirm their previously held belief"
"Einstellung refers to a person's predisposition to solve a given problem in a specific manner even though better or more appropriate methods of solving the problem exist. The Einstellung effect is the negative effect of previous experience when solving new problems. "
"The most famous example (...) is the Luchins' water jar experiment, in which subjects were asked to solve a series of water jar problems. After solving many problems which had the same solution, subjects applied the same solution to later problems even though a simpler solution existed"
ObjectAbstractFactoryBean
(a aktor nazywa się Sean Bean - czajcie jaki zajebisty się dowcip udał!!!)
Taka sytuacja - ktoś robi w Javie 6 od 5 lat. Ma masę przyzwyczajeń i wytrenowany mózg przez konkretną sytuację. Narysujmy sobie jak to może wyglądać koncepcyjnie na poziomie neuronów. Oczywiście słowo "koncepcyjnie" jest tu ważne i użyłem go po to aby uratować się od potrzeby dokładnego trzymania się jak te rzeczy wyglądają w rzeczywistości bo tego sam nie wiem - ale koncepcyjnie może wyglądać to tak :
I te trzy kuleczki mogą być siecią neuronową* (* - czytałem ostatnio, iż nie neurony są ważne a komórki gleiste - czy jakoś tak - ale to wszystko co tutaj opisuję jest "koncepcyjne" także bez znaczenia), która została zbudowana przez wspomniane 5 lat programowania w Javie. I teraz Np. mamy sytuację, iż trzeba zaimplementować zakup w sklepie. Siec neuronowa od razu podsunie ścieżkę rozwiązania "jak nazwać ten obiekt" - bo oczywiście TO musi być obiekt. A jak do tego używa się FRAMEWORKA to musi to być (Sean) Bean.
Jak z poziomu rozwiązywania problemów przejdziemy do bardziej ogólnego problemy nauki to zauważymy, EINsztellung stwarza wiele problemów bo mamy relatywnie ograniczone możliwości łączenia się nowych neuronów ze starą strukturą. I tak np. w konkretnym przykładzie uczymy się nowej koncepcji jaką jest Stream w Javie8 oraz jego zastosowania. Ponieważ nasz "arsenał poznawczy" składa się głównie z "Seana Beana Framework, Hibernate i Obiektów" to w ich kontekście będziemy definiować nowe pojęcie.
połączenie (koncepcyjne) jest jedno i jest słabe. Jest jedno bo mamy jedną (obiektowo-beanową) wizję świata. Tutaj pojawiają się takie koncepcje jak pamięć krótkotrwała, długotrwała itd ale w uproszczeniu z punktu widzenia nauki to jedno słabe połączenie może gwałtownie zaniknąć przez co zapomnimy jak tego Streama używać i nauka pójdzie w las.A z punktu widzenia zastosowania praktycznego widzimy Stream jako nową "Kolekcję Obiektów" i tylko w tym kontekście nasz mózg będzie generował rozwiązania. Widziałem już kilka prezentacji ludzi z Oracla gdzie napominają by traktować Streamy jako "Strumienie wartości" a nie "Kolekcje obiektów".
Teraz bliżej przyjrzymy się tym trzem zielonym neuronom gdyż tworzą one pewien spójny zbiór uzupełniających się informacji - taki zbiór pojęciowy w naszej głowie nazywamy Chunkiem.
Chunk
Czym jest chunk : https://www.quora.com/What-is-chunk-or-chunking-in-learning
Chunk - Zbiór informacji, który tworzy jakąś pojęciową całość. Nasze koncepcyjne neurony wyhodowane przez 5 lat Javy stworzyły takiego właśnie pięknego Chunka. Obiekt,Klasa,Enkapsulacja,Getter,DAO - to wszystko w ramach tego chunka jest spójne i gotowe do obrony swoich granic (co często widać na forach). I teraz pytanie co jeżeli mam inne chunki do których TAKŻE mogę odnieść nowe informacje? Czy to dobrze czy źle? Czy to pomoże czy przez zamieszanie przeszkodzi?
Z tego jak zrozumiałem ten cały mechanizm to jeżeli jakąś nową koncepcję można połączyć z dwoma lub więcej niezależnymi chunkami to bardzo bardzo dobrze!. Raz, iż powstaje więcej połączeń od nowej idei (ta niebieska kuleczka) a dwa, iż następuje połączenie pomiędzy dwoma chunkami jako takimi, które były niezależne ponieważ okazuje się, iż maja teraz ze sobą coś wspólnego. I wracając do przykładu ze Stream'ami - można je jednocześnie widzieć jako leniwa kolekcję obiektów jak i z drugiej strony jako abstrakcyjną formułę danych (w większości języków funkcyjnych podawany jest przykład z obliczeniem ciągu Fibonacciego przy pomocy streamów, które po prostu opisują w sposób jasny formułę obliczeń kolejnych elementów i to od użytkownika zależy gdzie w tej formule się zatrzyma). I teraz te koncepcje mogą zacząć się ze sobą łączyć. Czy Stream obiektów to Stream danych? Co musi się stać by obiekty nazwać Danymi? Same takie rozważania będą efektywnie utrwalać informacje w pamięci a do tego rozszerzać pole potencjalnych interpretacji nowych wiadomości.
Inny bardzo interesujący przykład. Z mojego doświadczenia programiści C# często dużo szybciej łapią scalę niż programiści maintenance Javy 7,6,5. W C# lambdy mieli od dawna. Jak pokazywałem flatMapy to często słyszałem "a tak tak, u nas jest takie LINQ bardzo podobne do tego". Tymczasem gdy programista Javy widzi po raz pierwszy w życiu jak metoda przyjmuje funkcje i zwraca funkcje to czasami mu pęka mózg (w sensie głowa robi się bardzo czerwona i tak drga nerwowo dolna warga czyli chyba jakiś wylew)
W kontekście nauki po raz kolejny dobra wydaje się formuła CR (CR to Code Retreat a nie Chrystian Ronaldo) gdzie po prostu zabrania się rozwiązywania zadań w pewien sposób aby uczestnicy poznali przez to nowe sposoby podejść. I nie jest to prosty process bo nie raz uczestnicy fakt - iż nie zdążyli z implementacją - odbierali bardzo osobiście i po to usuwa się ten kod aby ludzie odczepili ego od implementacji.
Aby nie było tak bardzo abstrakcyjnie poniżej kilka pomysłów na rozbudowę niezależnych programistycznych chunków
"Rozbuduj swą sieć z paleta języków"
Podobnie do Code Retreat niektóre języki usuwając pewne mechanizmy nadają interesujące ograniczenia, które mogą nas zmusić do szukania nowych podejść.
Ocaml
Niedługo startuje kurs online: Ocaml Mooc. Jest to druga sesja i z tego co zrozumiałem z pierwszej to w Ocaml mamy do czynienia z pewnym negatywem Javy.
Koncepcyjnie w OCamlu kod wygląda tak
kod immutable [DANGER DANGER DANGER ZONE] kod mutable [KONIEC DANGER ZONE]
W Javie w zasadzie zmiana wartości wszystkiego dookoła (nawet enkapsulowanego) jest (niekwestionowaną przez niektórych) codziennością także to by bardziej wyglądało w ten sposób :
[DANGER ZONE] poczatek programu [SAFE ZONE] Zaimplementowane 15 mechanizmów z "Effective Java" [KONIEC SAFE ZONE] koniec programu [DANGER ZONE]
No i jest zabawa "zaimplementuj rozwiązanie w sytuacji gdy kosztowne rytuały w kodzie wiążą się z mutowalnością".
Go
Podobno nie ma generyków. Jest to bardzo interesujące dlaczego w 2016 jedna z przodujących firm IT na świecie reklamuje język bez generyków. Czy programowanie Go wygląda jak programowanie w Javie 4? A może poza javą ta koncepcja sprawdziła się lepiej?
Kotlin
Żeby nie było, iż tylko programiści Javy mogą się czegoś nauczyć z innych języków. Jak chcesz w Scali pokazać na poziomie typów, iż czegoś może nie być to Option,Option,Option... które i tak samo może być nullem. Tymczasem Kotlin ma bardzo wygodne zabezpieczenie przed nullem na poziomie typów bez wchodzenia w Monady i inne takie tam.
Haskell
Tu nima obiektów i wielu rzeczy nima - Ultimate Code Retreat dla programistów Javy.
Na jesieni ma być kurs : https://www.futurelearn.com/courses/functional-programming-haskell
myślenie lateralne
Przy okazji tego artykułu można poruszyć ten temat. Autorem koncepcji jest Bono ale nie ten z U2 bo Edward de Bono. Generalnie tutaj kompletnie zrywamy z rutyną mechanicznego myślenia.
Np:
- Jest problem z deploymentem
- Jak byś go rozwiązał przy pomocy gabki, mikrofali i wody? (dokładnie tak)
- Gabka coś wchłania i potem to gdzies można wycisnąć - może coś rozlazłego da się zebrać w kupę i przenieść w inne miejsce.
- Mikrofala zwieksza temeperaturę i wysyła fale, zmienia naturę tego co w środku. Może kawałek aplikacji przenieść w miejsce gdzie będzie lepiej monitorowane
- Woda zmywa brud. Może warto niepotrzebną cześć aplikacji usunąć przed deploymentem?
- itd.
Linki
- http://dspace.brunel.ac.uk/bitstream/2438/2276/1/Einstellung-Cognition.pdf
- https://en.wikipedia.org/wiki/Einstellung_effect
- http://www.alleydog.com/glossary/definition.php?term=Einstellung+Effect
- https://www.edge.org/response-detail/11166
- http://randymatusky.com/2015/02/25/the-hidden-learning-potential-behind-the-einstellung-effect/