diff --git a/README.md b/README.md index 6da3b958..deb46c11 100644 --- a/README.md +++ b/README.md @@ -1,176 +1,27 @@ -# mobile-iOS +# Mobile iOS -# Структура уроков: чек-лист для авторов +В данном репозитории находится текст +уроков [Яндекс.Практикума по курсу iOS-разработчик»](https://practicum.yandex.ru/ios-developer/). -Привет! Это формальные штуки, которые должны быть в каждом уроке 👌 +🤝 Клонируя этот репозиторий, разработчик обязуется поддерживать всю документацию в актуальном состоянии. -Рассмотрим два шаблона: стандартный урок ([пример](https://practicum.yandex.ru/learn/ios-developer/courses/6aebbc23-2480-4618-9999-3a7555e7156c/sprints/79799/topics/ee995b7e-db71-46ad-8f20-865db996a7a0/lessons/c01fe6b3-d788-4242-9519-800d0502211a/)) и урок с задачей ([пример](https://practicum.yandex.ru/learn/ios-developer/courses/6aebbc23-2480-4618-9999-3a7555e7156c/sprints/79799/topics/0c0b0912-4577-4157-9131-6383e4f1f8ef/lessons/f37bff1e-3a9a-4bc1-8e89-0e6f524ed9c0/)). +## Навигация -## 0. Название +Принятые договорённости: -Должно быть: + - [Код-стайл уроков](./docs/codestyle/codestyle.md). + - [Описание структуры](./docs/structure/Структура%20уроков.md) + - [Если нужна иллюстрация](./docs/illustration/Если%20нужна%20иллюстрация%20в%20урок.md) + - [Оформление скриншотов](./docs/illustration/Как%20делать%20скрины%20и%20гифки%20для%20уроков.md) + +## Структура репозитория -- у каждой темы -- у каждого урока! +- [`freetrack`](./freetrack) - бесплатная часть курса Фритрек +- [`lessons`](./lessons) - yроки основной части программы +- [`lessons-extended-program`](./lessons-extended-program) - уроки расширенной программы курса +- `.github` - описание CI/CD pipeline на основе GitHub Actions и базовые шаблоны для GitHub +- `docs`– документация проекта -Черновое название темы определяем на декомпозиции спринта. Если в процессе появляется ощущение, что нужно менять — меняем (советуемся в чатике с авторами, редактором Юлей и методисткой Настей). То же относится к названиям уроков. +## Команда проекта -Название темы или урока должно должно отображать суть того, о чём говорится внутри. - -Хороший пример: «Основы вёрстки кодом» (конкретика) - -Плохой пример: «Учимся новому» (абстракция) - ---- - -🚀*В GitHub писать названия уроков нужно по-русски (кроме терминов), а не латиницей — во избежание разночтений.* - ---- - -## 1. **Введение** - -**1.1** **Введение** — это пара абзацев в общем тексте первого урока или же отдельный **урок-онбординг**. Кратко, в 2–3 пунктах, **напоминаем** студентам, о чём шла речь в предыдущей теме. - -Хорошая практика для введения — связать текущую тему с предыдущими. Это можно сделать **с помощью проекта** («в прошлой теме мы сделали такой-то экран, но на кнопочку всё ещё нельзя тыкнуть, этим мы займёмся тут»), а можно **связать концепции, инструменты или технологии**, о которых говорим в соседних темах. - -**Перечисляем, что будет** в этой теме, с чем студенты познакомятся, какие задачи перед ними будут стоять. Упоминаем термины, инструменты, процессы и то, как они используются. - -**Пример** - -![Снимок экрана 2022-10-31 в 15.05.27.png](readme_images/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA_%25D1%258D%25D0%25BA%25D1%2580%25D0%25B0%25D0%25BD%25D0%25B0_2022-10-31_%25D0%25B2_15.05.27.png) - ---- - -🚀*Самого подзаголовка «Введение» **не нужно**! На платформе как подзаголовок отображается название урока, текст начинается сразу за ним.* - ---- - -**1.2** Обязательно добавляем информацию о предстоящем **домашнем задании** (если оно предполагается)*: - -**Пример** - -![Снимок экрана 2022-10-31 в 15.07.26.png](readme_images/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA_%25D1%258D%25D0%25BA%25D1%2580%25D0%25B0%25D0%25BD%25D0%25B0_2022-10-31_%25D0%25B2_15.07.26.png) - -* Этот текст может отличаться — в зависимости от проекта, над которым студенты работают в текущем модуле. Но в рамках одного проекта текст должен оставаться тем же (**просто копируем**, меняя номер спринта) - ---- - -🚀*Дописать вступление и заключение можно после того, как будет готов весь текст. Начните с примеров и терминов, затем дописывайте к ним теорию.* - ---- - -## 2. **Основной текст** - -**2.1** **Структура урока.** Текст не должен идти сплошным полотном. Чтобы студентам было проще воспринимать информацию, рекомендуется давать подряд максимум **2-3 абзаца** (после — выделение в рамочку или фоном или др. элемент, на котором внимание может «отдохнуть»). - -**Как разбивать текст на абзацы:** - -- с помощью подзаголовков -- кнопкой «Далее» -- «кастомной» кнопкой, в которой есть вопрос или побуждение к действию и т.д. («Понятно!», «Что дальше?», «Я молодец!») - -🚀*Приятно, когда с тобой общаются уважительно и проявляют заботу. Реплики-кнопки в ответах, проверочных заданиях, конце темы — позитивно влияют на студента.* - ---- - -**Некоторые подзаголовки у нас стандартные:** - -- Для исторической справки: **«Щепотка истории»** -- Для квизов: **«Проверим изученное» (НЕ! КВИЗ)** -- Для заключения: **«Подведём итоги» (НЕ! ЗАКЛЮЧЕНИЕ)** -- Для задач внутри спринта или домашек: **«Самостоятельная работа»** -- Для авторского решения: **«Авторское решение»** - -🚀Сразу после АР идёт текст: - -*Советуем посмотреть авторское решение только после того, как вы сами попробовали решить задачу. С ним можно сверяться, хотя оно может отличаться от вашего решения.* - ---- - -**2.2** **Тезисы.** Выделяйте важные идеи — например, **в рамочку** или **фоном** (не нужно самим рисовать, просто оставьте комментарий, что этот кусок текста надо выделить). - -**На платформе будет выглядеть так:** - -![Снимок экрана 2022-10-31 в 15.51.42.png](readme_images/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA_%25D1%258D%25D0%25BA%25D1%2580%25D0%25B0%25D0%25BD%25D0%25B0_2022-10-31_%25D0%25B2_15.51.42.png) - -**2.3** **Термины**, которые мы объясняем впервые, надо **расшифровывать**. Это делается с помощью глоссария — подсказок, которые всплывают при наведении мышки на выделенное слово. В Git пишем прописными **ГЛОССАРИЙ**, затем — объяснение: - -![Untitled](readme_images/Untitled.png) - -**На платформе будет выглядеть так:** - -![Untitled](readme_images/Untitled.jpeg) - -**2.4 Списки.** Если в предложении есть перечисление после двоеточия, оформляйте его **списком**, а не через запятую. Так информацию: - -- *проще воспринимать;* -- *легче воспринимать;* -- *сразу видно!* - ---- - -🚀В тексте урока иногда нужно выделить важные повторяющиеся фрагменты. Если вы понимаете, что в вашем уроке есть такие, посмотрите, как это было оформлено в предыдущих темах. - -**Примеры текстов-предупреждений:** - -*Мы рекомендуем самостоятельно переписывать и вставлять в проект любые, даже самые маленькие кусочки кода, которые будут вам  встречаться. Только так вы наработаете навык программирования.* - -= = = = = = = - -*Вы можете попробовать применить наши примеры к проекту Movie Quiz в отдельной ветке. Но отправлять это на ревью не нужно! Все примеры кода в этом уроке — иллюстративные. Они нужны, чтобы раскрыть суть принципов SOLID. Если у вас возникнут вопросы — не бойтесь просить помощи у наставников!* - ---- - -## 3. Иллюстрации - -В уроке должна быть **минимум 1 художественная** иллюстрация — для поддержания единого «космического» нарратива. Иллюстрация помогает отдохнуть или обратить внимание на важную часть теории. - -Также обязательно должны быть **скриншоты и/или гифки**, поясняющие и дополняющие материал. - -## 4. Квизы - -Они же — раздел с подзаголовком «Проверим изученное». Помимо вопроса и вариантов ответов, должны содержать пояснения к ответам. - -**Пример** - -![Снимок экрана 2022-10-31 в 17.35.09.png](readme_images/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA_%25D1%258D%25D0%25BA%25D1%2580%25D0%25B0%25D0%25BD%25D0%25B0_2022-10-31_%25D0%25B2_17.35.09.png) - -Подробнее о квизах — какими они бывают и как их делать — пожалуйста, прочитайте [вот тут](https://www.notion.so/a1a785748f384403b2a5a3e63076a2b8). - -А это — [чек-лист про квизы](https://www.notion.so/c6a3dbbca31c4f10b683b6edf6ad9526), который собирала Настя. Ознакомьтесь! - -## 5. **Заключение** - -Выводы о том, что мы прошли в этом уроке («Подведём итоги»). В нём должно быть перечисление главных новых штук, которые мы изучили, их определения и связи между собой + делаем подводку к следующему уроку или теме. - -**Пример** - -![Снимок экрана 2022-10-31 в 16.51.12.png](readme_images/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA_%25D1%258D%25D0%25BA%25D1%2580%25D0%25B0%25D0%25BD%25D0%25B0_2022-10-31_%25D0%25B2_16.51.12.png) - -# Урок «Сдаём задачу по спринту Х» - -Он же — практическое задание. Это на 90% шаблон, в котором должны быть: - -### 1. Стандартное введение - -*Вы завершили спринт №Х и сделали то-то и то-то. Пришло время сдавать задачу на ревью!* - -Вам нужно сдать проект, в котором есть: - -- перечисление основных, что нужно сделать - -*Выполните задачу по спринту в Xcode. Залейте её в отдельную ветку на GitHub с названием sprint_номер урока. Важно: проект должен быть открытым!* - -### 2. Чек-лист «Убедитесь, что» - -Перечень всех задач, которые мы давали в качестве самостоятельной работы на протяжении модуля. - -### 3. Стандартное заключение - -*Если все пункты совпали — смело отправляйте задание на ревью!* - -*Скопируйте ссылку на пулл-реквест и вставьте её в специальную форму «Ревью» справа.* - -*Ожидайте письма об окончании ревью на почту, с который вы зарегистрированы в Практикуме. Ревьюер скоро напишет вам и даст обратную связь!* - -💃💃💃 +// TODO \ No newline at end of file diff --git a/docs/codestyle/assets/img/ .png b/docs/codestyle/assets/img/ .png new file mode 100644 index 00000000..33587f22 Binary files /dev/null and b/docs/codestyle/assets/img/ .png differ diff --git a/docs/codestyle/assets/img/action_button_block.png b/docs/codestyle/assets/img/action_button_block.png new file mode 100644 index 00000000..25d50164 Binary files /dev/null and b/docs/codestyle/assets/img/action_button_block.png differ diff --git a/docs/codestyle/assets/img/blockquote_block.png b/docs/codestyle/assets/img/blockquote_block.png new file mode 100644 index 00000000..5754fae9 Binary files /dev/null and b/docs/codestyle/assets/img/blockquote_block.png differ diff --git a/docs/codestyle/assets/img/button_next_lesson.png b/docs/codestyle/assets/img/button_next_lesson.png new file mode 100644 index 00000000..66908926 Binary files /dev/null and b/docs/codestyle/assets/img/button_next_lesson.png differ diff --git a/docs/codestyle/assets/img/chat_block.png b/docs/codestyle/assets/img/chat_block.png new file mode 100644 index 00000000..341f50df Binary files /dev/null and b/docs/codestyle/assets/img/chat_block.png differ diff --git a/docs/codestyle/assets/img/chat_block__monologue.png b/docs/codestyle/assets/img/chat_block__monologue.png new file mode 100644 index 00000000..81ab8b6e Binary files /dev/null and b/docs/codestyle/assets/img/chat_block__monologue.png differ diff --git a/docs/codestyle/assets/img/cut_section_collapsed_block.png b/docs/codestyle/assets/img/cut_section_collapsed_block.png new file mode 100644 index 00000000..9755b419 Binary files /dev/null and b/docs/codestyle/assets/img/cut_section_collapsed_block.png differ diff --git a/docs/codestyle/assets/img/cut_section_expanded_block.png b/docs/codestyle/assets/img/cut_section_expanded_block.png new file mode 100644 index 00000000..f57abf66 Binary files /dev/null and b/docs/codestyle/assets/img/cut_section_expanded_block.png differ diff --git a/docs/codestyle/assets/img/glossary_item.png b/docs/codestyle/assets/img/glossary_item.png new file mode 100644 index 00000000..65f3d7ed Binary files /dev/null and b/docs/codestyle/assets/img/glossary_item.png differ diff --git a/docs/codestyle/assets/img/image_gallery_block.png b/docs/codestyle/assets/img/image_gallery_block.png new file mode 100644 index 00000000..f0095ffa Binary files /dev/null and b/docs/codestyle/assets/img/image_gallery_block.png differ diff --git a/docs/codestyle/assets/img/quiz_cards__initial.png b/docs/codestyle/assets/img/quiz_cards__initial.png new file mode 100644 index 00000000..7eb0617b Binary files /dev/null and b/docs/codestyle/assets/img/quiz_cards__initial.png differ diff --git a/docs/codestyle/assets/img/quiz_cards__solved.png b/docs/codestyle/assets/img/quiz_cards__solved.png new file mode 100644 index 00000000..1453b795 Binary files /dev/null and b/docs/codestyle/assets/img/quiz_cards__solved.png differ diff --git a/docs/codestyle/assets/img/quiz_macaroni__initial.png b/docs/codestyle/assets/img/quiz_macaroni__initial.png new file mode 100644 index 00000000..2a36b19b Binary files /dev/null and b/docs/codestyle/assets/img/quiz_macaroni__initial.png differ diff --git a/docs/codestyle/assets/img/quiz_macaroni__solved.png b/docs/codestyle/assets/img/quiz_macaroni__solved.png new file mode 100644 index 00000000..c3256e63 Binary files /dev/null and b/docs/codestyle/assets/img/quiz_macaroni__solved.png differ diff --git a/docs/codestyle/assets/img/quiz_put_in_order__error.png b/docs/codestyle/assets/img/quiz_put_in_order__error.png new file mode 100644 index 00000000..a2de9a84 Binary files /dev/null and b/docs/codestyle/assets/img/quiz_put_in_order__error.png differ diff --git a/docs/codestyle/assets/img/quiz_put_in_order__initial.png b/docs/codestyle/assets/img/quiz_put_in_order__initial.png new file mode 100644 index 00000000..6a1fde7b Binary files /dev/null and b/docs/codestyle/assets/img/quiz_put_in_order__initial.png differ diff --git a/docs/codestyle/assets/img/quiz_put_in_order__success.png b/docs/codestyle/assets/img/quiz_put_in_order__success.png new file mode 100644 index 00000000..b0ff9433 Binary files /dev/null and b/docs/codestyle/assets/img/quiz_put_in_order__success.png differ diff --git a/docs/codestyle/assets/img/quiz_select_multiple_block.png b/docs/codestyle/assets/img/quiz_select_multiple_block.png new file mode 100644 index 00000000..d63c39a9 Binary files /dev/null and b/docs/codestyle/assets/img/quiz_select_multiple_block.png differ diff --git a/docs/codestyle/assets/img/quiz_select_single_block.png b/docs/codestyle/assets/img/quiz_select_single_block.png new file mode 100644 index 00000000..755f5e5a Binary files /dev/null and b/docs/codestyle/assets/img/quiz_select_single_block.png differ diff --git a/docs/codestyle/assets/img/quiz_select_single_block__solved_with_description.png b/docs/codestyle/assets/img/quiz_select_single_block__solved_with_description.png new file mode 100644 index 00000000..1218306e Binary files /dev/null and b/docs/codestyle/assets/img/quiz_select_single_block__solved_with_description.png differ diff --git a/docs/codestyle/assets/img/quiz_task_block.png b/docs/codestyle/assets/img/quiz_task_block.png new file mode 100644 index 00000000..5065ea5d Binary files /dev/null and b/docs/codestyle/assets/img/quiz_task_block.png differ diff --git a/docs/codestyle/assets/img/quiz_task_header_block.png b/docs/codestyle/assets/img/quiz_task_header_block.png new file mode 100644 index 00000000..73864fb6 Binary files /dev/null and b/docs/codestyle/assets/img/quiz_task_header_block.png differ diff --git a/docs/codestyle/assets/img/snippet_congrats_text.png b/docs/codestyle/assets/img/snippet_congrats_text.png new file mode 100644 index 00000000..aa206a02 Binary files /dev/null and b/docs/codestyle/assets/img/snippet_congrats_text.png differ diff --git a/docs/codestyle/assets/img/snippet_run.png b/docs/codestyle/assets/img/snippet_run.png new file mode 100644 index 00000000..c2c16002 Binary files /dev/null and b/docs/codestyle/assets/img/snippet_run.png differ diff --git a/docs/codestyle/assets/img/snippet_task.png b/docs/codestyle/assets/img/snippet_task.png new file mode 100644 index 00000000..60c337c5 Binary files /dev/null and b/docs/codestyle/assets/img/snippet_task.png differ diff --git a/docs/codestyle/assets/img/snippet_task_with_help.png b/docs/codestyle/assets/img/snippet_task_with_help.png new file mode 100644 index 00000000..de175f9f Binary files /dev/null and b/docs/codestyle/assets/img/snippet_task_with_help.png differ diff --git a/docs/codestyle/assets/img/trainer_error.png b/docs/codestyle/assets/img/trainer_error.png new file mode 100644 index 00000000..62a0e178 Binary files /dev/null and b/docs/codestyle/assets/img/trainer_error.png differ diff --git a/docs/codestyle/assets/img/trainer_help.png b/docs/codestyle/assets/img/trainer_help.png new file mode 100644 index 00000000..365a2014 Binary files /dev/null and b/docs/codestyle/assets/img/trainer_help.png differ diff --git a/docs/codestyle/assets/img/trainer_success_cat.png b/docs/codestyle/assets/img/trainer_success_cat.png new file mode 100644 index 00000000..0514782b Binary files /dev/null and b/docs/codestyle/assets/img/trainer_success_cat.png differ diff --git a/docs/codestyle/assets/img/trainer_whole.png b/docs/codestyle/assets/img/trainer_whole.png new file mode 100644 index 00000000..4f22939b Binary files /dev/null and b/docs/codestyle/assets/img/trainer_whole.png differ diff --git a/docs/codestyle/codestyle.md b/docs/codestyle/codestyle.md new file mode 100644 index 00000000..bd503374 --- /dev/null +++ b/docs/codestyle/codestyle.md @@ -0,0 +1,1046 @@ + +- [Код-стайл оформления кода уроков](#код-стайл-оформления-кода-уроков) + - [О структуре уроков](#о-структуре-уроков) + - [Иерархия файлов](#иерархия-файлов) + - [Договорённости по названиям и форматам файлов](#договорённости-по-названиям-и-форматам-файлов) + - [Структура урока](#структура-урока) + - [Устоявшиеся обороты](#устоявшиеся-обороты) + - [Редполитика: кратко](#редполитика-кратко) + - [Оформление текста](#оформление-текста) + - [Общее](#общее) + - [Жирный шрифт](#жирный-шрифт) + - [Код внутри строки](#код-внутри-строки) + - [Блоки кода](#блоки-кода) + - [Стандарты код-стайла для swift](#стандарты-код-стайла-для-swift) + - [Изображения, видео, gif](#изображения-видео-gif) + - [Общее](#общее-1) + - [Код-стайл](#код-стайл) + - [Галереи с картинками](#галереи-с-картинками) + - [Особое выделение блоков на Платформе](#особое-выделение-блоков-на-платформе) + - [Термин для глоссария](#термин-для-глоссария) + - [Блок пояснения](#блок-пояснения) + - [Блоки с цитатами](#блоки-с-цитатами) + - [Блок-диалог](#блок-диалог) + - [Блок-реплика](#блок-реплика) + - [Блок-переход к следующей части урока](#блок-переход-к-следующей-части-урока) + - [Блок-переход на следующий урок](#блок-переход-на-следующий-урок) + - [Блок для скрытия/показа контента](#блок-для-скрытияпоказа-контента) + - [Блоки-квизы](#блоки-квизы) + - [Одиночный выбор](#одиночный-выбор) + - [Множественный выбор](#множественный-выбор) + - [Карточки](#карточки) + - [Сборная строка](#сборная-строка) + + +# Код-стайл оформления кода уроков + +Этот документ содержит в себе описание согласованного код-стайла для оформления текстов уроков Яндекс.Практикума. + +Некоторые примеры взяты из другого курса. + +## О структуре уроков + +### Иерархия файлов + +В общем виде структура уроков **должна выглядеть** так: + +```yaml +# Папки с текстами уроков +- 06.Sprint: + - 01. Многопоточность: + - assets: + - gif: + - animated_scheme.gif + - img: + - screenshot_01.png + - scheme_01.png + - picture: + - gcd.png + - threads_01.png + - threads_02.png + - raw: + - screenshot_01__raw.png + - scheme_01__raw.png + - video: + - screen_recording.mp4 + - code: + - snippets: + - snippet_fix_numbers.md + - snippet_add_letters.md + - trainers: + - trainer_piggy_bank.md + - 00. Введение в тему.md + - 01. Как запускается приложение. Процессы, потоки и конкурентность.md + - 02. Потоки и введение в Grand Central Dispatch.md + - 03. Обновление интерфейса из потоков.md + - 02. Сеть. Клиент-сервеное взаимодействие + ... +- 07.Sprint + - ... +``` + +1. Каждому **спринту** курса соответствует отдельная папка (например: `01.Sprint`, `02.Sprint`, etc). Цифра + обозначает номер спринта. + +```yaml +- 01.Sprint +- 02.Sprint +- ... +``` + +2. Каждой **теме** соответствует отдельная папка внутри папки + спринта (например: `02.Sprint/01. Методы/`, `02.Sprint/02. Классы и объекты`, etc). Цифра возле названия темы + соответствует порядковому номеру темы внутри спринта. + +```yaml +- 01. Спринт: + - 01. Начало платного обучения + - 02. История Swift + - 03. Объявление переменных + - ... +- 02. Спринт: + - 01. Методы + - 02. Классы и объекты + - 03. Git для самых маленьких + - ... +- ... +``` + +3. Каждому **уроку** внутри темы соответствует отдельный MD-файл с названием урока ( + например: `03.Sprint/01. Массивы, списки, итераторы/01. Массивы.md`). Цифра возле названия урока соответствует + порядковому номеру урока внутри темы спринта. + +```yaml +- 01. Спринт: + - 01. Начало платного обучения: + - 01. Снова здравствуйте!.md + - 02. Начало спринта № 1.md + - 02. История Java: + - 01. Java. Предпосылки.md + - 02. Составляющие инфраструктуры Java.md + - 03. Как Android встретила Java.md + - 03. Объявление переменных: + - ... +- ... +``` + +4. Внутри папки с темой может находиться папка c иллюстрациями `assets`, предназначенная для хранения всех дополнительных ресурсов, + связанных с конкретной темой. К ресурсам относятся: скриншоты, схемы, картинки от иллюстратора, видео, гиф-анимации и + исходники изображений. + +```yaml +- 01.Sprint: + - 01. Начало платного обучения: + - assets: + - gif: + - animated_scheme.gif + - img: + - screenshot_01.png + - scheme_01.png + - picture: + - java_island.png + - rough_language_1.png + - rough_language_2.png + - raw: + - screenshot_01__raw.png + - scheme_01__raw.png + - video: + - screen_recording.mp4 + - code: + - ... + - 01. Снова здравствуйте!.md + - 02. Начало спринта № 1.md + - ... +- ... +``` + +- В папке `gif` должны находиться GIF-анимации. +- В папке `img` находятся обработанные скриншоты и перерисованные схемы. +- В папке `picture` должны лежать изображения от иллюстратора. +- В папке `video` - видео. +- В папке `raw` должны находиться исходники скриншотов и исходники схем, которым требуется перерисовка. + +5. Внутри папки с темой может находиться папка `code`, предназначенная для хранения кода примеров-тренажёров, связанных с конкретной темой. Это может быть архив с Xcode проектом или Playground, или отдельный swift-файл. + +```yaml +- 01.Sprint: + - 01. Начало платного обучения: + - assets: + - ... + - code: + - Sprint-1-theme-1-lesson-1-task-2.playground + - numbers-sort.zip + - 01. Снова здравствуйте!.md + - 02. Начало спринта № 1.md + - ... +- ... +``` + +### Договорённости по названиям и форматам файлов + +- Названия любых файлов не должны иметь специальных символов кроме точки (`.`), нижнего подчёркивания (`_`), + восклицательного знака (`!`), дефиса (`-`). +- Папки спринтов имеют формат `01. Sprint`, `02. Sprint` - порядковый номер, точка, пробел и слово `Sprint`. +- Папки с темами имеют формат `01. Название темы`, `02. Название второй темы` - порядковый номер, точка, пробел и + название темы. +- Файлы с текстами уроков имеют формат `01. Название урока.md`, `02. Название второго урока.md` - порядковый номер, + точка, пробел и название урока. Файл с текстом урока имеет расширение `.md`. +- Каждый файл, относящийся к тексту уроков, должен иметь понятные и осмысленные названия: + - Файл с текстом очередного урока должен иметь такое же название, как и заголовок уровня `H1` на странице Платформы. + - Файлы с изображениями должны называться понятно для всех участников процесса разработки: + - вместо сокращений используем полные слова; + - желательно использовать не транслит, а корректные английские фразы; + - если название состоит из нескольких слов, соединяем их с помощью знака нижнего подчёркивания (`_`); + - не используйте CamelCase для названий файлов иллюстрации; + - если есть несколько изображений, относящихся к одному и тому же блоку, но их нужно различать, разрешается + сделать общий префикс, и отделить его от основного описания файла двумя символами нижнего + подчёркивания (`__`). + - избегайте большого числа специальных символов в названии файла, желательно иметь только одну точку (`.`) в + названии файла. + +**DO:** + +- `git_history.png`; +- `gmail_split_screen.png`; +- `image_gallery_block.png`. + +**DON'T:** + +- `skrinshot.png`; +- `ndr.png`; +- `some_schema.excalidraw.png`; +- `02skrin_Find_json_to_kotlin_03.png`. + +### Структура урока + +Подробнее о том как строится урок и из чего он состоит в редакторской заметке [Структура уроков](../structure/Структура%20уроков.md). + +Звездочкой(`*`) отмечены обязательные части. + +1. `*`Название урока +2. `*`Введение: о чем будет урок, что изучили в предыдущем уроке/теме +3. `*`Основной текст. Состоит из разных типов информации: + 1. теории и терминов, + 2. практических примеров и метафор, + 3. практического разбора задачи, + 4. исторических справок, + 5. `*`иллюстрация (минимум 1), + 6. практические задачи, авторское решение, + 7. квизы. +4. Квиз повторим изученное +5. `*`Заключение `# Подведём итоги` + + +### Устоявшиеся обороты + +- Для исторической справки: **«Щепотка истории»** + +- Для квизов: **«Проверим изученное»** + **(!Не используем КВИЗ в тексте для студента)** + +- Для заключения: **«Подведём итоги»** + **(!Не используем ЗАКЛЮЧЕНИЕ)** + +- Для задач внутри спринта или домашек:  + **«Самостоятельная работа»** + +- Для авторского решения: **«Авторское решение»** + +- Практика: **Практическое задание** + +- Самостоятельная и сложная практика: + **Задача со звёздочкой ⭐️** + + +### Редполитика: кратко + +👉 Подробно в [wiki](https://wiki.yandex-team.ru/practicum/programming-practicum/stranicyko-0914/mobile-3b57/prichalred-b9d7/redpolitik-63fb/) + +- К студенту на "Вы" (`Уверены, у вас все получится!`) +- Мы – это команда курса и студент (`Разберём, как передавать данные от клиента к серверу`) +- Предложение состоит из подлежащего и сказуемого. Одно предложение – одна мысль. +- Для русского языка используем кавычки «ёлочки». Пишем «ё» везде, где она нужна. +- Приводим факты и пишем числа без «около» и «примерно». Ссылка на источник обязательна. +- Названия элементов, модулей, команд пишем на английском, *если у них нет официальной русской адаптации* и всегда объясняем, что они значат. +- Используем феменитивы и не пишем и не шутим на стоп-темы. + + +## Оформление текста + +### Общее + +- На длину строки не накладывается ограничение. +- Сам текст лучше разбивать на абзацы. Мысли – на предложения. +- Урок имеет название и маркеруется заголовком первого уровня (`#`) +- Большой урок может быть разбит на смысловые части с заголовками второго(`##`) и третьего(`###`) уровней + +### Жирный шрифт + +- Текст, который нужно выделить **жирным** шрифтом, выделяется двумя символами-звёздочками (`*`) с двух сторон: + +```markdown +Когда мы смотрим на макет, нам нужно понимать, +как отдельные элементы интерфейса (баннеры, кнопки, иконки) +расположены **друг относительно друга**. +``` + +### Код внутри строки + +- Текст, который нужно выделить как `код`, выделяется одинарными косыми кавычками (\`текст\`): + +```markdown +В документации вы можете увидеть требование +передавать в запросах заголовок `User-Agent`. +Этот заголовок может содержать +информацию о типе устройства, операционной системе, +используемой версии приложения и другие детали. Получается что-то +вроде визитной карточки вашего устройства. +``` + +- Не стоит часто выделять части предложения как код, на платформе такой текст будет плохочитаемым. +- Длинный примеры кода внутри текста также будут выглядеть плохо на платформе, поэтому в таком случае необходимо перенести пример в отдельный блок кода. + +### Блоки кода + +- Блоки кода начинаются тройным повторением одинарной косой кавычки (\`) и обязательным указанием **языка** для этого + блока. Код внутри блока должен соответствовать стандартам языка программирования. Блок заканчивается тройным + повторением одинарной косой кавычки. + +```swift +// 1 +class Track { + + // 2 + let name: String + let lengthInSeconds: Int + let listensCount: Int + + init( + name: String, + lengthInSeconds: Int, + listensCount: Int + ) { + self.name = name + self.lengthInSeconds = lengthInSeconds + self.listensCount = listensCount + } + + // вспомогательная функция, формирует строку с длительностью композиции + func makeTrackLengthString() -> String { + let minutes = lengthInSeconds / 60 + let remainingSeconds = lengthInSeconds - (minutes * 60) + return "\(minutes):\(remainingSeconds)" + } +} +``` + +- В качестве блока кода также можно указывать выводы из консоли. В этом случае указание языка должно отсутствовать. + +``` +D New value: 1 +D New value: 2 +D New value: 3 +D New value: 4 +D New value: 5 +D New value: 6 +``` + +### Стандарты код-стайла для swift + +- [The Official Kodeco Swift Style Guide](https://github.com/kodecocodes/swift-style-guide) +- [Swift Style Guide](https://google.github.io/swift/) + +## Изображения, видео, gif + +### Общее + +- Разрешённые расширения файлов: `.png`, `.gif` и `.mp4`. +- Файлы-исходники, которые находятся в папке `raw`, должны иметь в названии суффикс `__raw`. После того как исходник + будет обработан и положен в папку `img`, название нового изображения должно совпадать с именем исходника за + исключением суффикса `__raw`. +- Скриншоты Xcode делаются в в светлой стандартной теме. +- Скриншоты оформляются [по рекомендациям иллюстраторов](../illustration/Как%20делать%20скрины%20и%20гифки%20для%20уроков.md) + +**DO:** + +- `01_splash_screen.png`. +- `Skrinshot_09.png`. +- `here_we_go_again.png`. + +**DON'T:** + +- `всё очень плохо.png`. +- `скрин 1.png`. + +### Код-стайл + +- Блок с картинкой выглядит как относительный путь до картинки внутри репозитория. + +```markdown +![Расположили элементы сверху и снизу от центральной кнопки](./assets/img/some_picture.png) +``` + +- Блок с видео начинается строкой `**ВИДЕО**`, затем идёт пустая строка, а потом + описывается относительный путь до картинки внутри репозитория. + +```markdown +**ВИДЕО** + +![Демонстрация нижней навигации](./assets/video/bottom_navigation_demo.mp4) +``` + +- Если картинка или видео взяты с платформы, блок с начинается + строкой `**КАРТИНКА (ВЗЯТО С ПЛАТФОРМЫ)**` или `**ВИДЕО (ВЗЯТО С ПЛАТФОРМЫ)**`, затем идёт пустая строка, а потом + описывается ссылка на картинку. + +```markdown +**КАРТИНКА (ВЗЯТО С ПЛАТФОРМЫ)** + +![image](https://pictures.s3.yandex.net:443/resources/Skrinshot_06_1682414328.png) + +**ВИДЕО (ВЗЯТО С ПЛАТФОРМЫ)** + +![video](https://code.s3.yandex.net/Mobile/Android/%D0%92%D0%B8%D0%B4%D0%B5%D0%BE/ndr.mp4) +``` + +- Техническое задание для иллюстратора начинается упоминанием имени иллюстратора, затем идёт описание задания. Это ТЗ нужно продублировать в трекере задачей на иллюстратора. Подробнее [процес здесь](../illustration/Если%20нужна%20иллюстрация%20в%20урок.md) + +```markdown +@sashasketchit Нарисовать аналог в нашей тематике. + +@sashasketchit Может тут стоить нарисовать ЭНДИ с испуганным лицом и капельками пота на лице или сидящим за столом с +водкой и сигаретой (как в том меме). +``` + +- Каждое изображение в коде должно иметь осмысленный альтернативный текст (Пока что + на Платформе не описывается альтернативный текст, поэтому в качестве описания картинки после актуализации текста + пишется просто `image`.). + +**DO** + +```markdown +![Хомяк навигационный](https://pictures.s3.yandex.net:443/resources/01khomiak_instrumenty_navigatsii_1683199285.png) + +![Схема "Чистой архитектуры"](https://pictures.s3.yandex.net:443/resources/Clean_architecture_scheme_1676879485.png) +``` + +**DON'T** + +```markdown +![img](https://pictures.s3.yandex.net:443/resources/01khomiak_instrumenty_navigatsii_1683199285.png) + +![](https://pictures.s3.yandex.net:443/resources/Clean_architecture_scheme_1676879485.png) +``` + +### Галереи с картинками + +Блоки-галереи предназначены для показа нескольких картинок в одном блоке. С помощью таких блоков очень удобно +демонстрировать дизайны экранов, последовательности визуальных инструкций. + +На Платформе эти блоки выглядят так: + +![Блоки-галереи](./assets/img/image_gallery_block.png) + +В коде урока блок-галереи начинается строкой `**БЛОК-ГАЛЕРЕЯ**`, далее следует перечисление картинок в упорядоченном +списке. Блок заканчивается строкой `**КОНЕЦ БЛОКА-ГАЛЕРЕИ**`. + +```markdown +**БЛОК-ГАЛЕРЕЯ** + +1. ![image](https://pictures.s3.yandex.net:443/resources/skrin_04_search_01_1683201744.png) +2. ![image](https://pictures.s3.yandex.net:443/resources/skrin_04_mt2_02_1683201751.png) +3. ![image](https://pictures.s3.yandex.net:443/resources/skrin_04_mt1_03_1683201757.png) +4. ![image](https://pictures.s3.yandex.net:443/resources/skrin_04_settings_04_1683201763.png) + +**КОНЕЦ БЛОКА-ГАЛЕРЕИ** +``` + +--- + +## Особое выделение блоков на Платформе + +На Платформе есть возможность выделять блоки текста множеством разных способов. Чтобы при переносе контента урока из +репозитория на Платформу эти блоки не потерялись, нужно корректно выделять их в тексте `Markdown`-файлов. + +### Термин для глоссария + +Мы можем выделять термины таким образом, чтобы при наведении на них, мы могли отобразить дополнительные пояснения. + +На Платформе это выглядит так: + +![Термин для глоссария](./assets/img/glossary_item.png) + +```markdown +Swift — опенсорсный (**ГЛОССАРИЙ** От англ. open-source software — софт с открытым исходным кодом) язык программирования. +``` + +--- + +### Блок пояснения + +На Платформе есть возможность выделить блок текста для его большей заметности. + +На Платформе эти блоки выглядят так: + +![Блок пояснения](./assets/img/quiz_task_block.png) + +![Блок пояснения с заголовком](./assets/img/quiz_task_header_block.png) + +В коде урока блок пояснения начинается строкой `**БЛОК**`, далее, если хотим добавить заголовок - пишем его текст после +начальной строки. Затем добавляется пустая строка, после которой начинается описание текста блока. Текст блока может +содержать только отформатированный текст. Блок заканчивается строкой `**КОНЕЦ БЛОКА**`. + +```markdown +**БЛОК** + +Подсказки для продвинутых задач развёрнутые и направляют к конкретным решениям, поэтому вы вполне можете с ними +справиться. Если вы придёте к решению самостоятельно, то это уровень специалиста, достойный особого внимания +работодателей. + +**КОНЕЦ БЛОКА** +``` + +Или блок с заголовком: + +```markdown +**БЛОК** 💡Совет от разработчика + +В `RelativeLayout` дочерние элементы по умолчанию привязаны к левому верхнему краю контейнера, как будто бы применены +атрибуты `layout_alignParentTop="true"` и `layout_alignParentStart="true"`. + +Мы рекомендуем всегда явно описывать все желаемые атрибуты, чтобы избежать недоразумений. + +**КОНЕЦ БЛОКА** +``` + +Если блок совпадает с одним абзацем, можно использовать короткую markdown-версию `>`: + +```markdown +> Подсказки для продвинутых задач развёрнутые и направляют к конкретным решениям, поэтому вы вполне можете с ними +справиться. Если вы придёте к решению самостоятельно, то это уровень специалиста, достойный особого внимания +работодателей. +``` + +--- + +### Блоки с цитатами + +Блоки с цитатами предназначены для дополнительного выделения некоторого **цитируемого текста**, например, в тексте урока +приводится пример технического задания, или пример рассуждений какого-то человека. + +На Платформе эти блоки выглядят так: + +![Блоки с цитатами](./assets/img/blockquote_block.png) + +В коде урока блок с цитатами начинается строкой `**БЛОК ЦИТАТЫ**`, далее следует текст блока. Каждая строка блока +начинается с символа закрывающей угловой скобки (`>`). Блок заканчивается строкой `**КОНЕЦ БЛОКА ЦИТАТЫ**`. + +```markdown +**БЛОК ЦИТАТЫ** + +> +> Вот эта надпись находится сверху от кнопки. +> +> Эта картинка расположена слева от заголовка. +> +> Три иконки в ряд, а вместе они под основным текстом и по центру экрана. + +**КОНЕЦ БЛОКА ЦИТАТЫ** +``` + +--- + +### Блок-диалог + +На Платформе есть возможность выразить часть текста как реплики диалога между студентом и платформой. Это полезно, +когда мы хотим немного разбавить серьёзность урока, добавить какие-то интересные пояснения с короткой подводкой. + +На Платформе это выглядит так: + +![Блок-диалог](./assets/img/chat_block.png) + +В коде урока блок-диалог начинается строкой `**ДИАЛОГ**`. Далее мы указываем реплики в диалоге отдельными строками +текста. В начале реплики мы указываем "автора" сообщения (если это бот "Практикум", то `**ПРАКТИКУМ**`, иначе `**СТУДЕНТ**`), а +дальше отформатированный текст в двойных кавычках (`"`). + +```markdown +**ДИАЛОГ** + +**СТУДЕНТ** "С вертикальными и горизонтальными элементами мы уже работали!" +**ПРАКТИКУМ** "Как растянуть кнопки, тоже знаем!" + +**КОНЕЦ ДИАЛОГА** +``` + +- Если же мы хотим добавить одиночную реплику, без диалога, то указываем просто автора реплики, а рядом - текст. + +```markdown +**СТУДЕНТ** "Выглядит реализуемо! " +``` + +- Если мы хотим добавить несколько фраз от одного и того же автора, оформляем это так: начинаем + строчкой `**МОНОЛОГ ИМЯ_АВТОРА**`, далее идут реплики от лица автора, и заканчиваем строкой `**КОНЕЦ МОНОЛОГА**`. + + +![Блок-монолог](./assets/img/chat_block__monologue.png) + +```markdown +**МОНОЛОГ ПРАКТИКУМ** + +С родительскими контейнерами познакомились! +А что дальше? + +**КОНЕЦ МОНОЛОГА** +``` + +### Блок-реплика + +На Платформе есть возможность описать кнопку-призыв к действию. Обычно эта кнопка приводит к появлению блока с диалогом. + +На Платформе это выглядит так: + +![Блок-кнопка](./assets/img/action_button_block.png) + +В коде урока такая кнопка описывается строкой `**КНОПКА-РЕПЛИКА**`, после чего идёт отформатированный текст. + +```markdown +**КНОПКА-РЕПЛИКА** С вертикальными и горизонтальными элементами мы уже работали! +``` + +--- + +### Блок-переход к следующей части урока + +На Платформе есть возможность делить урок на смысловые части и выдавать материал порционно. Для этого использовать обычную кнопку: + +```markdown +**КНОПКА** +Как связаны элементы в Storyboard и в коде +``` + +За такой кнопкой появится следующий блок текста урока, а сама кнопка у студента исчезнет сразу после перехода по ней. + +Можно использовать в названии кнопки текст заголовка следующего параграфа: + +```markdown +**КНОПКА** +Как связаны элементы в Storyboard и в коде + +## Как связаны элементы в `Storyboard` и в коде +``` + +### Блок-переход на следующий урок + +На Платформе есть возможность описать кнопку для перехода на следующий урок. Это может быть как простая фраза, так и +одно слово. + +На Платформе это выглядит так: + +![Блок-переход на следующий урок](./assets/img/button_next_lesson.png) + +В коде урока такая кнопка описывается строкой `**КНОПКА-ПЕРЕХОД**`, после чего идёт отформатированный текст. + +```markdown +**КНОПКА-ПЕРЕХОД** Вперёд! +``` + +--- + +### Блок для скрытия/показа контента + +На Платформе есть возможность оборачивать контент в блоки с возможностью скрытия/показа контента. Это бывает полезно, +когда мы хотим дать какую-то опциональную теорию или же описать блок, содержимое которого не должно быть сразу видно ( +пример: критерии дипломного проекта с подсказками декомпозиции). + +На Платформе эти блоки выглядят так: + +![Блок для скрытия/показа контента -- содержимое скрыто](./assets/img/cut_section_collapsed_block.png) + +![Блок для скрытия/показа контента -- содержимое показано](./assets/img/cut_section_expanded_block.png) + +В коде урока блок для скрытия/показа контента начинается строкой `**СКРЫВАШКА**`, на этой же строке указываем +заголовок блока, который будет виден пользователю до разворачивания блока. Далее следует текст скрытого блока. Текст +блока может содержать картинки, списки, блоки с кодом и т.д. Блок заканчивается строкой `**КОНЕЦ СКРЫВАШКИ**`. + +```markdown +**СКРЫВАШКА** Подсказки +Подсказки: + +1. Переменная `currentQuestionIndex` хранит индекс текущего вопроса — то есть мы точно знаем, на какой вопрос сейчас отвечает пользователь; + +2. Каждый вопрос из массива моковых вопросов содержит в себе поле с правильным вариантом ответа (осталось понять, как достать нужный вопрос из массива); + +3. В качестве аргумента мы передаём в `showAnswerResult(isCorrect: Bool)` признак правильности ответа, который будет вычисляться путём сравнения ответа, данного пользователем, и ответа из мокового вопроса. + +**КОНЕЦ СКРЫВАШКИ** +``` + +**Авторские решения** + +В скрывашки помещаются авторские решения. + +Авторские решения сопровождаются дисклеймером–рекомендацией (со стрелочкой `>`) решить задачу самостоятельно, прежде чем подсматривать верный ответ. + +```markdown + +**СКРЫВАШКА** +### Авторское решение + +> Советуем посмотреть авторское решение только после того, как вы сами попробовали решить задачу. С ним можно сверяться, хотя оно может отличаться от вашего решения. + + ```swift + func testNoButton() { + sleep(3) + + let firstPoster = app.images["Poster"] + let firstPosterData = firstPoster.screenshot().pngRepresentation + + app.buttons["No"].tap() + sleep(3) + + let secondPoster = app.images["Poster"] + let secondPosterData = secondPoster.screenshot().pngRepresentation + + let indexLabel = app.staticTexts["Index"] + + XCTAssertNotEqual(firstPosterData, secondPosterData) + XCTAssertEqual(indexLabel.label, "2/10") + } + ``` + +**КОНЕЦ СКРЫВАШКИ** +``` + +--- + +## Блоки-квизы + +Блоки с квизами предназначены для описания дополнительных проверочных заданий. Полный перечень возможных типов квизов можно увидеть [в презентации](https://docs.google.com/presentation/d/1gerL6XE4pEzzD2_Y_wQHqNaixg152R2eFTP26fvmc20/edit#slide=id.gfe8352e58f_0_1528). + +### Одиночный выбор + +- Самая простая механика — обычный тестовый вопрос. +- Принимается текст, формулы, картинки и код в качестве вариантов ответа и фидбека. +- Можно показать студенту фидбек к каждому ответу, чтобы объяснить ему что-то +- Надёжный как швейцарские часы! +- Немного скучный. + +На Платформе эти блоки выглядят так: + +![Блок квиза с одиночным выбором](./assets/img/quiz_select_single_block.png) + +![Блок квиза с одиночным выбором, состояние с решением + описание](./assets/img/quiz_select_single_block__solved_with_description.png) + +- В коде урока блок квиза с множественным выбором начинается строкой `**КВИЗ** (Одиночный выбор)`, далее следует текст задания. +- Текст заданий помимо отформатированного текста может содержать изображения, блоки с кодом. +- После описания задания идёт перечисление вариантов ответа. +- Каждый вариант начинается символом чекбокса `- [ ] `, далее следует текст варианта. После описания каждого варианта ответа **должно быть пояснение к ответу**. +- Правильные ответы отмечаются строкой `(ПРАВИЛЬНЫЙ ОТВЕТ)`. Варианты ответа могут быть и пояснения могут быть текстом с форматированием. +- Весь блок заканчивается строкой `**КОНЕЦ КВИЗА**`. + +**КВИЗ** + +```markdown +**КВИЗ** (Одиночный выбор) + +1. Что будет выведено, когда выполнится код? + + ```swift + var message: String? // 1 + if let value = message { // 2 + print(value) // 3 + } + ``` + +- [+] Ничего +(ПРАВИЛЬНЫЙ ОТВЕТ) Правильно! + +- [-] Optional(value) +Нет, давайте разбираться. В первой строке мы объявили переменную message, но не присвоили ей значение. Во второй проверили наличие значения в переменной message. Его нет: переменная не была проинициализирована, а значит, условие внутри if не будет выполнено. + +- [-] Optional(message) +Нет, давайте разбираться. В первой строке мы объявили переменную message, но не присвоили ей значение. Во второй проверили наличие значения в переменной message. Его нет: переменная не была проинициализирована, а значит, условие внутри if не будет выполнено. + +- [-] nil +Нет, давайте разбираться. В первой строке мы объявили переменную message, но не присвоили ей значение. Во второй проверили наличие значения в переменной message. Его нет: переменная не была проинициализирована, а значит, условие внутри if не будет выполнено. + +**КОНЕЦ КВИЗА** +``` + +Если у квиза есть дополнительное пояснение, которое следует показать после выбора ответа, мы помещаем его текст перед +окончанием квиза, вот так: + +```markdown +// Дополнительное пояснение после ответа + +Мы не можем записать объекты в `SharedPreferences` напрямую. Сначала нам нужно представить объект в виде строки, а потом +записать эту строку. +``` + +### Множественный выбор + +- Работает по тем же принципам, что и одиночный выбор. +- Студенту предлагается ряд вариантов, и он может выбрать несколько вариантов в качестве ответа. + +На Платформе эти блоки выглядят так: + +![Блок квиза с множественным выбором](./assets/img/quiz_select_multiple_block.png) + +В коде урока блок квиза с множественным выбором начинается строкой `**КВИЗ** (Множественный выбор)`, далее следует текст +задания. Текст заданий помимо отформатированного текста может содержать изображения, блоки с кодом. После описания +задания идёт перечисление вариантов ответа. Каждый вариант начинается символом чекбокса `- [ ] `, далее следует текст +варианта. После описания каждого варианта ответа **должно быть пояснение к ответу**. Правильные ответы отмечаются +строкой `(ПРАВИЛЬНЫЙ ОТВЕТ)`. Варианты ответа могут быть и пояснения могут быть текстом с форматированием. Весь блок +заканчивается строкой `**КОНЕЦ КВИЗА**`. + +```markdown +**КВИЗ** (Множественный выбор) + +Каких атрибутов центрирования нет в `RelativeLayout`? + +- [ ] `layout_center` + +(ПРАВИЛЬНЫЙ ОТВЕТ) Верно! Такого атрибута у дочерних элементов `RelativeLayout` нет. +Зато есть `layout_centerInParent`, который позволит отцентрировать элемент внутри родительского контейнера. + +- [ ] `layout_centerInParent` + +У дочерних элементов `RelativeLayout` появляется атрибут `layout_centerInParent`, который позволит отцентрировать +элемент внутри родительского контейнера. + +- [ ] `layout_centerInChild` + +(ПРАВИЛЬНЫЙ ОТВЕТ) Верно! Такого атрибута у дочерних элементов `RelativeLayout` нет. Зато есть `layout_centerInParent`, +который позволит отцентрировать элемент внутри родительского контейнера. + +- [ ] `layout_centerBoth` + +(ПРАВИЛЬНЫЙ ОТВЕТ) Верно! Такого атрибута у дочерних элементов `RelativeLayout` нет. Зато есть отдельные +атрибуты `layout_centerVertical` и `layout_centerHorizontal`, которые позволят отцентрировать элемент только по +вертикали либо только по горизонтали. + +- [ ] `layout_centerVertical` + +У дочерних элементов `RelativeLayout` появляется атрибут `layout_centerVertical`, который позволит отцентрировать +элемент только во вертикали. + +**КОНЕЦ КВИЗА** +``` + +Если вариант ответа не помещается в одну строку, то после символа чекбокса мы пропускаем строку и описываем вариант: + +```markdown + +- [x] +```swift +func helloWorld() -> String { + return "Hello World!" +} +``` + +(ПРАВИЛЬНЫЙ ОТВЕТ) Верно! + +- [ ] + +```swift +fun helloWorld() { + print("Hello World!") +} +``` + +В Swift нет ключевого слова `fun`. Для объявления функции надо использовать слово `func`. +``` + +### Выбор из списка + +- Студенту надо выбрать правильный ответ к каждому вопросу/картинке. +- Фидбек к каждому ответу виден студенту. +- Можно сформулировать как задачку из серии «расставьте в правильном порядке». +- Может выглядеть несколько громоздко. +- Позволяет спросить обо всём и сразу. + +``` +**КВИЗ** (выбор из списка) +**Соотнесите термины и определения.** + +**ВАРИАНТЫ ОТВЕТА:** +- Объект +- Метод +- Поле или атрибут + +**ВОПРОСЫ** +1. Действия, которые объект может выполнять. + +(ПРАВИЛЬНЫЙ ОТВЕТ) Метод + +ПОЯСНЕНИЕ: Вы уже хорошо знакомы с методами: они нужны, чтобы выполнять различные действия. + +2. Свойства, описывающие конкретный объект. + +(ПРАВИЛЬНЫЙ ОТВЕТ) Поле или атрибут + +3. Набор полей и методов, сгруппированных вместе, для представления какой-то сущности. +(ПРАВИЛЬНЫЙ ОТВЕТ) Объект + +ПОЯСНЕНИЕ: Отлично, вы правильно запомнили основные понятия объектно-ориентированного программирования. +``` + +### Текстовое поле + +- Студенту должен ввести слова или числа в поле. +- Этот квиз может идти без проверки. +- Можно запросить точный ответ или прописать несколько вариантов как правильные. +- Хорошо подходит для математических задачек на расчёты. +- Меньше подходит для текстов — их долго и сложно писать. + +``` +**КВИЗ** (Текстовое поле) + +1. Какой командой можно создать папку? + +(ПРАВИЛЬНЫЙ ОТВЕТ) mkdir + +ПОЯСНЕНИЕ: В командной строке создать новую папку можно с помощью команды `mkdir`. + +``` + +### Квиз-макароны + +- Элементы нужно корректно соединить между собой линиями. +- Каждой карточке — по одному соответствию. +- Общий фидбек + правильное соответствие к каждой карточке слева. +- Поддерживает картинки. +- Выглядит очень наглядным. +- Плохо дружит с широкими и длинным текстом. + +На Платформе такой блок выглядит следующим образом: + +![Квиз-макароны, начальное состояние](./assets/img/quiz_macaroni__initial.png) + +![Квиз-макароны, состояние с решением](./assets/img/quiz_macaroni__solved.png) + +В коде урока квизы-макароны имеют следующий формат: блок начинается с `**КВИЗ** (Макароны)`, затем следует описание +задачи. Далее перечисляем список вариантов в левой колонке (предваряя комментарием `// Варианты в левой колонке`), +потом - список вариантов в правой колонке (предваряя комментарием `// Варианты в правой колонке`). После этого следует +секция с правильными ответами, там мы перечисляем номера элементов в левой колонке, добавляем стрелочку и указываем +номер соответствия в правой колонке. И, наконец, добавляем опциональный текст успеха, который будет показываться после +выполнения задачи (предваряя комментарием `// Текст успеха`): Если текста успеха нет, то нет и комментария. + +```markdown +**КВИЗ (Макароны)** + +Сопоставьте названия шаблонов и их назначениями: + +// Варианты в левой колонке + +1. Adapter +2. Singleton +3. Observer + +// Варианты в правой колонке + +1. реализует у класса механизм, который позволяет объекту этого класса получать оповещения об изменении состояния других + объектов и наблюдать за ними. +2. c его помощью создаётся только один объект класса. +3. предназначен для организации использования функций объекта через специально созданный интерфейс + +// Правильные ответы + +- 1 --> 3 +- 2 --> 2 +- 3 --> 1 + +// Текст успеха + +Наши помощники! + +**КОНЕЦ КВИЗА** +``` + +### Карточки + +- Разные ответы нужно распределить по категориям. +- Каждая карточка относится к одной категории. +- Фидбек к каждому ответу. +- Не больше четырёх категорий. +- Выглядит очень наглядным. +- Подходит для небольшого круга вопросов. + +На Платформе такой блок выглядит следующим образом: + +![Квиз с карточками, начальное состояние](./assets/img/quiz_cards__initial.png) + +![Квиз с карточками, состояние с решением](./assets/img/quiz_cards__solved.png) + +В коде урока квизы-карточки имеют следующий формат: блок начинается с `**КВИЗ (Карточки)**`, затем следует описание +задачи, далее идёт список, где элементы первого уровня определяют категории, по которым нужно будет распределять +карточки, а элементы второго уровня обозначают ответы для этой категории. Блок заканчивается строкой `**КОНЕЦ КВИЗА**`. + +```markdown +**КВИЗ** (Карточки) + +Расположите методы жизненного цикла фрагмента в подходящих группах. + +- Методы ЖЦ объекта фрагмента + + - `onDestroy` + - `onStop` + - `onPause` + - `onResume` + - `onStart` + - `onCreate` + +- Методы ЖЦ `View` фрагмента + + - `onDestroyView` + - `onViewCreated` + - `onCreateView` + +- Методы привязки фрагмента к `Activity` + + - `onDetach` + - `onAttach` + +**КОНЕЦ КВИЗА** +``` + +### Сборная строка + +- Ответы нужно расположить в правильном порядке. +- Общий фидбек. +- Выглядит очень наглядным. +- Ответы должны быть не очень длинными. + +На Платформе такой блок выглядит следующим образом: + +![Квиз "сборной строки", начальное состояние](./assets/img/quiz_put_in_order__initial.png) + +![Квиз "сборной строки", успех](./assets/img/quiz_put_in_order__success.png) + +![Квиз "сборной строки", error](./assets/img/quiz_put_in_order__error.png) + +В коде урока квизы со сборной строкой имеют следующий формат: блок начинается с `**КВИЗ (Сборная строка)**`, затем +следует описание задачи, далее идёт строчка вида `// Список строк`, после неё список, где все элементы расположены +в **правильном** порядке. Далее следует строка `// Текст успеха`, и затем текст, который будет показываться в случае +успеха или ошибки. Блок заканчивается строкой `**КОНЕЦ КВИЗА**`. + +```markdown +**КВИЗ** (Сборная строка) + +Дополните код и составьте корректный запрос записи массива в `SharedPreferences`, где данные получаются +методом `getUsers`. + +// Список строк + +- `sharedPreferences.edit()` +- `putString(USER_LIST_KEY, Gson().toJSON(getUsers()))` +- `.apply()` + +// Текст успеха + +Ох уж этот код! + +**КОНЕЦ КВИЗА** +``` + +--- \ No newline at end of file diff --git a/docs/illustration/assets/Запись_видео.png b/docs/illustration/assets/Запись_видео.png new file mode 100644 index 00000000..04c4de98 Binary files /dev/null and b/docs/illustration/assets/Запись_видео.png differ diff --git a/docs/illustration/assets/Настройки тени.png b/docs/illustration/assets/Настройки тени.png new file mode 100644 index 00000000..a1ad8a6f Binary files /dev/null and b/docs/illustration/assets/Настройки тени.png differ diff --git a/docs/illustration/assets/Отступы скриншота с тенью.png b/docs/illustration/assets/Отступы скриншота с тенью.png new file mode 100644 index 00000000..b7e967bb Binary files /dev/null and b/docs/illustration/assets/Отступы скриншота с тенью.png differ diff --git a/docs/illustration/assets/Отступы широкой картинки.png b/docs/illustration/assets/Отступы широкой картинки.png new file mode 100644 index 00000000..c198b873 Binary files /dev/null and b/docs/illustration/assets/Отступы широкой картинки.png differ diff --git a/docs/illustration/assets/Пример обводок лэйблов и стрелочек.png b/docs/illustration/assets/Пример обводок лэйблов и стрелочек.png new file mode 100644 index 00000000..c9c3afd3 Binary files /dev/null and b/docs/illustration/assets/Пример обводок лэйблов и стрелочек.png differ diff --git a/docs/illustration/assets/Создаем страницу.png b/docs/illustration/assets/Создаем страницу.png new file mode 100644 index 00000000..bd73dc68 Binary files /dev/null and b/docs/illustration/assets/Создаем страницу.png differ diff --git a/docs/illustration/assets/Страница шаблонов.png b/docs/illustration/assets/Страница шаблонов.png new file mode 100644 index 00000000..cc4f837f Binary files /dev/null and b/docs/illustration/assets/Страница шаблонов.png differ diff --git a/docs/illustration/assets/Фон_видео.png b/docs/illustration/assets/Фон_видео.png new file mode 100644 index 00000000..440e2cfb Binary files /dev/null and b/docs/illustration/assets/Фон_видео.png differ diff --git a/docs/illustration/assets/Цвет_подложки_видео.png b/docs/illustration/assets/Цвет_подложки_видео.png new file mode 100644 index 00000000..df3e51e3 Binary files /dev/null and b/docs/illustration/assets/Цвет_подложки_видео.png differ diff --git a/docs/illustration/assets/Экспорт artboard'а.png b/docs/illustration/assets/Экспорт artboard'а.png new file mode 100644 index 00000000..aaf1ad55 Binary files /dev/null and b/docs/illustration/assets/Экспорт artboard'а.png differ diff --git a/docs/illustration/assets/Экспортированный artboard.png b/docs/illustration/assets/Экспортированный artboard.png new file mode 100644 index 00000000..29bfefbe Binary files /dev/null and b/docs/illustration/assets/Экспортированный artboard.png differ diff --git a/docs/illustration/Если нужна иллюстрация в урок.md b/docs/illustration/Если нужна иллюстрация в урок.md new file mode 100644 index 00000000..0e9977bb --- /dev/null +++ b/docs/illustration/Если нужна иллюстрация в урок.md @@ -0,0 +1,17 @@ + +## Если нужна иллюстрация в урок + +👉 Этот документ, копия [страницы по процессу в Wiki](https://wiki.yandex-team.ru/practicum/programming-practicum/stranicyko-0914/mobile-3b57/kursios-ra-cbfc/kakrabotat-0844/) + +Ход работы с иллюстрациями: идея → ч/б эскиз → правки → результат + +1. Вы пишите иллюстратору ТЗ: создаете задача в трекере. +2. В тексте на Github пишем **КАРТИНКА / ИЛЛЮСТРАЦИЯ** в том месте, где она должна лежать**** +3. Все итерации и обсуждение иллюстраций проходят внутри созданной задачи в трекере +4. Иллюстратор рисует ч/б → зовет вас → обсуждаете → рисуете цветной вариант → зовет вас → загружаем в папку assets в каждой теме → добавляем иллюстрацию в текст. +5. **ВАЖНО!** Кидайте ваши предложения иллюстратору сразу, как возникла идея, так как нужно рассчитать время и если вы слишком поздно придумаете идею, то картинка может быть не отрисована + +**Пример ТЗ на иллюстрацию:** + +- **КАРТИНКА** Давай нарисуем здесь трёх волхвов, которые держат в руках три разных подарка и на небе в облаке написано “Jesus is about to be born”. Пример из гугла прикрепил к тексту +- **СХЕМА** Тут нужно будет сделать схему приготовления борща. Четыре пункта: поиск рецепта, поход в магазин, приготовление, сервировка. Если нужно, могу приложить пример \ No newline at end of file diff --git a/docs/illustration/Как делать скрины и гифки для уроков.md b/docs/illustration/Как делать скрины и гифки для уроков.md new file mode 100644 index 00000000..85d04aaf --- /dev/null +++ b/docs/illustration/Как делать скрины и гифки для уроков.md @@ -0,0 +1,67 @@ +# Как делать скрины и гифки для уроков + +👉 Этот документ, копия [страницы по процессу в Wiki](https://wiki.yandex-team.ru/practicum/programming-practicum/stranicyko-0914/mobile-3b57/kursios-ra-cbfc/kakrabotat-0844/) + +--- + +👉 [Ссыль на скриншотницу](https://www.figma.com/file/RbV09DwRw5E8XahFVXdQzp/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B-%D1%81%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%D0%BE%D0%B2?node-id=0%3A1) в Figma + +> 🎯 Важно: скриншоты должны быть **максимально большие** (но с отступами, информация о них ниже) → иначе на платформе ничего не видно + +### **Приступаем к созданию скриншотов для своей темы** + +- Заходим в фигму по ссылке, затем: +- Заходим на страницу “Шаблоны“, выбираем какой-то artboard, копируем его `Cmd+C` , затем возвращаемся на личную страничку в фигме, где вы деалаете скриншот, и вставляем `Cmd+V` . В артборде уже настроен экспорт, фон и контур. Так что **создавать свои артборды с нуля** не стоит чтобы не было расхождений. +- Артборд называем соответственно `sprint-x/theme-x/part-x/screenshot-name` — `номер спринта / номер темы / номер урока / название скриншота` (тогда при экспорте все скриншоты уже будут рассортированы по папкам, то есть название artboard’а будет путем до картинки после экспорта) + +> 💡 Сейчас каждый автор делает скриншот в своей личной фигме. Если нужна помощь иллюстратора, ссылку на свою фигму нужно приложить в задачу. + +### **Контент скриншота** + +- Скриншот лучше делать простой, без встроенной тени в mac os, так контент будет выглядеть однообразно. Чтобы снимок не содержал тени окна, **при щелчке удерживайте нажатой клавишу Option**. Если в углу экрана появится миниатюра, щелкните ее, чтобы отредактировать снимок экрана. Или дождитесь сохранения снимка экрана на рабочем столе +- Скриншоты сложно привести к единому размеру, поэтому отступы даны условные для ориентира, от них можно отклоняться. +- Отступы сверху и снизу были примерно 85~90 точек (можно зажать `Opt+Shift` и масштабировать скриншот чтобы смотреть как меняются отступы от краев artboard’а), а справа и слева - не меньше 240~250. Отступ от стрелки до объекта ~20 +- скругление 10 точек +- тень: `x = 0, y = 4, blur = 10, spread 0, 25%` +- Чтобы сделать обводку, или стрелочки — копируем нужный элемент со страницы **“Шаблоны”** и вставляем к себе. Также можно посмотреть кучу примеров стрелочек, лэйблов и обводок на странице “Фритрэк скриншоты” и скопировать элемент оттуда +- Фон для скришотов по дефолту белый, но если у вас стоит светлая тема, то рекомендуется использовать серый фон #E6E8EB он есть в шаблонах фигмы + +### **Экспорт скриншота** + +- Когда один или несколько скриншотов готовы, выделяем все нужные нам artboard’ы на странице и нажимаем в правой боковой панель кнопочку `Export` +- Экспортированные скриншоты перемещаем в папку с картинками `images` в папке своей темы. + +![Создаем страницу.png](./assets/Создаем%20страницу.png) + +![Страница шаблонов.png](./assets/Страница%20шаблонов.png) + +![Экспорт artboard'а.png](./assets/Экспорт%20artboard'а.png) + +![Пример обводок лэйблов и стрелочек.png](./assets/Пример%20обводок%20лэйблов%20и%20стрелочек.png) + +![Настройки тени.png](./assets/Настройки%20тени.png) + +![Отступы скриншота с тенью.png](./assets/Отступы%20широкой%20картинки.png) + +![Отступы широкой картинки .png](./assets/Отступы%20скриншота%20с%20тенью.png) + +![Экспортированный artboard.png](./assets/Экспортированный%20artboard.png) + +### Анимация и гифки + +Если для урока требуется запись скринкаста или анимация **не размера десктоп**, то для нее понадобится подложка как и на скриншотах. + +- Записать видео или скринкаст можно через Quick Time + +![Запись_видео.png](./assets/Запись_видео.png) + +- Гифки или видео можно также записать через симулятор + - Для этого нужно выбрать симулятор и нажать **CMD+R** или **File > Record Screen**. + - Результат можно превратить в Анимированную гифку (нужно выбрать соотвествующий пункт нажав “правой кнопкой мыши” на мини версию видео справа от симулятора, сразу после того, как видео было записано). + +- На подложку проще всего класть именно видео, открыв его через IMovie. Там же можно выбрать цвет фона. Мы используем **белый.** Если ваше видео уже с большим количеством белого и черного цвета настолько, что фон мешает восприятию и просмотру, то используем серый фон #E6E8EB + +![Фон_видео.png](./assets/Фон_видео.png) + +![Цвет_подложки_видео.png](./assets/Цвет_подложки_видео.png) + diff --git a/docs/structure/assets/Введение.png b/docs/structure/assets/Введение.png new file mode 100644 index 00000000..52137859 Binary files /dev/null and b/docs/structure/assets/Введение.png differ diff --git a/docs/structure/assets/ГЛОССАРИЙ-платформа.jpeg b/docs/structure/assets/ГЛОССАРИЙ-платформа.jpeg new file mode 100644 index 00000000..eb0e78d1 Binary files /dev/null and b/docs/structure/assets/ГЛОССАРИЙ-платформа.jpeg differ diff --git a/docs/structure/assets/ГЛОССАРИЙ-текст.png b/docs/structure/assets/ГЛОССАРИЙ-текст.png new file mode 100644 index 00000000..61e08b3b Binary files /dev/null and b/docs/structure/assets/ГЛОССАРИЙ-текст.png differ diff --git a/docs/structure/assets/Заключение.png b/docs/structure/assets/Заключение.png new file mode 100644 index 00000000..3b10adee Binary files /dev/null and b/docs/structure/assets/Заключение.png differ diff --git a/docs/structure/assets/Квизы.png b/docs/structure/assets/Квизы.png new file mode 100644 index 00000000..c34fa269 Binary files /dev/null and b/docs/structure/assets/Квизы.png differ diff --git a/docs/structure/assets/Тезисы.png b/docs/structure/assets/Тезисы.png new file mode 100644 index 00000000..b68547a9 Binary files /dev/null and b/docs/structure/assets/Тезисы.png differ diff --git a/docs/structure/assets/домашнее_задание.png b/docs/structure/assets/домашнее_задание.png new file mode 100644 index 00000000..9596b2c2 Binary files /dev/null and b/docs/structure/assets/домашнее_задание.png differ diff --git a/docs/structure/Структура уроков.md b/docs/structure/Структура уроков.md new file mode 100644 index 00000000..089f7029 --- /dev/null +++ b/docs/structure/Структура уроков.md @@ -0,0 +1,176 @@ +# Структура уроков: чек-лист для авторов + +Привет! Это формальные штуки, которые должны быть в каждом уроке 👌 + +Рассмотрим два шаблона: стандартный урок ([пример](https://practicum.yandex.ru/learn/ios-developer/courses/6aebbc23-2480-4618-9999-3a7555e7156c/sprints/79799/topics/ee995b7e-db71-46ad-8f20-865db996a7a0/lessons/c01fe6b3-d788-4242-9519-800d0502211a/)) и урок с задачей ([пример](https://practicum.yandex.ru/learn/ios-developer/courses/6aebbc23-2480-4618-9999-3a7555e7156c/sprints/79799/topics/0c0b0912-4577-4157-9131-6383e4f1f8ef/lessons/f37bff1e-3a9a-4bc1-8e89-0e6f524ed9c0/)). + +## Стандартный урок + +### 0. Название + +Должно быть: + +- у каждой темы +- у каждого урока! + +Черновое название темы определяем на декомпозиции спринта. Если в процессе появляется ощущение, что нужно менять — меняем (советуемся в чатике с авторами, редактором Юлей и методисткой Настей). То же относится к названиям уроков. + +Название темы или урока должно должно отображать суть того, о чём говорится внутри. + +Хороший пример: «Основы вёрстки кодом» (конкретика) + +Плохой пример: «Учимся новому» (абстракция) + +--- + +🚀*В GitHub писать названия уроков нужно по-русски (кроме терминов), а не латиницей — во избежание разночтений.* + +--- + +### 1. **Введение** + +**1.1** **Введение** — это пара абзацев в общем тексте первого урока или же отдельный **урок-онбординг**. Кратко, в 2–3 пунктах, **напоминаем** студентам, о чём шла речь в предыдущей теме. + +Хорошая практика для введения — связать текущую тему с предыдущими. Это можно сделать **с помощью проекта** («в прошлой теме мы сделали такой-то экран, но на кнопочку всё ещё нельзя тыкнуть, этим мы займёмся тут»), а можно **связать концепции, инструменты или технологии**, о которых говорим в соседних темах. + +**Перечисляем, что будет** в этой теме, с чем студенты познакомятся, какие задачи перед ними будут стоять. Упоминаем термины, инструменты, процессы и то, как они используются. + +**Пример** + +![Введение](assets/Введение.png) + +--- + +🚀*Самого подзаголовка «Введение» **не нужно**! На платформе как подзаголовок отображается название урока, текст начинается сразу за ним.* + +--- + +**1.2** Обязательно добавляем информацию о предстоящем **домашнем задании** (если оно предполагается)*: + +**Пример** + +![домашнее_задание](assets/домашнее_задание.png) + +* Этот текст может отличаться — в зависимости от проекта, над которым студенты работают в текущем модуле. Но в рамках одного проекта текст должен оставаться тем же (**просто копируем**, меняя номер спринта) + +--- + +🚀*Дописать вступление и заключение можно после того, как будет готов весь текст. Начните с примеров и терминов, затем дописывайте к ним теорию.* + +--- + +### 2. **Основной текст** + +**2.1** **Структура урока.** Текст не должен идти сплошным полотном. Чтобы студентам было проще воспринимать информацию, рекомендуется давать подряд максимум **2-3 абзаца** (после — выделение в рамочку или фоном или др. элемент, на котором внимание может «отдохнуть»). + +**Как разбивать текст на абзацы:** + +- с помощью подзаголовков +- кнопкой «Далее» +- «кастомной» кнопкой, в которой есть вопрос или побуждение к действию и т.д. («Понятно!», «Что дальше?», «Я молодец!») + +🚀*Приятно, когда с тобой общаются уважительно и проявляют заботу. Реплики-кнопки в ответах, проверочных заданиях, конце темы — позитивно влияют на студента.* + +--- + +**Некоторые подзаголовки у нас стандартные:** + +- Для исторической справки: **«Щепотка истории»** +- Для квизов: **«Проверим изученное» (!Не используем в названии КВИЗ)** +- Для заключения: **«Подведём итоги» (!Не используем в названии ЗАКЛЮЧЕНИЕ)** +- Для задач внутри спринта или домашек: **«Самостоятельная работа»** +- Для авторского решения: **«Авторское решение»** + +🚀Сразу после АР идёт текст: + +*Советуем посмотреть авторское решение только после того, как вы сами попробовали решить задачу. С ним можно сверяться, хотя оно может отличаться от вашего решения.* + +--- + +**2.2** **Тезисы.** Выделяйте важные идеи — например, **БЛОК** (не нужно самим рисовать, просто оставьте комментарий, что этот кусок текста надо выделить). + +**На платформе будет выглядеть так:** + +![Тезисы](assets/Тезисы.png) + +**2.3** **Термины**, которые мы объясняем впервые, надо **расшифровывать**. Это делается с помощью глоссария — подсказок, которые всплывают при наведении мышки на выделенное слово. В Git пишем прописными **ГЛОССАРИЙ**, затем — объяснение: + +![ГЛОССАРИЙ-текст](assets/ГЛОССАРИЙ-текст.png) + +**На платформе будет выглядеть так:** + +![ГЛОССАРИЙ-платформа](assets/ГЛОССАРИЙ-платформа.jpeg) + +**2.4 Списки.** Если в предложении есть перечисление после двоеточия, оформляйте его **списком**, а не через запятую. Так информацию: + +- *проще воспринимать;* +- *легче воспринимать;* +- *сразу видно!* + +--- + +🚀В тексте урока иногда нужно выделить важные повторяющиеся фрагменты. Если вы понимаете, что в вашем уроке есть такие, посмотрите, как это было оформлено в предыдущих темах. + +**Примеры текстов-предупреждений:** + +*Мы рекомендуем самостоятельно переписывать и вставлять в проект любые, даже самые маленькие кусочки кода, которые будут вам  встречаться. Только так вы наработаете навык программирования.* + += = = = = = = + +*Вы можете попробовать применить наши примеры к проекту Movie Quiz в отдельной ветке. Но отправлять это на ревью не нужно! Все примеры кода в этом уроке — иллюстративные. Они нужны, чтобы раскрыть суть принципов SOLID. Если у вас возникнут вопросы — не бойтесь просить помощи у наставников!* + +--- + +### 3. Иллюстрации + +В уроке должна быть **минимум 1 художественная** иллюстрация — для поддержания единого «космического» нарратива. Иллюстрация помогает отдохнуть или обратить внимание на важную часть теории. + +Также обязательно должны быть **скриншоты и/или гифки**, поясняющие и дополняющие материал. + +### 4. Квизы + +Они же — раздел с подзаголовком «Проверим изученное». Помимо вопроса и вариантов ответов, должны содержать пояснения к ответам. + +**Пример** + +![Квизы](assets/Квизы.png) + +Подробнее о квизах — какими они бывают и как их делать — пожалуйста, прочитайте [вот тут](https://www.notion.so/a1a785748f384403b2a5a3e63076a2b8). + +А это — [чек-лист про квизы](https://www.notion.so/c6a3dbbca31c4f10b683b6edf6ad9526), который собирала Настя. Ознакомьтесь! + +### 5. **Заключение** + +Выводы о том, что мы прошли в этом уроке («Подведём итоги»). В нём должно быть перечисление главных новых штук, которые мы изучили, их определения и связи между собой + делаем подводку к следующему уроку или теме. + +**Пример** + +![Заключение.png](assets/Заключение.png) + +## Урок «Сдаём задачу по спринту Х» + +Он же — практическое задание. Это на 90% шаблон, в котором должны быть: + +### 1. Стандартное введение + +*Вы завершили спринт №Х и сделали то-то и то-то. Пришло время сдавать задачу на ревью!* + +Вам нужно сдать проект, в котором есть: + +- перечисление основных, что нужно сделать + +*Выполните задачу по спринту в Xcode. Залейте её в отдельную ветку на GitHub с названием sprint_номер урока. Важно: проект должен быть открытым!* + +### 2. Чек-лист «Убедитесь, что» + +Перечень всех задач, которые мы давали в качестве самостоятельной работы на протяжении модуля. + +### 3. Стандартное заключение + +*Если все пункты совпали — смело отправляйте задание на ревью!* + +*Скопируйте ссылку на пулл-реквест и вставьте её в специальную форму «Ревью» справа.* + +*Ожидайте письма об окончании ревью на почту, с который вы зарегистрированы в Практикуме. Ревьюер скоро напишет вам и даст обратную связь!* + +💃💃💃