Просмотр исходного кода

Prepare 2019-02-04 teaching kids to program article

master
Михаил Капелько 5 лет назад
Родитель
Сommit
2d627f670c
13 измененных файлов: 492 добавлений и 0 удалений
  1. +242
    -0
      pelican/content/articles/2019-02-04_teaching-kids-to-program-ru.md
  2. +250
    -0
      pelican/content/articles/2019-02-04_teaching-kids-to-program.md
  3. Двоичные данные
      pelican/content/images/2019-02-04_teaching-kids-to-program-all-cards-face-down.png
  4. Двоичные данные
      pelican/content/images/2019-02-04_teaching-kids-to-program-all-cards-face-up.png
  5. Двоичные данные
      pelican/content/images/2019-02-04_teaching-kids-to-program-cat-animation.gif
  6. Двоичные данные
      pelican/content/images/2019-02-04_teaching-kids-to-program-cat-script-ru.png
  7. Двоичные данные
      pelican/content/images/2019-02-04_teaching-kids-to-program-cat-script.png
  8. Двоичные данные
      pelican/content/images/2019-02-04_teaching-kids-to-program-first-pair.png
  9. Двоичные данные
      pelican/content/images/2019-02-04_teaching-kids-to-program-leaderboard.png
  10. Двоичные данные
      pelican/content/images/2019-02-04_teaching-kids-to-program-remove-pair.png
  11. Двоичные данные
      pelican/content/images/2019-02-04_teaching-kids-to-program-sap-ui.png
  12. Двоичные данные
      pelican/content/images/2019-02-04_teaching-kids-to-program-second-pair.png
  13. Двоичные данные
      pelican/content/images/2019-02-04_teaching-kids-to-program-team.png

+ 242
- 0
pelican/content/articles/2019-02-04_teaching-kids-to-program-ru.md Просмотреть файл

@@ -0,0 +1,242 @@
Title: Обучение детей программированию
Date: 2019-02-04 00:00
Category: News
Slug: teaching-kids-to-program
Lang: ru

![Screenshot][screenshot]

В этой статье Михаил делится своим опытом обучения детей программированию.

Он расскажет о следующем:

- организация процесса обучения
- программа обучения
- игра на память
- инструмент программирования
- уроки
- результаты и планы

**Организация процесса обучения**

Обучение проходит в рамках социальной ответственности бизнеса: компания предоставляет помещение с оборудованием, а также объединяет сотрудников, желающих попробовать себя в роли преподавателей, с сотрудниками, желающими обучить своих детей. Всё это исключительно на добровольной основе.

Потенциальных преподавателей разбивают по группам таким образом, чтобы группа из трёх преподавателей состояла из одного опытного и двух новичков. Одна группа преподавателей ведёт одну группу учеников. Учеников разбивают по возрасту и навыкам.

В 2018-м я второй раз участвовал в программе обучения детей в возрасте примерно десяти лет. Наша группа работала с октября по декабрь 2018-го по субботам с 10:00 до 12:00. Пользуясь служебным положением, я также затащил на курсы и свою жену.

**Программа обучения**

Когда я участвовал первый раз, наша группа обучала детей программированию довольно бесцельно: мы придумывали простейшие задания на урок для объяснения операторов. В результате в конце обучения у нас не было ничего конкретного, что можно было бы оценить, чем похвастаться и что проанализировать.

В этот второй раз я решил, что мы с детьми реализуем так называемую игру на память. Критерием успешности обучения я определил следующее условие: каждый ученик к концу курса самостоятельно создаёт простейшую игру на память с нуля за 1 час.

Для достижения этого критерия я решил проверить утверждение "Повторение - мать учения", поэтому каждый урок мы создавали всё с нуля. Подчеркну, что мы ничего не сохраняли в учётной записи учеников. Задача была в сохранении навыка создания игры в голове, не в компьютере.

**Игра на память**

Давайте рассмотрим, что представляет собой игра на память.

**1)** В простейшем случае у нас есть 16 карт, причём уникальных лишь 8, остальные 8 являются их парами.

![Screenshot][all-cards-face-up]

В представленном изображении у нас есть лишь две карты с котом, собакой и т.д..

**2)** В начале игры мы перемешиваем карты и раскладываем их **рубашкой** вверх.

![Screenshot][all-cards-face-down]

**3)** Первый из участников игры открывает две карты.

![Screenshot][first-pair]

**4)** Если карты различаются, возвращаем их в исходное положение: кладём **рубашкой** вверх.

![Screenshot][all-cards-face-down]

**5)** Следующий участник игры открывает другую пару карт.

![Screenshot][second-pair]

**6)** Если карты совпадают, убираем их с игрового поля.

![Screenshot][remove-pair]

Цель игры в том, чтобы убрать все карты с поля. Игра в данном виде не включает соревнование, поэтому играть можно одному человеку.

С одной стороны, игра на память довольно проста, с другой стороны, реализация игры затрагивает основную функциональность, необходимую для создания любой более-менее сложной игры:

- создание элементов
- их расстановка на поле
- выбор элементов
- сравнение выбранных элементов
- скрытие совпадающих элементов

**Инструмент программирования**

В качестве инструмента мы использовали среду [Scratch][scratch]. Она рассчитана на обучение детей программированию, поэтому каждое действие, каждый оператор в ней представлен графически.

Например, следующим скриптом можно повернуть кота на 360 градусов за секунду:

![Screenshot][cat-script]

Вот так выглядит результат:

![Animation][cat-animation]

Замечу, что это довольно успешное решение для представления кода графически. Например, платное решение, продвигаемое нынче компанией SAP, предполагает использование так называемых кубиков для программирования:

![Screenshot][sap-ui]

Тут можно лишь ввести в нужные поля нужные значения. Если потребуется что-то нестандартное, то поможет лишь скрипт, который представлен опять же кубиком.

По личному опыту скажу, что решение Scratch не тормозит от слова совсем, чего не скажешь о решении SAP.

**Первый урок**

Первый урок являлся вводным, поэтому компьютеры мы не использовали.

План был следующим:

1. Познакомиться
2. Сыграть в игру на память
3. Изучить понятие алгоритма
4. Написать алгоритм игры
5. Проанализировать урок

**1)** Знакомство

Преподаватели с учениками встают в круг. Это уравнивает всех и делает каждого участником команды.

Первый участник называет своё имя и рассказывает о том, почему он решил посетить этот курс. Второй и последующие участники сначала повторяют имя и рассказ каждого предыдущего участника, после чего называют своё имя и рассказывают.

Примерно так это выглядит:

1. Вася: "Меня зовут Вася, я хочу изучить Scratch, потому что меня заставил папа"
2. Дима: "Это Вася, заниматься Scratch'ем его заставляет папа. Меня зовут Дима, и это мой четвёртый год Scratch'а"
3. Оля: "Это Вася, его заставляют родители. Это Дима, он практически ветеран Scratch'а. Меня зовут Оля, я первый год преподаю, буду учиться вместе со всеми"

Данный формат знакомства преследует следующие цели:

- Знакомство
- Каждый участник команды должен знать по имени остальных участников команды
- Общее пространство
- Все участники в круге, а не за рабочими местами, что уменьшает отвлечение на игры в компьютере
- Равенство
- И преподаватели, и ученики в одном круге, что уравновешивает всех в качестве участников команды без иерархии
- Внимание
- Каждый участник команды должен внимательно слушать остальных участников, чтобы правильно повторить сказанное ими
- Обратная связь
- Каждый участник команды должен максимально чётко излагать свою мысль, иначе остальные просто не смогут её повторить
- Веселье
- Проблемы с запоминанием имён всех веселят

**2)** Игра на память в карты

1. Берём две колоды карт и выбираем из них по 8 одинаковых
2. Раскладываем карты в сетку 4 x 4 рубашкой вверх на столе
3. Ученики встают вокруг стола
4. Каждый ученик по очереди переворачивает пару карт
* Если карты совпали, то убираем их с поля
* Если карты различаются, то переворачиваем их рубашкой вверх

Ученикам очень нравится играть в настольные игры. В ходе игры преподаватели проговаривают то, что происходит.

После пары партий переходим к изучению понятия алгоритма.

**3)** Понятие алгоритма

1. Спрашиваем сначала учеников, даём возможность высказаться, узнаём уровень каждого ученика
2. При необходимости поправляем высказывания, если они близки к ожидаемому ответу
3. Предлагаем написать алгоритм перевода человека из состояния "стоит за дверью кабинета" в состояние "работает за компьютером в кабинете"

Ученикам очень нравится подходить к доске и писать на ней, поэтому по очереди вызываем каждого ученика, чтобы он писал по одному пункту алгоритма. Самого активного ученика используем в качестве исполнителя алгоритма.

**4)** Алгоритм игры

Предлагаем написать алгоритм игры, опять вызываем каждого добавлять по одному пункту на доске. После завершения описания алгоритма ещё раз играем с картами, но на этот раз каждый ученик должен проговаривать шаг алгоритма.

Выглядит это примерно так:

1. Вася: "Раскладываем 16 карт рубашкой вверх"
2. Дима: "Переворачиваем пару карт"
3. Паша: "Если две карты различаются, переворачиваем их рубашкой вверх"
4. Филипп: "Переворачиваем пару карт"
5. Миша: "Если две карты совпадают, убираем их с поля"

**5)** Анализ урока

На этом первый урок заканчивается, и у преподавателей появляется возможность обсудить как свои впечатления об уроке, так и об учениках, выработать подходы к тихоням и активистам, договориться о дальнейших планах на следующие уроки.

У нас были следующие решения:

1. Рассаживать тихонь и активистов через одного, чтобы соблюсти баланс шума и тишины. Иначе группа активистов создаёт очаг бури, а группа тихонь - очаг пустыни, что замедляет процесс обучения.
2. Требовать от учеников точности, т.к. активисты любят кривляться, что плохо влияет на дисциплину.

**Второй и третий уроки**

Последующие уроки мы опять же начинали с разминки: вставали в круг, называли имя и рассказывали, кто что сделал. А если не сделал, то почему. Как и прежде, каждый участник сначала повторял сказанное предыдущими и лишь затем говорил о себе.

На втором уроке мы создавали требования для элемента игрового поля и пытались создать этот элемент в Scratch. Это вполне удалось.

На третьем уроке мы пытались создать 16 элементов и расположить их в сетке 4x4. Тут мы застопорились, т.к. ученики не смогли понять систему координат, чтобы расположить 16 элементов в сетке. Стало очевидно, что планы уроков являются лишь планами, а действительность вносит свои изменения.

У нас было два пути решения проблемы с системой координат:

1. Продолжать обучать системе координат с риском не успеть создать игру до конца курса
2. Изменить требования к игре таким образом, чтобы система координат была не нужна

Мы решили пойти вторым путём, т.к. мы всё-таки не школа и цель у нас была научить создавать игру, т.е. применять знания на практике, а не в теории. Поэтому сетку элементов 4x4 мы решили заменить кругом из 16 элементов.

Данное решение привело меня к следующим выводам:

1. Для решения задачи часто можно найти более простой путь
2. Этот путь легче для понимания, хоть и менее гибкий
3. Перейти на сложный путь для увеличения гибкости можно позже, когда это будет действительно необходимо
4. Упрощение приближает к конечной цели, усложнение отдаляет от неё

**Четвёртый и последующие уроки**

С четвёртого урока мы отменили стадию написания требований, т.к. она начала занимать бОльшую часть урока: мы снова сделали уклон на практику, а не теорию, чтобы уложиться в сроки. На этот раз все требования были написаны заранее и выданы "сверху". Но всё равно их никто не читал.

Четвёртый и пятый уроки мы потратили на создание 16 элементов в виде круга, выделение пары элементов и проверку на их совпадение.

С шестого урока и до девятого включительно мы каждый раз воссоздавали игру с нуля. С каждым разом это происходило всё быстрее и быстрее, поэтому с восьмого урока мы ввели турнирную таблицу, где записывали этапы создания игры и время каждого ученика.

**Последний урок**

К последнему уроку все справлялись с созданием игры с нуля более-менее самостоятельно за час-два.

Такова турнирная таблица последнего урока (имена скрыты):

![Screenshot][leaderboard]

А ниже можно посмотреть на создание игры на память в Scratch ученика, который создал игру быстрее всех: за 30 минут.

<iframe width="560" height="315" src="https://www.youtube.com/embed/WlA193S3SPY" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<br/>

**Результаты и планы**

Результат обучения превзошёл мои ожидания:

- трое учеников успели примерно за час или быстрее
- двое примерно за полтора часа или быстрее

В этом году я планирую провести обучение не с помощью Scratch, а с использованием инструментария Opensource Game Studio: ученики будут работать с Lua, Git и GitHub Pages.

На этом мы заканчиваем статью об опыте Михаила по обучению детей программированию.

[screenshot]: {attach}/images/2019-02-04_teaching-kids-to-program-team.png

[all-cards-face-up]: {attach}/images/2019-02-04_teaching-kids-to-program-all-cards-face-up.png
[all-cards-face-down]: {attach}/images/2019-02-04_teaching-kids-to-program-all-cards-face-down.png
[first-pair]: {attach}/images/2019-02-04_teaching-kids-to-program-first-pair.png
[second-pair]: {attach}/images/2019-02-04_teaching-kids-to-program-second-pair.png
[remove-pair]: {attach}/images/2019-02-04_teaching-kids-to-program-remove-pair.png
[scratch]: https://scratch.mit.edu/
[cat-script]: {attach}/images/2019-02-04_teaching-kids-to-program-cat-script-ru.png
[cat-animation]: {attach}/images/2019-02-04_teaching-kids-to-program-cat-animation.gif
[sap-ui]: {attach}/images/2019-02-04_teaching-kids-to-program-sap-ui.png
[leaderboard]: {attach}/images/2019-02-04_teaching-kids-to-program-leaderboard.png

+ 250
- 0
pelican/content/articles/2019-02-04_teaching-kids-to-program.md Просмотреть файл

@@ -0,0 +1,250 @@
Title: Teaching kids to program
Date: 2019-02-04 00:00
Category: News
Slug: teaching-kids-to-program
Lang: en

![Screenshot][screenshot]

In this article, Michael shares his experience of teaching kids to program.

Here's what he covers:

- organization of the learning process
- learning plan
- memory game
- development tools
- lessons
- results and plans

**Organization of the learning process**

The learning process is conducted as part of corporate social responsibility: a company provides a room with equipment and connects employees that want to try themselves in the role of teachers with employees that want their kids educated. All this is done voluntarily.

Potential teachers are divided into groups so that each group contains three teachers: experienced one and two novice ones. Such a group of three teachers leads a group of students. Students are divided into groups by age and skills.

I participated in the program as a teacher for the second time in 2018. The kids were around ten years old. Our group was active from October to December of 2018 each Saturday, 10:00-12:00. Using my position as a teacher, I've also brought my wife in as a student.

**Learning plan**

The first time I participated in the program, our group taught kids rather mindlessly: we were coming up with simple tasks to explain different operators. By the end of the course we had nothing concrete to evaluate, analyze, and share.

This second time I decided we are going to create a memory game with kids. I decided to consider the course successful if by the end of the course each kid would be able to create a simple memory game from scratch in an hour.

To achieve that, we were recreating the same game from scratch each lesson. I'd like to stress that we did not use personal accounts to save progress. Our task was to save the skill of game creation in the head, not a PC.

**Memory game**

Let's see what the memory game is.

**1)** In the simplest case we have 16 cards, only 8 of them are unique, the rest 8 are duplicates of the unique ones.

![Screenshot][all-cards-face-up]

As you can see, we only have two cards with a cat, only two cards with a dog, etc..

**2)** At the start we shuffle the cards and place them with their faces down.

![Screenshot][all-cards-face-down]

**3)** The first game player turns a pair of cards.

![Screenshot][first-pair]

**4)** If the cards differ they are once again turned face down.

![Screenshot][all-cards-face-down]

**5)** The next player turns another pair of cards.

![Screenshot][second-pair]

**6)** If the cards are the same, they are removed from the field.

![Screenshot][remove-pair]

The goal of the game is to remove all cards from the field. There's no competition here so the game can be played alone.

From one hand, the memory game is rather simple. From the other hand, the game implementation requires essential functionality each more or less complex game has:

- creation of items
- arrangement of items
- selection of items
- comparison of items
- removal of matching items

**Development tools**

We used Scratch as our development tool. [Scratch][scratch] is a great tool to teach kids to program because each action, each operation is represented graphically.

For example, you can rotate a cat 360 degrees in 1 second using the following script:

![Screenshot][cat-script]

Here's how it looks like in action:

![Animation][cat-animation]

I'd like to stress that Scratch is a rather successful solution to represent code graphically. For example, a paid solution by SAP uses similar concept of cubes to program logic:

![Screenshot][sap-ui]

Users can only input values into predefined fields. If users want more functionality they have to resort to scripts.

Personally, I have never witnessed any slowdown in Scratch, and there were many in SAP's solution.

**The first lesson**

The first lesson was introductory, we didn't use PCs.

The plan was to:

1. Meet
2. Play the memory game with cards
3. Learn the concept of algorithm
4. Detail the game's algorithm
5. Analyze the lesson

**1)** Meeting

Both teachers and students stand in a circle. This equalizes everyone and makes everyone a team member.

The first team member tells his name and why he decided to take the course. The second team member and the rest first repeat the name and the story of each previous team member before telling their own names and stories.

Here's how it looks like:

1. John: "My name is John, I am going to study Scratch because my father forces me to"
2. Alex: "This is John, he's doing Scratch because his father wants him to do it. My name is Alex, and this is my fourth year with Scratch"
3. Ann: "That's John, his parents force him to do Scratch. This is Alex, he's a Scratch veteran. And I'm Ann, a novice teacher, so I'm going to learn together with you all"

Such a format of meeting has the following objectives:

- Getting to know each other
- Each team member should know other team members by name
- Common space
- Everyone is in the circle, not at a working desk, this prevents distraction of kids by PC games
- Equality
- Both teachers and students are in the same circle, this equalizes everyone as a team member without hierarchy
- Attention
- Each team member should listen carefully to be able to correctly repeat what others said
- Feedback
- Each team member should be as clear as possible when expressing thoughts, otherwise nobody would be able to repeat them
- Fun
- Memorization problems produce lots of laughter

**2)** Memory game with cards

1. Take 8 pairs of the same cards from two decks of cards
2. Place the cards in 4 x 4 grid, faces down
3. Students stand up around single table
4. Each student, one by one, turns a pair of cards
- If cards match, they are taken off the field
- If cards differ, they are once again turned face down

Students are eager to play tabletop games. During the game party teachers say out loud each step in the game's algorithm.

After a couple of parties it's time to find out what algorithm is.

**3)** The concept of algorithm

1. Ask students first, hear them out to find out their level
2. Correct what students say if they were close to an expected answer
3. Ask students to write an algorithm to move a man from "stands outside a room" state into "sits and works at a PC" one

Students like to go to blackboard and write, so we ask each student to come and write a single step of the algorithm at a time. The most active student should execute the algorithm by following it strictly.

**4)** The algorithm of the game

Ask students to compose the game's algorithm. Again, let students come to the blackboard and add one step of the algorithm at a time. Once the algorithm is ready, play the game with cards once again. Now, each student should say the algorithm's step he executes.

Here's how it looks like:

1. John: "Place 16 cards faces down"
2. Alex: "Turn a pair of cards"
3. Paul: "If the cards differ, turn them faces down again"
4. Dan: "Turn another pair of cards"
5. Mike: "If the cards match, take them off the field"

**5)** Analyze the lesson

That's it for the first lesson. Teachers finally have time to discuss the lesson: discuss the kids, approaches to shy and active kids, plan next lessons.

We had the following decisions:

1. Arrange students so that active ones sit next to shy ones as "active-shy-active-shy-etc" so that we don't end up with two groups of shy and active students at different sides of a room, which would hamper productivity.
2. Only accept accurate answers from students because active students like to wriggle, which hampers discipline.

**The second and the third lessons**

We were beginning each lesson with the same meeting: we would stand up in a circle, tell our names and what we did. Those who did nothing should have said why. Just as before, everyone should first repeat what previous team members said.

We spent the second lesson to create requirements for an item of the playfield and then create the item in Scratch. This was moderately successful.

We spent the third lesson trying to create 16 items and arrange them in 4x4 grid. We failed miserably because we could not explain coordinate system to students. It became apparent that lesson plans were only plans, reality had its own demands.

We saw two ways to approach the problem:

1. Keep on studying the coordinate system risking not to get the game done by the end of the course
2. Change the game requirements so that coordinate system is not necessary

We went the second way because, after all, we're not a school, our goal was to teach kids to create the game, i.e., use skills in practice, not theory. That's why we replaced 4x4 grid with a circle of 16 items.

This solution sparkled a few thoughts in my head:

1. One can often find a simpler path to solve an issue
2. This path is simpler to understand, albeit less flexible
3. One can go the harder path to increase flexibility much later when it becomes absolutely necessary
4. Simplification moves one closer to the goal, complexification moves one in the opposite direction

**The fourth and the rest of the lessons**

The fourth lesson marked the end of coming up with requirements in class because doing so started to take too much time. We chose practice over theory once again to meet the deadline. This time all requirements were conducted before the lesson. Still, nobody read them.

We spent the fourth and the fifth lessons to create 16 items in circle, select a pair of items and match them.

We started recreating complete game from scratch on the sixth lesson. Each time students were recreating complete game faster and faster. On the eighth lesson we introduced a leaderboard to track how fast each student recreates a specific part of the game.

**The last lesson**

When the last lesson approached everyone was able to create the memory game from scratch more or less independently in two hours.

Here's the leaderboard of the last lesson (names are hidden):

![Screenshot][leaderboard]

The leaderboard is in Russian, here are the captions translated:

- Name
- Circle of items
- Selection of pairs
- Hide all
- Hide a pair

Here you can witness the creation of the memory game from scratch by the fastest student: in just half an hour.

<iframe width="560" height="315" src="https://www.youtube.com/embed/WlA193S3SPY" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<br/>

**Results and plans**

The results surpassed my expectations:

- three students made it in an hour or faster
- two students made it in an hour and a half or faster

This year I plan on doing another round of the memory game recreation. However, I'm going to replace Scratch with Opensource Game Studio tools: the students will use Lua, Git, and GitHub Pages.

That's it for sharing Michael's experience of teaching kids to program.

[screenshot]: {attach}/images/2019-02-04_teaching-kids-to-program-team.png

[all-cards-face-up]: {attach}/images/2019-02-04_teaching-kids-to-program-all-cards-face-up.png
[all-cards-face-down]: {attach}/images/2019-02-04_teaching-kids-to-program-all-cards-face-down.png
[first-pair]: {attach}/images/2019-02-04_teaching-kids-to-program-first-pair.png
[second-pair]: {attach}/images/2019-02-04_teaching-kids-to-program-second-pair.png
[remove-pair]: {attach}/images/2019-02-04_teaching-kids-to-program-remove-pair.png
[scratch]: https://scratch.mit.edu/
[cat-script]: {attach}/images/2019-02-04_teaching-kids-to-program-cat-script.png
[cat-animation]: {attach}/images/2019-02-04_teaching-kids-to-program-cat-animation.gif
[sap-ui]: {attach}/images/2019-02-04_teaching-kids-to-program-sap-ui.png
[leaderboard]: {attach}/images/2019-02-04_teaching-kids-to-program-leaderboard.png

Двоичные данные
pelican/content/images/2019-02-04_teaching-kids-to-program-all-cards-face-down.png Просмотреть файл

До После
Ширина: 1000  |  Высота: 641  |  Размер: 832KB

Двоичные данные
pelican/content/images/2019-02-04_teaching-kids-to-program-all-cards-face-up.png Просмотреть файл

До После
Ширина: 1000  |  Высота: 641  |  Размер: 564KB

Двоичные данные
pelican/content/images/2019-02-04_teaching-kids-to-program-cat-animation.gif Просмотреть файл

До После
Ширина: 640  |  Высота: 430  |  Размер: 1.5MB

Двоичные данные
pelican/content/images/2019-02-04_teaching-kids-to-program-cat-script-ru.png Просмотреть файл

До После
Ширина: 485  |  Высота: 346  |  Размер: 15KB

Двоичные данные
pelican/content/images/2019-02-04_teaching-kids-to-program-cat-script.png Просмотреть файл

До После
Ширина: 445  |  Высота: 365  |  Размер: 17KB

Двоичные данные
pelican/content/images/2019-02-04_teaching-kids-to-program-first-pair.png Просмотреть файл

До После
Ширина: 1000  |  Высота: 641  |  Размер: 774KB

Двоичные данные
pelican/content/images/2019-02-04_teaching-kids-to-program-leaderboard.png Просмотреть файл

До После
Ширина: 1280  |  Высота: 960  |  Размер: 1.4MB

Двоичные данные
pelican/content/images/2019-02-04_teaching-kids-to-program-remove-pair.png Просмотреть файл

До После
Ширина: 1000  |  Высота: 641  |  Размер: 719KB

Двоичные данные
pelican/content/images/2019-02-04_teaching-kids-to-program-sap-ui.png Просмотреть файл

До После
Ширина: 1004  |  Высота: 714  |  Размер: 103KB

Двоичные данные
pelican/content/images/2019-02-04_teaching-kids-to-program-second-pair.png Просмотреть файл

До После
Ширина: 1000  |  Высота: 641  |  Размер: 769KB

Двоичные данные
pelican/content/images/2019-02-04_teaching-kids-to-program-team.png Просмотреть файл

До После
Ширина: 1024  |  Высота: 768  |  Размер: 217KB

Загрузка…
Отмена
Сохранить