2.3. Усунення неоднозначності
У програмуванні неприпустимо покладатись на випадок. Користувач, який заворожений магією комп’ютера, не володіючи мистецтвом програмування, схильний не брати до уваги, що ті дії, які він вважає само собою зрозумілими, машині треба повідомляти в самих найдрібніших подробицях. Для комп’ютера будь-яку заздалегідь заплановану дію треба розбити на елементарні кроки так, щоб в результаті вийшов алгоритм. У простому випадку алгоритм нічим не відрізняється від рецепту приготування пирога. Але програміст ще повинен визначити і ті елементарні кроки, які інші просто не помічають. Наприклад, що у рецепті яйця обов’язково треба його розбити і використовувати тільки їх вміст, а не шкаралупу.
Оскільки, щоб передбачити будь-яку випадковість, треба написати сотні, а то і тисячі команд, природно, зростають витрати і вкрадаються помилки. Все це породжує, за словами голландського вченого Едсгера Дейкстри, “величезну безліч прикрих дрібниць”. Дейкстра – науковий співробітник фірми “Бароуз” (BURROUGHS), один з найбільш авторитетних теоретиків програмування. Не один рік він стверджував, що більшості помилок можна уникнути, якщо вести боротьбу з недбалим стилем у програмуванні, яке розвивалося в основному не як строга наука, а як мистецтво, засноване на інтуїції та особистому досвіді.
Свій плідний внесок в теорію програмування Дейкстра зробив у 1968 р. у віці 38 років. У невеликій роботі під назвою “Замітки по структурному програмуванню” він доводив, що більшість програм невиправдано складні через відсутність в них чіткої математичної структури. Стан справ в області проектування програмного забезпечення викликав неспокій багатьох фахівців з обчислювальної техніки. Все частіше роботи зі створення нових систем програмного забезпечення вартістю у мільйони доларів не вкладалися в заздалегідь встановлені строки, а потім у процесі використання в них виявлялися тисячі помилок. Якраз у той час, коли Дейкстра писав свою роботу, проходила міжнародна конференція, на якій виникла ситуація, яка отримала назву “Криза програмного забезпечення”.
- Міністерство освіти і науки україни
- 9.12. Огляд WinDev 154
- 10. Історія операційних систем 169
- Список літератури 187
- Передмова
- 1. Передвісники комп’ютерної ери
- 1.1. Комп’ютерна програма–що це?
- 1.2. Доелектронна історія обчислювальної техніки
- Логарифмічна лінійка
- 1.3. Можливості двійкового коду
- 1.4. Розвиток двійкової системи
- 1.5. Винахід перших комп’ютерів
- Перша в історії працююча програмнокерована універсальна обчислювальна машина z-3 (1941 р.)
- 1.6. Гарвардська архітектура
- 1.7. Архітектура фон Неймана
- 1.8. Створення зрозумілих людині кодів
- 1.9. Крок на благо програмування
- 1.10. Можливості програмного управління
- 2. Нові мови програмування
- 2.1. Поневіряння пакетної обробки
- 2.2. Універсальна мова програмування
- 2.3. Усунення неоднозначності
- 2.4. Заклик до дотримання математичної строгості
- 2.5. Пошук та усунення помилок
- 2.6. Нелегке мистецтво програмування
- 2.7. Обчислювальна техніка та програмування в срср
- 3. Розквіт та хаос програмного забезпечення
- 3.1. Місце народження хакерів
- 3.2. Два чародії програмування
- 3.3. Перші промислові стандарти
- 3.4. Дружній інтерфейс
- 3.5. Прообраз сучасного «ноутбука»
- 4. Болісний шлях розвитку програмування
- 4.1. Плануюче обчислення
- 4.2. Внесок Великої Британії
- 4.3. Програмування англійською мовою
- 5. Три комерційні гіганти
- 5.1. Перша комерційна мова програмування
- 5.2. Обчислювальна техніка приходить у бізнес
- 5.3. Народження codasyl
- 5.4. Конференція в Цюріху
- 5.5. На шляху до сумісності комп’ютерів
- 5.6. Розбіжності Нового Світу
- 6. Десятиліття динамічного розвитку
- 6.1. Перші кроки непроцедурної мови
- 6.3. Алфавітне хрещення
- 6.4. Успіх та суперечки
- 6.5. Інженерний підхід
- 6.6. Структурний підхід
- 6.7. Поява мови “Ада”
- 7. Програмування приходить у наші домівки
- 7.1. Розквіт Бейсіка
- 7.2. Поява мови Модула-2
- 7.3. Музикальний француз
- 7.4.Довгожитель Lisp – інструмент функціонального програмування
- 7.5. Prolog – нездійснена мрія еом V покоління
- 7.6. Революція на ім’я Java
- 8. Історія і шляхи розвитку супер-еом
- 8.1. Усе починалося з менфреймов
- 8.2. Напрями розвитку обчислювальної техніки
- 8.3. Розвиток елементної бази. Закон Мура
- 8.4. Вдосконалення архітектури
- Звичайна послідовн обробка
- Конвеєрна обробка
- 9. Сучасний стан та перспективи розвитку програмування
- 9.1. Криза у програмуванні
- 9.2. Методологія процедурно-орієнтованогопрограмування
- 9.3. Методологія об’єктно-орієнтованогопрограмування
- 9.4. Методологія об’єктно-орієнтованогоаналізу та проектування
- 9.5. Технології програмування
- 9.6. Case –засоби
- 9.7. Методологія rad
- 9.11.1. Знайомство с LightSwitch
- 9.11.2. Архитектура LightSwitch
- 9.11.3. Створення проекту в Microsoft Visual Studio LightSwitch
- 9.11.4. Дванадцять основних переваг LightSwitch
- 9.12. Огляд WinDev
- 9.12.1. ПризначенняWinDev
- 9.12.2. Деякі характеристики wLanguage
- 9.13. Технологія model checking
- 9.14. NeoBook – программирование для непрограммистов
- 9.14.1. Введення для секретарок
- 9.14.3. Можливості та області застосування
- 9.15. Файлові системи найближчого майбутнього
- 9.15.1. Зетта-повінь настає
- 9.15.2. Файлова система zfs
- 9.15.3. Файлова системаBtrfs
- 9.15.4. Файлова системаHammer
- 10. Історія операційних систем
- 10.1. Послідовна обробка даних
- 10.2. Прості пакетні системи
- 10.3. Багатозадачні пакетні системи
- 10.4. Системи з режимом розподілу часу
- 10.5. Основні досягнення
- 10.6. Сучасні системи unix
- 10.7. Os/2. Битва двох гігантів
- Список літератури