Files
hello-algo/ru/docs/chapter_preface/suggestions.md
Yudong Jin 22b3b568ef fix Ru translation (#1894)
* docs(ru): replace prose quotes with guillemets

* docs(ru): replace prose semicolons with periods

* docs(ru): align animation title forms

* docs(ru): align figure and table references
2026-04-14 18:10:12 +08:00

240 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Как пользоваться этой книгой
!!! tip
Для получения наилучшего опыта чтения рекомендуется полностью прочитать этот раздел.
## Соглашения о стиле изложения
- Главы, помеченные `*` в заголовке, являются дополнительными и содержат более сложный материал. Если времени мало, их можно пропустить.
- Профессиональные термины выделяются полужирным шрифтом в печатной и PDF-версии или подчеркиванием в веб-версии, например <u>массив (array)</u>. Рекомендуется запоминать их для удобства чтения литературы.
- Важные моменты и обобщающие фразы будут **выделяться полужирным шрифтом**, и на такие тексты следует обращать особое внимание.
- Слова и выражения со специальным смыслом будут отмечаться «кавычками», чтобы избежать неоднозначности.
- Когда термины различаются между языками программирования, в качестве стандарта используется Python. Например, `None` применяется для обозначения «пустого» значения.
- В некоторых местах книга отходит от стандартов комментирования программного кода ради более компактного оформления. Комментарии в основном делятся на три типа: заголовочные, содержательные и многострочные.
=== "Python"
```python title=""
"""Комментарий-заголовок: используется для обозначения функций, классов, тестовых примеров и т. п."""
# Содержательный комментарий: подробно поясняет код
"""
Многострочный
комментарий
"""
```
=== "C++"
```cpp title=""
/* Комментарий-заголовок: используется для обозначения функций, классов, тестовых примеров и т. п. */
// Содержательный комментарий: подробно поясняет код
/**
* Многострочный
* комментарий
*/
```
=== "Java"
```java title=""
/* Комментарий-заголовок: используется для обозначения функций, классов, тестовых примеров и т. п. */
// Содержательный комментарий: подробно поясняет код
/**
* Многострочный
* комментарий
*/
```
=== "C#"
```csharp title=""
/* Комментарий-заголовок: используется для обозначения функций, классов, тестовых примеров и т. п. */
// Содержательный комментарий: подробно поясняет код
/**
* Многострочный
* комментарий
*/
```
=== "Go"
```go title=""
/* Комментарий-заголовок: используется для обозначения функций, классов, тестовых примеров и т. п. */
// Содержательный комментарий: подробно поясняет код
/**
* Многострочный
* комментарий
*/
```
=== "Swift"
```swift title=""
/* Комментарий-заголовок: используется для обозначения функций, классов, тестовых примеров и т. п. */
// Содержательный комментарий: подробно поясняет код
/**
* Многострочный
* комментарий
*/
```
=== "JS"
```javascript title=""
/* Комментарий-заголовок: используется для обозначения функций, классов, тестовых примеров и т. п. */
// Содержательный комментарий: подробно поясняет код
/**
* Многострочный
* комментарий
*/
```
=== "TS"
```typescript title=""
/* Комментарий-заголовок: используется для обозначения функций, классов, тестовых примеров и т. п. */
// Содержательный комментарий: подробно поясняет код
/**
* Многострочный
* комментарий
*/
```
=== "Dart"
```dart title=""
/* Комментарий-заголовок: используется для обозначения функций, классов, тестовых примеров и т. п. */
// Содержательный комментарий: подробно поясняет код
/**
* Многострочный
* комментарий
*/
```
=== "Rust"
```rust title=""
/* Комментарий-заголовок: используется для обозначения функций, классов, тестовых примеров и т. п. */
// Содержательный комментарий: подробно поясняет код
// Многострочный
// комментарий
```
=== "C"
```c title=""
/* Комментарий-заголовок: используется для обозначения функций, классов, тестовых примеров и т. п. */
// Содержательный комментарий: подробно поясняет код
/**
* Многострочный
* комментарий
*/
```
=== "Kotlin"
```kotlin title=""
/* Комментарий-заголовок: используется для обозначения функций, классов, тестовых примеров и т. п. */
// Содержательный комментарий: подробно поясняет код
/**
* Многострочный
* комментарий
*/
```
=== "Ruby"
```ruby title=""
### Комментарий-заголовок: используется для обозначения функций, классов, тестовых примеров и т. п. ###
# Содержательный комментарий: подробно поясняет код
# Многострочный
# комментарий
```
## Эффективное обучение с помощью анимированных иллюстраций
По сравнению с текстом видео и изображения обладают более высокой плотностью информации и более четкой структурой, поэтому их легче воспринимать. В этой книге **ключевые и сложные моменты в основном представлены в виде анимированных иллюстраций**, а текст служит пояснением и дополнением.
Если во время чтения вы встречаете фрагмент с анимированной иллюстрацией, как на рисунке ниже, **используйте иллюстрацию в качестве основного источника информации, а текст - в качестве вспомогательного**, объединяя оба источника для понимания материала.
![Пример анимированной иллюстрации](../index.assets/animation.gif)
## Углубление понимания через практику кода
Сопроводительный код этой книги размещен в [репозитории GitHub](https://github.com/krahets/hello-algo). Как показано на рисунке ниже, **исходный код содержит тестовые примеры и может быть запущен одним нажатием кнопки**.
Если позволяет время, **рекомендуется самостоятельно набирать код**. Если времени на обучение мало, по крайней мере **просмотрите и выполните весь код**.
Процесс написания кода приносит больше пользы, чем его чтение. **Настоящее обучение - это обучение на практике**.
![Пример запуска кода](../index.assets/running_code.gif)
Подготовка к запуску кода в основном состоит из трех этапов.
**Шаг 1: установка локальной среды программирования**. Воспользуйтесь [руководством](https://www.hello-algo.com/chapter_appendix/installation/) из приложения. Если среда уже установлена, этот шаг можно пропустить.
**Шаг 2: клонирование или загрузка репозитория кода**. Перейдите в [репозиторий GitHub](https://github.com/krahets/hello-algo). Если у вас уже установлен [Git](https://git-scm.com/downloads), репозиторий можно клонировать следующей командой:
```shell
git clone https://github.com/krahets/hello-algo.git
```
Также можно нажать кнопку «Download ZIP» в месте, показанном на рисунке ниже, напрямую скачать архив с кодом и затем распаковать его локально.
![Клонирование репозитория и загрузка кода](suggestions.assets/download_code.png)
**Шаг 3: запуск исходного кода**. Как показано на рисунке ниже, для блоков кода, у которых сверху указано имя файла, соответствующий исходный файл можно найти в папке `codes` репозитория. Исходные файлы запускаются одним нажатием, что помогает не тратить лишнее время на отладку и сосредоточиться на изучении материала.
![Блоки кода и соответствующие исходные файлы](suggestions.assets/code_md_to_repo.png)
Помимо локального запуска, **веб-версия также поддерживает визуальное выполнение Python-кода** (на базе [pythontutor](https://pythontutor.com/)). Как показано на рисунке ниже, можно нажать «Визуализировать выполнение» под блоком кода, чтобы раскрыть окно и наблюдать за выполнением алгоритма. Также можно нажать «Полноэкранный режим» для более удобного просмотра.
![Визуальный запуск Python-кода](suggestions.assets/pythontutor_example.png)
## Совместный рост через вопросы и обсуждения
Во время чтения книги не стоит пропускать те места, которые остались непонятными. **Мы призываем вас задавать вопросы в разделе комментариев**: я и мои коллеги постараемся ответить вам как можно тщательнее, обычно в течение двух дней.
Как показано на рисунке ниже, в веб-версии у каждой главы внизу есть раздел комментариев. Рекомендуется уделять внимание его содержанию. С одной стороны, это поможет увидеть, с какими трудностями сталкиваются другие читатели, восполнить пробелы и подтолкнуть себя к более глубокому пониманию. С другой стороны, мы надеемся, что вы будете отвечать на вопросы других участников и делиться своими мнениями.
![Пример раздела комментариев](../index.assets/comment.gif)
## Дорожная карта изучения алгоритмов
В целом процесс изучения структур данных и алгоритмов можно разделить на три этапа.
1. **Этап 1: введение в алгоритмы**. Необходимо познакомиться с особенностями и применением различных структур данных, изучить принципы, процессы, назначение и эффективность различных алгоритмов.
2. **Этап 2: решение алгоритмических задач**. Рекомендуется начинать с популярных задач и решить не менее 100 из них, чтобы познакомиться с основными алгоритмическими проблемами. При первых попытках «забывание знаний» может стать испытанием, но это нормально. Следуйте при повторении задач «кривой забывания Эббингауза», и обычно после 3-5 циклов повторения материал хорошо запоминается. Рекомендуемые списки задач и планы практики см. в этом [репозитории GitHub](https://github.com/krahets/LeetCode-Book).
3. **Этап 3: построение системы знаний**. В процессе обучения можно читать статьи по алгоритмам, изучать каркасы решений и учебники, чтобы постоянно обогащать свою систему знаний. В решении задач можно применять продвинутые стратегии, например классификацию по темам, несколько решений одной задачи или одно решение для нескольких задач. Соответствующий опыт можно найти в различных сообществах.
Как показано на рисунке ниже, содержание этой книги в основном охватывает «этап 1» и призвано помочь вам более эффективно перейти к обучению на этапах 2 и 3.
![Дорожная карта изучения алгоритмов](suggestions.assets/learning_route.png)