5

Психология программистов

Andrey Lapin
13 мая 2010 года

Привожу выдержки из книги "Психбольница в руках пациентов" Алана Купера. Нельзя сказать, что нижеописанные утверждения истинны для всех программистов. Также сложно найти хотя бы одного программиста, удовлетворяющего всем описанным свойствам. Тем не менее считаю, что данный текст заслуживает внимания, чтобы стать чуточку лучше.

Итак, программисты отличаются от обычных людей. Назовем их хомо логикус.

Многие обозреватели компьютерной индустрии приложили усилия, чтобы определить эти отличия. Роберт Кринджели (Robert Cringely) называет программистов «смердящими богами», подразумевая одновременная высокомерное отношение к окружающим и личное отношение к гигиене.

Другой проницательный наблюдатель и талантливый автор – По Бронсон (Ро Bronson). Он обращал свое зоркое око и острый ум к миру высоких технологий. Пародируя Стивена Кови (Steven Covey), он создал список «Семь привычек крутых инженеров». Эти определения невероятно точны, хотя и гиперболичны.
1. Они щедры в своем эгоизме.
2. Слепота улучшает их зрение.
3. Они кусают не только руку кормящего, но еще и собственные руки.
4. Они готовы приложить любые усилия, чтобы сохранить впечатление, будто их не заботит собственный имидж.
5. Они чинят то, что не сломано, до тех пор, пока это не сломается.
6. «Не я дал неверный ответ, а вы задали не тот вопрос».
7. Считают отсутствие критики комплиментом.

Программисты пожертвуют простотой ради контроля

 

Хомо логикус желает контролировать то, что его интересует, а интересуют его сложные, детерминированные системы. Люди тоже сложны, но их поведение нелогично и труднопредсказуемо, они не ведут себя, как механизмы. Лучшие механизмы – это цифровые механизмы, поскольку они самые сложные, самые изощренные, и программист без труда может их модифицировать.

За контроль всегда приходится платить – дополнительными усилиями и увеличением сложности. Большинству людей по плечу разумные усилия, однако, программистов от большинства обычных людей отличает готовность и способность овладевать крайне сложными вещами. Понимать сложные системы, составленные из многочисленных взаимодействующих факторов, управлять такими системами – вот часть работы программиста, приносящая ему удовлетворение.

Для хомо логикус контроль – цель, тогда как сложность – просто цена, которую они готовы платить за достижение цели. Для нормальных людей цель – это простота, и отказ от контроля – цена, которую они готовы платить. В продуктах, основанных на программном обеспечении, контролем являются функции. К примеру, в Windows 95 функция «Поиск файла» дает мне серьезный контроль над ходом работы. Я могу указать, в каких областях диска следует выполнять поиск, тип искомого файла, искать ли файл по имени или по содержимому и еще целый ряд параметров. С точки зрения программиста все это просто замечательно. Затратив дополнительные усилия и приобретя определенное понимание предмета, он получает возможность искать быстрее и эффективнее. Напротив, с точки зрения пользователя все не так радужно, поскольку ему приходится указывать область поиска, указывать тип искомого файла и еще метод поиска.

Программисты обменяют успех на понимание

 

Читая лекции компьютерным программистам, я прошу поднять руки тех, кто в детстве разбирал часы, чтобы посмотреть, как они работают. Как правило, две трети присутствующих поднимают руки. Затем я спрашиваю, скольким из них удалось в конечном итоге собрать часы, и большая часть рук опускается. Мой следующий вопрос таков: кто из вас считает этот эксперимент неудавшимся? Большая часть присутствующих смеется, осознав, что получили удовольствие от разрушения часового механизма. Хомо логикус желает понять, как работают часы, – такова его цель, и он вполне готов принести в жертву работающие часы, чтобы этой цели достигнуть. С другой стороны, хомо сапиенсу нравится, когда часы работают. Его цель состоит в том, чтобы узнать, который час, и взамен он отказывается от знания о том, что заставляет часы тикать.

Проектировщик Джонатан Корман отмечает:
Большинство людей не понимают, до какой степени компьютеры захватывают программистов. Сложности изучения компьютеров лишь усиливают в программистах чувство удовлетворения. Их интерес настолько искренний и глубокий, что им никогда и в голову не приходит, что другие могут чувствовать что-то иное, а потому причиной раздражения других людей они считают неспособность к обучению, но никак не отсутствие интереса.

Тяга программистов к пониманию заставляет их инстинктивно создавать взаимодействие, приближенное к внутренним механизмам продукта. Вместо того чтобы делать программы, отражающие конечные цели пользователей, они отражают работу внутреннего механизма программы. Естественно, что программисты не испытывают неудобств, пользуясь такими программами, поскольку, понимая принцип работы программы, они способны понять и способы ее применения. Мы называем этот распространенный стиль взаимодействий «моделью реализации». К примеру, компьютерные документы постоянно хранятся на дисках, однако программы способны модифицировать только документы, временно загруженные в оперативную память. Программистам весьма комфортно с такими техническими нюансами, поэтому интерфейсы их программ отражают оба типа присутствующей в компьютере памяти. Для пользователя же подобные вещи аналогичны абсолютно неуместному на при борной доске автомобиля переключателю, заставляющему выбирать между шинами с радиальным и диагональным кордом.

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

Программисты сосредотачиваются на исключительных ситуациях


В мире программного обеспечения, где преобладают точно сформулированные утверждения, даже маловероятные события попросту нельзя игнорировать.

Программисты называют эти события с крайне низкой вероятностью «исключительными ситуациями». Наступление подобных событий маловероятно, но если их не предусмотреть, программа даст серьезный сбой, когда такое событие произойдет. Несмотря на низкую вероятность описываемых событий, за неподготовленность к оным приходится платить огромную цену. Таким образом, маловероятные события становятся для программистов вполне жизненными ситуациями. Тот факт, что граничные условия могут наступать лишь раз в 79 лет ежедневного применения программы, программиста совершенно не утешает. Что если этот Раз наступит завтра?

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

Замечательный пример «щедрости в эгоизме», по Бронсону, – изобилие ненужных и нежелательных возможностей, появляющихся в результате возможностного мышления программистов. Они поставляют нам много такого, что нужно только им самим.

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

А что же люди? Они понимают нули и единицы, но, кроме того, еще твердо понимают двойки, семерки и число тридцать один. Большинству людей сложнее представить миллион вещей, чем 300 вещей. Типичный человек выполняет действия в количествах, которые не исследуются программистами. Скажем, заядлые лыжники-любители могут потратить на лыжные походы десяток выходных за сезон. За сорок лет активного катания это составит менее 500 раз. Современные цифровые компьютеры способны обработать 500 объектов за долю секунды. Фанат любой программы запустит ее не более нескольких тысяч раз, а программисты продолжают думать в масштабах бесконечного числа событий.
Хорошие программисты преднамеренно игнорируют такие практичные числа, как 500, потому что это повышает готовность программ к возможному пятьсот первому разу. Именно это подразумевает По Бронсон, говоря, что «слепота улучшает их зрение».

Программисты ведут себя грубо и прямолинейно

Программисты – совсем как эти бугаи. Учась в школе, многие программисты не имели физического уровня бугаев, но обладали более острым умом и лучшей координацией интеллектуальных функций. Они превосходно проявляли себя в организованной деятельности: в дискуссиях, в литературных клубах, в шахматной команде.

Что касается терзаний переходного возраста, здесь их способности стоили не так много, как мускулатура. На школьной спортплощадке более сильные юноши легко доминировали над ними. Тощий семнадцатилетний, обладающий познаниями взрослого в математике, физике и информатике, по-прежнему остается физически слабым мальчиком, которого игнорируют на футбольном поле и считают неудачником на любовном фронте. Этого ребенка мы называем «ботаником».

Он не проявляет сочувствия к тем, кто интеллектуально слабее, чем он. Про себя, не имея физической силы, чтобы делать это публично, он смеется над более крупными ребятами, не обладающими его смекалкой и интеллектом. Его философия проста и жестока: держи удар или умри. Любой другой присутствующий на «спортплощадке», не способный с ним состязаться, считается недостойным. Он не задумывается о чувствах или талантах более слабых людей. Система его ценностей выражена в неофициальной иерархии, основанной на внутреннем развитии его собственного острого интеллекта. В среде равных себе, не бугаев, его отношение таково: если я могу одолеть тебя –в интеллектуальном состязании, я: твой повелитель и я лучше тебя.

Лишь приближаясь к тридцати годам, я осознал, каким был грубияном. Обычным грубияном, кулаками которого были способности к программированию, а ростом и длиной рук – владение сложными системами. И я издевался над теми, кому не по силам оказывались сложности использования компьютеров.

Метки:

5 комментариев к записи «Психология программистов»

  1. roza,

    очень интересно. Теперь я стала лучше понимать программистов и возможно стану более лояльна к их особенному юмору :)

  2. Константин,

    Хм, занятно. Но! Лично у меня грубость и жестокость к тем кто не умеет программировать и идет ко мне за помощью сделать лабу или курсач появилась только потому, что они не ценили моих усилий, а на оборот им начинало казаться, что я должен им помогать. Теперь только за деньги или пускай катятся…

    Когда я учился в пятом классе, мой старший брат показал как собирать компы… Потом все само пошло…
    Кстати, к радиоэлектроники я отношусь также как и к программированию. Есть набор элементов, каждый из которых выполняет свою функцию и если их соединить в опр. порядке и пустить ток, то все заработает. Как и программа, есть последовательность функций, которые выполняются одна за другой.

    Исключительные ситуации. Ага, а как без них. Юзеры такие бывают, что будут делать такие вещи которые вообще делать нельзя. Поэтому и приходится делать защиту от дурака. Куча проверок и т.п. Например есть список пользователей, юзар должен ввести номер пользователя, которого хочет удалить и вводит -15, или 9999999999999 или вообще букву…

  3. Константин,

    А юмор, то ту да…
    Например был в универе случай. Я о чем-то спросил свою одногрупницу, а она стояла думала, а потом просто пошла в сторону… Я тут и выдал "Функция вернула void", засмеялся я и еще одни человек который тоже имел отношение к программированию, остальные просто проигнорировали… Но шутка и вправду смешная =)

  4. Николай,

    Что-то вы перечислили все отрицательны, типичные признаки программистов, а бывают и положительные. Что вы не встречали нормальных программистов?

  5. Алексей,

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

Оставить комментарий