====== Способ мышления -- Форт ====== Язык и философия для решения задач [[ru:literature:authors:Лео._Броуди]] Перевод с английского С.Н.Дмитренко МОСКВА 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| |**Глава 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| |**Глава 8. Минимизация структур управления** | 237| |Что же такого плохого в структурах управления | 237| |Как устранять структуры управления | 242| |Выбор структур управления | 248| |Итоги | 275| |Литература | 275| |**Эпилог: Воздействие Форта на мышление** | 276| |Приложение А: Обзор Форта (для новичков) | 279| |Приложение Б: Определение DOER/MAKE | 283| |Приложение В: Другие утилиты, описанные в этой книге| 289| |Приложение Г: Ответы на задачи "для дальнейшего размышления" | 291| |Приложение Д: Свод стилистических соглашений | 293| ==== СПИСОК ПРИМЕРОВ ПРОГРАММ ==== ^ ПРОГРАММА ^ N СТРАНИЦЫ^ |Яблоки | 24 - 26| |Телефонные тарифы || |Крошечный редактор || |Цвета || |Римские числа || |Рисование квадратиков || |Банкомат || ===== Ссылки ===== * [[http://www.forth.org.ru/~cactus/files/brodie.rar|Книга в формате TXT (без рисунков)]] * [[http://electronix.ru/forum/index.php?showtopic=61758&view=findpost&p=604477|Книга в формате DOC (с рисунками)]]