Мысли вслух

Одержимые программисты - не термин, а диагноз

circle.gif (501 bytes)Книга Джозефа Вейценбаума "Возможности вычислительных машин и человеческий разум (от суждений к вычислениям)", судя по названию, посвящена проблемам искусственного интеллекта. Вот в таком качестве я ее и купил в 1982 году, поскольку этим самым искусственным интеллектом я тогда занимался очень плотно. Вообще, мои амбиции были на самом деле гораздо больше - еще в школе я задумал создать компьютерную модель человека (не больше не меньше), не особенно задумываясь, для чего это нужно. В шестом классе я пытался вывести формулу любви,  в студенчестве сильно увлекался математическими методами в психологии и социологии, дипломная работа у меня была - программа, составляющая школьные расписания, потом была еще программа, довольно неплохо играющая в рэндзю, а затевались еще и программы, сочиняющие стихи, да мало ли еще глупостей затевалось... В общем, я был типичным представителем "искусственной интеллигенции" (термин Вейцебаума, очень удачный). И, хотя к 1982 году я уже читал Толстого, Торо, Руссо, Библию и много еще хороших и умных книг, был я в ту пору исключительно дремучим человеком по части того, что хорошо, а что плохо, как надо жить и к чему стремиться.

circle.gif (501 bytes)Так вот, книга оказалась совсем не о том.  Эта книга не только об искусственном интеллекте (хотя и о нем тоже). И не только об опасности технократического подхода (хотя и об этом тоже). Кое-кто видит в этой книге всего лишь извечный спор между "физиками" и "лириками".  И это тоже есть. Это книга о том, как нам следует смотреть на явления и с какой точки зрения их оценивать.  Благодаря, в частности, и этой книге, я смотрю на вещи (особенно на процессы, происходящие в компьютерном мире) совершенно перпендикулярно, отчего часто остаюсь непонятым среди компьютерщиков. Может быть, хотя бы кто-то начнет меня понимать после этого выпуска СТАЛКЕРа? Ну вот, например,как вы смотрите на такой тезис: ум - это умение решать проблемы, а разум - это понимание того, какие проблемы важные, а какие нет? Я всего лишь пытаюсь показать вам, что есть проблемы более важные, чем войны браузеров и операционных систем...

circle.gif (501 bytes)Впрочем, введение затянулось. Всю книгу я разбирать здесь не буду (кто желает, сходите на мой сайт ППСС, там содержится подробный конспект этой книги,  а еще лучше - найдите эту книгу и прочитайте от корки до корки. Очень помогает, по себе знаю:о). Так вот, я сегодня вкратце остановлюсь на одной лишь главе книги, которая называется "НАУКА И ОДЕРЖИМЫЙ ПРОГРАММИСТ". Я думаю, это самая близкая  для вас глава.

circle.gif (501 bytes)Итак, прочтите. Знакомая картина, не так ли?

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

Где бы ни организовывались вычислительные центры [...], можно наблюдать блестящих молодых людей, всклокоченных, часто с запавшими, но сияющими глазами, которые сидят за пультами управления вычислительных машин, сжав в напряжении руки в ожидании возможности пустить в ход свои пальцы, уже занесенные над кнопками и клавишами, приковывающими их внимание так же, как брошенная игральная кость приковывает взгляд игрока. Если они не находятся в таком трансе, то часто сидят за столами, заваленными машинными распечатками, которые они сосредоточенно изучают подобно людям, одержимым постижением кабалистического текста. Они работают чуть ли не до полного изнеможения, по 20-30 часов подряд. Еду, если только они о ней заботятся, им приносят (кофе, кока-кола, бутерброды) . Если возможно, они спят около вычислительной машины на раскладушках, но всего несколько часов, а затем - снова за пульт управления или к распечаткам. Их измятая одежда, немытые и небритые физиономии, нечесаные волосы - все свидетельствует о том, что они не обращают внимания ни на свое тело, ни на мир, в котором живут. Они существуют, по крайней мере когда они так увлечены, лишь в связи с вычислительными машинами и ради них. Они - "машинные наркоманы", одержимые программисты. Это явление наблюдается во всем мире.

circle.gif (501 bytes)Батюшки, да это ж знакомый нам по анекдотам программист. Помните - "а та обезьяна - как папа". Да только на самом деле картина не слишком веселая. И диагноз серьезней, чем вы думаете. Одержимый программист - это не просто трудоголик (хотя и "трудоголик" - тоже диагноз). Между трудоголиком и одержимым программистом есть серьезная разница, и Вейценбаум ее называет (не могу удержаться, цитирую большими кусками - просто каждое слово в точку, и выбросить ничего невозможно):

Как же отличить одержимого программиста от просто преданного своему делу трудолюбивого программиста-профессионала? В первую очередь, на основе того, что обычный профессиональный программист занимается задачей, требующей решения, а одержимый программист рассматривает задачу в основном в качестве предлога для обращения к вычислительной машине. Профессиональный программист, как правило, обсуждает с другими свои проблемы, связанные с содержанием задачи и техникой программирования. Обычно он проделывает обширную подготовительную работу (построение блок-схемы, написание программы) прежде, чем приступить к работе собственно с вычислительной машиной. Его сеансы работы с вычислительной машиной бывают сравнительно непродолжительными и он даже перепоручает кому-нибудь работу за пультом управления. Он создает свои программы неторопливо и систематически. Если что-то не получается, он значительную часть времени проводит не возле вычислительной машины, а тщательно продумывает гипотезы, объясняющие отказы, и планирует эксперименты, позволяющие эти гипотезы проверять. И снова сам процесс выполнения программы на машине он может доверить кому-то. Он способен, ожидая результатов от ЭВМ, заниматься другими аспектами своей работы, например документированием уже законченной части. Когда, наконец, он завершит программу, которую должен был разработать, программист в состоянии составить ее точное описание и перейти к другим проблемам. Профессионалы считают программирование средством достижения цели, а не целью как таковой. Они удовлетворены решением содержательной задачи, а не тем, что вычислительная машина подчиняется их воле.

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

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

circle.gif (501 bytes)На первый взгляд кажется, что речь тут идет о технологии программирования. О том, что нужно писать документацию к своим программам, и т.д. На самом деле водораздел пролегает не здесь. Заметьте - для профессионала важно решить конкретную задачу, а для одержимого программиста важно непосредственное общение с компьютером, важен факт подчинения компьютера своей воле. Задача для него  дело десятое,  лишь предлог для общения с машиной. Вы только представьте себе, какой реальный вред наносят эти типы. Ведь люди, нанявшие их, вкладывают в них деньги и тщетно дожидаются отдачи. А отдачи нет и быть ее не может, потому  что результат интересует одержимого программиста меньше всего. Он живет в своем виртуальном мире, который сам же для себя и построил, в котором есть злобные драконы  и волшебные феи, в котором не действуют человеческие понятия и совершаются странные превращения, а сами они себя считают сказочными героями, с мечами наперевес и воинственными криками "мастдай" (заметьте, кстати, что любимое чтиво программеров - фэнтэзи, нередко они, кроме фэнтэзи, вообще ничего не читают). Когда из реального мира стучится юзер со своими гнусными реальными проблемами, программер раздражается и изобретательно посылает его на все возможные буквы, в том числе и латинские (ну прикиньте, вам снится сон, как вы занимаетесь сексом с красоткой, а тут вас будит жена и требует вынести мусор!). Когда у руководства лопается терпение и оно начинает требовать результат, программер оскорбляется, обзывает руководство злобными ламерами и гордо уходит ("Карету мне, карету" - и, к сожалению, немало еще осталось на земле мест, где одержимого программера, обманувшись,   примут  за долгожданного специалиста). Впрочем, защите юзера от одержимых программистов  я посвящу как-нибудь отдельные "мысли вслух".

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

circle.gif (501 bytes)О! Как нам это знакомо! Не будем далеко ходить за примерами в программирование. Создание сайтов - не то же ли самое? Анонсируются глобальные проекты, раздаются щедрые обещания, создаются с гигантским замахом сайты, на которых когда-нибудь, как-нибудь,  может быть, что-нибудь будет очень замечательное... А потом мыльный пузырь лопается.... а почему? Об этом речь в следующей цитате:

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

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

Одержимый программист посвящает работе над своими великими проектами столько времени, сколько ему удается. "Работать" - это, однако, не то слово, которое он использует; то, что он делает, он называет "хакированием". "То hack", согласно словарю, - это "рассекать беспорядочно, неумело или без определенной цели; кромсать с помощью или как бы посредством многократных ударов какого-либо рубящего инструмента"). Я уже отмечал, что одержимый программист, или хакер, .как он сам себя называет, обычно превосходный "технарь". Казалось бы, он не действует "неумело", как это указывается в определении. Однако определение справедливо здесь в том более глубоком смысле, что хакер "действует без определенной цели"; он не в состоянии поставить перед собой ясно сформулированную долгосрочную цель и выработать план ее достижения, поскольку он обладает лишь умением, но не знанием. Он не располагает ничем, что он мог бы анализировать или синтезировать; короче говоря, у него нет предмета для построения теорий. Его мастерство, таким образом, бесцельно, даже беспредметно. Оно просто не имеет никакого отношения к чему-нибудь, кроме того инструмента, с помощью которого оно может быть реализовано, Его мастерство напоминает искусства переписчика в монастыре, хотя и неграмотного, но первоклассного каллиграфа. Следовательно, все эти великолепные проекты должны неизбежно сопровождаться иллюзиями, а именно иллюзиями грандиозности. Он создаст одну грандиозную систему, в рамках которой все остальные специалисты будут потом писать свои системы.

circle.gif (501 bytes)Вот оно, слово, найдено. Слово "хакер" только сейчас стало обозначать "взломщик". Но оно впервые появилось в семидесятых годах и тогда означало именно бесцельное, беспредметное программистское рукоблудие. Хакеру интересно опробовать новый инструмент, ему интересно опробовать новый метод. Решать задачи, нужные остальному человечеству, хакеру неинтересно. Людей, которые этим занимаются, он презрительно называет чайниками и ламерами. Кстати, в последнее время, в связи с широким распространением компьютеров и снижением общего профессионального уровня, разновидность одержимых программистов появилась и в среде юзеров. Это люди, которые завели себе компьютер и готовы сидеть с ним сутками, но не знают, что с ним делать.  Они даже программировать не умеют (а умели бы - превратились бы в одержимых программистов). Поэтому они покупают пачками китайские диски, ставят подряд все, что на них записано, гробят и переустанавливают операционку по десять раз на дню.По сравнению с обычным "чайником" они гораздо подкованнее ("чайник"  порой и MS Office не в состоянии себе поставить), но на самом деле они гораздо дремучее "чайников", потому что они умеют делать с компьютером все, кроме одного - применить его для какого-нибудь полезного дела. Эту разновидность юзеров я когда-то назвал "юзарями".

circle.gif (501 bytes)Еще один важный момент, подмеченный Вейценбаумом, имеет непосредственное отношение к вебостроительству. Именно тогда, когда работа требует каких-либо познаний, кроме чисто программистских, хакер ее бросает. При разработке сайта   нужно обладать художественным вкусом, пониманием психологии восприятия, да многими еще "человеческими" понятиями (я уж не говорю о знании предметной области). Интересы же программера обычно ограничиваются задачами "а ну-ка, слабо мне построить интерфейс оттуда-то туда-то?" Или -  "Во, вычитал про новое свойство css, а не применить ли мне его - вот, прямо в этом сайте?" Нужен ли этому сайту этот самый интерфейс, необходимо ли именно тут использовать именно это свойство css, программера обычно не волнует. Воздружаются на голом месте и без всякой необходимости флэши, пишутся сложные скрипты - и все только ради того, чтоб на другом конце провода такой же упертый программер открыл твой сайт в режиме source и убедился в твоей непроходимой крутости.

 circle.gif (501 bytes)Да вот только крутость ли? Ведь на самом деле одержимый программист занят лихорадочной борьбой со своей программой, в которой не сразу и далеко не всегда   одерживает победу...

Возбуждение программиста достигает наивысшего, лихорадочного уровня тогда, когда он сталкивается с самой неясной ошибкой: все должно работать, но вычислительная машина тем не. менее ведет себя позорно, не так, как следует, причем в самых таинственных, явно не связанных между собой 'проявлениях. Именно в таких ситуациях система, созданная самим программистом, показывает, что у нее есть своя собственная жизнь и она определенно выходит из-под его контроля. Это та самая ситуация, когда идея о том, что вычислительную машину можно "заставить делать все, что угодно", становится очень уместной и реальной. Дело в том, что в этих обстоятельствах артефакт неправильного функционирования порожден самим программистом. Ложное поведение может быть, как мы уже указывали, исключительно следствием того, что сделано самим программистом. А это он, вероятно, в состоянии понять, устранить и переделать таким образом, чтобы результат в большей степени соответствовал его целям. Соответственно он приходит в неистовство я развивает бешеную активность, когда ему кажется, что наконец он нашел источник неприятностей. Если в этот момент время его работы за пультом подходит к концу, то он подвергает свою программу ужасному риску, внося в нее одно за другим в течение минут или даже секунд серьезные изменения, не заботясь о таких "пустяках", как регистрация этих изменений, и умоляя дать ему еще минутку. В таких условиях он может очень быстро и фактически безвозвратно погубить результаты многих недель собственного труда. Если же ему удается обнаружить глубоко спрятанную ошибку, которая действительно отвечает за значительную долю неправильного функционирования, его радость неописуема. Он испытывает трепет, видя, как до того умиравшая программа неожиданно возвращается к жизни (по-другому это не назовешь). Когда обнаруживается и исправляется какая-то глубинная ошибка, многие отдельные части программы, не дававшие до тех пор ничего, кроме чего-то совершенно невразумительного, мгновенно становятся покладистыми и выдают предписанные результаты. У диагноста есть основания быть довольным и даже гордиться, если ошибка действительно коренилась где-то глубоко в системе.

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

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

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

circle.gif (501 bytes)Единственное, что утешает - так это то, что довольно большая часть программеров проходит через этот "одержимый" период и становится нормальными профессионалами. (Кстати говоря, и я знаю об этой болезни не понаслышке:о). Но вот обидно, что немалая часть из этого периода не выходит до конца своих дней. Более того, они-то себя и считают профессионалами... Хуже того, их и другие нередко считают профессионалами...

circle.gif (501 bytes)Программированию обучиться довольно легко. Почти любой человек, обладающий достаточно упорядоченным умом, может стать довольно неплохим программистом после совсем незначительного обучения и практики. И поскольку программирование вознаграждается почти немедленно, так как вычислительная машина очень быстро и почти точно начинает выполнять указания программиста, оно очень соблазнительно, особенно для начинающих. Более того, особенно сильно программирование привлекает людей недостаточно зрелых в том смысле, что они могут спокойно относиться к длительным промежуткам времени между затратой усилий и получением конкретного результата. Поэтому юные студенты легко впадают в заблуждение, считая, что они действительно овладели мастерством, обеспечивающим им необычайное могущество и имеющим колоссальное значение, хотя, на самом деле, они изучили лишь его зачатки и ничего существенного, вообще говоря. Быстрое восхождение студента от состояния абсолютной неосведомленности о вычислительных машинах к тому, что представляется ему вершинами программирования, в действительности является лишь невысокой возвышенностью, может породить у него победную эйфорию и вызвать убеждение в том, что он обрел свое подлинное призвание.

circle.gif (501 bytes)Вот так-то, ребятки... Я ведь не лечу, я только диагноз ставлю... Звиняйте, коли чего не так сказал...


Опубликовано:  СТАЛКЕР 1999
© Алексей Бабий 1999