Я как-то сказал, что программисты — не обычные люди; они обладают своего рода сверхспособностью. Но проблема в том, что программисты часто не осознают эту особую способность. В своих глазах они считают себя обычными, такими же, как все. Поэтому то, что умеют делать программисты, другие люди — например, их клиенты/пользователи программного обеспечения — тоже должны легко уметь делать. Но на самом деле, поскольку большинство людей — подавляющее большинство (включая клиентов компаний по разработке программного обеспечения и пользователей, покупающих программное обеспечение) — являются компьютерными новичками (людьми, которые очень мало знают о компьютерах/программном обеспечении). Операция с программным обеспечением, очевидная для программиста, когда её должен выполнить клиент, может привести ко всевозможным странностям. Это заставляет программистов сильно страдать.
Помню, однажды клиент позвонил мне и сказал, что большая «e» на его рабочем столе компьютера пропала. Я не понял — какая большая «e» пропала? Клиент объяснил: пропала иконка, похожая на большую букву «e». Я был ошарашен. Наконец я понял, что он имел в виду, что значок браузера IE на рабочем столе исчез.
В другой раз клиент попросил добавить на страницу функцию поиска. Я спросил его: «В системе уже есть функция поиска; зачем добавлять новую здесь?» Он сказал, что это не тот поиск, который ему нужен; он хотел искать ключевое слово на этой странице. После дальнейшего общения я понял, что ему нужна функция сочетания клавиш CTRL+F в браузере.
Из-за этих особенностей клиентов программы, которые программисты считают идеальными, в руках клиентов превращаются в крайне сложное в использовании программное обеспечение. Звонки с жалобами раздаются бесконечно, словно бранится сварливая баба в деревне. Последующий анализ показал, что первопричина в том, что программисты переоценивают способность пользователей управлять программным обеспечением и недооценивают собственную способность создавать программное обеспечение. В результате, когда они смотрят, как эти клиенты используют разработанное ими программное обеспечение, это выглядит как такое нелепое поведение, как показано ниже:

Если вспыльчивый программист сталкивается с такой ситуацией, он неизбежно пожалуется клиенту. Более того, программисты обычно не отличаются добрым нравом, поэтому при общении с клиентами менеджер проекта обычно сопровождает их, чтобы избежать обострения.
Хотя клиенты доставляют программистам много хлопот, на самом деле всё чувство славы программиста исходит от клиентов, потому что только когда клиенты довольны, программисты испытывают чувство достижения. Например, выражения лиц этих клиентов ниже при использовании новой программы достаточно, чтобы заставить программиста улыбнуться даже в Пекине в послеполуденный час при сильном смоге:

Хотя у программистов скверный характер, они всё время думают о работе и не держат личных обид. Когда в разработке ПО появляется срочная задача, они без жалоб работают сверхурочно. Когда в уже выпущенном ПО обнаруживается серьёзный баг, они глубоко винят себя и спешат за ночь выпустить экстренное исправление бага. Если им не удаётся удовлетворить пользователей при первой возможности, у них пропадает аппетит к чаю и еде, и они не могут спать. Даже когда в краткосрочной перспективе действительно нет полного решения, они придумывают нестандартные уловки — но это эффективные решения — чтобы помочь пользователям временно преодолеть трудность. Например, ниже приведён патч экстренного исправления:

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

Наконец, упомяну некоторые меры предосторожности при общении с программистами. Поскольку программисты целыми днями имеют дело с программной логикой, они особенно чувствительны к причинно-следственным связям. Если причинно-следственная связь в ваших словах не очень ясна, это их запутает; если причинно-следственная связь в ваших словах неполна, это заставит их сделать не то. Если есть ...if, лучше всего использовать послесловиеthenдля завершения, или использоватьelseчтобы дать варианты выбора. Подлежащее должно быть ясным. Если оно не ясно, произойдёт инцидент, показанный на рисунке ниже:

Если вы программист, вы поймёте, что я говорю.