| Высказывания программистов-практиков о книге \"Программист-прагматик\" | 1 |
| Предисловие | 1 |
| От авторов | 2 |
| Кому адресована эта книга? | 2 |
| Как происходит становление программиста-прагматика? | 2 |
| Прагматики-одиночки и большие команды | 3 |
| Непрерывность процесса | 3 |
| Как составлена эта книга | 3 |
| Исходные тексты программ и другие ресурсы | 3 |
| Ваши отклики | 3 |
| Благодарности | 3 |
| Глава 1 Прагматическая философия | 4 |
| 1 Мой исходный текст съел кот Мурзик | 4 |
| Принятие ответственности | 4 |
| 2 Энтропия в программах | 5 |
| 3 Суп из камней и сварившиеся лягушки | 5 |
| 4 Приемлемые программы | 6 |
| Находите компромисс с пользователями | 6 |
| Знайте меру | 7 |
| 5 Портфель знаний | 7 |
| Ваш портфель знаний | 7 |
| Построение вашего портфеля | 7 |
| Цели | 7 |
| Возможности обучения | 8 |
| Критическое осмысление | 8 |
| 6 Общайтесь! | 8 |
| Глава 2 Прагматический подход | 10 |
| 7 Пороки дублирования | 10 |
| Как возникает дублирование? | 11 |
| Навязанное дублирование | 11 |
| Неумышленное дублирование | 11 |
| Нетерпеливое дублирование | 12 |
| Коллективное дублирование | 12 |
| 8 Ортогональность | 12 |
| Что такое ортогональность? | 12 |
| Преимущества ортогональности | 13 |
| Проектные группы | 13 |
| Проектирование | 13 |
| Инструментарии и библиотеки | 14 |
| Написание текста программы | 14 |
| Тестирование | 14 |
| Документация | 15 |
| Жизнь в условиях ортогональности | 15 |
| 9 Обратимость | 15 |
| Гибкая архитектура | 16 |
| 10 Стрельба трассирующими | 16 |
| Программа, которую видно в темноте | 16 |
| При стрельбе трассирующими вы не всегда попадаете в цель | 17 |
| Программа трассировки и создание прототипов | 17 |
| 11 Прототипы и памятные записки | 18 |
| Для чего создаются прототипы | 18 |
| Как использовать прототипы | 18 |
| Создание прототипов архитектуры | 18 |
| Как не надо использовать прототипы | 19 |
| 12 Языки, отражающие специфику предметной области | 19 |
| 13 Оценка | 21 |
| Насколько точной является \"приемлемая точность\"? | 21 |
| Из чего исходят оценки? | 21 |
| Что сказать, если вас просят оценить что-либо | 22 |
| Глава 3 Походный набор инструментов | 22 |
| 14 Преимущества простого текста | 23 |
| Что такое простой текст? | 23 |
| Недостатки | 23 |
| Преимущества простого текста | 23 |
| Подводим итог | 24 |
| 15 Игры с оболочками | 24 |
| Утилиты оболочек и системы Windows | 25 |
| 16 Мощь редактирования | 25 |
| Один-единственный редактор | 25 |
| Средства редактирования | 26 |
| Производительность | 26 |
| Куда же направиться? | 26 |
| Какой же редактор выбрать? | 26 |
| 17 Управление исходным текстом программ | 27 |
| Команда, в которой я работаю, не использует систему управления исходным текстом | 27 |
| Программы управления исходным текстом | 27 |
| 18 Отладка | 28 |
| Психология процесса отладки | 28 |
| Умонастроение отладки | 28 |
| С чего начать? | 28 |
| Стратегии отладки | 28 |
| Элемент удивления | 30 |
| Контрольные вопросы при отладке | 30 |
| 19 Обработка текста | 30 |
| 20 Генераторы текстов программ | 31 |
| Пассивные генераторы | 31 |
| Активные генераторы текста | 32 |
| Генераторы текста не должны быть слишком сложными | 32 |
| Генераторы текста не всегда генерируют тексты программ | 32 |
| Глава 4 Прагматическая паранойя | 32 |
| 21 Проектирование по контракту | 33 |
| Реализация принципа ППК | 34 |
| ППК и аварийное завершение работы программы | 34 |
| Другие случаи применения инвариантов | 35 |
| Динамические контракты и агенты | 35 |
| 22 Мертвые программы не лгут | 36 |
| Аварийное завершение не означает \"отправить в корзину для мусора\" | 36 |
| 23 Программирование утверждений | 37 |
| Не отключайте утверждения | 37 |
| 24 Случаи, в которых используются исключения | 38 |
| Что является исключительным? | 38 |
| Обработчики ошибок как альтернатива исключению | 38 |
| 25 Балансировка ресурсов | 39 |
| Объекты и исключения | 39 |
| Балансировка и исключения | 40 |
| Случаи, при которых балансировка ресурсов невозможна | 40 |
| Проверка баланса | 40 |
| Глава 5 Гибкость против хрупкости | 41 |
| 26 Несвязанность и закон Деметера | 41 |
| Сведение связанности к минимуму | 41 |
| Закон Деметера для функций | 42 |
| А не все ли равно? | 42 |
| 27 Метапрограммирование | 43 |
| Динамическая конфигурация | 43 |
| Приложения, управляемые метаданными | 43 |
| 28 Временное связывание | 44 |
| Последовательность операций | 44 |
| Архитектура | 45 |
| Проектирование с использованием принципа параллелизма | 45 |
| Развертывание | 46 |
| 29 Всего лишь визуальное представление | 46 |
| Протокол \"Публикация и подписка\" | 46 |
| Принцип \"модель-визуальное представление-контроллер» | 47 |
| Отходя от графических интерфейсов | 47 |
| Все такой же связанный (после стольких лет) | 48 |
| 30 Доски объявлений | 48 |
| Реализация концепции доски объявлений | 48 |
| Пример приложения | 49 |
| Глава 6 Пока вы пишете программу | 49 |
| 31 Программирование в расчете на стечение обстоятельств | 50 |
| Как программировать в расчете на стечение обстоятельств | 50 |
| Преднамеренное программирование | 51 |
| 32 Скорость алгоритма | 51 |
| Что подразумевается под оценкой алгоритмов? | 51 |
| Система обозначений О() | 51 |
| Оценка с точки зрения здравого смысла | 52 |
| Скорость алгоритма на практике | 52 |
| 33 Реорганизация | 53 |
| Когда осуществлять реорганизацию? | 53 |
| Как производится реорганизация? | 54 |
| 34 Программа, которую легко тестировать | 55 |
| Модульное тестирование | 55 |
| Тестирование в рамках контракта | 55 |
| Создание модульных тестов | 56 |
| Применение тестовых стендов | 56 |
| Построение тестового окна | 57 |
| Культура тестирования | 57 |
| 35 Злые волшебники | 57 |
| Глава 7 Перед тем, как начать проект | 58 |
| 36 Карьер для добычи требований | 58 |
| В поисках требований | 58 |
| Документация требований | 59 |
| Чрезмерная спецификация | 60 |
| Видеть перспективу | 60 |
| Еще одна мелочь… | 60 |
| Поддержка глоссария | 60 |
| Прошу слова… | 60 |
| 37 Разгадка невероятных головоломок | 61 |
| Степени свободы | 61 |
| Есть более простой способ! | 61 |
| 38 Чувство готовности | 62 |
| Здравое суждение или промедление? | 62 |
| 39 Западня со стороны требований | 62 |
| 40 Круги и стрелки | 63 |
| Какова отдача от методов? | 63 |
| Нужно ли использовать формальные методы? | 64 |
| Глава 8 Прагматические проекты | 64 |
| 41 Команды прагматиков | 64 |
| Никаких разбитых окон | 64 |
| Сварившиеся лягушки | 65 |
| Общайтесь | 65 |
| Не повторяйте самого себя | 65 |
| Ортогональность | 65 |
| Автоматизация | 66 |
| Чувствуйте момент, когда нужно остановиться | 66 |
| 42 Вездесущая автоматизация | 66 |
| Все в автоматическом режиме | 66 |
| Компилирование проекта | 67 |
| Автоматизация процесса сборки | 67 |
| Автоматические административные процедуры | 67 |
| Дети сапожника | 68 |
| 43 Безжалостное тестирование | 68 |
| Что тестировать | 69 |
| Как проводить тестирование | 69 |
| Когда тестировать | 71 |
| Кольцо сжимается | 71 |
| 44 Все эти сочинения | 71 |
| Комментарии в программе | 71 |
| Исполняемые документы | 72 |
| Технические писатели | 72 |
| Печатать документ или ткать его на холсте? | 73 |
| Языки разметки | 73 |
| 45 Большие надежды | 73 |
| Передача надежд | 73 |
| Небольшой довесок | 74 |
| 46 Гордость и предубеждение | 74 |
| Приложение А Информационные ресурсы | 74 |
| Профессиональные общества | 75 |
| Собираем библиотеку | 75 |
| Интернет-ресурсы | 76 |
| Библиография | 78 |
| Приложение В Ответы к упражнениям | 79 |
Находясь на переднем крае программирования, книга \"Программист-прагматик. Путь от подмастерья к мастеру\" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.