Это старая версия документа!
Способ мышления -- Форт
Язык и философия для решения задач
Л. Броуди
Перевод с английского С.Н.Дмитренко МОСКВА 1993
Предисловие
Программирование компьютеров может свести с ума. Другие профессии дают Вам прекрасные возможности наблюдать осязаемые результаты Ваших усилий. Часовщик может смотреть на свои зубчики и колесики, швея - на швы, ровно ложащиеся после каждого взмаха иглы. Но программист проектирует, строит и ремонтирует нечто воображаемое, призрачные механизмы, ускользающие от восприятия органами чувств. Наша работа происходит не в ОЗУ, не в программе-редакторе, а внутри нашей головы.
Построение моделей в воображении привлекает и доставляет удовольствие программисту. Как же лучше к этому подготовиться? Вооружиться самыми хорошими отладчиками, декомпиляторами и дизассемблерами? Они помогают, однако самые существенные из технологий и инструментов - умственные. Нам нужна последовательная и практическая методология для `мышления` на тему задач программирования. Это и составляет суть того, что я попытался выразить в моей книге. «Способ мышления …» предлагается всем, кто заинтересован в написании программ для решения конкретных задач. Книга рассматривает вопросы проектирования и применения: принятие решений о том, что Вам нужно сделать, разработка компонентов системы и, наконец, построение системы.
В книге подчеркивается важность написания программ не просто работоспособных, но и надежных, логичных и выражающих наилучшее решение проблемы самыми простыми методами.
Несмотря на то, что описываемые здесь принципы могут быть применены к любому языку, я представил их в контексте языка Форт. Форт - это язык, операционная система, набор инструментов и философия. Это - идеальное средство для мышления, поскольку оно соответсвует тому способу, по которому работают наши головы. Думать на Форте значит думать просто, думать элегантно, думать гибко. Такое мышление `не` имеет запретительного характера, `не` сложно, `не` чрезмерно теоретизировано. Вам даже не нужно знать Форт для получения пользы от этой книги. Книга «Способ мышления - Форт» сочетает Форт-метод со многими принципами, выработанными современной компьютерной наукой. Союз между простотой Форта и традиционной дисциплиной анализа и стилистки даст Вам новый и лучший способ подхода к задачам программирования и окажет помощь во всех областях применения компьютеров.
Если Вы хотите узнать больше о Форте, другая моя книга - «Начальный курс программирования на языке Форт» - содержит сведения об этом языке. Кроме того, такие сведения приводятся в приложении А данной книги.
Несколько слов о плане этой книги. Первая глава посвящена основным соображениям, далее я провел книгу по основному циклу создания программного обеспечения: от начальных требований до внедрения. Приложения в конце включают обзор Форта для тех, кто с ним не знаком, тексты для нескольких описанных в книге программ, ответы на вопросы и свод соглашений по стилистике.
Многие мысли в этой книге не являются научными. Они основаны на субъективном опыте и наблюдениях за самим собой. По этой причине я привел в книге интервью с большим количеством профессионалов, работающих на Форте, и не все из них полностью согласны друг с другом или со мной. Все эти мнения могут изменяться изготовителем без специального уведомления. В книге вносятся также предложения, называемые «советами». Подразумевается, что им следует внимать лишь тогда, когда они соответствуют Вашей ситуации. В Форт-мышлении нет нерушимых правил. Для обеспечения возможно большего соответствия возможным Форт-системам все примеры программ в книге соответствуют стандарту Форт-83.
Личность, в сильной степени повлиявшая на эту книгу - это человек, придумавший Форт - Чарльз Мур. В дополнение к нескольким дням, проведенным за интервьюированием его для книги, я имел возможность понаблюдать его за работой. Он - хозяин своего дела, двигающийся в нем быстро и искусно так, как будто он физически реализует концептуальные модели внутри машины - строя, оттачивая, обыгрывая. Он обходится минимумом инструментов (результат продолжающейся борьбы против внутренней сложности) и немногими ограничениями, дополняющими те, которые накладываются его собственной технологией. Я надеюсь, что эта книга уловила что-то из его мудрости. Пользуйтесь!
Оглавление
| Глава | Стр |
|---|---|
| Содержание | ii |
| Список примеров программ | iv |
| От переводчика | v |
| Предисловие | viii |
| Глава 1. Философия Форта | 1 |
| Сказание об истории элегантности программ | 1 |
| Поверхностность структуры | 16 |
| Взгляд назад, вперед и на Форт | 17 |
| Программирование на уровне компонентов | 19 |
| От кого прятать? | 23 |
| Упрятывание конструкции структур данных | 24 |
| Но высокоуровневый ли это язык? | 26 |
| Язык проектирования | 28 |
| Производительный язык | 29 |
| Итоги | 31 |
| Литература | 32 |
| Глава 2. Анализ | 33 |
| Девять фаз цикла программирования | 33 |
| Итеративный подход | 34 |
| Объем планирования | 36 |
| Ограничения планирования | 39 |
| Фаза анализа | 42 |
| Определение интерфейсов | 45 |
| Определение правил | 50 |
| Определение структур данных | 59 |
| Достижение простоты | 59 |
| Соблюдение бюджета и графика | 64 |
| Смотрины для концептуальной модели | 66 |
| Литература | 66 |
| Глава 3. Предварительный проект / декомпозиция | 67 |
| Декомпозиция по компонентам | 67 |
| Пример: Крошечный Редактор | 70 |
| Поддержка задачи, основанной на компонентах | 74 |
| Проектирование и поддержка задачи при традиционном подходе | 76 |
| Интерфейсный компонент | 81 |
| Разбиение по последовательным уровням сложности | 85 |
| Ограниченность мышления по уровням | 87 |
| Резюме | 92 |
| Для дальнейшего размышления | 93 |
| *- iii -* | |
Глава 4. Детализированная разработка/решение задачи| 96 Техника решения задач | 97 Интервью с изобретателем-программистом | 103 Детализированная разработка | 105 Синтаксис Форта | 106 Алгоритмы и структуры данных | 115 Расчеты или структуры данных или логика | 116 Решение задачи: вычисление римских цифр | 118 Итоги | 132 Литература | 132
Глава 5. Разработка: элементы Форт-стиля | 133 Организация листингов | 134 Оформление блока | 144 Соглашения по комментариям | 149 Вертикальный формат записи против горизонтального | 161 Выбор имен: искусство | 164 Стандарты при выборе имен: наука | 170 Еще советы по читабельности | 171 Итоги | 173 Литература | 173
Глава 6. Фрагментация | 174 Техника факторизации | 174 Критерии для фрагментации | 181 Факторизация при компиляции | 193 Итеративный подход при реализации | 198 Итоги | 202 Литература | 202
Глава 7. Работа с данными: стеки и состояния | 203 Шикарный стек | 203 Шикарный стек возвратов | 213 Проблема переменных | 214 Локальные и глобальные переменные / инициализация | 217 Сохранение и восстановление состояния | 218 Внутренние стеки программ | 220 Совместное использование компонентов | 221 Таблица состояния | 223 Векторизованное исполнение | 228 Использование DOER/MAKE | 232 Итоги | 235 Литература | 236 *- iv -* |
Глава 8. Минимизация структур управления | 237 Что же такого плохого в структурах управления | 237 Как устранять структуры управления | 242 Выбор структур управления | 248 Итоги | 275 Литература | 275
Эпилог: Воздействие Форта на мышление | 276
Приложение А: Обзор Форта (для новичков) | 279 Приложение Б: Определение DOER/MAKE | 283 Приложение В: Другие утилиты, описанные в этой книге| 289 Приложение Г: Ответы на задачи «для дальнейшего размышления» | 291 Приложение Д: Свод стилистических соглашений | 293
#### СПИСОК ПРИМЕРОВ ПРОГРАММ ####
ПРОГРАММА | N СТРАНИЦЫ ——————–|——————- Яблоки | 24 - 26 Телефонные тарифы | Крошечный редактор | Цвета | Римские числа | Рисование квадратиков | Банкомат |