Spotykam się ostatnio z osobliwym podejściem do przeróżnych wiadomości tyczących się programowania. Mogę je określić dość zaskakująco jako nadmiar “chęci rozumienia” lub ewentualnie “nieuzasadnioną dociekliwość”. Dotyczy to bardzo wielu narzędzi używanych w zasadzie każdej dziedzinie programowania – jak języki, środowiska czy biblioteki – oraz większości jego aspektów.
Czym to się objawia? Otóż symptomem jest pragnienie dogłębnego zrozumienia jakiegoś mechanizmu w sposób jak najszerszy i jak najgłębszy jednocześnie – zanim jeszcze spróbuje się go zastosować. Ten pęd to wiedzy dla samej wiedzy skutkuje najczęściej pozyskaniem dużego zasobu informacji, z których sensownym połączeniem i – przede wszystkim – stosowaniem są później pewne, a często spore, kłopoty.
Czy twierdzę więc, że nadmiar wiedzy szkodzi? Bynajmniej. Chodzi mi raczej o chęć zadawania raczej pytań w rodzaju “jak to działa?” niż “jak tego użyć?”. Sądzę bowiem, że zdecydowana większość programistycznej wiedzy ma charakter czysto użytkowy i jako taka jest na tyle przydatna, na ile daje się użyć w praktyce. Koder powinien być raczej przygotowany na poszukiwanie potrzebnych informacji w trakcie rozwiązywania danego problemu, a nie na kompletne poznanie tematu przez przystąpieniem do pracy.
Jeśli aczkolwiek życzymy sobie poznać głębiej jakieś zagadnienie z racji tego, że jest ono interesujące, wszystko jest w porządku. Jeśli jednak chodzi nam tylko o osiągnięcie zamierzonego celu, nie musimy poznawać rozgałęzień każdej drogi, która do niego prowadzi. Jak zawsze, najważniejsze jest zachowanie odpowiedniej równowagi.
To czy duza chec zrozumienia (duze wnikanie) jest uzasadnione (poprawne) zalezy od celu jaki chce sie osiagnac. Rozni ludzie maja rozne podejcie do zycia i rozne cele. Latwo mozna wyroznic 2 mocno kontrastujace. Pierwszy cel to poprawne wykonywanie zadan jakie stawia przed nami zycie, radzenie sobie w szkole i w pracy. Rzeczywiscie jesli taki jest cel czlowieka to duzo prosciej i bezpieczniej (stabilniej) przyjac postawe ktora proponuje Xion, czyli rozszerzenia swojej wiedzy w zaleznosci od potrzeb, bez zbednego zaglebiania sie (pojscie najprostrza droga). Tzn. mozna byc uczniem “kujonem” i koderem “rzemieślnikiem” :) Drugie podejscie jest bardzo odmienne od pierwszego. Polega na duzym zaglebianiu sie w nowa wiedze, rozlozeniu jej na czesci i polaczenie z wiedza nabyta wczesniej w taki sposob, aby powstal czysty, spojny (zamkniety) model logiczny. Dazy sie do tego aby w umysle zbudowac uproszczony model swiata, ktory objawia sie w postaci wyobrazni. Skutkiem jest to, ze widzac jakis problematyczny mechanizm analizujemy go i automatycznie utozsamiamy z tym znajdujacym sie w naszej swiadomosci, dzieki temu mamy poczucie ze doskonale go rozumiemy, widzimy wszystkie zaleznosci i mozemy przewidywac. Dobrze zbudowany model swiata jest “glowka szpilki” w stosunku do morza informacji potrzebnych do opisania jego w taki sposob aby mozliwe bylo zinterpretowanie go przez roznych ludzi. Dlatego tez duzo ciezej zapomniec o czyms co sie rozumie (cos co jest powiazane wieloma zaleznosciami z reszta) niz gole informacje (ktore sa b. slabo powiazane). Nie jest prawda ze zrozumienie wynikajace z zaglebiania sie w istote jakis zagadnien moze byc niepraktyczne, czy tez moze wystepowac problem z wykorzystaniem tej wiedzy – jest calkowicie odwrotnie. Jesli nie umiemy zastosowac czegos to znaczy ze nasze mentalne mechaznizmy sa bledne – niezgodne z rzeczywistymi a nawet sprzecznie wewnetrznie. Kazdy czlowiek dziala po czesci w ten sposob (w przeciwnym razie nie moglby zyc – nie bylby inteligetny), szkoda tylko ze niewiele osob jest tego swiadoma i nie podaza prawidlowa droga ;p
@puchaty/I zgadzam się. Sam lubię dogłębnie poznać temat przed przystąpieniem do pracy.
Każda godzina poświęcona na poznawaniu tematu niepotrzebnie to dla nas godzina stracona, a (jeśli pracujemy) dla pracodawcy dodatkowa godzina do opłacenia, która mogła zostać wykorzystana na wykonanie zadania. Model Xiona (to brzmi jakby Xion był autorem i jakimś psychologiem :D ) jest po prostu modelem ekonomicznie poprawnym, a puchaty to niepoprawny idealista :P
Zgadzam się, że podejście do tej sprawy jest w dużym stopniu indywidualne.
I tak dla jednej osoby dobrze poznanie zagadnienia jest niezbędne, aby wykonać jakąś praktyczną pracę z nim związaną. To może być zaleta, bo większe jest prawdopodobieństwo osiągnięcia sukcesu. Ale to może też być wada, jeśli pojawią się nieprzewidziane trudności – ‘sztywna’ wiedza może wtedy utrudnić bycie elastycznym i kreatywne podejście do problemów.
Inni będą preferowali uczenie się przez praktykę i rzeczywiste zastosowania.
Naturalnie w obu przypadkach zależałoby nam na osiągnięciu wspomnianego przez puchatego ‘uproszczonego modelu świata’. Znów to, jak do niego dojdziemy jest, jak sądzę, kwestią indywidualną. Zgadzam się jednak z tym, że kluczowe jest wytworzenie jak największej liczby zależności między informacjami, bo wtedy rzeczywiście trudniej jest takie wiadomości zapomnieć. Poznając jakieś zagadnienie od strony teoretycznej musimy zwykle sami sobie takie zależności tworzyć w umyśle. Kiedy zaś dochodzimy do czegoś w praktyce, jest prawdopodobnie większa szansa, że skojarzymy sobie nasze działania z czymś, co robiliśmy już wcześniej, i te zależności powstaną spontanicznie.
Nie mogę się jednak zgodzić z tym, że każdą wiedzę można od razu zastosować w praktyce i że w przeciwnym przypadku świadczy to o błędnych ‘mechanizmach mentalnych’. Nie trzeba chyba szukać daleko, żeby stwierdzić, że między teoria a praktyką przepaść bywa baaaardzo duża (przykład pierwszy z brzegu: inżynieria oprogramowania).
Asmodeusz:
Przeczytaj poczatek mojej wypowiedzi, ten kawalek o celach :)
Np. nie wyobrazam sobie jak mozna zrobic cos perfekcyjnego bez totalnego zaglebiania sie w dziedzine. Polecam zapoznac sie z takimi ideami jak TQM, etc.
Xion:
“Nie mogę się jednak zgodzić z tym, że każdą wiedzę można od razu zastosować w praktyce”
Nie mówiłem o wiedzy (w znaczniu informacji) tylko o zrozumieniu. Jesli rozumie sie jakies mechnizmy to nie ma problemu z ich wykorzystaniem.
Poprzednio zapomnialem wspomniec ze warto zaglebiac sie w rzeczy istotne, tzn. podstawowe i uniwersalne (stad tez niechec do rzeczy malo istotnych, przemijajacyh technologi etc.). Takie podejscie moze znacznie przyspieszyc i uproscic przyswajanie nowej wiedzy, a takze daje duze mozliwosci dedukcyjne (na dobrych podstawach mozna budowac).
Trafił swój na swego – dwa filozofy :)
Wg mnie trzeba po prostu znaleźć równowagę między teorią a praktyką.
Co do używania czegoś zamiast zagłębiania się w “jak to działa”, to jest przecież nic innego jak enkapsulacja – podstawowa zasada programowania obiektowego i programowania w ogóle. Szkoda, że nie da się jej zastosować do matematyki :(
Bardzo dobry przykład Reg (odnośnie tego co napisałem wyżej) :) Nie warto zagłębiać się w rzeczy duże – nieuniwersalne tzn. takie mocno rozbudowane, oparte na podstawach logiki i matematyki. Trzeba ukryć to co jest niezmienne, a na zewnątrz wyprowadzić tylko to co jest dynamiczne (enkapsulacja). Takie podejście ma bardzo dużo zalet.
No ale jak ukryć coś co jest niezmienne w czystej(!) logice, czyli w tym za pomocą czego buduje się tą niezmienność? ;p Z oczywistych przyczyn nie da się. Na szczęście (;p) da się wprowadzić w tą czystą logikę pewne zasady (zabrudzając ją) – elementy niezmienne, tym samym ograniczyć jej funkcjonalność, inaczej mówiąc – skonkretyzować ją, po czym wyprowadzić jej interfejs (ukrywając to co wcześniej uznaliśmy za oczywiste – zasady). Tak właśnie powstaje wszystko od … przez wzory użytkowe po klasy w programach etc.
To że mówisz “Szkoda, że…” nie oznacza ze świat jest niedoskonały i mogłoby być lepiej. IMO problem tkwi w Tobie :) Przejawia sie tutaj podejście podobne do tego które można zaobserwować u Xiona i u wielu innych ludzi, “Nie chce zrozumieć, chce tylko wykorzystać” (sry za porównania) ;p Takie podejście w dużej części przypadków jest skuteczne, ale nie pozwala na wejście na wyższy poziom, ponad “rzemieślnika”/”kujona” ;)
// Dorzucę rekordowo duży komentarz
LOL