Softpanorama, Jan-feb 1997; v.9.No.1(90) *** FOREWORD *** Состав. Н.Н.Безруков =================== Copyright 1997, OOO Софтпанорама ======================= ---------------------------------------- # К О Л О Н К А Р Е Д А К Т О Р А # ---------------------------------------- Остановится - оглянуться ! (традиционная колонка первого номера очередного года) Уважаемые коллеги ! Сам факт существования бюллетеня почти десяти лет позволяет мне как редактору спокойнее смотреть на нынешние изменения в технологии и на рекламные волны которые то и дело прокатываются по миру PC. Проработав в области программи- рования три десятка лет я наблюдал расцвет и закат нескольких поколений компьютеров, операционных систем и языков программирования. В то же время я не помню ни одного случая, который сопоставим с уровнем ин- тереса к языку Java. Java является попыткой создать объектно-ориентирован- ный язык, независимый от архтектуры компьютеры и операционной системы. Биб- лиотека классов языка ориентирована на работу в среде Internet. В течении всей своей карьеры я ни разу не наблюдал столь быстрого развития и принятия языка. Это настоящий информационный взрыв: через год после появления языка количество материалов о нем существенно превосходит способности одного че- ловека к их освоению. Только книг на английском языке уже выпущено более 200. Все крупные фирмы - разработчики программного обеспечения (включая Microsoft ;-) заявили о его поддержке. Имеется одна бесплатная эталонная реализация (SunSoft) и три достаточно приличных коммерческих реалиций (Symantec, Microsoft, Borland). Такое быстрое развитие и принятие многими разработчиками безусловно свиде- тельствует о том, что Java является очень важным достижением. Это связано как с более высокой степенью его независимости от конкретной платформы, а также непосредственной связью с WWW. Java является пожалуй первым языком, уоторый имеет всетроенную мультизадачность на базе light wight processes, является основным языком написания аплетов на WWW и имеет неплохие шансы потеснить остальные языки, в частности Visual Basic в качестве средства бы- строго создания приложений на PC. Тот факт, что синтасически Java весьма близка с C++ и может рассматриваться как упрощенная интерпретируемая версия C++ позволяет довольно легко адапти- ровать огромный объем программ, написанных на C++. Программисты, знающие C++ могут писать полезные программы на Java примерно через неделю. Java послужила катализатором для большого числа компаний и привела к сущест- венным изменениям и доработкам ключевых технологий, броушеры (Netscape, IE), базы данных(Oracle, SyBase), средства быстрой разработки программ. Уже даже есть редакторы использующие JavaScript, хотя конечено JavaScript это не Java. Практически все крупные корпорации начали перевод своих приложений для использования через WWW и именно это делает Java языком No.1 1997 года. Отечественный программисты, ценившие Turbo Pascal безусловно высоко оценят этот новый язык. Кстати компиляция "on the fly" при загрузке программы, имеет отдаленную аналогию с идеей Вирта создать настолько простой для ком- пиляции язык, чтобы можно было использовать компилятор с языка вместо реда- ктора связей. Интересно отметить, что тот факт, что Java является непосредственным конку- рентом Visual Basic и положительно повлиял на развитие VB. Именно благодаря Java Microsoft начал широкую компанию лицензирования Visual Basic другим разработчикам программного обеспечения. Версия VB 5.0 имеет режим компиля- ции и значительно в большей степени ориентирована на Internet, чем предыду- щие версии. В частности на VB5 можно создавать ActiveX компоненты. C другой стороны Java в какой-то мере положила конец очень умно проведенной Microsoft компании по использованию Visual Basic для захвата рынка оффисных приложений собственными продуктами, компании которая подорвала позиции Lotus 123, WordPerfect и Quattro Pro. Сейчас Microsoft выглядит обороняю- щейся компанией. Не исключено создание собственной версии языка Java в це- лях фрагментировать рынок и облегчить борьбу с конкурентами типа Netscape. Лично для меня наиболее привлекательной является концепция аплета, небольшой программы, загрузаемой с WEB сервера и исполняемой на объектной машине. Small is beautiful и благодаря Java небольшие полезные программы стали опять высоко цениться. Загрузка аплетов, размеров более, скажем, 100K при типичной скорости 3K в секунду приводит к задержке примерно в 30сек , что наверное являетсяя предельной допустимой задержкой в интерактивном режиме. Т.е. опять, но уже на новом уровне в цене небольшие полезные программы, как в старые добрые времена для command line в MS DOS, UNIX и OS/2. Кроме того JavaSoft обещает выпустить Java OS, включающую Virtual Machine для DOS и броушер. Возможно это станет еще одной альтернативой Windows, хотя лично я предпочитаю Linix и OS/2. Учитавая знaчение языка выпуск A в 1997 году будет переориентирован на осве- щение JAVA. Это позволит сделать выпуски более узко ориентированными и в какой-то мере более интересными как для меня лично, так, я надеюсь, и для читателей. Вместо обзора каких-то важный с точки зрения редактора событий Foreword будет посвящен особенностям языка Java. Раздел News будет попреж- нему посвящен обзору новостей в мире Java, а также новостей, связанных с безопасностью данных. Как и в последних номерах прошлого года новости будут публиковаться на английском языке. Время использования русского языка в программровании на мой взгляд ушло безвозвратно. Конечно "старикам"(не по возрасту, а по знанию английского ;-) перестроиться будет сложно, но моло- деж должна четко ориентироваться на английский. Языковый барьер, искусст- венно созданный и поддерживававшийся во времена СССР, вряд ли был полезен. Позавчерашние новости и позавчерашние книги... На мой взгляд, как в свое время русская аристократия использовала французский, программисты должны использовать английский для своего общения. Т.е. есть и будут программы со- зданные программистами бывшего СССР, и их безусловно нужно пропогандировать и продвигать на западный рынок. Но уже, пожалуй, не очень нужны программ, использующих в интерфейсе исключительно русский язык. Сложнее дело обстоит с журналами. Здесь русский и английский должны на мой взгляд сосущество- вать. Возвращаясь к языку Java я бы хотел отметить следующее. Признавая огромное значение Java, полезно отличать претензии от действительности и критически оценивать попытки выдать Java за панацею, универсальное решение всех про- блем. Если рассматривать язык академически, то Java вряд ли можно назвать последним словом в области создания языков программирования, и его область применения далеко не полностью соответствует области применения C и С++. Контрольные структуры довольно примитивны (фактически это С без GOTO, что ставит на языке штамп "сделано в начале семидесятых". Кроме того, в связи с отсутствием указателей, по своей гибкости Java уступает С и С++: это до- вольно "тупой" инструмент для ряда традиционных системных задач. И на мой взгляд операционную системы для Java придется писать на C ;-). Для многих предметных областей по своей мощности (понимаемой как частное от деления оценки сложности задачи в данной предметной области на количество строк ко- да для программрования этой задачи) он примерно соответствует Turbo Pascal и существенно уступает таким языкам как PL/1, C++, Ada с одной стороны и Perl и Rexx с другой. Для создания библиотеки классов и библиотеки исходных текстов, сопоставимой с библиотеками для C и С++ нужно время. В этом плане полезно помнить, что мода на языки программирования как и мода на предметы женской одежды недолговечна и среди компилируемых языков в свое время модными были PL/1, Algol68, Pascal, C, Modula, Ada, C++. Среди интер- претируемых языков, которые хотя бы короткое время "купались в лучах славы" я бы назвал LISP, REXX, Perl, Clipper, Foxbasic, Clarion, Visial Basic, Prolog и SmallTalk. Можно смело предположить, что Java не вытеснит, а лишь потеснит традиционные языки. В частности, как С так и С++ будут продолжать использоваться, просто часть "интерфейсны" приложений, в которых сейчас (часто неоправданно) использовуется C++ отойдет к Java. Т.е. на новом этапе произойдет то, что произошло с С, когда появился C++. Я уже не раз пытался обратить внимание читательской аудитории на важность изучения истории компьютерной технологии и даже пытался одно время публико- вать раздел HISTORY в бюллетене. Поскольку как показали анкеты читателей это их не особо интересует, раздел умер. Единственной данью истории оста- лась эта традиционная колонка первого номера года. Это наверное плохо, по- скольку уровень знакомства с историей вообще, и компьютерной историей в ча- стности у программистов временами напоминает аналогичный уровень у спортс- менов и безусловно оставляет желать лучшего. В этом плане мы действительно "Иваны, не помнящие родства" :-(. Важность понимания истории совсем не очевидна, когда тебе, скажем, 25 лет, однако "ничто не ново под луной" и по-видимому первый, пионерский этап раз- вития компьютерной технологии в целом и программирования в частности уже позади. Поэтому знание истории уже сейчас может помочь в предсказании буду- щего и дает определенные преимущества в оценке перспектив, хотя темпы раз- вития компьютерной технологии все еще остаются высокими и предсказания ос- нованные на исторических аналогиях в таких быстро меняющихся областях до- вольно ненадежны. В частности понимание того, что компьютеры с Pentium Pro 200, 64M RAM и четы- рех гигабайтным диском через пяток лет будут в положении сегодняшних 486dx4/133 c 16M и цены на них будут соответствующие, наверное, способно снизить нездоровый блеск в глазах при виде Pentium Pro и более спокойно ра- ботать пока на AMD 486dx4/133 c 16M :-). Я хочу еще раз подчеркнуть, что несмотря на высокие темпы, относительное значение изменений сейчас падает в том смысле, что переход с 8086 на 80286 был значительно важнее перехода с 80486 на Pentium и изменение емкости массовых винчестеров с 10 до 40M было важнее, чем с 1G до 2G. Поэтому период гонки за последней версией как про- граммном обеспечении, так и в аппаратном обеспечении является в какой-то мере пройденным этапом. Мне кажется, что большинство пользователей уже по- няли, что гонка за последней версий микропроцессора или программы это, по- жалуй, не самое разумное поведение и что на смену P6/200 рано или поздно придет P6/266, P6/300, P6/366, P400 и т.д. наверное примерно до P500 Положение с программным обеспечением еще интереснее. Microsoft стал выпускать новые версии в среднем раз в год. В то же время сейчас уже трудно найти по- льзователя, у которого нет текстового процессора и на смену покупке на За- паде основным видом продаж стал апгрейд. Переходят же на новую версию дале- ко не все. Например, если отвлечся от редактирования HTML, я лично не могу представить себе пользователя, которому было бы мало всей фичей MS Word 6.0c. Поэтому доходы от продажи программных пакетов в целом и доходы от па- кетов типа Office в особенности сейчас падают. Это связано со своего рода кризисом перепроизводства в коммерческом программировании, что особенно за- метно на доходах американских фирм, следующих в фарватере Microsoft. Сам Microsoft ведет сложную бухгалтерию, припрятывая свои доходы "на черный день" и потом "показывая" отличные результаты, подобно тому, как он манипу- лирует курсом своих акций, скупая акции в момент падения курса и продавая их своим сотрудникам. Однако настораживает тот факт, что в конце года круп- ные держатели акций Microsoft продали своих акций примерно на полмиллиарда долларов. На мой взгдял этот кризис в области продаж коммерческого программного обеспе- чения связан не только с возрастающим насыщением и стабилизацией потреби- тельского рынка, но и по меньшей мере частично с кризисом направления раз- работки программного обеспечения, которое называется fatware, Billyboy architecture или Playboy architecture. Речь идет о направлении, наиболее ярким представителем которого является Microsoft и при котором наряду с ог- ромными усилиями по созданию графического интерфейса ярко выражено стремле- ние внести в продукт как можно больше возможностей и режимов, экстенсивно добавляя фичи как игрушки на рождественскую елку, ценой увеличения потреб- ляемых ресурсов(роста "монстрообразности"). И в то же время не уделяя, или уделяя очень мало внимания архитектуре самого продукта. На уровне внутрен- них структур проталкиваются слабые, ненадежные архитектурные решения, дуб- лирование функций и все чаще сотрудники фирм разрабатывающих той или иной программный продукт становятся противниками использования этого же продукта знакомыми и друзьями. Так, хотя Office 97 значительно превосходит Office 95 по всем основным пара- метрам (нераспроданные копии Office 95 практически сразу стоит уценить при- мерно в 5-10 раз) и его без сомнения можно рекомендовать для тех, кто рабо- тает или собирается переходить с Windows 3.1 на Windows 95 или NT. Однако это огромный пакет монстрообразных приложений и в нем почти физически ощу- щается обреченность нынешнего поколения коммерческих пакетов. Слишком уж там много там всего и слишком трудно разобраться во всем этом сложном хозяйстве. В какой-то мере нынешний всплеск интереса к Linux и FreeBSD яв- ляется одновременно показателем разочарования наиболее грамотной части за- падный пользователей в подходе Microsoft. Мне кажется, что в связи с появлением WWW и Java время Playboy architecture выдающимся памятником которой, наверное, навсегда останется MS Office про- шло. Хотя со времени графической революции мода стала важным фактором в вы- боре программных продуктов и помпезный фасад в стиле Office 97 это половина успеха на рынке, сейчас можно констатировать, что пользователи начинают от- ворачиваться от легкомысленного, пренебрежительного отношения к внутреннему построению, архитектуре программных комплектов и операционных систем, когда за ослепительным фасадом с красивыми окошками, иконками и прочей мишурой скрывается противоречивая внутренняя конструкция, c множеством случайных решений, заплат и подпорок. Трудно оспаривать тот факт, что Windows 95 имеет прохо продуманную архитекту- ру в значительной степени скопированную с тоже не слишком архитектурно стройной Macintosh System 6 (но она была первой коммерческой графической OS!) с несколькими расширениями, напоминающими специалистам OS/2. И что Office 97 отлажен далеко не блестяще (сама Microsoft сейчас не рекомендует использовать Outlook). Нестабильность и неоправданным ограничения примером которых является трудность переноса исталлированных пакетов под Windows с одного логического диска на другой, а также трудности инсталяции и деинст- ляции пакетов под Windows. Неслучайно при работе с Windows часто инсталля- ция нового пакета создает проблемы с DLL и Windows приходится "убивать" и переинсталлировать все пакеты. Иногда выбор определенного порядка инсталля- ции пакетов является единственным способом обеспечить их работоспособность. Хотелось бы, чтобы Java помогла восстановить утерянные в настоящее время в fatware принципы - соответствие размера программ размеру решаемых задач, использование независимых и взаимодействующих компонент связанных на уровне общего языка. Тем кто хочет большего - единый язык управления заданиями и макроязык, возможности использования не только графического интерфейса, но и командной строки и, наконец, обеспечение элементарной безопасности внутри операционной системы и отдельных программных компонент наверное проще пе- рейти на альтернативную операционную систему(Linux, FreeBSD, OS/2), чем ждать чего-то подобного от Microsoft, хотя скорость с которой Microsoft от- реагировал на появление Netscape впечатляет и соревнование обещает быть до- статочно интересным. Специально следует отметить, что Java уделяет заслуженное вримание безопасно- сти аплетов. Это особенно приятно, поскольку что касается безопасности дан- ных, то тут послужной список Microsoft просто позорен. Несмотря на десяти- летнюю историю компьютерных вирусов в MS DOS Microsoft проявил полную, я бы сказал, совершенно редкую бездарность в устранении причин, облегчающих их написание и распространение в этой среде. Появления макровирусов в MS Word является еще одним примером медленной реакции Microsoft на появившуюся про- бему, хотя в MS Word 97 предприняты определенные шаги снижающие вероятность заражения документов. Тем, кто сейчас работает на Windows 95 я настоятельно советую перейти на эту версию. Так или иначе многие сейчас сознательно или бессознательно протестуют против нынешнего состояния когда пользователь тонет в монстрообразных и переуслож- ненных пакетах. Чувство неуютности и недовольства быстрым ростом размеров программного обеспечения и негибкостью и нестабильностью Windows проявляют- ся сейчас массово. Поэтому реакция на это недовольство в той или иной форме возможно будет движущей силой изменений в области программного обеспечения в текущем году. * * * Поскольку аудитория бюллетеня меняется, по сложившейся традиции в этой колон- ке редактора воспроизводится одна из немногих отечественных статей вызвав- ших, в свое время, резонанс на Западе и представляющая значительный истори- ческий интерес. Это статья покойного академика А.Ершова "Человеческий фак- тор в программировании". Хотя она была опубликована в 1972 г. т.е. на зака- те хрущевской оттепели и, кстати, сначала на английском языке (фактически это выступление на каком-то обеде и я сначала познакомился с ним по тексту в Communications of the ACM и только через много лет увидел перевод), а то- лько потом на русском. История появления этой, безусловно талантливо напи- санной статьи, достаточно загадочна. Например, как ни странно, русский ва- риант уступал английскому оригиналу и был очень похож на некачественный пе- ревод, хотя А.Ершов владел английским далеко не блестяще (может академик после обеда потерял оригинал и публикация шла в обратном переводе с англий- ского ;-). Кроме того, для тех кто знает наш уровень 1972 года, когда в стране были во- обще считанные экземпляры компьютеров(основными были Минск22, Минск-32 и БЭСМ-6), кажется несколько странным, что она была написана человеком, жив- шим, в основном, в стране развитого социализма (правда А.Ершов относился к числу весьма малочисленных в те времена "выездных" академиков - часто выез- жал на зарубежные конференции и даже помнится в течении некоторого времени работал по обмену в одном из американских университетов). Не исключено, что она является пересказом талантливого обобщения тех времен на Западе неизве- стным автором, каким-то образом "внесенного в уши" академику или результа- том "бартера", скажем, ящика армянского коньяка на текст речи для упомяну- того выше обеда :-). Многие положения этой статьи до сих пор звучат удивительно актуально и я ис- кренне рад, что несколько лет назад мне удалось вспомнить о ее существова- нии и с тех под регулярно делать новым читателям бюллетеня этот маленький подарок в первом номере года. Я надеюсь, что старые читателя меня извинят. Поскольку как я уже указывал, статья в Кибернетике представляла собой не слишком качественный перевод с английского (текст этой статьи был опублико- ван в январском номере Софтпанорамы за 1992 г.) в публикуемой ниже версии мной исправлены некоторые шероховатости перевода. 23.02.97 С уважением Н.Безруков Софтпанорама 1992, No.1(25) *** REPRINTS *** Составитель: Н.Н. БЕЗРУКОВ ***************************************************************************** А.Ершов ЧЕЛОВЕЧЕСКИЙ ФАКТОР В ПРОГРАММИРОВАНИИ Должен признаться, что когда я получил приглашение выступить на этом собра- нии(точнее обеде - БНН), моим первым действием было узнать, кто до меня удостаивался аналогичного приглашения. Я нашел в списке предыдущих ораторов трех писателей, двух конгрессменов, одного генерала, но практически ни од- ного представителя нашей программистской профессии. Наверное, это было не случайно: быстрое и экстенсивное развитие нашей области неизбежно увеличи- вало число пограничных столкновений и связанного с ними интереса к внешнему миру. Однако, по-видимому, не менее очевидно и то, что сейчас для нас нужно не столько глядеться в зеркало общественного мнения, сколько самим разо- браться в себе, с тем чтобы справиться с рядом весьма серьезных проблем на- шей профессии. Во всяком случае, я позволил себе именно с этих позиций предложить вашему вниманию некоторые соображения о человеческих факторах в программировании. Мой исходный тезис состоит в том, что сейчас для программистов наступают тру- дные времена. Объем программ возрастает несоизмеримо по отношению к зарпла- те. Романтический ореол непостижимости этого занятия, если он когда-либо и существовал, начинает меркнуть. Так называемые софтверхаусы тают, как вче- рашний снег на солнце. Будучи самой дефицитной профессией каких-нибудь семь лет назад, программирование начинает появляться в книгах агентств по заня- тости. Оспаривается даже само стремление рассматривать программистов как профессионалов особого рода. Главное же это то, что вольная братия програм- мистов постепенно попадает под влияние администраторов и менеджеров, кото- рые стремятся сделать труд программиста планируемым, измеряемым, однородным и обезличенным. Пожалуйста, не подумайте, что я считаю эту тенденцию неправильной. Я сам уже давно выступаю перед программистами в качестве администратора и вношу свой посильный вклад в индустриализацию их труда. С этих позиций должен согласиться, что как профессия программирование еще не достигло своей зрелости. Характерным свидетельством этому в течение по- следних лет была волна мелкого бизнеса, связанного с софтверхаусами. Такой софтверхаус "сооружался" в течение нескольких недель группой толковых про- граммистов, как правило, покинувших большую организацию, в которой они по- лучили начальный опыт. В большинстве случаев мотивом для такой инициативы была жажда наживы, полудетское желание избавиться от излишней опеки, конеч- но, в сочетании с некоторой интересной и полезной идеей в области разработ- ки софтвера. Однако в этом деле жизнеспособными оказались лишь такие колле- ктивы, в которых этот партизанский дух быстро заменялся режимом экономии, иерархией отношений, жесткой дисциплиной, словом, всем тем, что в свое вре- мя вытолкнуло их из "родительского дома". В качестве шутки можно заметить, что вся эта история напоминает сказку о трех поросятах: братья-программисты в конце концов собрались в крепком софтверхаусе, но лишь после того, как первые два были унесены волчьим ветром беспощадной коммерции. Таким образом, подчинение программирования большому бизнеса - это неизбеж- ный факт. Однако я вижу некоторую опасность в превращении программистов просто в высокооплачиваемый отряд наемных тружеников умственного труда. Пе- ред лицом этой тенденции программист должен найти некоторую систему внут- ренних ценностей в своем деле, обладание которой позволит ему легче ассими- лировать индустриальные методы работы, а где надо - преодолевать их. Мой второй тезис состоит в том, что эта система ценностей в программировании объективно существует, однако осознана не до конца, известна на всем и по- этому требует распространения и защиты. Эта система имеет много компонент, пожалуй, самая важная из них - это профессиональный статус программиста (надо сказать, что я говорю о программистах в широком смысле, причисляя к ним и системных аналитиков), но мне сейчас больше хочется сказать об эсте- тической, или об эмоциональной, стороне программирования, причем не только о том, что вознаграждает программиста, когда он выходит со своим продуктом на рынок, но и о том, что составляет его нравственную опору, когда он оста- ется наедине с программой или машиной. Вы, конечно, можете спросить меня, а стоит ли говорить об этом? Ответ будет состоять не только в том, что программирование стало сейчас массовой про- фессией. Мой третий тезис заключается в том, что программирование - это самая трудная из всех массовых профессий. Ее трудность до сих пор еще ни в коей мере не признана обществом, она на порядок выше даже таких экзотических профессий, основанных на гипертрофии врожденных способностей, как цирковые артисты и верхолазы. Трудность профессии программиста в том, что именно программисты непосредст- венно "упираются" в пределы человеческого познания в виде алгоритмически неразрешимых проблем и глубоких тайн работы головного мозга. Ее трудность также в том, что программист должен обладать способностью пер- воклассного математика к абстракции и логическому мышлению в сочетании с эдисоновским талантом сооружать все что угодно из нуля и единицы. Он должен сочетать аккуратность банковского клерка с проницательностью разведчика, фантазию автора детективных романов с трезвой практичностью бизнесмена. А кроме того, программист должен приобщаться к корпоративным интересам, иметь вкус к коллективной работе, понимать цели работ и многое другое. Я знаю, что эти трудности могут быть преодолены только путем большого эмо- ционального напряжения, требующего от программиста особого самосознания и внутренней позитивной установки. Если когда-либо А.Хейли напишет роман "Вы- числительный центр", вы увидите, что это будет самый увлекательный его бестселлер. Мой следующий тезис состоит в том, что понимание или хотя бы ощущение эстети- ческой природы программирования является не только одной из движущих сил программиста, но и необходимо для тех, кто управляет программистами, и в особенности для тех, кто их воспитывает и обучает. Позволю себе перечислить некоторое количество организационных альтернатив, или просто трудных вопро- сов, правильно разрешить которые можно только с полным учетом обсуждаемых факторов: Возможна и нужна ли организация разработки софтвера по принципу конвейера ? Кого и почему труднее найти для реализации софтверного проекта - руководи- теля или исполнителя ? Как сочетать элитарность системного программирования с его массовостью ? Как воспитать программиста - через мировоззрение (университет) или профес- сиональные навыки (технический институт) ? Что такое индивидуальные способности в программировании, специфичны ли они и нужны ли они ? Можно и нужно ли отделять проектирование большой программы от ее изготовле- ния ? Эти вопросы являются только частью общей проблемы. Посмотрим вкратце, как связать поставку этих вопросов с анализом человеческого фактора в програм- мировании. О конвейере. Я лично считаю конвейер поистине дьявольским изобретением. Под- нимая продуктивность на небывалый уровень, но в то же время является самым бесчеловечным видом работы из всех мне известных. Конвейерный метод в про- граммировании может либо убить интеллектуальную компоненту в труде програм- миста, либо вызвать неврозы из-за противоречия меду монотонностью в трудо- способностью работы. Представьте себе человека, обязанного 8 часов в день, 5 дней в неделю, 500 недель в году, решать одни кроссворды, и вы поймете, что такое программист, специализирующийся, например на написании редактиру- ющих программ. Одним словом, раскрепление людей по элементарным операциям в многомодульной системе - далеко не простая задача. О руководителях и исполнителях. Не торопитесь ставить руководителя на первое место, объясняя, что по определению руководителя найти или создать труднее. Давайте подумаем, почему сплошь да рядом руководитель проекта предпочитает начинать с молодыми специалистами, кончившими университет два-три года на- зад, нежели с людьми, чей стаж работы превышает пять лет? Но потому ли, что мы предпочитаем использовать чистый лист и пластичность молодого человека, нежели преодолевать пассивное сопротивление более зрелого и менее ясного для нас 33-летнего главы семейства. Но это, в частности, означает, что мы не умеем гармонично развивать профессиональные достоинства исполнителя так, чтобы они не падали с возрастом и были бы полезны и для него самого и его настоящих и будущих начальников. Элитарность программистов представляется мне очевидной и в этом представле- нии является интереснейшим вызовом человечеству в целом, причем, надеюсь, этот вызов будет принят и преодолен. Эту мысль я поясню позже. Мировоззрение и профессионализм. Проблема, конечно, не только в том, чтобы объективно оценить требуемое соотношение кандидатов наук и дипломированных инженеров, хотя вокруг этого возникает изрядное количество всем известных кадровых проблем. Суть проблемы в том, чтобы признать, что программирование требует от человека несколько особого взгляда на мир, его потребности и эволюцию, особой моральной подготовленности к своему долгу. Программист - это солдат технической революции и как таковой должен обладать революцион- ным мышлением. Теперь я подхожу к тому, чтобы сформулировать центральный тезис моей речи. Он состоит в утверждении, что программирование обладает богатой, глубокой и своеобразной эстетикой, которая лежит в основе внутреннего отношения про- граммиста к своей профессии, являясь источником интеллектуальной силы, яр- ких переживаний и глубокого удовлетворения. Корни этой эстетики лежат в творческой природе программирования, его трудности и общественной значимос- ти. Здесь, прежде чем продолжить основную мысль, хочу подчеркнуть важность вну- треннего отношения человека к своему делу. Сейчас идет много споров о том, является ли программирование специфической профессией. Это не отвлеченный спор, а дискуссия, результат которой имеет прямые организационные, юридиче- ские и образовательные последствия. Так вот, результат этого спора меньше всего должен определяться тем, что будут говорить о программировании не сведущие в нем люди, какими бы авторитетом и властью они ни обладали. Наше собственное самосознание и способность к корпоративному взаимопониманию - вот что самое главное. Выделить эстетическую сущность любого вида профессиональной деятельности очень просто. Она, по всей сути, реализуется в субъективных категориях, глубоко сплетается с этическим кодексом профессии, ее техническим содержа- нием и юридическим статусом. Поэтому мое перечисление эстетических компо- нент программирования также будет носить субъективный и очень предваритель- ный характер. Сначала я сделаю некоторые замечания, отражающие внутреннюю природу про- граммирования. Творческая и конструктивная природа программирования не требует особых дока- зательств. Хочется высказать, быть может, более спорную мысль, что в своей творческой природе программирование идет намного дальше большинства других профессий, приближаясь к математике и писательскому делу. В большинстве других профессий мы лишь "приручаем" силы природы - просто "сажаем тигра в бензобак", - используя те или иные физические или биологические явления, не обязательно постигая их сущность. В программировании же мы в некотором смы- сле идем до конца. Один из тезисов современной теории познания "мы знаем это, если можем это запрограммировать" очень выпукло характеризует этот ма- ксимализм нашей профессии. Другим очень важным эстетическим принципом программирования является его высочайшая требовательность к законченности продукта. Конечно, это харак- терно для многих инженерных профессий. Однако программирование и здесь идет дальше. Хотя в мультимиллионных программных конгломератах это свойство поч- ти исчезает, на уровне индивидуальной работы всегда существует поразитель- ный контраст между почти сделанной и полностью сделанной работой. Эта сто- процентность программирования - источник его трудности и в то же время глу- бочайшего удовлетворения работающей программой. Машина, снабжая программой, ведет себя разумно. Программист является пер- вым, кто обнаруживает это. Применяя метафору троицы, он ощущает себя в этот момент и отцом - создателем программы, и сыном - братом этой машины, и но- сителем святого духа - вложенного в нее интеллекта. Это торжество интеллек- та, наверное, самая сильная и самая специфическая сторона программирования. В отношении к машине у честного программиста есть еще одна особенность. В некотором смысле он относится к ней как хороший жокей к своей лошади. Зная и хорошо понимая возможность машины, он никогда не позволит себе компенси- ровать леность ума беззаботной тратой ресурсов ЭВМ. Это чисто эстетическое отношение к делу является самым эффективным предохранителем против бездум- ной "пессимизации" софтвера, которая хотя и не вызывает особых возражений у компаний, продающих машинное время, но на деле приводит к надувательству покупателя или потере эффективности. Другую часть эстетической сущности программирования составляют такие его ком- поненты, которые связаны с социальной или общественной функцией программи- рования. Всякий раз когда мы рассматриваем социальное явление большого мас- штаба (а появление и использование ЭВМ безусловно является таковым), мы должны поискать некоторые широкие исторические аналоги, которые могут дать какую-то опору для экстраполяции и предвидения. О том, что ЭВМ принесли с собой техническую революцию и связанную с ней индустриализацию умственного труда, я уже говорил. Мне хочется провести еще одну аналогию, которая имеет более прямое отношение к профессии программиста. Разработка и распростране- ние софтвера, мне кажется, во многом напоминает то, что произошло в резуль- тате появления книгопечатания. Как книги накапливают внешний образ мира в глазах их авторов и позволяют воспроизвести процесс его познания, так и программы и банки данных накапливают информационную и операционную модели мира и позволяют не только воспроизводить, но и предсказывать его эволюцию, давая тем самым небывалую власть над природой. Быть хорошим программистом - это сейчас такая же привилегия, как быть грамот- ным человеком в ХVI веке. Эта привилегия дает право программисту ожидать аналогичного признания и уважения со стороны общества. К сожалению, эти ожидания не всегда оправдываются. Хочу только заметить, что осуществление этого признания требует работы с обеих сторон. В частности, для программис- та необходимо следование одному этическому принципу, который носит общий характер для всякого профессионала, но имеет специальную интерпретацию для программиста. Чисто логически имеют место три варианта: работа ради работы; работа ради денег; работа ради цели. В системе координат программиста первые два мотива стоят на первом плане, хотя в абсолютной системе координат имеет значение лишь третье. Потому я хочу сказать, что программист сможет достичь полной гармонии с обществом только в том случае, если лояльность той цели, в достижении которой его программа является лишь частью, станет его внутренней установкой. Говоря об общественной функции программирования, не могу не заметить, что на пути к реализации этой функции лежит одна нерешенная техническая проблема - обеспечение аккумулятивного эффекта программирования. Это очень сложная, но абсолютно необходимая для решения проблема. Спектр мнений о ней - бесконе- чен. Одни говорят, что сейчас работают только считанные проценты составлен- ных программ, другие считают, что OS/360 - это уже практически бессмертный комплекс программ. Возвращаясь к теме моей речи, хочу сказать, что предо- ставление программисту перспективы длительного и стабильного использования его продукта окажет решающее воздействие на его профессиональное самосозна- ние. Позвольте теперь с позиций только что сделанных утверждений завершить обсу- ждение ранее перечисленных альтернатив и трудных проблем. Об индивидуальных способностях в программировании. Нам необходим образ иде- ального программиста. Конечно, это будет мифическая личность. Но кто ска- зал, что нам не нужны мифы и сказки о программистах? Каждый из нас должен хоть раз в жизни видеть или хотя бы слышать о чудо-программисте, из про- граммы которого нельзя убрать ни одной команды, или который пишет тысячу команд в день, или обнаруживает ошибку при исходном шансе один к миллиону и т.д. Человеку свойственно искать ориентиры и примеры. Именно с этих позиций хочу внести свой вклад в спор о пресловутых "примадоннах" в коллективах программистов. Объявлять их нежелательными - это по крайней мере близору- кость или зависть к их исключительным качествам. Мне посчастливилось в жиз- ни встретить несколько таких примадонн от программирования, которые при всей их индивидуальности и даже экстравагантности вносили неоценимый вклад в работу коллектива, особенно в трудных ситуациях. Так что я решительно стою за признание и полный учет весьма широкого диапазона в индивидуальных способностях к программированию. О разделении проектирования и изготовления софтвера. Налицо двойственное от- ношение к этому вопросу. Руководители, ответственные за долговременные про- екты, и многие другие ищут пути к формализации этапов разработки и передачи проекта из одних рук в другие. В то же время само дело отчаянно сопротивля- ется такому разделению. Я хочу сказать, что правильное решение этого вопро- са невозможно без учета человеческого фактора и эстетической потребности, препятствующей тому, чтобы заниматься реализацией чужих идей или не видеть самому овеществления своей идеи. Отдавать технический проект в чужие руки - то же самое, что посылать своих детей в интернат, что хотя и бывает необхо- димо, но чревато потерями. В заключение хочу вернуться к тезису об элитарности программирования и о его будущем. Моя апологетика на первый взгляд подчеркивала исключительный, осо- бый характер программирования и его предельные требования к человеческим возможностям. Эта требовательность и образует тот самый вызов человеку, о котором я говорил вначале. Когда я был последний раз в Соединенных Штатах в 1970 г., на меня произвели большое впечатление новые идеи профессоров Мас- сачусетского технологического института Марвина Минского и Самюэля Пейперта об обучении детей. Они выбросили в корзину ходячее представление, что дети учатся бессознательно методом подражания. Они доказывают, что человек чему- то научается только в том случае, если у него в голове складывается блок- схема действия, выделены подпрограммы и приложены информационные связи. Профессор Пейперт навсегда обратил меня в свою веру на примере жонглирова- ния двумя мячами, когда, апеллируя к моим способностям программиста, он за десять минут научил меня тому, чего я сам не сделал бы и за несколько ча- сов. Таким образом, человек неизмеримо усилит свой интеллект, если сделает час- тью своей натуры способность планировать собственные действия, вырабатывать общие правила и способ их применения к конкретной ситуации, организовывать эти правила в осознанную и выразимую структуру, - одним словом, сделается программистом. Когда-то возможность читать и писать считалась божьим даром, уделом избран- ных. Сейчас в эпоху грамотности, на что потребовалось 1000 лет, мы выделяем новую избранную категорию людей, которые становятся посредниками между че- ловечеством и информационной моделью мира, упрятанной в машины. Сделав ис- кусство программирования общим достоянием, мы лишимся своей элитарной исключительности перед лицом повзрослевшего человечества. Это ли не высший эстетический идеал для нашей профессии. Я назвал ряд актуальных проблем, в том числе связанных с человеческим факто- ром в программировании. Я не назвал, пожалуй, самой главной. Мы сейчас не- насытно вербуем молодежь в программисты, обещая им златые горы. Однако по- коления людей меняются значительно медленнее, чем поколения машин. Почитай- те рекламы технических журналов за последние 10 лет. Слова "революция", "Новое поколение" появляются там с неимоверной частотой. Я хотел бы спро- сить авторов этих реклам, а знают ли они, как сделать, чтобы программист в возрасте свыше 50 лет был бы не меньше полезен ему, чем 30-летний. Через 30 лет у нас таких программистов будет миллион. Пожалуй, честно будет сказать, что сейчас у нас нет даже подхода к тому, как ассимилировать ветеранов в современных условиях изменчивости и нестабильности, сделав тем самым про- фессию программиста пожизненной и дающей человеку ощущение социального удо- влетворения. КИБЕРНЕТИКА 1972, No.5, с.95-99 (со стилистическими исправлени- ями Н.Безрукова)