немного не в тему, но всё же...
ТЕОРИЯ ОШИБОК
Ошибки так же неисчерпаемы, как и атом.
Аксиома: В любой программе есть ошибки.
Закон пропорциональности: Чем более программа необходима, тем больше в ней ошибок.
Следствие: Ошибок не содержит лишь совершенно ненужная программа.
Фундаментальный закон теории ошибок: На ошибках учатся.
Следствие 1: Программист, написавший программу, становится ученым.
Следствие 2: Чем больше программист делает ошибок, тем быстрее он делается ученым.
Следствие 3: Крупный ученый-программист никогда не пишет правильные программы.
Замечание: На то он и ученый.
Указание начинающему программисту: Если вы с первого раза сумели написать программу, в которой транслятор не обнаружил ни одной ошибки, сообщите об этом системному программисту. Он исправит ошибки в трансляторе.
Закон необходимости ошибок: Программист может обнаружить ошибку только в чужой программе.
Следствие: Ошибке не все равно, кто ее обнаружит.
Совет начинающему программисту: Никогда не исправляйте найденные ошибки, ибо это повлечет за собой появление неизвестного числа ненайденных. Лучше опишите их в сопроводительной документации как особенность программы.
Определение: Будем называть языком ошибок правила, в обход которых пишутся программы.
ЯЗЫК ОШИБОК
Ошибки могут следовать друг за другом.
От перестановки двух эквивалентных ошибок результат не меняется (коммутативность эквивалентных ошибок).
Две последовательные ошибки можно объединить в одну, более сильную.
Одинаковые ошибки необязятельно делать каждый раз, достаточно сделать одну, а затем обрашаться к ней по мере необходимости из любого места программы.
Ошибки могут образовывать циклы. Наиболее устойчивый из них - бесконечный.
Ошибки могут вызывать друг друга и сами себя (рекурсивность ошибок).
Ошибки допускают многократное вложение друг в друга. Две одинаковые вложенные ошибки называются четной ошибкой и ошибкой не являются.
Свойство четности ошибок: Если написанная программа сработала правильно, то это значит, что во время ее работы выполнилось четное число ошибок или программист не понял задание.
Формулировка вышеприведенного свойства, предназначенная для политиков: Ошибка, повторенная дважды, перестает быть ошибкой.
ОШИБКИ И БАЗОВАЯ ОС
Во время исполнения ошибки имеют наивысший приоритет. Прервать исполнение ошибки может только другая, более активная ошибка.
Запросы операционной системы к ошибкам ошибками могут игнорироваться.
Запросы ошибок к операционной системе игнорироваться не могут.
При работе с файлами ошибки могут пользоваться файловой системой базовой ОС и ее ошибками.
На ЭВМ с параллельной архитектурой может выполняться несколько ошибок одновременно.
СИСТЕМНЫЕ ПРОГРАММЫ
Системные программы облегчают процесс написания прикладных программ и их ошибок.
Определение: Тестирование - это процесс нахождения ошибок в тесте. Хороший тест должен содержать ошибки, компенсирующие их нехватку в тестируемой программе.
Языковый редактор, призванный уберечь программиста от синтаксических ошибок, позволяет вносить в программу весьма хитроумные ошибки, которые не удается обнаружить ни транслятором, ни отладчиком. Обычный текстовый редактор таких возможностей не предоставляет.
Программа-транслятор, предназначенная для перевода программ с языка высокого уровня на машинный язык, при переводе порождает ошибки. Ошибки, которые содержались в исходном описании, переводятся безошибочно.
Заключительный совет тем, кто до него добрался: До начала работы над проектом следует тщательно продумать все необходимые ошибки и связи между ними. Это значительно упростит работу над ошибками в самом проекте.
_______________________________________________________________________________
ГРАБЛИ - Словарь хакера
ГРАБЛИ
Чайник - ничинающий юзер, ни разу не наступавший на грабли и потому уверенный, что граблей не существует.
Ламер - юзер, регулярно наступающий на грабли, но по-прежнему уверенный, что граблей не существует.
Узкий специалист - юзер, в совершенстве владеющий наступанием на одни и те же грабли.
Широкий специалист - юзер, имеющий на лбу более двух шишек.
Программер - тот, для кого в наступании на грабли важнее всего результат. Устав наступать на чужие грабли, изготавливает свои собственные.
Продвинутый программер - программер, наступающий на каждые грабли не более двух раз.
Копирайт - концепция, ограничивающая количество доступных для наступания граблей финансовыми возможностями юзера.
Геймер - тот, для кого в наступании на грабли важнее всего процесс. Обычно не способен изготовить собственные грабли.
Читер - разновидность геймера; наступает только на грабли с поролоновыми насадками на ручке и обычно не больше одного раза.
Хакер - тот, кто способен наступить на грабли, даже если они спрятаны в сарай и заперты на замок.
Хакер-идеалист - благородный борец за право каждого наступать на неограниченное количество граблей.
Microsoft - корпорация, всемирный лидер по производству граблей.
Билл Гейтс - мифическое существо из программерского фольклора; злой дух - покровитель граблей.
Апгрейд - процесс перманентной траты денег на покупку все новых граблей, каждые из которых бьют больнее предыдущих.
Бета-версия - версия, в которой грабли видны невооруженным глазом.
Релиз - версия, в которой грабли присыпаны листьями.
Совместимость версий - принцип, позволяющий новым граблям попадать точно по шишке от предыдущих.
Ассемблер - язык программирования, позволяющий наступать на грабли несколько миллионов раз в секунду.
Локальная сеть - технология, позволяющая получить по лбу, даже когда на грабли наступает кто-то другой.
Интернет - технология, позволяющая наступить на грабли, находящиеся надругой стороне земного шара.
Сетевая конференция - технология, позволяющая каждому наступить не только на свои, но и на чужие грабли.
Русские кодировки - подарочный набор граблей для пользователей интернета.
Дружественный интерфейс - резиновая накладка на ручку граблей.
Гибкий (настраиваемый) интерфейс - накладка на ручку граблей, которую можно двигать, подгоняя под высоту своего лба.
Графический интерфейс - грабли, позволяющие регулировать цвет и интенсивность искр после удара по лбу.
Ненадежная система - грабли, которые бьют вас даже тогда когда вы на них не наступаете.
Надежная система - грабли, которые бьют вас по лбу, даже когда вы стоите к ним спиной.
Многозадачность - концепция, позволяющая наступать на несколько граблей одновременно.
Объектно-ориентированное программирование - метод изготовления граблей по принципу матрешки.
Мануал - книга, описывающая различные способы наступания на грабли. Никогда не используется ламерами и хакерами. Продвинутые программеры используют ее после того, как наступят на те же грабли во второй раз.
Техподдержка - служба, дающая советы, что делать после наступания на грабли. Обычно первый ее совет - наступить на грабли еще раз и сравнить ощущения.