16 методов программиста.
Метод 4-й. «Возможно все».

Порою упираешься в нелогичность программы, тратя часы, а иногда дни на поиск ошибки. Показание к применению метода «Все возможно» – начинает ехать крыша. Кажется, что такого просто не может быть! Как так? Все же должно работать.

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

Частые причины: русская «эс» вместо латинской «цэ», дублирование, исполнение старой версии кода, баги в стандартных/сторонних библиотеках, ошибка тимлида или клиента при постановке задачи.

Решение: убираем догматическое мышление, возможно все, только с разной долей вероятности (смотри «Уважай предшественников»). Задача разработчика — проверить наиболее вероятные случаи (отсечь их) и проверить невероятные применяя методы: «проверь гипотезу», «дихотомия», «начни с истоков», «наведи порядок».

Приведу примеры. Один из случаев произошел 7 лет назад. Мне было нужно сделать фильтры для страницы списка Sharepoint на серверной стороне. Изучил код, нашел пример в интернете. Задача решалась простым добавлением конструкции Where на языке CAML в свойстве контрола. Запрограммировал, развернул – не работает. Проверил: заходит в код, меняет запрос в элементе управления, но не работает! Полдня проверял код, отлаживал. Должно работать, но нет. Скачал пример из интернета, развернул – работает! Проверяю свой код – нет. Логика одна и та же. Начал приводить пример из интернета к своему коду с помощью дихотомии. В итоге был сильно удивлен. Сокращая код обнаружил, что когда на форме присутствует кнопка – фильтрация работает, когда отсутствует – нет. Кнопка ни с чем не связана, важно, чтобы она была на форме. После осознания данного факта решение было в добавлении вместе с серверной обработкой скрытой кнопки в представление. Для меня факт связи наличия кнопки с изменением запроса на сервере — дикость, никогда бы не предположил, что такое возможно, но с фактом не поспоришь.

Другой случай, когда алгоритм возвращал результат, отличающийся от ожидаемого. Просмотрел код, все должно быть корректно. Запустил отладку. Захожу в метод, и на середине кода управление выходит из функции без оператора возврата, исключения и других стандартных действий. Просто выходит. Как оказалось, студия закэшировала сборки. Подобные ситуации наблюдаются при работе с GAC, когда DLL берется не из текущего каталога (как ожидает разработчик), а из GAC. Третий случай когда кто-то допустил дублирование кода, и программист редактирует один экземпляр кода, а выполняется код из другого места и т.д. и т.п. Буквально сегодня мой сотрудник негодовал по поводу того, что в html-редакторе вчера подключенный плагин не работал, а сегодня он повторно попробовал тоже, что делал вчера и плагин заработал. Поэтому предполагайте, что возможно все, только с разной долей вероятности. Проверяйте, убеждайтесь в надежности кода, опирайтесь на факты и продвигайтесь гарантировано.

Успешного вам решения интересных задач! Пусть данный метод принесет вам пользу!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *