
В издательстве “БХВ” вышла книга Фелины Херманс”Ум программиста. Как понять и осмыслить любой код“.
Книга освещает практические основы когнитивистики для программистов. Основные темы: осмысление и развитие чужого и собственного кода, изучение новых языков программирования, мнемонические приемы для программистов, поддержка кода в читаемом состоянии. Объяснено, как снижать когнитивную нагрузку при работе программиста, как делать код логичным и понятным для себя и коллег. Рассмотрены приемы именования функций, классов и переменных, подходы к ведению репозиториев, совместной разработке и доработке кода.
Для программистов и других IT-специалистов
ВСЁ, ЧТО ПРОГРАММИСТ ДОЛЖЕН ЗНАТЬ О МЫШЛЕНИИ
Ваш мозг реагирует предсказуемым образом, когда сталкивается с новыми или сложными задачами. Эта уникальная книга научит вас конкретным методам, основанным на когнитивной науке, которые улучшат ваш способ изучения кода и его осмысления.
Внутри книги
- Быстрые и эффективные способы освоить новые языки программирования
- Навыки скорочтения для быстрого понимания нового кода
- Методы разгадки смысла сложного кода
- Способы выучить новый синтаксис и запомнить его
- Правила написание кода, который легко читается другими
- Выбор правильных имен для ваших переменных
- Написание кода более понятного для новичков
- Адаптация новых разработчиков в вашу команду
Узнайте, как оптимизировать естественные когнитивные процессы вашего мозга, чтобы легче читать код, писать код быстрее и осваивать новые языки за гораздо меньшее время. Эта книга поможет вам справиться с замешательством, которое вы испытываете, столкнувшись со странным и сложным кодом, и объяснит кодовую базу таким образом, чтобы новый член команды мог продуктивно работать в считанные дни!
О технологии
Воспользуйтесь естественными процессами вашего мозга, чтобы стать лучшим программистом. Методы, основанные на когнитивной науке, позволяют быстрее изучать новые языки, повышать производительность, снижать потребность в переписывании кода и многое другое. Эта уникальная книга поможет вам достичь этих результатов.
Эта книга особенно заинтересует программистов, работающих сразу с несколькими языками.
Отзывы профессионалов
Великолепная и глубоко информативная книга, помогает перекинуть мостик между программированием и мышлением.
Майк Тейлор, компания CGI Inc.
Книга о том, как именно работает мозг, как эффективнее читать, писать и совместно разрабатывать код .
Бен Мак-Намара, консалтинговое агентство DataGeek
В книге изложен научный подход, помогающий программисту разгрузить голову при работе и самому себе проторить путь к вершинам мастерства!
Даниэла Запата Риеско, стартап M1 Finance
Если вы когда-нибудь задумывались, как брать умом, а не только усердием – прочтите эту книгу. Я каждый день убеждаюсь, насколько она помогла мне в работе.
Чжицзюнь Лю, рекламный холдинг Mediaocean



Доктор Фелина Херманс — доцент Лейденского университета в Нидерландах, где она проводит научные исследования языков программирования и методов обучения программированию. Она читает лекции в академии учителей Амстердамского свободного университета, специализируясь на дидактике компьютерных наук, а также преподает в средней школе Кралингена в Роттердаме.
Фелина является создателем языка программирования Hedy, предназначенного для начинающих программистов, а также ведет подкаст Software Engineering Radio, один из крупнейших интернет-подкастов о программном обеспечении.
Предисловие…………………………………………………………………………………………… 13
От автора……………………………………………………………………………………………….. 15
Благодарности……………………………………………………………………………………….. 17
О книге………………………………………………………………………………………………….. 19
Структура книги………………………………………………………………………………………………………………………… 19
Дискуссионный форум liveBook……………………………………………………………………………………………….. 20
Об авторе……………………………………………………………………………………………….. 21
Об обложке…………………………………………………………………………………………….. 23
Часть I. Об улучшении навыков чтения кода…………………….. 25
Глава 1. Определение вашего типа замешательства при кодировании….. 27
1.1. Разные типы замешательства в коде…………………………………………………………………………………. 28
1.1.1. Первый тип замешательства — недостаток знаний……………………………………………… 29
1.1.2. Второй тип замешательства — недостаток информации…………………………………….. 29
1.1.3. Третий тип замешательства — недостаток вычислительной мощности…………….. 30
1.2. Различные когнитивные процессы, влияющие на процесс кодирования………………………. 31
1.2.1. Долговременная память и программирование………………………………………………………. 31
Программа на APL с точки зрения долговременной памяти……………………………….. 32
1.2.2. Кратковременная память и программирование…………………………………………………….. 32
Программа на Java с точки зрения кратковременной памяти…………………………….. 32
1.2.3. Рабочая память и программирование…………………………………………………………………….. 33
Программа на BASIC с точки зрения рабочей памяти………………………………………… 33
1.3. Совместная работа когнитивных процессов……………………………………………………………………. 34
1.3.1. Краткое описание того, как когнитивные процессы взаимодействуют
друг с другом………………………………………………………………………………………………………………………. 34
1.3.2. Когнитивные процессы и программирование……………………………………………………….. 35
Выводы……………………………………………………………………………………………………………………………………….. 37
Глава 2. Скорочтение кода…………………………………………………………………….. 39
2.1. Быстрое чтение кода…………………………………………………………………………………………………………… 40
2.1.1. Что только что происходило в вашем мозге………………………………………………………….. 41
2.1.2. Перепроверка воспроизведенного кода…………………………………………………………………. 42
Вторая попытка воспроизведения кода………………………………………………………………… 43
2.1.3. Перепроверка воспроизведенного………………………………………………………………………….. 44
2.1.4. Почему читать незнакомый код так сложно………………………………………………………….. 44
2.2. Преодоление лимитов памяти……………………………………………………………………………………………. 45
2.2.1. Сила чанков………………………………………………………………………………………………………………. 45
Чанки кода……………………………………………………………………………………………………………….. 48
2.2.2. Опытные программисты запоминают код лучше начинающих программистов.. 48
2.3. Вы видите намного больше кода, чем можете прочитать……………………………………………….. 49
2.3.1. Иконическая память…………………………………………………………………………………………………. 50
Иконическая память и код………………………………………………………………………………………. 51
2.3.2. Это не то, что вы помните; это то, как вы запоминаете………………………………………… 51
Как написать код, который можно разделить на чанки………………………………………. 52
Используйте паттерны проектирования……………………………………………………………….. 53
Пишите комментарии………………………………………………………………………………………………. 54
Оставляйте «маячки»………………………………………………………………………………………………. 55
2.3.3. Применяйте чанки…………………………………………………………………………………………………….. 58
Выводы……………………………………………………………………………………………………………………………………….. 59
Глава 3. Как быстро выучить синтаксис……………………………………………….. 61
3.1. Советы по запоминанию синтаксиса………………………………………………………………………………… 62
3.1.1. Отвлечение снижает производительность……………………………………………………………… 62
3.2. Как быстро выучить синтаксис с использованием карточек………………………………………….. 63
3.2.1. Когда использовать карточки…………………………………………………………………………………. 64
3.2.2. Расширяем набор карточек……………………………………………………………………………………… 64
3.2.3. Убираем ненужные карточки………………………………………………………………………………….. 64
3.3. Как не забывать информацию……………………………………………………………………………………………. 65
3.3.1. Почему мы забываем……………………………………………………………………………………………….. 65
Иерархия и сеть……………………………………………………………………………………………………….. 66
Кривая забывания……………………………………………………………………………………………………. 66
3.3.2. Интервальное повторение……………………………………………………………………………………….. 67
3.4. Как запомнить синтаксис надолго…………………………………………………………………………………….. 69
3.4.1. Два способа запоминания информации…………………………………………………………………. 69
Уровень хранения……………………………………………………………………………………………………. 69
Уровень воспроизведения……………………………………………………………………………………….. 69
3.4.2. Просто увидеть недостаточно………………………………………………………………………………… 70
3.4.3. Воспоминания укрепляют память…………………………………………………………………………… 70
3.4.4. Укрепление памяти путем активного мышления…………………………………………………… 71
Схемы……………………………………………………………………………………………………………………….. 72
Проработка для запоминания концепций программирования……………………………. 73
Выводы……………………………………………………………………………………………………………………………………….. 74
Глава 4. Как читать сложный код………………………………………………………….. 75
4.1. Почему так тяжело понимать сложный код……………………………………………………………………… 76
4.1.1. Чем друг от друга отличаются рабочая память и кратковременная память………. 77
4.1.2. Типы когнитивной нагрузки и как они связаны с программированием………………. 78
Внутренняя когнитивная нагрузка при чтении кода……………………………………………. 78
Внешняя когнитивная нагрузка при чтении кода…………………………………………………. 79
4.2. Способы снижения когнитивной нагрузки……………………………………………………………………….. 80
4.2.1. Рефакторинг………………………………………………………………………………………………………………. 80
4.2.2. Замена незнакомых языковых конструкций………………………………………………………….. 82
Лямбда-функции………………………………………………………………………………………………………. 82
Генератор списков…………………………………………………………………………………………………… 83
Тернарные операторы…………………………………………………………………………………………….. 84
4.2.3. Синонимизация — отличное дополнение к дидактическим карточкам……………… 85
4.3. Вспомогательные средства при перегрузке рабочей памяти…………………………………………. 85
4.3.1. Создание графа зависимостей………………………………………………………………………………… 86
4.3.2. Использование таблицы состояний………………………………………………………………………… 88
4.3.3. Сочетание графов зависимостей и таблиц состояний………………………………………….. 91
Выводы……………………………………………………………………………………………………………………………………….. 93
Часть II. Продолжаем думать о коде………………………………………. 95
Глава 5. Совершенствуем навыки углубленного понимания кода…………. 97
5.1. Роли переменных………………………………………………………………………………………………………………… 98
5.1.1. Разные переменные выполняют разные действия…………………………………………………. 98
5.1.2. Одиннадцать ролей, охватывающие почти все переменные……………………………….. 99
5.2. Роли и принципы……………………………………………………………………………………………………………….. 101
5.2.1. Польза ролей…………………………………………………………………………………………………………… 102
Практические советы по работе с ролями переменных…………………………………….. 103
5.2.2. Венгерская нотация……………………………………………………………………………………………….. 104
Системная и прикладная венгерские нотации……………………………………………………. 104
5.3. Углубленное понимание программ…………………………………………………………………………………. 106
5.3.1. Понимание текста и понимание плана…………………………………………………………………. 106
5.3.2. Этапы понимания программы………………………………………………………………………………. 106
Применение этапов углубленного понимания……………………………………………………. 107
5.4. Чтение кода как обычного текста……………………………………………………………………………………. 109
5.4.1. Что происходит в мозге при чтении кода…………………………………………………………….. 110
Поля Бродмана………………………………………………………………………………………………………. 110
Показания фМРТ……………………………………………………………………………………………………. 111
5.4.2. Если вы можете выучить французский, то сможете выучить и Python……………… 111
Как люди читают код……………………………………………………………………………………………. 113
Перед тем как читать код, программисты сканируют его…………………………………. 114
Начинающие и опытные программисты читают код по-разному……………………. 114
5.5. Стратегии понимания текста, которые можно применить к коду………………………………… 115
5.5.1. Активация пассивных знаний……………………………………………………………………………….. 116
5.5.2. Наблюдение……………………………………………………………………………………………………………. 116
5.5.3. Определение важности разных строк кода………………………………………………………….. 117
5.5.4. Предположения о значении имен переменных……………………………………………………. 118
5.5.5. Визуализация………………………………………………………………………………………………………….. 119
Таблица операций…………………………………………………………………………………………………. 119
5.5.6. Постановка вопросов…………………………………………………………………………………………….. 120
5.5.7. Резюмирование кода………………………………………………………………………………………………. 121
Выводы……………………………………………………………………………………………………………………………………… 122
Глава 6. Совершенствуем навыки решения задач программирования…. 123
6.1. Использование моделей для размышлений о коде………………………………………………………… 124
6.1.1. Преимущества использования моделей……………………………………………………………….. 124
Не все модели одинаково полезны………………………………………………………………………. 125
6.2. Ментальные модели…………………………………………………………………………………………………………. 126
6.2.1. Подробное исследование ментальных моделей………………………………………………….. 128
6.2.2. Изучение новых ментальных моделей…………………………………………………………………. 129
6.2.3. Как эффективно использовать ментальные модели во время размышлений о коде 130
Ментальные модели в рабочей памяти……………………………………………………………….. 130
Точные модели работают лучше…………………………………………………………………………. 131
Создание ментальных моделей исходной программы в рабочей памяти……….. 131
Ментальные модели в долговременной памяти…………………………………………………. 132
Создание ментальных моделей исходной программы в долговременной памяти 133
Ментальные модели, одновременно хранящиеся в долговременной
и рабочей памяти…………………………………………………………………………………………………… 134
6.3. Условные машины…………………………………………………………………………………………………………….. 135
6.3.1. Что такое условная машина………………………………………………………………………………….. 135
6.3.2. Примеры условных машин……………………………………………………………………………………. 136
6.3.3. Разные уровни условных машин…………………………………………………………………………… 137
6.4. Условные машины и язык…………………………………………………………………………………………………. 138
6.4.1. Расширяем набор условных машин……………………………………………………………………… 139
6.4.2. Разные условные машины могут создать взаимно конфликтующие ментальные модели 140
6.5. Условные машины и схемы……………………………………………………………………………………………… 141
6.5.1. Почему схема важна………………………………………………………………………………………………. 141
6.5.2. Являются ли условные машины семантическими……………………………………………….. 142
Выводы……………………………………………………………………………………………………………………………………… 142
Глава 7. Заблуждения…………………………………………………………………………… 143
7.1. Почему второй язык программирования выучить намного проще, чем первый…………. 144
7.1.1. Как увеличить шанс воспользоваться знаниями по программированию…………. 146
7.1.2. Разные виды трансференции…………………………………………………………………………………. 147
Осознанная и неосознанная трансференция………………………………………………………. 147
Близкая и дальняя трансференция……………………………………………………………………….. 147
7.1.3. Знания: добро или зло?………………………………………………………………………………………….. 148
7.1.4. Сложности трансференции……………………………………………………………………………………. 149
7.2. Заблуждения. Ошибки в мышлении………………………………………………………………………………… 150
7.2.1. Исправление заблуждений путем концептуальных замен…………………………………. 152
7.2.2. Подавление заблуждений……………………………………………………………………………………… 152
7.2.3. Заблуждения о языках программирования………………………………………………………….. 153
7.2.4. Предотвращение заблуждений при изучении нового языка
программирования…………………………………………………………………………………………………………… 155
7.2.5. Выявление заблуждений в новой базе кода…………………………………………………………. 156
Выводы……………………………………………………………………………………………………………………………………… 157
Часть III. О хорошем коде………………………………………………………….. 159
Глава 8. Совершенствуем навыки присваивания имен………………………… 161
8.1. Почему присваивание имен так важно……………………………………………………………………………. 162
8.1.1. Почему присваивание имени так важно………………………………………………………………. 162
Имена составляют существенную часть кодовой базы…………………………………….. 163
Имена играют роль в обзорах кода……………………………………………………………………… 163
Имена — это самая удобная форма документации……………………………………………. 163
Имена могут служить маячками…………………………………………………………………………… 163
8.1.2. Разные точки зрения на присваивание имен………………………………………………………… 163
Хорошее имя можно определить синтаксически………………………………………………… 164
Имена во всей базе кода должны быть единообразны………………………………………. 165
8.1.3. Важно грамотно подбирать имена……………………………………………………………………….. 166
Заключения о практике присваивания имен……………………………………………………….. 167
8.2. Когнитивные аспекты присваивания имен……………………………………………………………………… 167
8.2.1. Форматирование имен поддерживает кратковременную память……………………… 168
8.2.2. Понятные имена лучше закрепляются в долговременной памяти…………………….. 169
8.2.3. Полезная информация в именах переменных………………………………………………………. 170
8.2.4. Когда стоит оценивать качество имен…………………………………………………………………. 171
8.3. Какие типы имен проще всего понимать………………………………………………………………………… 172
8.3.1. Использовать аббревиатуры или нет?…………………………………………………………………. 172
Однобуквенные имена переменных…………………………………………………………………….. 173
8.3.2. Змеиный или верблюжий регистры?…………………………………………………………………….. 176
8.4. Влияние имен на ошибки кода…………………………………………………………………………………………. 177
8.4.1. В коде с некачественными именами больше ошибок………………………………………….. 177
8.5. Как выбирать хорошие имена…………………………………………………………………………………………. 178
8.5.1. Шаблоны имен……………………………………………………………………………………………………….. 178
8.5.2. Трехступенчатая модель Фейтельсона для хороших имен переменных………….. 180
Трехступенчатая модель во всех деталях…………………………………………………………… 181
Успех трехступенчатой модели Фейтельсона……………………………………………………. 181
Выводы……………………………………………………………………………………………………………………………………… 182
Глава 9. Боремся с плохим кодом и когнитивной нагрузкой.
Две концепции……………………………………………………………………………………… 183
9.1. Почему код с запахами кода создает большую когнитивную нагрузку……………………… 184
9.1.1. Краткая информации о запахах кода…………………………………………………………………… 184
Запахи кода на уровне метода…………………………………………………………………………….. 186
Запахи кода на уровне класса……………………………………………………………………………… 186
Запахи кода на уровне базы кода……………………………………………………………………….. 187
Влияние запахов кода…………………………………………………………………………………………… 187
9.1.2. Как запахи кода вредят мышлению……………………………………………………………………… 188
«Длинный список параметров», сложные «Операторы переключения» — перегрузка рабочей памяти 188
«Всемогущий класс», «Длинный метод» — невозможно эффективно разбить код на чанки 189
«Клоны кода» — невозможно правильно разбить код на чанки………………………. 189
9.2. Зависимость когнитивной нагрузки от плохих имен……………………………………………………… 190
9.2.1. Лингвистические антипаттерны проектирования……………………………………………….. 190
9.2.2. Измерение когнитивной нагрузки…………………………………………………………………………. 191
Шкала Пааса для когнитивной нагрузки…………………………………………………………….. 192
Измерение нагрузки по глазам……………………………………………………………………………… 193
Измерение нагрузки по коже………………………………………………………………………………… 193
Измерение нагрузки по мозгу……………………………………………………………………………….. 194
Запись биотоков мозга………………………………………………………………………………………….. 194
Функциональная fNIRS-томография и программирование………………………………. 195
9.2.3. Лингвистические антипаттерны и когнитивная нагрузка…………………………………… 195
9.2.4. Почему лингвистические антипаттерны вызывают замешательство……………….. 196
Выводы……………………………………………………………………………………………………………………………………… 197
Глава 10. Совершенствуем навыки решения сложных задач……………….. 199
10.1. Что такое решение задач……………………………………………………………………………………………….. 200
10.1.1. Элементы решения задач…………………………………………………………………………………… 200
10.1.2. Пространство состояний……………………………………………………………………………………. 200
10.2. Какую роль при решении задач программирования играет
долговременная память………………………………………………………………………………………………….. 201
10.2.1. Решение задачи — это отдельный когнитивный процесс?……………………………… 201
При решении задач вы используете долговременную память……………………….. 202
Вашему мозгу проще решить знакомые задачи………………………………………………. 202
10.2.2. Как научить долговременную память решать задачи…………………………………….. 203
10.2.3. Два вида памяти, наиболее существенные при решении задачи…………………… 203
Какие виды памяти играют роль при решении задач…………………………………….. 204
Потеря знаний или навыков………………………………………………………………………………. 205
10.3. Автоматизация: создание имплицитной памяти………………………………………………………….. 206
10.3.1. Имплицитная память с течением времени………………………………………………………… 207
Когнитивный этап………………………………………………………………………………………………. 208
Ассоциативный этап………………………………………………………………………………………….. 208
Автономный этап……………………………………………………………………………………………….. 209
10.3.2. Почему автоматизация помогает программировать быстрее………………………… 210
10.3.3. Улучшение имплицитной памяти……………………………………………………………………… 211
10.4. Обучение на основе кода и его объяснения………………………………………………………………….. 212
10.4.1. Новый вид когнитивной нагрузки: соответствующая нагрузка……………………… 213
10.4.2. Примеры с решением на практике…………………………………………………………………….. 215
Работайте вместе с коллегой…………………………………………………………………………….. 215
Используйте GitHub…………………………………………………………………………………………… 215
Читайте книги или блоги об исходном коде…………………………………………………….. 216
Выводы……………………………………………………………………………………………………………………………………… 216
Часть IV. О совместной работе над кодом…………………………. 217
Глава 11. Процесс написания кода………………………………………………………. 219
11.1. Различные активности, выполняемые во время программирования………………………….. 220
11.1.1. Поиск……………………………………………………………………………………………………………………. 220
11.1.2. Осмысление…………………………………………………………………………………………………………. 221
11.1.3. Переписывание……………………………………………………………………………………………………. 221
11.1.4. Наращивание………………………………………………………………………………………………………. 222
11.1.5. Исследование………………………………………………………………………………………………………. 222
11.1.6. А как же отладка?……………………………………………………………………………………………….. 223
11.2. Программист отвлекся……………………………………………………………………………………………………. 223
11.2.1. Задачи программирования нуждаются в «разогреве»…………………………………….. 224
11.2.2. Что происходит после отвлечения……………………………………………………………………. 225
11.2.3. Как подготовиться к отвлечению………………………………………………………………………. 225
Сохраняйте воображаемую модель…………………………………………………………………. 225
Помогите своей проспективной памяти……………………………………………………………. 226
Определитесь с промежуточными целями……………………………………………………….. 228
11.2.4. Когда отвлекать программиста…………………………………………………………………………. 228
11.2.5. Пара слов о многозадачности…………………………………………………………………………… 230
Многозадачность и автоматизация………………………………………………………………….. 230
Исследования многозадачности……………………………………………………………………….. 231
Выводы……………………………………………………………………………………………………………………………………… 231
Глава 12. Проектирование и усовершенствование больших систем……… 233
12.1. Проверка свойств базы кода………………………………………………………………………………………….. 234
12.1.1. Когнитивные измерения……………………………………………………………………………………… 234
Подверженность ошибкам…………………………………………………………………………………. 235
Согласованность………………………………………………………………………………………………… 236
Размытость………………………………………………………………………………………………………….. 236
Скрытые зависимости………………………………………………………………………………………… 237
Преждевременная фиксация решения………………………………………………………………. 238
Вязкость………………………………………………………………………………………………………………. 238
Поэтапное оценивание………………………………………………………………………………………. 239
Выразительность ролей…………………………………………………………………………………….. 239
Близость соответствия……………………………………………………………………………………….. 240
Трудность мыслительных операций………………………………………………………………… 241
Вторичные обозначения……………………………………………………………………………………. 242
Градиент абстракции………………………………………………………………………………………… 242
Наглядность……………………………………………………………………………………………………….. 243
12.1.2. Использование когнитивных измерений базы кода
для улучшения базы кода………………………………………………………………………………………………. 243
12.1.3. Проектные маневры и их плюсы и минусы………………………………………………………. 244
Подверженность ошибкам и вязкость………………………………………………………………. 244
Преждевременная фиксация решения и поэтапное оценивание
против подверженности ошибкам…………………………………………………………………….. 245
Выразительность ролей и размытость…………………………………………………………….. 245
12.2. Измерения и активности…………………………………………………………………………………………………. 245
12.2.1. Влияние измерений на разные активности………………………………………………………. 245
Поиск…………………………………………………………………………………………………………………… 245
Осмысление………………………………………………………………………………………………………… 246
Переписывание…………………………………………………………………………………………………… 246
Наращивание……………………………………………………………………………………………………… 246
Исследование……………………………………………………………………………………………………… 247
12.2.2. Изменение базы кода под ожидаемые активности………………………………………….. 247
Выводы……………………………………………………………………………………………………………………………………… 247
Глава 13. Как ввести новых программистов в курс дела………………………. 249
13.1. Проблемы процесса адаптации…………………………………………………………………………………….. 249
13.2. Различия между профессионалами и новичками…………………………………………………………. 251
13.2.1. Поведение новичка более подробно…………………………………………………………………. 251
Оригинальная концепция Пиаже………………………………………………………………………. 251
Концепция неопиажизма для программирования…………………………………………… 252
При изучении новой информации вы можете временно забывать
некоторые вещи………………………………………………………………………………………………….. 255
13.2.2. Разница между вещественным и абстрактным видением концепций…………….. 255
13.3. Активности для улучшения процесса адаптации………………………………………………………… 258
13.3.1. Ограничение заданий до одной активности…………………………………………………….. 258
13.3.2. Поддержка памяти новичка……………………………………………………………………………….. 259
Поддержка долговременной памяти: объяснение
релевантной информации………………………………………………………………………………….. 259
Поддержка кратковременной памяти: ставьте небольшие
конкретные задачи…………………………………………………………………………………………….. 260
Поддержка рабочей памяти: используйте диаграммы…………………………………… 261
13.3.3. Совместное чтение кода…………………………………………………………………………………….. 261
Активация……………………………………………………………………………………………………………. 262
Определение важности………………………………………………………………………………………. 262
Постановка предположений……………………………………………………………………………… 262
Наблюдение……………………………………………………………………………………………………….. 262
Визуализация……………………………………………………………………………………………………… 263
Постановка вопросов…………………………………………………………………………………………. 263
Резюмирование…………………………………………………………………………………………………… 263
Выводы……………………………………………………………………………………………………………………………………… 263
Эпилог. Пара слов перед прощанием……………………………………………………. 265
Предметный указатель…………………………………………………………………………. 267