Kod

Czy w programowaniu jest miejsce na kreatywność?

Czy w programowaniu jest miejsce na kreatywność?

Darmowy kurs: „Szybki start w Pythonie»

Dowiedz się więcej

Niedawno nasza współpracowniczka Maria Darovskaya zadała na Twitterze pytanie: „Czy kodowanie to proces twórczy?”. To pytanie porusza ważne aspekty relacji między programowaniem a kreatywnością. Kodowanie można postrzegać jako sztukę, w której programiści wykorzystują swoje umiejętności i kreatywne myślenie do rozwiązywania problemów i tworzenia unikalnych rozwiązań. W świecie technologii, gdzie innowacja ma kluczowe znaczenie, zrozumienie programowania jako działalności twórczej może otworzyć przed programistami nowe horyzonty.

Początkowo planowaliśmy przeprowadzić wywiad tylko z jednym ekspertem w tej dziedzinie. Jednak liczba zainteresowanych osób okazała się znacznie większa, dlatego postanowiliśmy zebrać szczegółowe komentarze od kilku specjalistów jednocześnie.

Oto czterech utalentowanych programistów, którzy obalą mit, że programowanie jest pozbawione kreatywności. Ci specjaliści to Nie są artystami tworzącymi instalacje multimedialne w języku programowania Max. Stanowią raczej przykład tego, jak kreatywność można z powodzeniem zintegrować z programowaniem. Ich różnorodne umiejętności i unikalne podejście dowodzą, że programowanie i kreatywność mogą współistnieć, otwierając nowe horyzonty dla innowacji i oryginalnych rozwiązań.

Anton Lenev: „Brainfuck – czy to nie kwadrat Malewicza?”

CTO i programista w Viewst. Specjalizuje się w najnowocześniejszych technologiach i innowacyjnych rozwiązaniach programistycznych. Lubi cosplay, podcasting, obróbkę skóry, modelowanie 3D i druk. Aktywnie dzieli się swoimi przemyśleniami i doświadczeniami na Twitterze pod nazwą @m0rg0t.

Kreatywność to złożone i wielowymiarowe pojęcie. Pytanie o to, co można uznać za prawdziwą kreatywność, pozostaje otwarte. Jeśli kreatywność postrzegamy jako coś abstrakcyjnego i wzniosłego, pojawia się dylemat: jak powinniśmy odnosić się do dzieł takich jak Mona Lisa Leonarda da Vinci czy freski Michała Anioła w Kaplicy Sykstyńskiej? Te arcydzieła zostały zlecone, co podważa ich status jako wyrazu czystej kreatywności.

Czy można je uznać za wynik impulsu twórczego, czy osobistych emocji autorów? Jeśli tak, to jaka jest różnica między tymi dziełami a tymi samymi zleconymi Praca? Ten temat wywołuje wiele dyskusji wśród historyków sztuki i miłośników sztuki. Ważne jest, aby zrozumieć, że kreatywność może przejawiać się w różnych formach i kontekstach i nie zawsze zależy od warunków, w jakich powstaje dzieło.

Kreatywność i sztuka to wielowymiarowe kategorie, które mają różne definicje w zależności od opinii artystów, historyków sztuki i źródeł akademickich. Pojęcia te zależą zasadniczo od osobistych relacji, emocji i wcześniejszych doświadczeń zarówno twórcy, jak i odbiorcy. Percepcja sztuki jest kształtowana przez kontekst kulturowy i indywidualne doświadczenie, co czyni każde dzieło wyjątkowym. W ten sposób kreatywność staje się nie tylko procesem tworzenia, ale także złożoną interakcją między autorem a odbiorcą, opartą na ich osobistych doświadczeniach i uczuciach.

Rozważmy sytuację front-end developera, który ma za zadanie stworzyć landing page. Wybrał nowoczesny projekt opracowany dla projektu, zastosował najnowocześniejsze rozwiązania techniczne i wcielił w życie pomysły, które od dawna krążyły mu po głowie. W rezultacie stworzył wysokiej jakości landing page, który spełnia wszystkie współczesne wymagania i zawiera kreatywne rozwiązania. Później developer podzielił się swoją pracą. w open source, który stał się nowym standardem w tworzeniu landing page’y, i zyskał uznanie w środowisku zawodowym.

Gdyby inny programista osiągnął podobny rezultat, ale zastosował bardziej tradycyjne podejście, wykorzystując niestandardowe badania i nastawienie na sprzedaż, jego proces można by opisać następująco: „Zastosuj 20 gramów Reacta, dodaj trochę Reduxa i zaimplementuj renderowanie po stronie serwera — nic wielkiego, robiłem to wiele razy!”. Ten programista raczej nie będzie uważał swojej pracy za proces twórczy. Jeśli jednak użytkownik podziwia landing page tak samo jak w pierwszym przypadku, pojawia się pytanie: na czym polega różnica? To podkreśla, że ​​sukces projektu może zależeć nie od wybranej metodologii, ale raczej od rezultatu i doświadczenia użytkownika.

Tworząc landing page, nowicjusz wykazał się kreatywnością i przedstawił swoje pomysły. Uważał, że wprowadzenie oryginalnych elementów to akt kreatywności, który pozwala mu podejść do zadania w unikalny sposób. Należy jednak pamiętać, że innowacja musi być spójna z celami projektu i oczekiwaniami grupy docelowej.

Doświadczony programista może być Niezadowolony z napisanego kodu i jakości produktu. Może dojść do wniosku, że to „arcydzieło” można było stworzyć w zaledwie kilka minut, po prostu znajdując odpowiednie szablony w internecie.

Wzory w literaturze to schematy strukturalne, które pozwalają autorom budować fabuły w oparciu o wspólne zasady. W „Bohaterze o tysiącu twarzy” Joseph Campbell argumentuje, że wszystkie fabuły mitologiczne mają podobną podstawę. Według Borgesa istnieją tylko cztery podstawowe fabuły, a wszyscy autorzy w historii literatury jedynie je interpretują. Można zatem wnioskować, że wiele dzieł powstałych po epoce starożytnej opiera się na tych ugruntowanych wzorcach. Podkreśla to uniwersalność struktur fabularnych i ich wpływ na literaturę w różnych epokach i kulturach.

Kreatywność jest zawsze odbiciem wewnętrznego „ja” i unikalną ekspresją idei. W tym kontekście każdy projekt open source można postrzegać jako obiekt kreatywności, a nawet dzieło sztuki. Na przykład język programowania Brainfuck można porównać do kwadratu Malewicza. Ezoteryczne języki programowania nie mają celu biznesowego, lecz służą jako środek wyrażania myśli, idei, a nawet protestu przeciwko współczesnemu światu programowania. Te projekty pokazują, jak technologia może służyć do samoekspresji i jak kod może być formą ekspresji artystycznej.

Być może tak wyglądałby „Czarny kwadrat”, gdyby Malewicz tworzył dzisiaj. Fragment kodu na Brainfuck. Zrzut ekranu: Kirill Molokov / Skillbox Media

Terminy „kreatywność” i „sztuka” są wysoce subiektywne. Ostatecznie odbiór dzieła zależy od indywidualnej perspektywy zarówno programisty tworzącego produkt, jak i osoby go oceniającej. Ważne jest, aby zrozumieć, że każdy z uczestników procesu wnosi własną, unikalną interpretację i ocenę, co sprawia, że ​​kreatywność w programowaniu jest nie tylko wyrazem technicznym, ale i artystycznym.

Arkady Shvartsman: „Czy każdy obraz jest wynikiem kreatywności? Nie sądzę”.

Programista front-end w VK Teams, specjalizujący się w TypeScript i React. Poza swoją główną pracą aktywnie korzysta również z Golanga, Pythona 3, React Native, Kotlina, C#, Unity i Javy. Jego hobby to tworzenie gier, sprzęt komputerowy, sport i inwestycje. Tak różnorodne doświadczenie pozwala mu z powodzeniem radzić sobie z różnymi zadaniami w rozwoju i być na bieżąco z nowoczesnymi technologiami.

Na mojej uczelni był kurs „Podstawy kreatywności technicznej”, który kładł nacisk na podział pracy na zadania rutynowe i proces twórczy. Głównym celem była popularyzacja automatyzacji procesów, która pozwoliła studentom zrozumieć, jak optymalizować swoje działania i skupić się na bardziej kreatywnych aspektach swojej pracy. To podejście przyczyniło się do rozwoju innowacyjnego myślenia i efektywnego wykorzystania technologii w różnych dziedzinach działalności.

Podczas studiowania tego przedmiotu stale myślałem o możliwości zastąpienia pracy ręcznej algorytmami. Ta koncepcja była kluczowa dla tej dyscypliny. Praca twórcza obejmowała dwa rodzaje procesów:

  • robienie tego, czego nie da się zautomatyzować;
  • myślenie o tym, co i jak można zautomatyzować.

Pozostałe aspekty pracy to zadania rutynowe. Pozwala to wnioskować, że działania związane z nieświadomymi wyborami i ludzkimi preferencjami smakowymi mają charakter twórczy. Takich zadań nie da się zastąpić algorytmami, ponieważ wymagają indywidualnego podejścia i kreatywności.

W programowaniu zadania mogą być zarówno kreatywne, jak i rutynowe. Procesy twórcze obejmują opracowywanie nowych algorytmów, tworzenie unikalnych aplikacji, projektowanie interfejsów użytkownika i rozwiązywanie niestandardowych problemów. Zadania te wymagają kreatywności, innowacyjnego podejścia i dogłębnego zrozumienia tematu. Kreatywne programowanie pozwala programistom wdrażać swoje pomysły i znajdować efektywne rozwiązania, co sprawia, że ​​proces rozwoju jest ekscytujący i dynamiczny.

  • implementacja architektury;
  • projektowanie projektów dla zwierząt;
  • dobór technologii;
  • planowanie ryzyka.

Refaktoryzacja kodu i przepisywanie go do innych technologii to często rutynowe zadania. Jednak, jak zademonstrował zespół OZON na konferencji FrontendConf, procesy te można skutecznie zautomatyzować za pomocą translatorów drzew AST. Automatyzacja takich operacji nie tylko upraszcza pracę programistów, ale także znacznie przyspiesza proces aktualizacji i ulepszania kodu. Korzystanie z translatorów AST minimalizuje błędy ludzkie i poprawia jakość produktu końcowego, co jest ważnym aspektem w rozwoju oprogramowania.

Wiele czynności można wykonywać zarówno rutynowo, jak i kreatywnie — na przykład rysowanie i programowanie. Ostatecznie wybór między podejściem kreatywnym a rutynowym zależy od osoby i danego zadania. Zarówno w sztuce, jak i w programowaniu istnieją różne sposoby tworzenia, od ścisłych standardów po swobodną ekspresję. Każdy może znaleźć swoje własne, unikalne podejście do pracy, co czyni ją zarówno przyjemniejszą, jak i bardziej produktywną.

Malowanie akrylem metodą pouringu to popularna technika malarska polegająca na mieszaniu farb i nakładaniu ich na płótno. Proces może wydawać się prosty: wystarczy wybrać paletę kolorów i wylać je na podłoże. Jednak pomimo pozornej łatwości, malowanie akrylem wymaga kreatywnego podejścia i wyczucia kompozycji. Podobnie, rysowanie na podstawie szkicu, które można również wykonać maszynowo, nie zawsze jest prawdziwą sztuką. Ważne jest, aby zrozumieć, że proces twórczy i indywidualne podejście odgrywają kluczową rolę. Nieprzemyślana, rutynowa praca może być obecna zarówno w akrylowym malowaniu pouringowym, jak i innych metodach malarskich, ale jest to przemyślane podejście, które pozwala tworzyć wyjątkowe i ekspresyjne dzieła sztuki.

Waleryj Żyła: „Rozwój to jedna z najbardziej kreatywnych aktywności na świecie!”

Programista specjalizujący się w systemach zarządzania infrastrukturą miejską dla dużych miast. Jego główne obszary pracy obejmują programowanie back-endu i projektowanie baz danych. Obserwuj go na Twitterze: @ValeriiZhyla.

Kreatywność pojawia się tylko wtedy, gdy zadanie lub pomysł stanowi dla nas wyzwanie, skłaniając nas do myślenia i znajdowania innowacyjnych rozwiązań. Takie podejście pozwala nam rozwijać kreatywne myślenie i znajdować unikalne sposoby wdrażania pomysłów.

Kreatywność praktycznie nie istnieje w rutynowych zadaniach, takich jak malowanie guzików. Jednak w moim środowisku zawodowym rutyna jest rzadkością, spotyka się z nią nawet muzycy. Na przykład rozgrzewka palców na instrumencie może stać się rutyną, ale jest ważną i konieczną czynnością. Tak niewielkie koszty są obecne w każdym zawodzie, co pokazuje, że nawet praca twórcza ma w sobie elementy rutyny.

Tworzę oprogramowanie do zarządzania miastem. Niedawno odkryliśmy, że nasz największy klient, megamiasto, generuje tak dużo danych, że nawet wysokiej jakości baza danych nie jest w stanie ich obsłużyć. Stanęliśmy przed ograniczeniami sprzętowymi i kilkoma aspektami bezpieczeństwa, które należy wziąć pod uwagę. Stwarza to nowe wyzwania w zakresie optymalizacji systemów i zwiększania ich wydajności, aby zapewnić niezawodne i bezpieczne zarządzanie danymi miejskimi.

Zaczęliśmy szukać sposobów na zwiększenie wydajności już dobrze zoptymalizowanego systemu o dodatkowe 25%. Znaleźliśmy rozwiązanie, ale wymagało ono zmian architektonicznych w kilku kluczowych programach. Warto zauważyć, że rozwiązania tego problemu nie da się rozwiązać, po prostu przeszukując internet lub dodając kilka linijek kodu. To prawdziwe wyzwanie inżynieryjne, wymagające dogłębnej analizy i znacznego wysiłku. Budowanie aplikacji od podstaw, opracowywanie architektury i interfejsu o dużym obciążeniu oraz konfigurowanie i optymalizowanie komponentów to prawdziwa sztuka. Większość projektów angażuje zespół specjalistów, a zarządzanie nimi lub praca w zgranej grupie profesjonalistów jest równie ekscytująca. Synergia między uczestnikami pozwala na uzyskanie wysokiej jakości rezultatów i tworzenie efektywnych rozwiązań. Kluczowe jest, aby każdy członek zespołu posiadał niezbędne umiejętności i wspólną wizję, co przyczynia się do pomyślnej realizacji projektu. Przeprojektowywanie krytycznego dla misji oprogramowania starszej generacji, z naciskiem na wysokie wymagania dotyczące bezpieczeństwa i wydajności, to złożony, analityczny i kreatywny proces. Takie podejście wymaga starannej oceny istniejących systemów, zrozumienia ich architektury oraz wdrożenia nowoczesnych technologii, które nie tylko poprawiają funkcjonalność, ale także wzmacniają ochronę danych. Kluczowe wymagania dotyczące kreatywnego rozwoju obejmują terminowość i elastyczny budżet. W przypadku rozwoju niekomercyjnego lub projektu osobistego wymagania te mogą nie być spełnione. Dla mnie duża część mojej pracy to proces, który balansuje na granicy między tworzeniem abstrakcyjnych obrazów a skrupulatnym składaniem idealnego mechanizmu zegarowego. Proces ten wywołuje szeroką gamę emocji i wrażeń, czyniąc każde zadanie wyjątkowym i inspirującym. Niestety, pisanie testów i dokumentacji może tłumić kreatywność. W takich momentach możesz czuć się jak księgowy wykonujący monotonne zadania. To jednak tylko drobne trudności w pracy. Kreatywność pojawia się wszędzie tam, gdzie wymagane jest głębokie myślenie i analiza. Moim zdaniem, programowanie to jeden z najbardziej kreatywnych zawodów, wymagający nie tylko umiejętności technicznych, ale także kreatywnego podejścia do rozwiązywania złożonych problemów.

Sergey Korol: „Czasami czytanie dobrego kodu jest jak czytanie fikcji”

Techniczny Menedżer ds. Zapewnienia Jakości w Waverley z ponad 12-letnim doświadczeniem w branży IT. Jest członkiem komitetu programowego i aktywnym prelegentem na konferencjach poświęconych zapewnianiu jakości, takich jak QA Fest i Selenium Camp. Specjalizuje się w programowaniu w językach Java, TypeScript, Python i C++. Prowadzi konto na Twitterze @ss_korol i aktywnie uczestniczy w projektach open source.

Programowanie można uznać za sztukę wymagającą głębokiego zrozumienia i praktyki. Aby opanować tę dyscyplinę, konieczne jest nie tylko studiowanie materiałów szkoleniowych, ale także wnikliwa analiza kodu. Czytanie kodu innych programistów pozwala zrozumieć różne podejścia do rozwiązywania problemów, doskonalić umiejętności i poszerzać horyzonty. Zanurzenie się w prawdziwym kodzie pomaga w nawiązaniu połączenia między teorią a praktyką, co jest kluczowym aspektem udanego programowania.

Języki programowania stanowią podstawę tworzenia oprogramowania. Jednak to, co dokładnie powstanie na tym fundamencie – prosta aplikacja czy złożony system – zależy od wielu czynników, w tym kreatywności programistów, zastosowanych technologii i podejścia projektowego.

Pisarz raczej nie napisze bestsellera bez inspiracji licznymi dziełami autorów o różnym stylu. Podobnie w programowaniu, programista nie będzie w stanie identyfikować wzorców, tworzyć analogii architektonicznych, wprowadzać różnorodności do swoich podejść ani projektować elastycznego i czytelnego API bez studiowania kodu innych osób. Studiowanie prac innych profesjonalistów pomaga poszerzać horyzonty myślowe i poprawiać jakość własnych projektów. Jest to kluczowy aspekt rozwoju zawodowego w każdej dziedzinie kreatywnej.

Z jednej strony czytanie kodu wydaje się prostym zadaniem. Nasz mózg łatwo tworzy nowe skojarzenia ze znanymi symbolami, nadając im nowy kontekst i przestrzegając ustalonych zasad. Jednak jakość napisanego kodu znacząco wpływa na jego percepcję. Słabo ustrukturyzowany lub niejasny kod może utrudniać zrozumienie logiki i funkcjonalności, co ostatecznie komplikuje procesy rozwoju i utrzymania projektów. Ważne jest nie tylko czytanie kodu, ale także pisanie go w sposób zrozumiały dla innych programistów. Prawidłowa organizacja kodu i komentarze są kluczowe dla jego zrozumienia i łatwości pracy. Modele mentalne odgrywają kluczową rolę w naszym postrzeganiu świata i podejmowaniu decyzji. Modele te to uproszczone reprezentacje złożonych zjawisk, które pomagają nam analizować informacje i wyciągać wnioski. Pozwalają nam reagować na różne sytuacje szybciej i skuteczniej, korzystając z dotychczasowego doświadczenia i wiedzy. Zrozumienie modeli mentalnych pomaga optymalizować procesy myślowe, usprawniać podejmowanie decyzji i zwiększać efektywność w różnych dziedzinach życia. Korzystanie z odpowiednich modeli mentalnych może znacznie uprościć rozwiązywanie problemów oraz zwiększyć produktywność osobistą i zawodową.

  • idee oparte na naszych doświadczeniach;
  • strategie;
  • sposoby postrzegania otaczającego nas świata, które kierują naszymi działaniami.

Modele mentalne pomagają nam zrozumieć związek przyczynowo-skutkowy i nadać sens naszym wyjątkowym doświadczeniom życiowym. Kiedy nasze modele mentalne różnią się od modeli innych, może to prowadzić do interesujących, a czasem zabawnych sytuacji. Różnice w postrzeganiu i interpretacji zdarzeń stwarzają możliwości głębokiej komunikacji i zrozumienia, co podkreśla wagę bycia świadomym swoich modeli mentalnych i tego, jak wpływają one na interakcje z innymi.

Doświadczeni programiści często krytykują kod napisany przez innych. Dzieje się tak, ponieważ postrzegamy decyzje innych przez pryzmat naszych doświadczeń i preferencji. Mimo to inżynierowie o różnym wykształceniu i specjalizacji mogą skutecznie pracować w zespołach. Jak znajdują wspólny język? Osiąga się to poprzez kilka ważnych aspektów. Po pierwsze, konieczne jest otwarte omawianie podejść i dzielenie się opiniami, co sprzyja wzajemnemu zrozumieniu. Po drugie, praktyczne zastosowanie przeglądu kodu pozwala zidentyfikować niedociągnięcia i poprawić jego jakość. Ponadto, korzystanie ze standardów kodowania i dokumentacji pomaga zmniejszyć różnice między różnymi stylami programowania. Ostatecznie, udana praca zespołowa opiera się na szacunku dla doświadczenia innych i chęci uczenia się od siebie nawzajem.

  • standardy kodowania (np. przestrzeganie konwencji nazewnictwa, komentowanie);
  • wytyczne projektowe;
  • pojedynczy zbiór bibliotek i frameworków;
  • zrozumienie wzorców projektowych.

Prawo Millera, znane również jako reguła „7 ± 2”, odgrywa ważną rolę w rozumieniu kodu. Mówi ono, że człowiek może przechowywać w pamięci krótkotrwałej nie więcej niż 7 ± 2 obiektów. To ograniczenie komplikuje zrozumienie słabo ustrukturyzowanego kodu i wyjaśnia działanie nowoczesnych analizatorów statycznych, które generują ostrzeżenia o przekroczeniu dopuszczalnej liczby pól, metod, parametrów i innych elementów. Zrozumienie tej zasady pomaga programistom tworzyć bardziej czytelny i łatwiejszy w utrzymaniu kod, co z kolei poprawia jakość oprogramowania i upraszcza pracę zespołową.

Programowanie można postrzegać jako sztukę, która ujawnia się dopiero po przekroczeniu granic tego, co znane. Eksperymentowanie i nowe podejścia pozwalają nam przenieść uwagę z pytania „Jak rozwiązać problem?” na ważniejsze „Jak rozwiązać problem optymalnie?”. Takie podejście nie tylko pomaga oszczędzać zasoby firmy, ale także ułatwia proces dalszego utrzymania i rozwoju kodu innym programistom. W konsekwencji wdrożenie zoptymalizowanych rozwiązań staje się kluczem do pomyślnego funkcjonowania projektu i jego długoterminowego wsparcia.

Kod może przypominać fikcję — albo zachwyca myślą autora, albo rozczarowuje absurdalnością. Można w nim dostrzec ukryte znaczenia, a także docenić prostotę rozwiązań, logiczną strukturę i jasne komentarze. Czasami można dostrzec unikalny styl poszczególnych programistów, który chce się naśladować. W takich przypadkach programista nie tylko pisze kod; Tworzą prawdziwe dzieło sztuki.

Ciekawe komentarze z wątku na Twitterze

Długo i intensywnie zastanawialiśmy się, czy i gdzie je umieścić w artykule, aby zachować płynność i spójność tekstu. Ostatecznie zdecydowaliśmy się opublikować je tutaj, ponieważ naprawdę zasługują na uwagę.

Programowanie jako kreatywność to temat, który wywołuje wiele dyskusji. Oto trzy najlepsze tweety, które podkreślają różne aspekty tej idei. Pierwszy tweet podkreśla, że ​​programowanie wymaga kreatywnego myślenia i innowacyjnego podejścia do rozwiązywania problemów. Drugi tweet zauważa, że ​​tworzenie oprogramowania to proces, w którym programiści wykorzystują swoje umiejętności i wyobraźnię, aby ożywić pomysły w kodzie. Trzeci tweet podkreśla, że ​​programowanie, podobnie jak sztuka, ma różnorodne style i techniki, co czyni je wyjątkową formą kreatywności. Programowanie to nie tylko zestaw reguł; To sposób na wyrażenie siebie i generowanie nowych pomysłów.

Jak zwykle, JavaScript poniósł największy ciężar. Nie ma tu żadnej literówki. Pisanie w Pythonie jak w Putonie to również swego rodzaju awangarda. Zrzut ekranu: Kirill Molokov / Skillbox Media
Niektóre tweety są również kreatywne. Nominacja do nagrody „Najlepszy żart Runetu – 2021” w kategorii IT. Zrzut ekranu: Kirill Molokov / Skillbox Media

Tworzenie oprogramowania to jedna z najbardziej kreatywnych dziedzin. Nauczanie programowania to sztuka, w której instruktorzy Skillbox są prawdziwymi mistrzami. Wybierając kursy z sekcji „Programowanie”, robisz krok w kierunku stania się wybitnym specjalistą technicznym, porównywalnym do Leonarda da Vinci czy Picassa XXI wieku. Opanuj niezbędne umiejętności i odkryj świat nieograniczonych możliwości w dziedzinie programowania.

Przeczytaj także:

  • Open Source dla juniora: gdzie aplikować, aby rozszerzyć swoje portfolio
  • Złe rady: jak oblać rozmowę kwalifikacyjną i z pewnością zostać odrzuconym przez kandydata
  • Gamifikacja: 6 zasad psychologii behawioralnej w tworzeniu aplikacji