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