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ść.
Możemy rozumieć jakiś termin na różne sposoby:
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).
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ę:
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.
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.:
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:
Google Cloud SDK for Go
czy Google Cloud SDK for Python
.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.Ż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:
A tak prezentowała się w przeglądarce:
Aplikacja miała też zmockowaną stronę do zakupu produktów:
I mogłam zobaczyć, że rzeczywiście te zakupy logowane są po stronie 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.
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.
Z ciekawości zapytałam ChataGPT, jak zwizualizowałby SDK. Odpowiedział tak:
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.
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:
numpy.array()
albo numpy.dot()
.orderPizza(size=large)
”. Samo menu nie gotuje pizzy, tylko mówi, co możesz dostać i jak o to poprosić.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%.
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.
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ć.