Десять отличий

Бывает такое у программистов…. Вдруг перестаёт работать программа. Весь день работала, вчера работала, полгода работала до этого, а сейчас перестала — и всё. Каждый программист выходит из этой ситуации по-разному. Кто-то бросает текущую задачу и переключается на другую, а кто-то пытается решить проблему сразу, отталкиваясь от того, что «я же ничего не менял, почему она перестала работать? аааа!!!».

IMHO большинство программистов идёт по второму пути. А на этом пути их поджидает главный подвох. Они начинают искать «десять отличий». В ход идут все способы: от svn diff до сравнения бинарных файлов. В случае с программой для встраиваемых систем появляется паранойя, что все отладочные железки — глючат, что в них перепутаны резисторы, конденсаторы, и что-то там ещё.

Я не отрицаю, что «поиск отличий» может быть эффективным методом поиска неисправностей, но он не может быть основным. Основным методом может быть «остановиться и подумать». Он гораздо эффективнее, поскольку:

  • в нём присутствует слово «думать» ;)
  • процесс поиска ошибки становится творческим, а не тупо механическим
  • в этом случае от программирования можно получить удовольствие и меньше устать
  • лучше понимаешь, на что потратил своё время
  • полученные знания можно использовать в дальнейшем

По себе знаю: очень трудно остановиться. И в этом заключается основная проблема. Но остановиться надо. Иначе — бесследная потеря времени гарантирована на все 100%.

наболело ;)

11 комментариев

  1. Антон Фельдман:

    плюс пиццот!

  2. Сергей Тавруев:

    Если перестала работать программа, а ты «ничего не сделал, только вошел, слющай!» — иногда помогает «пересобрать все». На прошлой неделе такое было. Посоветовал пересобрать. Функция, возвращает значение, а в вызывающую возвращается совершенно другое значение: пересобрали, помогло.

    • Антон Фельдман:

      а вот это уже шаманские танцы с бубном. тоже из серии «как не надо делать».

      • Сергей Тавруев:

        Лучше игнорировать ошибку, растущую из проблем в компиляции и линковке (соглашения о вызовах, выравнивание и т.п.), и думать-думать-думать??? А может стоит запустить rebuild и в это время почитать код? И когда завершится, будет видно, дальше думать, или проблема наведенная?
        Такое постоянно случалось. Паша свидетель.

        • Антон Фельдман:

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

          • Сергей Тавруев:

            А в таких ситуациях чаще всего с зависимостями и проблема.

            • Антон Фельдман:

              это наша лень. надо с ней бороться. и найти ошибку в построении зависимостей ;)

      • Сергей Тавруев:

        Кстати!!! Часто бывает, что «как надо делать» никто не знает… :(

        • Антон Фельдман:

          и что? вешаться, да?

          • Сергей Тавруев:

            Вешаться. НО! Перед этим упорно искать выход… И вешаться только когда выход один: вешаться. ;)