Jak zrozumieć coś intuicyjnie? 🌱

10 min

W swojej pracy nieustannie trafiam na nowe tematy i pojęcia, które muszę sobie przyswoić.

Bywa, że chodzi tylko o szybkie zdobycie wiedzy potrzebnej do wykonania konkretnego zadania. W takich chwilach nie buduję głębokiej kompetencji - wystarcza mi minimum, które pozwala ruszyć dalej. Wiem, że w najbliższym czasie do tej wiedzy już nie wrócę, więc uczę się tyle, ile trzeba - i ani odrobinę więcej.

Są jednak obszary, w których stawka jest inna. Chcę w nich nie tylko „radzić sobie”, ale stać się naprawdę dobra w tym, co robię, a wtedy nie wystarcza szybka optymalizacja pod bieżący cel. Szukam zrozumienia, które będzie intuicyjne, naturalnie obecne w moim sposobie myślenia i działania.

Żyjemy w ekscytujących czasach dla ludzi, którzy lubią uczyć się na własną rękę. Modele językowe potrafią cierpliwie i wyczerpująco tłumaczyć wszystko to, z czym jeszcze czujemy się niepewnie. W świecie, gdzie dostęp do wiedzy nigdy nie był łatwiejszy, kluczowe staje się pytanie: jak uczyć się tak, by ta wiedza naprawdę zapuściła korzenie?

Dlatego traktuję ten post jako swój „blueprint” nauki intuicyjnej – mapę, która pomoże mi wziąć książkę, otworzyć ChatGPT i świadomie, strategicznie stawiać kolejne kroki, aż zrozumienie zacznie układać się w spójną całość.

Czym jest rozumienie intuicyjne?

Możemy rozumieć jakiś termin na różne sposoby:

  • Rozumienie płytkie – potrafię powtórzyć definicję i rozpoznać zjawisko. Kontakt z tym pojęciem mnie nie zaskakuje; mniej więcej wiem, jak działa, ale biernie – nie umiem swobodnie odtworzyć definicji ani wyjaśnić użycia w kontekście. Muszę sobie aktywnie przypominać mechanizm.
  • Rozumienie głębokie – umiem zastosować w praktyce. Widzę schemat wejść i wyjść, rozumiem powiązania z innymi pojęciami, potrafię samodzielnie sformułować poprawną definicję i jestem jej pewna.
  • Rozumienie intuicyjnie – czuję, jak to działa, nawet bez wzorów i instrukcji. Rozpoznaję różne formy „ekspresji” tego zjawiska w świecie i potrafię przenosić koncept między domenami, stosując go w nowych sytuacjach.

Chcę rozpracować proces dochodzenia do poziomu rozumienia intuicyjnego , tak by za każdym razem wiedzieć, jak krok po kroku się za to zabrać.

Full disclosure - rozważania nad tym tematem (co to znaczy rozumieć coś intuicyjnie?) prowadziłam razem z ChatemGPT - poniższe etapy to wynik naszych wspólnych dyskusji nad tym, jak krok po kroku takie rozumienie budować.

Żeby oprzeć się na czymś konkretnym, wezmę świeży przykład z wczoraj: próbę zrozumienia, czym jest SDK (software development kit).

Budowanie rozumienia intuicyjnego

0. Definicja

Na początek warto sięgnąć po definicję. Według Wikipedii SDK to zestaw narzędzi dla programistów niezbędny w tworzeniu aplikacji korzystających z funkcjonalności danej biblioteki (np. Java Runtime Environment) pod daną platformę (np. system operacyjny Android), sprzęt (np. moduł GPS) itp.

Na SDK najczęściej składają się:

  • dokumentacja
  • pliki nagłówkowe dla danego języka programowania
  • przykładowe kody źródłowe
  • skompilowane biblioteki (w przypadku SDK dla jakiejś biblioteki)
  • kod źródłowy biblioteki (w zależności od licencji i typu SDK)

Już na tym etapie dobrze jest spróbować sparafrazować tę definicję własnymi słowami.

Moje obecne rozumienie jest takie: SDK to warstwa abstrakcji, która pozwala programistom szybciej i czytelniej tworzyć funkcjonalności osadzone w konkretnym kontekście. Być może właśnie tym różni się od zwykłej biblioteki. Biblioteki są z reguły agnostyczne wobec środowiska, natomiast SDK wydaje się łączyć logikę różnych komponentów w jedną całość, przypisaną do określonego systemu operacyjnego czy sprzętu.

Brzmi sensownie – choć wciąż nie mam pewności, czy to trafne ujęcie.

1. Ekspozycja

Kolejnym krokiem budowania rozumienia intuicyjnego wydaje się być zwiększenie własnej ekspozycji na dany termin.

Chodzi o to, by zobaczyć, jak dana definicja „żyje” w praktyce – czyli jakie narzędzia czy zjawiska faktycznie spełniają jej kryteria. Intuicja rozwija się wtedy, gdy możemy obejrzeć wiele instancji tego samego pojęcia w rzeczywistości.

Przykładami SDK są m.in.:

  • Google Cloud SDK - narzędzia i biblioteki do obsługi GCP
  • Stripe SDK - narzędzia do dodawania płatności w aplikacji
  • Android - narzędzia do dodawanie SMS-ów, połączeń głosowych, WhatsApp etc. do aplikacji.

Celowo wybieram przykłady najbliższe mojemu „mentalnemu rusztowaniu” – takie, z którymi już mam jakieś doświadczenie. Mam np. więcej doświadczenia z GCP niż np. z Androidem, stąd ten konkretny przykład bardziej do mnie przemawia.

Przeglądając dokumentację, zauważam kilka rzeczy:

  1. SDK nie jest jednolitym bytem – istnieją różne warianty pod konkretne konteksty, np. Google Cloud SDK for Go czy Google Cloud SDK for Python.
  2. Moje początkowe przypuszczenie (SDK = biblioteki/narzędzia + kontekst) zdaje się trafne. Każdy przykład ma podobny wzór: „X – zestaw narzędzi – dla Y – kontekst”. Kontekstem może być zarówno platforma (OS, sprzęt), jak i język programowania.
  3. „Narzędzia” w SDK to często API danego serwisu, ale też biblioteki, środowiska developerskie (np. debugger, emulator), dokumentacja, a czasem nawet gotowe pluginy czy szablony projektów.

2. Zabawa

Żeby dobrze coś zrozumieć, trzeba przenieść to ze sfery teoretyczno-językowej do rzeczywistości. Skoro znam już definicję i konkretne przykłady “materializacji” danego pojęcia w realnym świecie mogę spróbować się którymś z tych przykładów pobawić - tak, aby zbudować “pamięć mięśniową” zastosowania tej rzeczy w praktyce, pooglądać tę rzecz z różnych stron i w niej podłubać.

W przypadku SDK jest to dosyć proste - a w erze vibe codingu prostsze, niż kiedykolwiek. Pomyślałam, że zbuduję małą aplikację, która będzie miała na celu pomóc mi zrozumieć, jak i do czego można wykorzystać SDK

Do takich przypadków zazwyczaj wykorzystuję Cline z którymś z modeli Claude. W tym przypadku poprosiłam go po prostu o stworzenie bardzo prostej aplikacji z wykorzystaniem Stripe SDK - tak, abym mogła poczytać kod, zrozumieć składnię tego konkretnego SDK i zapoznać się z funkcjonalnościami, które można zaimplementować z jego użyciem.

Wynikiem była nieskomplikowana apka złożona z serwera HTTP i serwera API:

Fragment kodu mojej aplikacji
Fragment kodu mojej aplikacji

A tak prezentowała się w przeglądarce:

Aplikacja - "learning lab" Stripe SDK
Aplikacja - "learning lab" Stripe SDK

Aplikacja miała też zmockowaną stronę do zakupu produktów:

"Zakup" "produktów" w aplikacji
"Zakup" "produktów" w aplikacji

I mogłam zobaczyć, że rzeczywiście te zakupy logowane są po stronie Stripe:

"Zakupione" produkty widoczne w Stripe
"Zakupione" produkty widoczne w Stripe

Oczywiście aplikacja sama w sobie jest w zasadzie “do wyrzucenia”, a kod w wielu miejscach jest dziurawy i wyrzuca błędy. Podstawowe funkcjonalności jednak działają, a ja jestem w stanie prześledzić cały flow i zrozumieć w praktyce, do czego wykorzystuje się SDK (w tym przypadku Stripe SDK dla Pythona) - a to mi wystarczy.

3. Reprezentacje

Kolejnym krokiem “rozumienia intuicyjnego”, jaki podrzucił mi ChatGPT jest próba “przełożenia” idei z jednej formy na drugą - np. rysunek, metafora, równanie czy opowieść. Każda zmiana wymusza „przekodowanie” pojęcia w głowie i daje kolejne możliwości na przyjrzenie się temu, co chcemy zrozumieć.

Uwielbiam “wizualne metafory” różnych pojęć związanych z programowaniem czy designem tworzone przez Maggie Appleton. Wykorzystując mój Remarkable spróbowałam więc sama narysować, czym jest SDK.

Moja "wizualizacja" SDK
Moja "wizualizacja" SDK

Z ciekawości zapytałam ChataGPT, jak zwizualizowałby SDK. Odpowiedział tak:

"Wizualizacja" SDK wykonana przez ChatGPT
"Wizualizacja" SDK wykonana przez ChatGPT

Metafora “lego” przejawiała się w artykułach wyjaśniających SDK dość często, stąd nic dziwnego, że taki model mentalny się tutaj pojawił.

Swoją drogą, wszyscy “intuicyjnie” rozumiemy, czym jest lego, dlatego tak łatwo przenosimy to pojęcie na inne konteksty. Moim celem jest dojść do takiego samego poziomu zrozumienia SDK: rozumieć je na tyle dobrze, by dostrzegać „SDK-owatość” nawet w zjawiskach, które z programowaniem nie mają absolutnie nic wspólnego.

Spróbowałam też pobawić się Sorą i wygenerować wideo-wizualizację tego, czym jest SDK. Po kilku próbach, które wygenerowały, uhm… dość dziwne rezultaty, w końcu siadł mi taki prompt:

Please visualize what an SDK is. Don’t include any people or text in the video, but rather create an imaginary visual, artistic representation of what an SDK is. It can be abstract, yet it should feel familiar to people intuitively understanding the concept.

"Wizualizacja" SDK wykonana przez Sorę
"Wizualizacja" SDK wykonana przez Sorę

4. Alternatywy

Zgodnie z teorią strukturalizmu, nowe pojęcia zyskują znaczenie nie tyle przez połączenie nazwy z reprezentacją, co przez umieszczenie tej nazwy w kontekście, w systemie innych definicji, które już znamy. Pozwala nam to na rozróżnienie - X to nie Y, nie A, nie Z.

W naszym przypadku chcemy zrozumieć, jak SDK różni się od innych, podobnych pojęć takich, jak biblioteka, framework czy API. Ponownie korzystając z pomocy ChataGPT:

  • biblioteka to zbiór funkcji, klas czy modułów, które możesz wywołać w swoim kodzie, żeby nie pisać wszystkiego od zera. To jak zestaw narzędzi w skrzynce – np. młotek, śrubokręt. To Ty decydujesz, kiedy sięgnąć po młotek, a kiedy po śrubokręt. Przykładem jest np. NumPy w Pythonie – sama wybierasz, kiedy wywołać numpy.array() albo numpy.dot().
  • SDK to pakiet narzędzi, który producent jakiejś platformy albo usługi daje programistom, żeby łatwiej budowali aplikacje w tym ekosystemie. Jego zawartość to biblioteki + dokumentacja + przykłady kodu + narzędzia developerskie (czasem też kompilatory, debugery, testery). Jego celem jest uprościć interakcję z jakąś zewnętrzną usługą/systemem. To nie tylko skrzynka narzędziowa, ale cały zestaw do majsterkowania IKEA – masz nie tylko śrubokręt, ale też instrukcję, śrubki, klej, czasem nawet gotowe półprodukty. Przykładem jest np. Android SDK – daje Ci biblioteki do pracy z Androidem, emulator telefonu, dokumentację i narzędzia do budowy aplikacji.
  • framework to szkielet (ramy), w które wstawiasz swój kod. Framework ma swoje zasady, cykl życia i konwencje, a Twój kod żyje wewnątrz nich. Zamiast skrzynki narzędzi masz plac budowy z rusztowaniem – musisz dopasować się do jego kształtu. Ty wypełniasz rusztowanie cegłami (swoim kodem), ale konstrukcja już została narzucona. Przykładem jest np. Django (Python) – framework webowy, który narzuca strukturę aplikacji, sposób definiowania modeli, widoków, routingu.
  • API to interfejs – zestaw zasad, nazw metod, struktur danych, które mówią Ci jak komunikować się z danym systemem. Nie jest rzeczą materialną jak plik .dll czy .so. API to raczej kontrakt: „jeśli wywołasz tę funkcję z takimi parametrami, dostaniesz taki wynik”. To jak menu w restauracji. API to spis dań i sposób zamawiania – mówi Ci: „żeby dostać pizzę, powiedz kelnerowi orderPizza(size=large)”. Samo menu nie gotuje pizzy, tylko mówi, co możesz dostać i jak o to poprosić.

5. Szkolenie

Metoda Feynmana jest chyba znana wszystkim, którzy interesują się metanauką. Jej istota sprowadza się do „testowania” własnego zrozumienia poprzez próbę wytłumaczenia danego konceptu dwunastolatkowi (rzeczywistemu lub wyimaginowanemu), wychwycenia luk i następnie ich uzupełnienia.

Więc jeśli macie gdzieś pod ręką dwunastolatka, posadźcie go przed monitorem i dajcie proszę znać, jak zareaguje na taką definicję:

Wiesz, czym jest Facebook, prawda? (istnieje ryzyko, że polegnę już w tym miejscu, bo ponoć jest to już medium tylko dla boomerów). To teraz wyobraź sobie, że na swojej stronie internetowej chciałabym zaimplementować funkcjonalność, która pozwoli mi wyświetlać na niej kilka ostatnich postów z mojego profilu. Gdybym chciała to zrobić z wykorzystaniem “surowego” kodu, zajęłoby mi to dużo czasu i jest szansa, że zrobiłabym to w sposób, który spowoduje błędy. Na szczęście Facebook udostępnia zestaw narzędzi, który pozwala taką funkcjonalność zaimplementować dużo szybciej - takie gotowe “klocki”, które pozwalają mi na to, że mogę w prosty sposób - za pomocą kilku, a nie kilkuset linii kodu - powiedzieć “hej Facebook, w tym miejscu mają być widoczne ostatnie posty z mojego profilu”. Ponieważ Facebook wie lepiej, jak na różnego rodzaju platformach zaimplementować takie rozwiązanie, wykorzystując ich narzędzia mogę zminimalizować ryzyko, że coś pójdzie nie tak. Facebookowi jako platformie zależy, żeby jej użytkownicy budowali takie integracje, bo przyczynia się to do rozwoju popularności ich platformy - stąd decyzja o zbudowaniu, utrzymywaniu i udostępnianiu takich narzędzi. Te narzędzia - od konkretnej platformy, dla konkretnego kontekstu (np. języka programowania) to właśnie SDK.

Naturalnie pojawia mi się kilka hipotez, które postaram się zweryfikować - na przykład czy sytuacja, którą przywołałam, jest rzeczywistym przykładem wykorzystania SDK Facebooka? Albo czy rzeczywiście taka motywacja stoi za tym, że platformy decydują sie na stworzenie i utrzymywanie SDK?

Każda z tych hipotez wymaga weryfikacji – i to w tym tkwi siła tej metody. Można ją powtarzać tyle razy, aż wreszcie dochodzi się do wyjaśnienia, którego jest się pewnym w 100%.

6. Czas

Choć po tym całym procesie czuję, że intuicyjnie rozumiem, czym jest SDK, mam też świadomość, że to rozumienie może być niepełne. Mogę nie dostrzegać obszarów, w których wciąż brakuje mi wiedzy. Intuicja to rodzaj „powolnego gotowania” – podświadomość potrzebuje czasu, powtórek i kolejnych ekspozycji, żeby utrwalić obraz całości.

Dlatego teraz, znając już podstawy, będę bardziej wyczulona na ten koncept. Zwrócę uwagę na inne przykłady SDK, poszukam analogii w zjawiskach niezwiązanych z programowaniem, zbuduję kolejne projekty wykorzystujące różne zestawy narzędzi. W ten sposób krok po kroku będę pogłębiać i uszczelniać swoje rozumienie.

Podsumowanie

Ostatecznie uważam, że razem z AI udało mi się wypracować sensowny framework intuicyjnego rozumienia różnych tematów na własne potrzeby.

Teraz, mając cały proces rozpisany na kroki, będę go testować na kolejnych zagadnieniach – zarówno związanych z programowaniem, jak i zupełnie od niego niezależnych – a przy okazji dopracowywać i udoskonalać.

Ostatecznie dążę do tego, żeby stworzyć sobie własną “mentalną skrzynkę narzędziową” tak, aby uczyć się nowych tematów szybko i efektywnie - i chociaż AI nie jest w tym procesie konieczne, to jak widać może rzeczywiście wiele z tych etapów przyspieszyć.

pl