Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Обучение через исправление ошибок


Информационный Канал Subscribe.Ru

Я нашел лишь один способ
быстро и результативно учиться -
делать дело...
и исправлять найденные ошибки...

Методы поиска ошибок

Методы поиска ошибок очень сильно зависят от той области (предмета), к которой относится решаемая задача. Я ограничусь рассмотрением тех задач, в которых значимые величины можно измерять в каких-либо единицах, а законы (правила, гипотезы) можно записать с помощью буквенных выражений. Фактически, речь пойдет только о методах алгебры, хотя применимы они к очень широкому спектру задач.

Я уже говорил во втором выпуске рассылки, что начиная поиск, мы должны сформулировать некоторый "критерий ошибки" - свойство, по которому мы можем заключить, что ошибка имела место. Очень простой и понятный критерий есть при решении уравнений. Если при подстановке корней в исходное уравнение не получается истинного числового равенства, значит, уравнение решено неправильно.

Первое, что я хочу Вам предложить, - метод деления пополам. Предположим, что уравнение Вы решили неправильно (по описанному выше критерию). Можно начать проверять все решение с самого начала. А можно поступить по-другому: применить критерий к средней строке решения. Если получается истинное равенство, то ошибка допущена выше этой строки, а если ложное - ниже. Таким образом, область поиска ошибки уменьшается в два раза. В оставшейся части решения надо снова выбрать среднюю строку и применить к ней критерий... В результате нескольких простых проверок Вы найдете именно ту строку, в которой сделана ошибка.

Метод поиска делением пополам известен очень давно. Многие встречались с ним в жизни неоднократно. Но часто ли Вы использовали его при поиске ошибок? Лично я применял его всего раз десять, хотя с поиском ошибок сталкиваюсь почти каждый день. Мало знать метод, надо еще и применять его...

А что делать, если токого простого критерия ошибки нет? Создать его! Например, Вам надо было упростить какое-нибудь буквенное выражение, и Вы уверены, что где-то сделали ошибку. Попробуйте подставить вместо букв какие-нибудь численные значения. Если ошибка имела место, то для некоторого набора чисел значения исходного и результирующего выражений будут отличаться, и Вы имеете критерий для поиска ошибки! В качестве тестовых значений очень часто бывает удобно использовать 0, 1 и бесконечность (конечно, если Вы умеете оперировать с бесконечностями :-)

В физике широко используется проверка решения по размерности. Каждая физическая величина имеет свои единицы измерения. Если при подстановке в формулу единиц измерения размерности левой и правой части не совпадают, значит, формула записана неправильно.

Рассуждая о методах поиска ошибок, я пришел к выводу, что лучше других этими методами умеют пользоваться программисты. Это и понятно. Во-первых, они имеют возможность переложить все рутинные вычисления на компьютер. Во-вторых, если программа работает не совсем так, как надо, то обычно нет возможности сказать: "Ну и ладно! Не очень-то и хотелось!" Все равно, приходится искать ошибку и исправлять. Т. е. необходимость поиска ошибок обусловлена самой спецификой работы.

И программисты любят пошутить про ошибки. Ведь в каждой шутке есть доля шутки! :-) Небольшую подборку на эту тему я разместил ниже. Информация взята из форума сайта www.diwaxx.ru

Пользователь не знает, чего он хочет, пока не увидит то, что он получил. ( Э. Йодан )
Если отладка - процесс удаления ошибок, то программирование должно быть процессом их внесения. ( Э.Дейкстра )

--------

Ошибки так же неисчерпаемы, как и атом.
Аксиома. В любой программе есть ошибки.
Закон пропорциональности. Чем более программа необходима, тем больше в ней ошибок.
Следствие. Ошибок не содержит лишь совершенно ненужная программа.
Фундаментальный закон теории ошибок. На ошибках учатся. Следствие 1. Программист, написавший программу, становится ученым.
Следствие 2. Чем больше программист делает ошибок, тем быстрее он делается ученым.
Следствие 3. Крупный ученый-программист никогда не пишет правильные программы.
Замечание. На то он и ученый.

Указание начинающему программисту. Если вы с первого раза сумели написать программу, в которой транслятор не обнаружил ни одной ошибки, сообщите об этом системному программисту. Он исправит ошибки в трансляторе.

Закон необходимости ошибок. Программист может обнаружить ошибку только в чужой программе.
Следствие. Ошибке не все равно, кто ее обнаружит.

Совет начинающему программисту. Никогда не исправляйте найденные ошибки, ибо это повлечет за собой появление неизвестного числа ненайденных. Лучше опишите их в сопроводительной документации как особенность программы.

Определение. Будем называть языком ошибок правила, в обход которых пишутся программы.
Язык ошибок.
Ошибки могут следовать друг за другом.
От перестановки двух эквивалентных ошибок результат не меняется (коммутативность эквивалентных ошибок).
Две последовательные ошибки можно объединить в одну, более сильную.
Одинаковые ошибки необязательно делать каждый раз, достаточно сделать одну, а затем обращаться к ней по мере необходимости из любого места программы.
Ошибки могут образовывать циклы. Наиболее устойчивый из них - бесконечный.
Ошибки могут вызывать друг друга и сами себя (рекурсивность ошибок). Ошибки допускают многократное вложение друг в друга. Две одинаковые вложенные ошибки называются четной ошибкой и ошибкой не являются. Свойство четности ошибок. Если написанная программа сработала правильно, то это значит, что во время ее работы выполнилось четное число ошибок или программист не понял задание.
Формулировка вышеприведенного свойства, предназначенная для политиков. Ошибка, повторенная дважды, перестает быть ошибкой.

Взаимодействие ошибок с базовой операционной системой.
Во время исполнения ошибки имеют наивысший приоритет. Прервать исполнение ошибки может только другая, более активная ошибка.
Запросы операционной системы к ошибкам ошибками могут игнорироваться. Запросы ошибок к операционной системе игнорироваться не могут. При работе с файлами ошибки могут пользоваться файловой системой базовой ОС и ее ошибками.
На ЭВМ с параллельной архитектурой может выполняться несколько ошибок одновременно.
Системные программы облегчают процесс написания прикладных программ и их ошибок.

Определение. Тестирование - это процесс нахождения ошибок в тесте. Хороший тест должен содержать ошибки, компенсирующие их нехватку в тестируемой программе.
Языковый редактор, призванный уберечь программиста от синтаксических ошибок, позволяет вносить в программу весьма хитроумные ошибки, которые не удается обнаружить ни транслятором, ни отладчиком. Обычный текстовый редактор таких возможностей не предоставляет.
Программа-транслятор, предназначенная для перевода программ с языка высокого уровня на машинный язык, при переводе порождает ошибки. Ошибки, которые содержались в исходном описании, переводятся безошибочно.

Заключительный совет тем, кто до него добрался. До начала работы над проектом следует тщательно продумать все необходимые ошибки и связи между ними. Это значительно упростит работу над ошибками в самом проекте.

Для чего я создал эту рассылку.

Я долго размышлял о том, каким делом я хотел бы заниматься в жизни, что мне нравится.

Так вот, я пришел к выводу, что мне наиболее интересно обучение, причем главным в обучении я считаю не передачу знаний, а воспитание навыков мышления.

Итак, заочное репетиторство!

Я ориентируюсь на общение через электронную почту. Она обеспечивает достаточно высокую скорость обмена информацией. Вы можете легко отправить мне письмо
Буду рад Вашим отзывам и новым вопросам. Пока же я пишу о том, как я представляю себе процесс обучения, как, на мой взгляд, можно сделать его более эффективным. И очень надеюсь на активность читателей.

Успехов Вам, Добра и Любви!
Мордвинов Яков

Дужественная рассылка на Subscribe.ru

Рассылка "Клуб "неНОРМАЛЬНЫЕ родители""
Адрес: http://subscribe.ru/catalog/home.child.nenorma1



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное