# Загально
## Трейнери
Деякі скіли потрібно "прокачати", щоб зменшити cognitive load в майбутньому.
### Schulte
Базовий тест на увагу. Довести до <30 сек
### Organization of Dots
Базовий тест на візуалізацію. Зробити 100 сесій (якщо автогенеровані тести)
### Клавіатурний тренажер
Впевнено набирати пітонячий код, повний незручних знаків
https://typing.io/lesson/python/mercurial/merge.py/1
### Lexem detect
Маючи матрицю коду (як в Шульте) знайти всі копії певної лексеми.
В подальшому лексема може ускладнюватись до шаблона.
## Машини (візуалізації)
### Ці магічні коробочки
#### Думки (пропозиції)
Сеттінг:
- є числа, є коробочки, є команид
- число можна викликати по його числу, але якщо ми знаємо число, то навіщо кликати число? Нічого цікавого, короче
- а ось якщо число знаходиться в іменованій коробочці, то можна викликати "число з коробочки X", і нам в команді не потрібно вказувати це число, достатньо знати в якій воно коробочці
- коробочка -- складна штука, бо у неї:
- є заводський номер
- є людське ім'я
- може бути порожньою
- а може бути з числом. Число всередині, ім'я -- назовні
- кілька коробочок в ряд можуть утворити композит -- список
- коробочки в списку називаються "елементи"
- у списку також є ім'я. На відміну від числової коробочки, у спискової коробочки може бути кілька імен.
- список має спеціальні фіксовані імена 0,1,2,3,4,... які називаються "індексами". Коже індекс стоїть навпроти однієї коробочки, але індекс не приклеєний до коробочки. Тобто, якщо коробочка з списку видаляється, то індекс залишається на місці, а коробочки справа з'їжджають вліво щоб заповнити порожнє місце
-
Правила:
- числа можна класти у коробочки
Важливо:
- потрібно наробити скіл візуалізації
- потрібно натренувати бачити невідоповідність правилам, бачити помилки
- потрібно натренувати бачити концепт в незвичних місцях
Сцени:
- SWAP
- 2 коробочки, 2 числа, можна класти кілька чисел у коробочку, можна викликати число по числу, перенос числа
- 2 коробочки, 2 числа, можна класти кілька чисел у коробочку, не можна викликати по числу, тільки по імені коробочки, перенос числа
- 2 коробочки, 2 числа, максимум одне число в коробочці, виклик по імені, перенос числа
- 3 коробочки, 2 числа, максимум одне число, виклик по імені, перенос числа
- 3 коробочки, 2 числа, максимум одне число, виклик по імені, копіювання числа
- 2 коробочки, 2 числа, максимум одне число, 3 імені, виклик по імені, перенос імені
- концепти:
- сцена
- очистка сцени
- коробочки
- можна створити
- можуть бути порожні, можуть містити числа
- на коробочки можна наліпити кілька імен, можна від'єднати ім'я
- мають заводський унікальний номер
- заводський номер є іменем і коробочкою одночасно
- коробочка без імені існувати не може. Є дві ситуації:
- коли всі імена (включаючи заводський номер) від'єднали, коробочка знищується (її підбирає сміттєзбірник)
- без імені коробочка може бути як проміжний результат, але тільки якщо в кінцевому результаті вона отримує ім'я або її заводський номер десь зберігається
- імена
- імена унікальні на сцені, не може бути двух однакових імен на різних коробочках
- існують тільки як наліпки кудись
- не можна одне і те ж ім'я наліпити на дві коробочки в одній сцені
- але можна мати два імені на одній коробочці
- заводські номери та тентаклі у коробочок
- кожна коробочка має один унікальний заводський номер
- коробочка може випускати тентаклі, і приліплювати свої тентаклі у різні місця
- по тентаклю легко відшукати коробочку ("потягни за тентакль")
- об'єкти в коробочках
- порожнеча
- це окремий об'єкт
- у нього завжди є ім'я None, яке не можна нікуди перемістити
- також може пускати тентаклі
- і на нього також можна ліпити імена
- числа
- списки
- виглядають як лінійка, або рулетка, без міліметрових позначок
- позначки на лінійці починаються з 0, 1, 2, 3, ...
- між позначками можуть розміщуватись числа або кінці тентаклів
- окрім останньої позначки -- її немає
- всі числа або кінці тентаклів стоять чітко в ряд
- якщо між двома об'єктами в списку треба показати порожнє місце, то на це місце протягує свій тентакль порожнеча (None)
- є кілька операцій зі списками:
- отримати значення елементу по індексу
- видалити елемент з будь-якого місця списку
- видалити послідовність елементів з будь-якого місця списку
- скопіювати список
- скопіювати частину списку
- скомбінувати два списки у один
- мутабельність
- деякі об'єкти можна змінювати, наприклад списки
- деякі не можна, наприклад числа
- візуалізація: незмінні об'єкти залиті прозорою епоксидною смолою
- рядки
- як списки, тільки складаються виключно з коробочок
- незмінні
- при зверненні по індексу повертають новий об'єкт, рядок з одного символу
- об'єкт
- веде себе як коробочка (має номер, може пускати тентаклі, можна чіпати імена), але всередині веде себе як міні сцена: може мати свої коробочки та свої внутрішні імена для цих коробочок
- в цілому виглядає як предок, а внутрішні коробочки -- як нащадки
- імена внутрішніх коробочок -- композитні. Щоб отримати вміст внутрішньої коробочки потрібно назвати два імені: ім'я об'єкта предка, та ім'я внутрішнє
Задачі
1. SWAP
2. ROT3
3. Операції зі списком:
- дістати 0 елемент
- зробити новий список, який складається з 0, 1 та 2 елементів
- -//- з 2,3 та 4 елементів
- з останніх трьох елементві
5. ROT3 в списку
6. ROT N в списку
Заклинання:
```python
x = 1
y = 2
z = 3
```
Візуалізуй сцену.
:::spoiler Перевір себе
TODO
:::
Заклинання:
```python
x = 1
y = x
z = y
```
Візуалізуй сцену. Скільки різних об'єктів на сцені? Скільки імен у цих об'єктів?
:::spoiler Перевір себе
На сцені одна коробочка з 1. У неї три імені: x,y,z.
:::
Заклинання:
```python
temp = x
x = y
y = temp
```
`x` та `y` уже присутні на сцені. Візуалізуй результат. Що це за алгоритм?
:::spoiler Перевір себе
Це алгоритм SWAP, зміна місцями вмісту коробочок. Насправді, коробочки не змінюються, але міняються своїми іменами.
:::
#### Класна робота
:::spoiler Скрипт для вчителя
TODO
:::
<br />
Підсумок:
- TODO
#### Самостійна робота
TODO
### Трансмутації
### Заміни по правилам та шаблонам
### Ітерація
### Істина
## Практичні завдання
можливо https://cs.brown.edu/~sk/Publications/Papers/Published/fks-mod-plan-comp-studies/
## Проекти
### Біоінженерія
- алгоритми над РНК/ДНК
- візуалізація реплікації РНК/ДНК
- генетичні алгоритми
-
### Фізика
- фізика більярду/газу/розчину
- фізика машини
- фізика гравітації
### Математика
- математичні функції
- відображення графіку
### Робототехніка
- клітинні автомати
- пошук шляху в лабіринті
- управління
- багатоагентні систеим
### Інформатика
- кодування
- синтаксис
- асемблер
### Графіка
- 2д примітиви
- заливка та градієнти
- фільтри
- анімація
### Психологія
- психотести
- анкі
### Ігри
- сірники
- хрестики-нулики
- шашки/шахи
- тетріс
- breakout
- астероїди
# Ідея плану
Потрібно збудити у учнів бажання програмувати.
Неважливо, яку сферу вони виберуть в майбутньому, в програмуванні завжди можна буде знайти спокійне часопроведення.
В зовсім поганому випадку можна стати програмістом.
Треба цілитись в навколонаукову діяльність, і програмування допоможе.
В ненауковій діяльності потрібно буде шукати місця, де інформатизація може спростити життя людей.
Потрібно розуміти, в чому різниця між білою та чорною магією.
Які типи задач необхідні для розуміння магії?
- базові блоки
- питання Чому та Як
- визначення результату заклинання (виконання)
- визначення трансмутації по її коду
- відтворення трансмутації по вхідних та вихідним значенням
- перевірка коректності запису (синтаксис)
- перевірка коректності виконання (тести)
- перевірка коректності по контрактам (типи)
- визначення місця відхилення роботи трансмутації
- комбінації правил
- системи правил
Більшість з цих типів задач повинні вирішуватись ментально, в голові, через візуалізації. Інша їх частина повинна вирішуватись через написання, тестування та відладку коду. І пробіли в знаннях, які будуть виникати, потрібно навчитись перетворювати у запитання для Гугла, і відповіді Гугла потрібно запам'ятовувати.
Отже, базові блоки. Їх небагато.
1. Коробочки, імена та команди. В коробочки можна класти числа, і деякі інші об'єкти. На коробочки можна клеїти імена. Команди роблять операцію над коробочками та іменами (або тільки над іменами). Система іменування доволі складна, але в ній треба бути як риба у воді.
2. Трансмутації перетворюють одні коробочки у інші. Кожна трансмутація отримує "щось" на вхід, і видає "щось" на вихід. Трансмутації можна створити, а можна "виконати". Спочатку поговоримо про чисті трансмутації. Для виконання перетворення їм потрібно тільки електроенергію (якщо це реальний запуск), або АТФ (якщо робимо в голові). Але навіть чиста трансмутація може містити внутрішні знання. Трансмутація над списком, та трансмутація над кожним елементом списку -- це різні речі.
3. Чиста шаблонна заміна -- заміна структури символів на іншу структуру. Ця заміна формально також є трансмутацією, але виглядає скоріше як трансмутація над частиною об'єкту, не над повним об'єктом. Після шаблонної заміни ми отримуємо дещо змінений об'єкт, але якщо заміна була по правилам -- то змінений об'єкт не змінює своєї істинності.
4. Ітерація шаблонної заміни. Якщо після шаблонної заміни утворюється структура, де неможлива ще одна шаблонна заміна, то це називається нормальна форма. Кінець трансформацій. Процес поступових шаблонних замін є ітерованою заміною до нормальної форми.
5. Істинність, предикати та логіка. Розгалуження на рівні команд. Умовні дані. Фільтрація списку.
6. Ітерація з акумулятором. Агрегація без умов. Умовна заміна. Будування списку. Ітерація з індексом
7. Вічний цикл. Розрив вічного циклу.
https://github.com/ikokkari/PythonProblems/blob/master/109%20Python%20Problems%20for%20CCPS%20109.pdf