Zrozumienie czterech podstawowych pojęć z teorii informatyki. Celem nie jest referat teoretyczny. Celem jest pokazanie, że te pojęcia realnie wpływają na rozumienie, ocenę i projektowanie systemów i ich funkcji.
Etap I – praca indywidualna (2 lekcje)
Każdy losuje jedno pojęcie z listy. Tematem pracy grupy jest jednak związana z pojęciem zasada podana na drugiej stronie
Logika
Entropia
Model
Abstrakcja
Zadania indywidualne
Zrozumieć pojęcie
Wybrać jedno realne case study z informatyki lub życia:
błąd systemu,
nieudane wdrożenie,
paradoks logiczny,
problem z danymi.
Opisać:
Na czym polega problem?
Gdzie w nim widać dane pojęcie?
Jakie są konsekwencje jego niezrozumienia?
Przygotować założenia, szkic strony HTML/CSS:
Struktura sekcji
Nagłówki
Miejsce na diagram lub przykład
Strona ma być prosta. Kluczowa jest tu treść. Należy ja wygenerować. Ma być jednak poprawna (nie okropna).
Etap II – grupy eksperckie (3 lekcje)
Osoby z tym samym pojęciem tworzą grupę ekspercką.
Zadania grupy
Wybrać najlepsze case study.
Ujednolicić teorię.
Wyeliminować błędy i uproszczenia.
Połączyć pomysły w jedną spójną stronę prezentacyjną.
Strona powinna zawierać:
definicję pojęcia,
jeden wyraźny problem praktyczny,
analizę,
prosty przykład,
wnioski.
Ważne: Nie tworzymy „encyklopedii”. Tworzymy przekonującą narrację problemową.
Celem projektu jest stworzenie aplikacji w React (JSX), prezentującej interaktywne infografiki ukazujące rozwój kultury, literatury i technologii jako złożony, wielowymiarowy proces.
Efektem końcowym będzie wspólna aplikacja rozwijana w jednym repozytorium GitHub. Build produkcyjny należy raz w tygodniu umieścić na serwerze pozwalającym na wygodne przeglądanie treści. Back-end nie jest wymagany.
2. Struktura zespołów i role
Każdy zespół jest trzyosobowy. W każdej grupie występują trzy wyspecjalizowane role:
Rola
Główna odpowiedzialność (oprócz regularnego developmentu)
Koordynator Standardów Technologicznych
spójność struktury komponentów, standardy kodu, integracja z częścią wspólną
Koordynator Analizy Danych i Logiki
poprawność struktury danych, relacji, walidacji i transformacji danych w aplikacji
Koordynator Poprawności Merytorycznej
poprawność merytoryczna treści oraz ich właściwe odwzorowanie w modelu danych i interfejsie
Kluczowe zasady współpracy
Każdy koduje i dodaje nowe funkcjonalności.
Role określają główny wymiar odpowiedzialności w zespole.
Decyzje są podejmowane wspólnie, ale każdy lider pilnuje jakości w swoim obszarze.
Mechanizm tworzenia zespołów
Wszyscy uczestnicy samodzielnie dzielą się na 3 równe grupy specjalistyczne:
technologiczne,
analityczne,
merytoryczne.
Następnie losowo tworzone są zespoły projektowe tak, aby w każdym znalazł się jeden lider z każdej grupy.
3. Modele infografik i poziom trudności
Każdy zespół wybiera jeden model wizualizacji:
Model
Poziom trudności
Oś przejść – Zmiany postrzegania świata
Easy
Równoległe osie – Asynchroniczność modernizmów
Normal
Sieć wpływów – Kultura bez epok
Normal
Cywilizacja warstwowa – Struktury procesów i fale wydarzeń
Hard
Drzewo rozwoju – Ewolucja form
Hard
Dokładne opisy poszczególnych modeli znajdują się na stronie 2. żaden model wizualny nie może powtórzyć się więcej niż 2 razy. Każdy zespół może wybrać dla siebie dowolny okres lub dowolna tematykę, które na ich infografice będę prezentowane domyślnie za pomocą filtrów, ale powinna istnieć możliwość prezentowania wszystkich danych. Poziomy trudności wynikają z:
złożoności logiki wizualizacji,
liczby zależności między elementami,
potrzeby zaawansowanego modelowania danych.
4. Organizacja repozytorium
Wszystkie zespoły pracują w jednym repozytorium GitHub.
Struktura
/src /core → część wspólna (layout, routing, komponenty bazowe) /data → wspólna baza danych /axis-model /parallel-model /network-model /layers-model /tree-model
Zasady
Każdy model jako osobny folder.
Plik CODEOWNERS przypisuje folder do konkretnego zespołu.
Zmiany w folderze zespołu wymagają jego akceptacji.
Folder /core współtworzony wyłącznie przez Koordynatorów Technologicznych.
Folder /data współtworzony przez Koordynatorów Merytorycznych.
Koordynatorzy Analizy odpowiadają za funkcje transformujące dane.
5. Zakres odpowiedzialności osób w zespołach
Koordynator Standardów Technologicznych
ustala strukturę folderów i komponentów,
dba o wygląd i spójność UI,
pomaga przy integracji elementów zespołu z częścią wspólną.
Koordynator Poprawności Merytorycznej
spójność kategorii, tagów i relacji.
wybór wydarzeń i dzieł do bazy,
odpowiada za komunikatywność infografiki i wizualne przedstawienie treści w UI.
Koordynator Analizy Danych i Logiki
tworzy i sprawdza bazę danych (historyData),
pilnuje poprawności relacji między elementami,
odpowiada za filtrowanie i sortowanie danych w aplikacji.
6. Zwinna metodyka pracy – uproszczony Scrum
Czas realizacji: ok. 1 miesiąca. Dokładny termin oddania zostanie doprecyzowany po trzech tygodniach.
Struktura pracy: 4 sprinty
ustalenie zakresu danych, projekt struktury technicznej, makiety wizualne
implementacja podstaw wizualizacji, pierwsza integracja z danymi
rozwój interaktywności, poprawa estetyki, testy spójności
optymalizacja, refaktoryzacja, finalna integracja
Cotygodniowe rytuały
Daily Stand-up (5 min) Każda osoba odpowiada: Co zrobiłem? Co robię dziś? Co mnie blokuje?
Porozmawiaj z LLM na temat hooka useContext i przetestuj przykłady. Zacznij od prompta:
Stwórz przykładową aplikację w React używającą Vite. Chodzi o pokazanie, kiedy warto użyć hooka useContext zamiast przekazywania propsów.
Wymagania:
1. Pokaż co najmniej jeden przypadek użycia useContext (np. dane użytkownika, motyw, język aplikacji, ustawienia globalne).
2. Pokaż prosty przykład "przed" użyciem useContext, gdzie dane są przekazywane przez propsy w kilku poziomach komponentów.
3. Pokaż "po" użyciu useContext – te same dane są dostępne w głębokich komponentach bez props drilling.
4. Kod powinien być czytelny, działający w projekcie Vite + React.
5. Dodaj komentarze wyjaśniające, dlaczego w danym miejscu użycie useContext jest przydatne.
Przeanalizuj poniższy przykład, a następnie go uruchom. Czy działa zgodnie z oczekiwaniem?
import React, { useState } from"react";functionApp() {const [count, setCount] =useState(0);consthandleIncrement= () => {// Błąd: oba wywołania używają starej wartości countsetCount(count +1);setCount(count +1); };return ( <divstyle={{ padding: "20px" }}> <h1>Błędne zwiększanie licznika</h1> <p>Licznik: {count}</p> <buttononClick={handleIncrement}>Zwiększ dwa razy</button> </div> );}exportdefault App;
React grupuje wiele zmian stanu lub propsów w jednym renderze, zamiast renderować komponent osobno po każdej zmianie. Jeśli w jednej funkcji wywołasz setState kilka razy, React nie wykona tyle renderów, ile wywołań tylko zrobi tylko jeden render na koniec. Poprawna wersja:
consthandleIncrement= () => {// Poprawnie: każda aktualizacja korzysta z aktualnej wartościsetCount(prev=> prev +1);setCount(prev=> prev +1); };
Przykład z tablicą
import React, { useState } from"react";functionApp() {const [items, setItems] =useState([]);constaddItems= () => {// Błąd: oba wywołania używają starej wartości itemssetItems([...items, "A"]);setItems([...items, "B"]); };return ( <divstyle={{ padding: "20px" }}> <h1>Błędne dodawanie elementów</h1> <buttononClick={addItems}>Dodaj A i B</button> <ul> {items.map((item, index) => ( <likey={index}>{item}</li> ))} </ul> </div> );}exportdefault App;
Napisz poprawną wersję addItems wykorzystującą prev
Przykład poniżej pokazuje, że wygląd Bootstrapa 5 można zmieniać (bez SCSS), korzystając z kaskady CSS oraz zmiennych CSS wbudowanych w framework.
Nadpisanie zmiennych globalnych (:root) zmienia cały motyw aplikacji, natomiast nadpisanie zmiennych w kontenerze działa tylko lokalnie, w obrębie danej sekcji. Nadpisywanie zmiennych komponentu (np. przycisków) jest bezpieczniejsze i bardziej przewidywalne niż klasyczne nadpisywanie właściwości typu background-color. Spróbuj zmieniać wartości zmiennych i poprzenosić między style sekcjami, żeby zobaczyć, jak kaskada i dziedziczenie CSS wpływają na wygląd.