Способ мышления -- Форт
Предисловие
Программирование компьютеров может свести с ума. Другие профессии дают Вам прекрасные возможности наблюдать осязаемые результаты Ваших усилий. Часовщик может смотреть на свои зубчики и колесики, швея - на швы, ровно ложащиеся после каждого взмаха иглы. Но программист проектирует, строит и ремонтирует нечто воображаемое, призрачные механизмы, ускользающие от восприятия органами чувств. Наша работа происходит не в ОЗУ, не в программе-редакторе, а внутри нашей головы.
Построение моделей в воображении привлекает и доставляет
удовольствие программисту. Как же лучше к этому
подготовиться? Вооружиться самыми хорошими отладчиками,
декомпиляторами и дизассемблерами? Они помогают, однако самые
существенные из технологий и инструментов - умственные. Нам
нужна последовательная и практическая методология для
мышления
на тему задач программирования. Это и составляет
суть того, что я попытался выразить в моей книге. «Способ
мышления …» предлагается всем, кто заинтересован в написании
программ для решения конкретных задач. Книга рассматривает
вопросы проектирования и применения: принятие решений о том,
что Вам нужно сделать, разработка компонентов системы и,
наконец, построение системы.
В книге подчеркивается важность написания программ не просто работоспособных, но и надежных, логичных и выражающих наилучшее решение проблемы самыми простыми методами.
Несмотря на то, что описываемые здесь принципы могут быть
применены к любому языку, я представил их в контексте языка
Форт. Форт - это язык, операционная система, набор инструментов
и философия. Это - идеальное средство для мышления, поскольку
оно соответсвует тому способу, по которому работают наши
головы. Думать на Форте значит думать просто, думать элегантно,
думать гибко. Такое мышление не
имеет запретительного
характера, не
сложно, не
чрезмерно теоретизировано. Вам
даже не нужно знать Форт для получения пользы от этой книги.
Книга «Способ мышления - Форт» сочетает Форт-метод со многими
принципами, выработанными современной компьютерной наукой. Союз
между простотой Форта и традиционной дисциплиной анализа и
стилистки даст Вам новый и лучший способ подхода к задачам
программирования и окажет помощь во всех областях применения
компьютеров.
Если Вы хотите узнать больше о Форте, другая моя книга - «Начальный курс программирования на языке Форт» - содержит сведения об этом языке. Кроме того, такие сведения приводятся в приложении А данной книги.
Несколько слов о плане этой книги. Первая глава посвящена основным соображениям, далее я провел книгу по основному циклу создания программного обеспечения: от начальных требований до внедрения. Приложения в конце включают обзор Форта для тех, кто с ним не знаком, тексты для нескольких описанных в книге программ, ответы на вопросы и свод соглашений по стилистике.
Многие мысли в этой книге не являются научными. Они основаны на субъективном опыте и наблюдениях за самим собой. По этой причине я привел в книге интервью с большим количеством профессионалов, работающих на Форте, и не все из них полностью согласны друг с другом или со мной. Все эти мнения могут изменяться изготовителем без специального уведомления. В книге вносятся также предложения, называемые «советами». Подразумевается, что им следует внимать лишь тогда, когда они соответствуют Вашей ситуации. В Форт-мышлении нет нерушимых правил. Для обеспечения возможно большего соответствия возможным Форт-системам все примеры программ в книге соответствуют стандарту Форт-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 |
Телефонные тарифы | |
Крошечный редактор | |
Цвета | |
Римские числа | |
Рисование квадратиков | |
Банкомат |