Files
freeCodeCamp/docs/i18n/Russian/how-to-work-on-coding-challenges.md

541 lines
27 KiB
Markdown
Raw Normal View History

# Как работать над вызовами кодирования
Наша цель состоит в том, чтобы развить интересный и понятный опыт интерактивного обучения.
Проектирование интерактивных задач кодирования является сложным делом. Было бы намного проще написать длительное объяснение или создать видео учебник, и есть место для тех, кто находится на Средней и YouTube. Тем не менее, для нашей основной учебной программы мы придерживаемся того, что работает лучше всего для большинства людей - полностью интерактивный опыт в видеоигре.
Мы хотим, чтобы лагеря достигли состояния потока. Мы хотим, чтобы они придали импульс и проникли через нашу учебную программу с как можно меньшим количеством змей. Мы хотим, чтобы они с уверенностью участвовали в проектах и пользовались широкими возможностями программирования.
Создание этих вызовов требует огромного творческого потенциала и внимания к деталям. Достаточно много помощи. Вы будете получать поддержку со стороны целого коллектива участников, которым вы можете отказаться от идей и демо своих испытаний. Оставайтесь активными в [комнате участников](https://gitter.im/freecodecamp/contributors) и задайте много вопросов.
С вашей помощью мы можем разработать интерактивный учебный план, который поможет миллионам людей научиться программировать в течение многих лет.
Контент для каждого испытания хранится в собственном файле markdown. Этот файл markdown позже преобразуется в HTML, используя наши инструменты для создания интерактивных веб-страниц.
Все содержимое учебника свободно CodeCamp.org можно найти в каталоге [`/curriculum/challenges`](https://github.com/freeCodeCamp/freeCodeCamp/tree/master/curriculum/challenges).
## Настройка инструментария для учебной программы
Прежде чем работать в учебном плане, вам нужно будет создать инструмент, который поможет вам проверить изменения. Вы можете использовать любую опцию из нижеперечисленных вариантов:
- Вы можете [настроить freeCodeCamp локально](how-to-setup-freecodecamp-locally.md). Это **настоятельно рекомендуется** для регулярных/повторных взносов. Эта настройка позволяет вам работать и тестировать изменения.
- Используйте Gitpod, бесплатную среду онлайн dev. Нажав на кнопку ниже, вы запустите готовое к коду окружение для свободного CodeCamp в вашем браузере. Это занимает всего несколько минут.
[![Открыть в Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/freeCodeCamp/freeCodeCamp)
- Отредактируйте файлы на интерфейсе GitHub, нажав на значок карандаша для соответствующего файла. Хотя это самый быстрый способ, он **не рекомендуется**, потому что вы не можете проверить ваши изменения на GitHub. Если наши сопровождающие приходят к выводу, что изменения, внесенные вами, должны быть протестированы локально, то вам нужно будет следовать вышеуказанным методам снова.
## Шаблон вызова
Ниже приведен шаблон того, как выглядят файлы markdown вызова. Чтобы увидеть упорядоченный шаблон, мы примем его на [ниже](#upcoming-challenge-template).
````md
---
id: Уникальный идентификатор (буквенно-цифровый, MongoDB_id)
title: Challenge Title
challengeType: 0
videoUrl: 'url of video explanation'
---
## Описание
<section id='description'>
Описание вызова и что необходимо для прохождения
</section>
## Инструкции
<section id='instructions'>
Инструкции о том, что именно нужно сделать.
</section>
## Тесты
<section id='tests'>
```yml
tests:
- текст: Должен возвращать "foo"
тестовая строка: "Строковая функция, возможно использование Chai asserts"
````
</section>
## Семена вызова
<section id='challengeSeed'>
<div id='{ext}-seed'>
```{ext}
код, отображаемый в редакторе по умолчанию.
Это необходимый раздел для вызова.
```
</div>
### Перед тестом
<div id='{ext}-setup'>
```{ext}
Optional Test tear down code.
```
</div>
### После теста
<div id='{ext}-teardown'>
```{ext}
Дополнительный тестовый код.
```
</div>
</section>
## Решение
<section id='solution'>
```{ext}
// требуется решение
```
</section>
````
> [!ПРИМЕЧАНИЕ]
>
> 1. В вышеуказанных разделах примеры `{ext}`:
>
> - `html` - HTML/CSS
> - `js` - JavaScript
> - `jsx` - JSX
>
> 2. Для раздела `Tests` выше `text` и `testString` должны быть действительными YAML строками. `testString` может быть строчной функцией или выражением, с помощью которого можно утверждать Chai.
## Многочисленные вызовы
Каждое испытание требует `id`. Если вы не указали один, то MongoDB создаст новый случайный тип при сохранении данных; Однако, мы не хотим, чтобы это делали, поскольку мы хотим, чтобы идентификаторы вызовов были последовательными в различных средах (поэтапно, , много различных разработчиков и т.п.).
Чтобы сгенерировать новый в оболочке (предполагая, что MongoDB работает отдельно):
1. Запустите команду «mongo».
2. Запустите команду `ObjectId()`.
Например:
```bash
$ mongo
Оболочка MongoDB версии v3.6.1
подключающаяся к mongodb://127.0.0.1:27017
MongoDB сервер версия: 3.4.10
...
$ ObjectId()
ObjectId("5a474d78df58bafeb3535d34")
````
Результатом является новая помощь, например `5a474d78df58bafeb35d34` выше.
После того, как у вас есть свой идентификатор, поместите его в файл markdown в качестве идентификатора `в верхней части` , напр.
```yml
---
id: 5a474d78df58bafeb35d34
title: Challenge Title
```
## Задачи в области именования
Тяжелое назование. Мы сделали это проще, введя некоторые ограничения.
Все названия заданий должны быть явными и следовать этой схеме:
\[verb\]\[положение объекта\]
Вот несколько примеров названий вызовов:
- Используйте нотацию по часовой стрелке для указания отступа элемента
- Конденсирующие массивы с .reduce
- Используйте нотации скобки, чтобы найти первый символ в строке
## Описания/инструкции для вызова
Приговоры должны быть четкими и краткими с минимальным жаргоном. If used, jargon should be immediately defined in plain English.
Коротко хранить абзацы (около 1-4 предложений). Люди чаще читают несколько коротких абзацев, чем стенка текста.
Текст вызова должен использовать второго человека ("вы"), чтобы помочь ему разговорный звук. Таким образом текст и инструкции, как представляется, непосредственно говорят в кампере, работая с этой проблемой. Постарайтесь не использовать первого человека ("Я", "мы", "да" и "нас").
Не использовать исходящие ссылки. Они прерывают поток. В ходе этих вызовов лагерям никогда не придется ничего делать в Google. Если есть ресурсы, которые вы считаете, что лагеря выиграют от них, добавьте их в статью, посвященную руководству по вызову.
Вы можете добавить диаграммы в случае крайней необходимости.
Не используйте эмодзи или смайлики в испытаниях. Free CodeCamp имеет глобальное сообщество, и культурное значение эмодзи или эмоций может быть различным по всему миру. Также, emojis может показаться по-разному на разных системах.
Надлежащие существительные должны использовать правильную заглавную букву, когда это возможно. Ниже приведен список слов, которые должны появиться в вызовах.
- JavaScript (заглавные буквы в "J" и "S" и без аббревиатур)
- Node.js
- Разработка фронт-энда (прилагательное форма с тире) - это когда вы работаете на передней части (существительная форма без тире). То же самое относится и к "обратно конца", "полный стек", и многие другие составные термины.
### 2-минутное правило
Каждый вызов должен быть разрешен в течение 120 секунд родным англичанином, который завершил задания перед ним. Это включает в себя время, необходимое для прочтения направлений/инструкций для понимания кода сиденья, Напишите свой собственный код и получите все тесты для прохождения.
Если для завершения испытания потребуется более двух минут, у вас есть два варианта:
- Упростить вызов, или
- Разделить задачу на два вызова.
2-минутное правило вынуждает вас, дизайнер вызовов, чтобы сделать ваши указания четкими, ваш seed код и ваши тесты прямо вперед.
Мы отслеживаем, сколько времени требуется для решения изменений и использования этой информации для определения задач, которые необходимо упростить или разбить.
### Модульность
Каждое задание должно обучать именно одному понятию, и это понятие должно быть видно из названия вызова.
Мы можем укрепить ранее покрытые концепции путем повторения и вариаций - например, вносит h1 элементы в один вызов, затем h3 элементы позже.
Наша цель состоит в том, чтобы иметь тысячи 2-минутных испытаний. Они могут объединять усилия и повторять ранее охваченные концепции.
### Форматирование вызова
Ниже приведены конкретные руководящие принципы для форматирования текста и примеров:
- Ключевые слова языка находятся в тегах `<code>`. Например, имена тегов HTML или имена свойств CSS
- Первый экземпляр ключевого слова при его определении или общие ключевые слова (т.е. "object" или "immutable") находятся в `<dfn>` тегов
- Ссылки на части кода (т.е. функция, метод или имена переменных) должны быть завернуты в `<code>` тегов. Пример ниже:
- Используйте <code>parseInt</code> для преобразования переменной <code>realNumber</code> в целое число.
- Блоки многострочного кода **должны предшествовать пустой строкой**. Следующая строка должна начинаться с трех backtick'ов, за которыми следует немедленно один из [поддерживаемых языков](https://prismjs.com/#supported-languages). Чтобы заполнить блок кода, вы должны начать новую строку, в которой есть только три backticks и **еще одна пустая строка**. **Примечание:** Если вы собираетесь использовать код примера в YAML, используйте `yaml` вместо `yml` для языка справа от обратной связи.
Пример ниже:
````md
Ниже приведен пример кода:
```{language}
[ВАШ КОД ЗДЕСЬ]
````
````
- Дополнительная информация в виде заметки должна быть отформатирована `<strong>Примечание:</strong> Отказ от текста заметки... - При необходимости нескольких заметок, затем перечислите все заметки в отдельных предложениях, используя формат `<strong>Примечания:</strong> Текст первой заметки. Второй текст заметки.
- Используйте двойные кавычки, где это применимо
## Письменные тесты
Испытания должны иметь минимальное количество тестов, необходимых для проверки понимания кемпером.
Наша цель заключается в том, чтобы сообщить единую точку, которую задача пытается преподавать, и проверить, что они поняли этот момент.
Тестирование вызовов может использовать библиотеки для установки Node.js и Chai.js. Также, при необходимости, к переменной `code` можно получить доступ созданный пользователем код.
## Форматирование кода seed seed
Ниже приведены конкретные рекомендации по форматированию кода seed задания:
- Используйте два пробела для отступа
- JavaScript операторы заканчиваются точкой с точкой с запятой
- используйте двойные кавычки, где это применимо
- Произведенные комментарии должны иметь пробел между символами комментария и самими комментариями
`// Исправьте эту строку`
## Подсказки и решения
Каждое задание имеет кнопку `Получить Hint`, , чтобы пользователь мог получить доступ к любым подсказкам/решениям, которые были созданы для вызова. Подсказки по учебному плану/темы находятся на [нашем форуме](https://forum.freecodecamp.org/c/guide) в категории `Guide`.
Если вы нашли проблему с подсказками или решениями вызова, вы можете внести предложения в [категорию участников](https://forum.freecodecamp.org/c/contributors) на форуме. Модераторы и пользователи с уровнем доверия 3 рассмотрят комментарии и решат, включить ли изменения в соответствующую тему подсказки/решения.
### Добавление новых подсказок/тем решений
Пройдите следующие шаги при добавлении новых подсказок/связанных с решениями темы.
1. Начните с тех же шагов для создания новой темы, но оставьте отзыв о следующей для создания заголовка.
2. Название темы должно начинаться с `freeCodeCamp Challenge Guide: `, совпадающий с фактическим названием учебного задания. Например, если вызов называется "`Chunky Monkey`", название темы будет "`freeCodeCamp Challenge Guide: Chunky Monkey`".
3. `camperbot` должен быть владельцем этих тем/записей, поэтому вам нужно будет запросить администратора для смены владельца основного сообщения на `camperbot`.
4. После создания новой темы создается ID темы форума. Она находится в конце URL темы форума. Этот идентификатор должен быть добавлен на первый план файла задания в учебном плане через нормальный процесс запроса на слияние для кнопки `Получить хинт` для связи с темой.
### Руководящие принципы для содержания подсказок и тем решений
При предложении решения для задания учебного плана с темой Руководства, необходимо добавить полный код. Это включает в себя все исходные коды семенного кода, а также любые изменения, необходимые для прохождения всех испытательных испытаний. Следующий шаблон должен использоваться при создании новых подсказок/тем решений:
``md
# Вызовите Имя Здесь
---
## Пояснение проблемы
Таким образом, что нужно сделать без повторного описания задачи и/или инструкций. Это опциональная секция
#### Связанные ссылки
- [Текст ссылки](link_url_goes_here)
- [Текст ссылки](link_url_goes_here)
---
## Подсказки
### Подсказка 1
Подсказка идет
### Подсказка 2
Подсказка идет
---
## Разрешения
<details><summary>Решение 1 (Нажмите, чтобы Показать/Скрыть)</summary>
```js
function myFunc() {
консоль. og('Привет мир!');
}
````
#### Объяснение кода
- Здесь пояснение кода
- Здесь пояснение кода
#### Соответствующие ссылки
- [Текст ссылки](link_url_goes_here)
- [Текст ссылки](link_url_goes_here)
</details>
````
## Испытания на тестирование
Прежде чем вы [создаете запрос на слияние](how-to-open-a-pull-request. г) для ваших изменений, вы должны подтвердить, что внесенные вами изменения не случайно вызывают проблем с вызовом.
1. Чтобы проверить все вызовы, запустите команду ниже из корневого каталога
````
тест npm:curriculum
```
2. Вы также можете протестировать блок или суперблок испытаний с помощью этих команд
```
npm запустить тест:учебный план --block='Основы HTML и HTML5'
```
```
npm запуск test:curriculum --superblock=отзывчивый web-дизайн
```
Вы также можете самостоятельно протестировать одно испытание, выполнив следующие шаги:
1. Переключиться на папку «Учебный план»:
```
cd учебный план
```
2. Выполните следующие действия для каждого файла вызова, для которого вы изменили:
```
тест npm -- -g 'полный английский заголовок вызова'
```
Как только вы подтвердили, что каждое испытание, которое вы проработали при прохождении тестов, [пожалуйста, создайте запрос на слияние](https://github.com/freeCodeCamp/freeCodeCamp/blob/master/docs/how-to-open-a-pull-request.md).
> [!TIP]
> Вы можете установить переменную окружения `LOCALE` в `.env` на язык испытания, который необходимо проверить.
>
> Принятые значения являются `english` и `chinese`, а `english` устанавливается по умолчанию.
## Шаблон предстоящего вызова
Шаблон испытания в процессе обновления до более чистой и менее вложенной структуры. Это не было полностью завершено, но следующие должны быть близки к окончательной структуре:
``mdx
---
id: Уникальный идентификатор (буквенно-цифровый, MongoDB_id)
title: 'Challenge Title'
challengeType: Integer, defined in `client/utils/challengeTypes. s`
videoUrl: 'url of video explanation'
forumTopicId: 12345
---
import Script from './script. dx';
## --step-description--
Текст описания, в markdown
```html
<div>
пример кода
</div>
```
## --step-hints--
![test-id-1]
Имеется произвольное количество трофеев идентификаторов, инструкций (в markdown) и блоков кода.
```js
Код для теста
```
![test-id-2]
Больше инструкций в синтаксисе markdown
```js
Больше кода
```
## --step-seed--
### --pre-user-код--
```lang
Код вычисляется перед пользователем
```
### --after-user-код--
```lang
Код оценивается после пользователей, и перед тестами
```
### --seed-содержимое--
![index-html]
```html
Некоторые html
```
```css
Некоторые css
```
```js
Некоторые js
```
![index-js]
<Script ></p>
<h1 spaces-before="0">
--solution-marker--
</h1>
<p spaces-before="0">
Точно так же, как семена
</p>
<h2 spaces-before="0">
--next-solution-маркер
</h2>
<p spaces-before="0">
То же самое
</p>
<h1 spaces-before="0">
--question-marker--
</h1>
<h2 spaces-before="0">
--text-marker--
</h2>
<p spaces-before="0">
Вопрос будет здесь (используется только для видеоиспытаний)
</p>
<h2 spaces-before="0">
--answers-маркера--
</h2>
<p spaces-before="0">
Ответ 1
</p>
<hr />
<p spaces-before="0">
Ответ 2
</p>
<hr />
<p spaces-before="0">
Ответ 2
</p>
<h2 spaces-before="0">
--solution-marker--
</h2>
<p spaces-before="0">
\<number of correct answer\>
</p>
<p spaces-before="0">
````
</p>
<h3 spaces-before="0">
Полезные ссылки
</h3>
<p spaces-before="0">
Создание и редактирование вызовов:
</p>
<ol start="1">
<li>
<p spaces-before="0">
<a href="https://github.com/freeCodeCamp/freeCodeCamp/blob/master/client/utils/challengeTypes.js#L1-L13">типы вызовов</a> - что означает числовый тип задания (перечислить).
</p>
</li>
<li>
<p spaces-before="0">
<a href="https://www.youtube.com/watch?v=iOdD84OSfAE#t=2h49m55s">Вклад в FreeCodeCamp - написание ES6 испытаний</a> - видео, следующего за <a href="https://twitter.com/ArrowoodTech">Ethan Arrowood</a> , поскольку он вносит вклад в старую версию учебного плана.
</p>
</li>
</ol>