Files
hello-algo/ru/docs/chapter_preface/suggestions.md
krahets 37523d4ceb build
2026-03-29 02:26:00 +08:00

260 lines
17 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.
---
comments: true
---
# 0.2   Как пользоваться этой книгой
!!! tip
Чтобы получить наилучший опыт чтения, рекомендуется полностью прочитать этот раздел.
## 0.2.1   Соглашения о стиле изложения
- Разделы, помеченные `*` в заголовке, являются дополнительными и сравнительно более сложными. Если времени мало, их можно пока пропустить.
- Технические термины будут выделяться полужирным шрифтом (в бумажной и 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=""
### Комментарий-заголовок: используется для обозначения функций, классов, тестовых примеров и т. п. ###
# Содержательный комментарий: подробно поясняет код
# Многострочный
# комментарий
```
## 0.2.2 &nbsp; Эффективное обучение с помощью анимированных иллюстраций
По сравнению с текстом видео и изображения обладают большей информационной плотностью и более четкой структурой, поэтому их легче воспринимать. В этой книге **ключевые и сложные идеи в основном будут показываться в виде анимированных иллюстраций**, а текст будет играть роль пояснения и дополнения.
Если во время чтения ты встречаешь фрагмент с анимированной иллюстрацией, как на рисунке 0-2, **в первую очередь ориентируйся на изображение, а текст используй как дополнение**, соединяя оба источника для понимания материала.
![Пример анимированной иллюстрации](../index.assets/animation.gif){ class="animation-figure" }
<p align="center"> Рисунок 0-2 &nbsp; Пример анимированной иллюстрации </p>
## 0.2.3 &nbsp; Углубление понимания через практику кода
Сопроводительный код этой книги размещен в [репозитории GitHub](https://github.com/krahets/hello-algo). Как показано ниже, **исходный код снабжен тестовыми примерами и может запускаться одним нажатием**.
Если позволяет время, **рекомендуется самостоятельно перепечатать код**. Если времени на обучение мало, то хотя бы полностью прочитай и запусти весь код.
По сравнению с простым чтением кода сам процесс его написания обычно дает больше пользы. **Учиться на практике - значит учиться по-настоящему**.
![Пример запуска кода](../index.assets/running_code.gif){ class="animation-figure" }
<p align="center"> Рисунок 0-3 &nbsp; Пример запуска кода </p>
Подготовка к запуску кода в основном состоит из трех шагов.
**Шаг 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" в месте, показанном на рисунке 0-4, напрямую скачать архив с кодом и затем распаковать его локально.
![Клонирование репозитория и загрузка кода](suggestions.assets/download_code.png){ class="animation-figure" }
<p align="center"> Рисунок 0-4 &nbsp; Клонирование репозитория и загрузка кода </p>
**Шаг 3: запустить исходный код**. Как показано на рисунке 0-5, для блоков кода, у которых сверху указано имя файла, соответствующий исходный файл можно найти в папке `codes` репозитория. Эти файлы запускаются одним нажатием, что помогает не тратить лишнее время на отладку и сосредоточиться на изучении материала.
![Блоки кода и соответствующие исходные файлы](suggestions.assets/code_md_to_repo.png){ class="animation-figure" }
<p align="center"> Рисунок 0-5 &nbsp; Блоки кода и соответствующие исходные файлы </p>
Помимо локального запуска, **веб-версия также поддерживает визуальный запуск Python-кода** (на базе [pythontutor](https://pythontutor.com/)). Как показано ниже, можно нажать "Визуализировать выполнение" под блоком кода, чтобы раскрыть окно и наблюдать за выполнением алгоритма; также можно нажать "Полноэкранный режим", чтобы получить более удобный просмотр.
![Визуальный запуск Python-кода](suggestions.assets/pythontutor_example.png){ class="animation-figure" }
<p align="center"> Рисунок 0-6 &nbsp; Визуальный запуск Python-кода </p>
## 0.2.4 &nbsp; Совместный рост через вопросы и обсуждения
Во время чтения книги не стоит легко пропускать те места, которые остались непонятными. **Смело задавай свои вопросы в разделе комментариев**: я и мои друзья постараемся ответить тебе как можно тщательнее, обычно в течение двух дней.
Как показано на рисунке 0-7, в веб-версии у каждой главы внизу есть раздел комментариев. Надеюсь, ты будешь чаще обращать внимание на его содержание. С одной стороны, это поможет увидеть, с какими трудностями сталкиваются другие читатели, восполнить пробелы и подтолкнуть себя к более глубоким размышлениям. С другой стороны, буду рад, если ты щедро ответишь на вопросы других участников, поделишься своими наблюдениями и поможешь им продвинуться вперед.
![Пример раздела комментариев](../index.assets/comment.gif){ class="animation-figure" }
<p align="center"> Рисунок 0-7 &nbsp; Пример раздела комментариев </p>
## 0.2.5 &nbsp; Дорожная карта изучения алгоритмов
В целом процесс изучения структур данных и алгоритмов можно разделить на три этапа.
1. **Этап 1: введение в алгоритмы**. Нужно познакомиться с особенностями и способами применения разных структур данных, а также изучить принципы, ход работы, назначение и эффективность различных алгоритмов.
2. **Этап 2: решение алгоритмических задач**. Рекомендуется начинать с популярных задач и сначала накопить не менее 100 решенных примеров, чтобы познакомиться с основными типами алгоритмических проблем. На первых порах "забывание знаний" может стать испытанием, но это нормально. Мы можем повторять задачи по "кривой забывания Эббингауза", и обычно после 3-5 циклов повторения материал прочно закрепляется. Рекомендуемые списки задач и планы практики см. в этом [репозитории GitHub](https://github.com/krahets/LeetCode-Book).
3. **Этап 3: построение системы знаний**. В учебной части можно читать статьи по алгоритмам, разбирать каркасы решений и учебники, чтобы постоянно обогащать свою систему знаний. В практической части можно пробовать более продвинутые стратегии, например классификацию по темам, несколько решений одной задачи или одно решение для нескольких задач; соответствующий опыт можно найти в разных сообществах.
Как показано на рисунке 0-8, содержание этой книги в основном покрывает "этап 1" и призвано помочь тебе более эффективно перейти к обучению на этапах 2 и 3.
![Дорожная карта изучения алгоритмов](suggestions.assets/learning_route.png){ class="animation-figure" }
<p align="center"> Рисунок 0-8 &nbsp; Дорожная карта изучения алгоритмов </p>