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

Недовольный женский голос: «Что ты делаешь в женском туалете?! Ты уже третий мужчина, который … о, нет.»

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

Я сравниваю этот момент прозрения с аналогичным моментом в незабываемым эпизоде Star Trek: The Next Generation, когда доктор Грушер поняла, что не она сошла с ума, а вся Вселенная. Когда она столкнулась с непредвиденной абсурдной ситуацией – постепенным исчезновением вначале всего экипажа, а затем и всей Вселенной, она, наконец-то поняла, что именно она сошла с ума.

В отличие от многих людей, во время своей работы я постоянно сталкиваюсь с ошибками в компиляторе и библиотеках, большую часть которых допустил именно я. (Простите!) Но даже при написании «обыкновенного» кода (а не тестовых сценариев, предназначенных для поломки компилятора или воспроизведения существующих ошибок), я стараюсь, чтобы, когда я сталкиваюсь с ошибкой или непредвиденной ситуацией я относился к ней, будто я сумасшедший. Обычно проблемы связаны с моим кодом или с непониманием результата, а не с ошибкой в компиляторе или библиотеке.

Как правильно указали авторы книги “The Pragmatic Programmer” в третьей главе, «с методом select() все нормально», если вы написали совершенно нормальный код, то есть все шансы, что вы не первый человек, который столкнулся с очевидной проблемой в хорошо протестированном продукте. Если вы считаете, что нашли ошибку в математической библиотеке, возможно, вы и правы. Или возможно, что на самом деле вы передали радианы в метод, принимающий градусы или не приняли во внимание ошибку округления чисел с плавающей точкой, или нечто подобное. Чем более очевидна проблема, тем более вероятно, что с ума сошли именно вы. Если не компилируется код, который, по вашему мнению, должен компилироваться, вполне возможно, что это ошибка в компиляторе. Но прочитайте ошибку внимательно; вероятно в нем говорится, что не так с вашим кодом.

Если вы считаете, что нашли ошибку в компиляторе C#, пожалуйста, привлеките к ней наше внимание; напишите о нем на Connect, или привлеките внимание общественности, задав вопрос на StackOverflow или на форуме сайта Microsoft, и, если хотите, пришлите мне ссылку на эту проблему. (Пожалуйста, не присылайте мне код напрямую; фильтры электронной почты очень агрессивны по отношению ко всему потенциально подозрительному. Это практически не даст возможность прочитать мне этот исходный код.) Конечно же, в компиляторе существуют ошибки, и чем больше мы получим информации о них, тем лучше. Также будет очень полезным небольшая, но полная программа, которая воспроизводит эту проблему и версию компилятора. Но вначале остановитесь и хорошенько посмотрите на ваш код и подумайте, возможно ли, что это ошибка в вашем коде, а не в компиляторе. Не уподобляйтесь одному из тех людей, которые присылают мне злые и оскорбительные сообщения о проблемах, в которых виноваты они сами; это просто стыдно.

Оригинал статьи