Alexey Tigarev ([info]t_gra) wrote,
@ 2004-10-02 14:32:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Entry tags:nlp, software_development

О "рационализации" кода при отладке

Рационализацией называется придумывание сознательных объяснений тем или иным собственным действиям, произведённым благодаря бессознательным импульсам. Люди стремятся во всём искать смысл - вот и придумывают словесные объяснения.

Примерно такое же явление я обнаружил при отладке программы. Программа модифицируется так, чтобы отладочные сообщения объясняли человеку, что на самом деле происходит и почему. Так, например, код:

            if (!doNotStartLoop) {
                if (fragment.isLoop()) {
                    L.l.d("LOOP " + loopVar);
                    dataProvider.loop(loopVar);
                    registerLoop(loopVar, fragmentNo);
                }
            }
Преобразуется в:
        if (fragment.isLoop()) {
            if (!doNotStartLoop) {
                L.l.d("LOOP " + loopVar);
                dataProvider.loop(loopVar);
                registerLoop(loopVar, fragmentNo);
            } else {
                L.l.d("loop found but not starting - doNotStartLoop is true");
            }
        }        

Т.е. появляется дополнительная проверка и дополнительное действие (аналог человеческого внутреннего диалога) для объяснения, почему не сделали что-либо. В общем случае эффективность программы снижается, зато становится возможным её отладить (и впоследствии убрать отладочную печать).

Рассуждая о человеческих стратегиях - наборах поведенческих и мыслительных шагов - по аналогии с отлаживаемой программой, получаем ясное свидетельство, что осознавание каждого шага стратегии в общем случае снижает её эффективность - появляются лишние шаги - внутренний диалог, но это может быть полезно при внесении изменений ("отладке"). После внесения изменений можно оптимизировать стратегию, выбросив все эти объяснялки и другие лишние шаги.




(Post a new comment)


[info]sinaps
2004-10-02 05:30 am UTC (link)
\\голосом Доктора из "Формулы любви"
"За это вам наше искренне смавибо!"
Классный пример!

(Reply to this)


[info]sanechca
2004-10-02 06:02 am UTC (link)
Проблема с "человеческой" отладкой заключается в том, что сообщения выдаются не просто рационально-информативные, а оценочно-субъективные. И получается не

  • Я пропустил момент и не запустил цикл

а

  • Какой же я козел! Пропустил момент и не запустил цикл.


Оценочность сильно снижает эффективность, а также уверенность в дальнейшей способности "отладить" данную ситуацию

(Reply to this)(Thread)


[info]t_gra
2004-10-02 06:29 am UTC (link)
Да, или так:
- Плохая это у меня программа!
или:
- Пользователь нехороший человек: зачем он вводит такие данные, на которых моя программа падает?

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

(Reply to this)(Parent)


[info]t_gra
2004-10-02 06:32 am UTC (link)
То есть оценочные сообщения - это сообщения не на том уровне абстракции, что надо.
"Я козёл" - слишком общо, это надо разукрупнить, равно как и "программа - не работает". Это делается метамодельными вопросами - "В чём именно проявляется козлиное поведение?", "Какие именно части программы работают правильно, какие неправильно, и как именно ты делаешь эту неправильную обработку?".

(Reply to this)(Parent)(Thread)


[info]sanechca
2004-10-02 10:02 am UTC (link)
добавить уравновешивающий элемент - терапевта, применяющего метамодель;)
у человека помимо ошибочных программ есть еще и ошибочная отладочная информация, которая не дает информации о реальной ошибке.
Таким образом появляется метамодель - как средство работы с метаошибками - ошибками при исправлении ошибок ;)

(Reply to this)(Parent)


Create an Account
Forgot your login?
Login w/ OpenID
English • Español • Deutsch • Русский…