Софтпанорама 1994, No.60(44) *** FOREWORD *** Составитель Н.Н.Безруков ************************************************************************ ---------------------------------------- # К О Л О Н К А Р Е Д А К Т О Р А # ---------------------------------------- Уважаемые коллеги ! Если предположить, что кто-то каждый день в определенный час разде- вается, становится в определенную позицию перед кинокамерой и делает один снимок, и так всю жизнь, то после его смерти об этом человеке имелся бы весьма интересный, хотя, наверное, немного жутковатый фильм. Если пред- положить, что средняя продолжительность человеческой жизни равна 70 го- дам, то в фильме было бы примерно 25.5 тыс.кадров. Т.е. при 24 кадрах в сек. весь фильм бы занял примерно 18 мин. и за эти 18 мин. перед нами бы прошла вся человеческая жизнь. Т.е. на наших глазах человек бы рос, му- жал, старел, дряхлел... Что-то подобное я начал делать в выпуске А бюллетеня в разделе HISTORY. В нем воспроизводятся выпуски соответствующие месяцу издания с интервалом в один год. Сопоставление двух выпусков с интервалом в год наглядно показывает динамику развития как программного и аппаратного обеспечения, так и самого бюллетеня. Получается весьма интересная карти- на, которая позволяет как бы почувствовать ход истории... Тем более, что уровень знакомства с историей у нас оставляет желать лучшего и в этом плане мы действительно "иваны, не помнящие родства" :-(. Поэтому, начиная с этого выпуска в раздел HISTORY я добавил раздел "НОСТАЛЬГИЯ", в котором будут повторно публиковаться статьи, которые представляют историческую ценность или даже не потеряли актуальности и сегодня, а также программы и исходные тексты, отвечающие упомянутому вы- ше критерию. В частности в этом выпуске воспроизведена получившая широ- кую известность среди программистов, работающих на ассемблере статья Александра Дударенко "CS_TSR interface for process communication", в ко- торой предложено использовать для этой цели прерывание 2fh (DOS Multiplexor). Идея вместе с программой ASCII даже была украдена неким Николаем Заикиным (Nick Zaikin, Jr. Joint Institute for Nuclear Research [1/93] (Dubna, Moscow region) P.O. Box 79 Head Post Office Moscow 101000 Russia), переведена, переслана в США и опубликована в версии.37 со сле- дующей ссылкой: ----------2F8000----------------------------- INT 2F - ASCII v2.00 - INSTALLATION CHECK AX = 8000h DS:SI -> 4-byte signature (11h 43h 53h 10h) Return: AL = status 01h installed, but signature did not match FFh installed, signature matches ES:DI -> resident copy of signature (may be followed by data) Program: ASCII is a popup ASCII table by Nick Zaikin, Jr. Note: the interface used by this program appears to be a general-purpose interface which may be shared by multiple programs, so other programs may also support this call with differing signatures SeeAlso: AX=8001h"ASCII",AX=8002h"ASCII" Более подробно об этой краже рассказывалось в разделе FEEDBACK выпу- ска 59c (см. заметку Дмитрия Кохманюка), которая также воспроизводилась в разделе ERRATUM выпуска 5Ac. Так что, как мы видим использование материалов и идей бюллетеня не всегда идет гладко... В данном конкретном случае правду удалось восста- новить и плагиатор Nick Zaikin убран из последующих версий Interrupt List. Но неприятный факт имел место и пятно на его репутации, конечно осталось. В целом, не только содержание Софтпанорамы, но и контингент читате- лей Софтпанорамы безусловно меняется и большинство из тех, кто читает ее сейчас не читали ее, скажем, два года назад. Поэтому перепечатки имеют смысл не только как демонстрация исторического развития, а и просто как метод доступа к ранее опубликованным материалам, многие из которых не потеряли своей ценности и сегодня. В частности, в выпуске С этого номера приведена ретроспективная под- борка текстовых редакторов, опубликованных с исходниками. Я глубоко убе- жден, что текстовый редактор это программа которую должен написать каж- дый, кто пытается стать системным программистом. Поэтому данная подборка имеет, на мой взгляд, огромную ценность при обучении (а в наших условиях это чаще всего самообучение) системному программированию. Кроме того, в этой колонке редактора я решил еще раз воспроизвести одну из немногих отечественных статей вызвавших, в свое время, резонанс на Западе. Это статья покойного академика А.Ершова "Человеческий фактор в программировании". Хотя она была опубликована в 1972 г. т.е. на закате хрущевской оттепели и, кстати, сначала на английском языке (фактически это выступление на каком-то обеде и я сначала познакомился с ним по тек- сту в Communications of the ACM и только через много лет увидел пере- вод), а только потом на русском. История появления этой, безусловно та- лантливо написанной статьи, достаточно запутана. Например, как ни стран- но, русский вариант уступал английскому оригиналу и был очень похож на не слишком качественный перевод, хотя А.Ершов владел английским далеко не блестяще (может академик после обеда потерял оригинал и публикация шла в обратном переводе с английского ;-). Кроме того, для тех кто знает наш уровень 1972 года, когда в стране были вообще считанные экземпляры компьютеров(основными были Минск-22, Минск-32 и БЭСМ6), кажется неправ- доподобным, что она была написана человеком, жившим в отсталой стране развитого социализма. Не исключено, что она является пересказом талант- ливого обобщения тех времен на Западе неизвестным автором, каким-то об- разом "внесенного в уши" академику или результатом "бартера", скажем, ящика армянского коньяка на текст речи для упомянутого выше обеда... Тем не менее, именно сейчас многие положения этой статьи звучат весьма и весьма актуально и сегодня я искренне рад, что мне удалось вспомнить о ее существовании и сделать читателям этот маленький новогод- ний подарок. Поскольку более ранний вариант был опубликован в январском номере 1992 г. в публикуемом ниже тексте мной исправлены некоторые шеро- ховатости перевода. 3.01.92 С уважением Н.Безруков Софтпанорама 1992, No.1(25) *** REPRINTS *** Составитель: Н.Н. БЕЗРУКОВ ************************************************************************ А.Ершов ЧЕЛОВЕЧЕСКИЙ ФАКТОР В ПРОГРАММИРОВАНИИ Должен признаться, что когда я получил приглашение выступить на этом собрании, моим первым действием было узнать, кто до меня удостаивался аналогичного приглашения. Я нашел в списке предыдущих ораторов трех пи- сателей, двух конгрессменов, одного генерала, но практически ни одного представителя нашей программистской профессии. Наверное, это было не случайно: быстрое и экстенсивное развитие нашей области неизбежно увели- чивало число пограничных столкновений и связанного с ними интереса к внешнему миру. Однако, по-видимому, не менее очевидно и то, что сейчас для нас нужно не столько глядеться в зеркало общественного мнения, ско- лько самим разобраться в себе, с тем чтобы справиться с рядом весьма серьезных проблем нашей профессии. Во всяком случае, я позволил себе именно с этих позиций предложить вашему вниманию некоторые соображения о человеческих факторах в программировании. Мой исходный тезис состоит в том, что сейчас для программистов на- ступают трудные времена. Объем программ возрастает несоизмеримо по отно- шению к зарплате. Романтический ореол непостижимости этого занятия, если он когда-либо и существовал, начинает меркнуть. Так называемые софтвер- хаусы тают, как вчерашний снег на солнце. Будучи самой дефицитной про- фессией каких-нибудь семь лет назад, программирование начинает появлять- ся в книгах агентств по занятости. Оспаривается даже само стремление рассматривать программистов как профессионалов особого рода. Главное же это то, что вольная братия программистов постепенно попадает под влияние администраторов и менеджеров, которые стремятся сделать труд программис- та планируемым, измеряемым, однородным и обезличенным. Пожалуйста, не подумайте, что я считаю эту тенденцию неправильной. Я сам уже давно выступаю перед программистами в качестве администратора и вношу свой посильный вклад в индустриализацию их труда. С этих позиций должен согласиться, что как профессия программирова- ние еще не достигло своей зрелости. Характерным свидетельством этому в течение последних лет была волна мелкого бизнеса, связанного с софтвер- хаусами. Такой софтверхаус "сооружался" в течение нескольких недель группой толковых программистов, как правило, покинувших большую органи- зацию, в которой они получили начальный опыт. В большинстве случаев мо- тивом для такой инициативы была жажда наживы, полудетское желание изба- виться от излишней опеки, конечно, в сочетании с некоторой интересной и полезной идеей в области разработки софтвера. Однако в этом деле жизне- способными оказались лишь такие коллективы, в которых этот партизанский дух быстро заменялся режимом экономии, иерархией отношений, жесткой дис- циплиной, словом, всем тем, что в свое время вытолкнуло их из "родитель- ского дома". В качестве шутки можно заметить, что вся эта история напоми- нает сказку о трех поросятах: братья-программисты в конце концов собра- лись в крепком софтверхаусе, но лишь после того, как первые два были унесены волчьим ветром беспощадной коммерции. Таким образом, подчинение программирования большому бизнеса - это неизбежный факт. Однако я вижу некоторую опасность в превращении про- граммистов просто в высокооплачиваемый отряд наемных тружеников умствен- ного труда. Перед лицом этой тенденции программист должен найти некото- рую систему внутренних ценностей в своем деле, обладание которой позво- лит ему легче ассимилировать индустриальные методы работы, а где надо - преодолевать их. Мой второй тезис состоит в том, что эта система ценностей в програм- мировании объективно существует, однако осознана не до конца, известна на всем и поэтому требует распространения и защиты. Эта система имеет много компонент, пожалуй, самая важная из них - это профессиональный статус программиста (надо сказать, что я говорю о программистах в широ- ком смысле, причисляя к ним и системных аналитиков), но мне сейчас боль- ше хочется сказать об эстетической, или об эмоциональной, стороне про- граммирования, причем не только о том, что вознаграждает программиста, когда он выходит со своим продуктом на рынок, но и о том, что составляет его нравственную опору, когда он остается наедине с программой или маши- ной. Вы, конечно, можете спросить меня, а стоит ли говорить об этом? От- вет будет состоять не только в том, что программирование стало сейчас массовой профессией. Мой третий тезис заключается в том, что программирование - это самая трудная из всех массовых профессий. Ее трудность до сих пор еще ни в ко- ей мере не признана обществом, она на порядок выше даже таких экзотичес- ких профессий, основанных на гипертрофии врожденных способностей, как цирковые артисты и верхолазы. Трудность профессии программиста в том, что именно программисты не- посредственно "упираются" в пределы человеческого познания в виде алго- ритмически неразрешимых проблем и глубоких тайн работы головного мозга. Ее трудность также в том, что программист должен обладать способнос- тью первоклассного математика к абстракции и логическому мышлению в со- четании с эдисоновским талантом сооружать все что угодно из нуля и еди- ницы. Он должен сочетать аккуратность банковского клерка с проницатель- ностью разведчика, фантазию автора детективных романов с трезвой практи- чностью бизнесмена. А кроме того, программист должен приобщаться к кор- поративным интересам, иметь вкус к коллективной работе, понимать цели работ и многое другое. Я знаю, что эти трудности могут быть преодолены только путем большо- го эмоционального напряжения, требующего от программиста особого самосо- знания и внутренней позитивной установки. Если когда-либо А.Хейли напи- шет роман "Вычислительный центр", вы увидите, что это будет самый увле- кательный его бестселлер. Мой следующий тезис состоит в том, что понимание или хотя бы ощуще- ние эстетической природы программирования является не только одной из движущих сил программиста, но и необходимо для тех, кто управляет про- граммистами, и в особенности для тех, кто их воспитывает и обучает. Поз- волю себе перечислить некоторое количество организационных альтернатив, или просто трудных вопросов, правильно разрешить которые можно только с полным учетом обсуждаемых факторов. Возможна и нужна ли организация разработки софтвера по принципу кон- вейера ? Кого и почему труднее найти для реализации софтверного проекта - ру- ководителя или исполнителя ? Как сочетать элитарность системного программирования с его массовос- тью ? Как воспитать программиста - через мировоззрение (университет) или профессиональные навыки (технический институт) ? Что такое индивидуальные способности в программировании, специфичны ли они и нужны ли они ? Можно и нужно ли отделять проектирование большой программы от ее из- готовления ? Эти вопросы являются только частью общей проблемы. Посмотрим вкрат- це, как связать поставку этих вопросов с анализом человеческого фактора в программировании. О конвейере. Я лично считаю конвейер поистине дьявольским изобрете- нием. Поднимая продуктивность на небывалый уровень, но в то же время яв- ляется самым бесчеловечным видом работы из всех мне известных. Конвейер- ный метод в программировании может либо убить интеллектуальную компонен- ту в труде программиста, либо вызвать неврозы из-за противоречия меду монотонностью в трудоспособностью работы. Представьте себе человека, обязанного 8 часов в день, 5 дней в неделю, 500 недель в году, решать одни кроссворды, и вы поймете, что такое программист, специализирующий- ся, например на написании редактирующих программ. Одним словом, раскреп- ление людей по элементарным операциям в многомодульной системе - далеко не простая задача. О руководителях и исполнителях. Не торопитесь ставить руководителя на первое место, объясняя, что по определению руководителя найти или со- здать труднее. Давайте подумаем, почему сплошь да рядом руководитель проекта предпочитает начинать с молодыми специалистами, кончившими уни- верситет два-три года назад, нежели с людьми, чей стаж работы превышает пять лет? Но потому ли, что мы предпочитаем использовать чистый лист и пластичность молодого человека, нежели преодолевать пассивное сопротивле- ние более зрелого и менее ясного для нас 33-летнего главы семейства. Но это, в частности, означает, что мы не умеем гармонично развивать профес- сиональные достоинства исполнителя так, чтобы они не падали с возрастом и были бы полезны и для него самого и его настоящих и будущих начальни- ков. Элитарность программистов представляется мне очевидной и в этом представлении является интереснейшим вызовом человечеству в целом, при- чем, надеюсь, этот вызов будет принят и преодолен. Эту мысль я поясню позже. Мировоззрение и профессионализм. Проблема, конечно, не только в том, чтобы объективно оценить требуемое соотношение кандидатов наук и дипло- мированных инженеров, хотя вокруг этого возникает изрядное количество всем известных кадровых проблем. суть проблемы в том, чтобы признать, что программирование требует от человека несколько особого взгляда на мир, его потребности и эволюцию, особой моральной подготовленности к своему долгу. Программист - это солдат технической революции и как тако- вой должен обладать революционным мышлением. Теперь я подхожу к тому, чтобы сформулировать центральный тезис моей речи. Он состоит в утверждении, что программирование обладает богатой, глубокой и своеобразной эстетикой, которая лежит в основе внутреннего отношения программиста к своей профессии, являясь источником интеллекту- альной силы, ярких переживаний и глубокого удовлетворения. Корни этой эстетики лежат в творческой природе программирования, его трудности и общественной значимости. Здесь, прежде чем продолжить основную мысль, хочу подчеркнуть важ- ность внутреннего отношения человека к своему делу. Сейчас идет много споров о том, является ли программирование специфической профессией. Это не отвлеченный спор, а дискуссия, результат которой имеет прямые органи- зационные, юридические и образовательные последствия. Так вот, результат этого спора меньше всего должен определяться тем, что будут говорить о программировании не сведущие в нем люди, какими бы авторитетом и властью они ни обладали. Наше собственное самосознание и способность к корпора- тивному взаимопониманию - вот что самое главное. Выделить эстетическую сущность любого вида профессиональной деятель- ности очень просто. Она, по всей сути, реализуется в субъективных кате- гориях, глубоко сплетается с этическим кодексом профессии, ее техничес- ким содержанием и юридическим статусом. Поэтому мое перечисление эстети- ческих компонент программирования также будет носить субъективный и очень предварительный характер. Сначала я сделаю некоторые замечания, отражающие внутреннюю природу программирования. Творческая и конструктивная природа программирования не требует осо- бых доказательств. Хочется высказать, быть может, более спорную мысль, что в своей творческой природе программирование идет намного дальше большинства других профессий, приближаясь к математике и писательскому делу. В большинстве других профессий мы лишь "приручаем" силы природы - просто "сажаем тигра в бензобак", - используя те или иные физические или биологические явления, не обязательно постигая их сущность. В программи- ровании же мы в некотором смысле идем до конца. Один из тезисов совре- менной теории познания "мы знаем это, если можем это запрограммировать" очень выпукло характеризует этот максимализм нашей профессии. Другим очень важным эстетическим принципом программирования является его высочайшая требовательность к законченности продукта. Конечно, это характерно для многих инженерных профессий. Однако программирование и здесь идет дальше. Хотя в мультимиллионных программных конгломератах это свойство почти исчезает, на уровне индивидуальной работы всегда сущест- вует поразительный контраст между почти сделанной и полностью сделанной работой. Эта стопроцентность программирования - источник его трудности и в то же время глубочайшего удовлетворения работающей программой. Машина, снабжая программой, ведет себя разумно. Программист является первым, кто обнаруживает это. Применяя метафору троицы, он ощущает себя в этот момент и отцом - создателем программы, и сыном - братом этой ма- шины, и носителем святого духа - вложенного в нее интеллекта. Это торже- ство интеллекта, наверное, самая сильная и самая специфическая сторона программирования. В отношении к машине у честного программиста есть еще одна особен- ность. В некотором смысле он относится к ней как хороший жокей к своей лошади. Зная и хорошо понимая возможность машины, он никогда не позволит себе компенсировать леность ума беззаботной тратой ресурсов ЭВМ. Это чи- сто эстетическое отношение к делу является самым эффективным предохрани- телем против бездумной "пессимизации" софтвера, которая хотя и не вызывает особых возражений у компаний, продающих машинное время, но на деле при- водит к надувательству покупателя или потере эффективности. Другую часть эстетической сущности программирования составляют такие его компоненты, которые связаны с социальной или общественной функцией программирования. Всякий раз когда мы рассматриваем социальное явление большого масштаба (а появление и использование ЭВМ безусловно является таковым), мы должны поискать некоторые широкие исторические аналоги, ко- торые могут дать какую-то опору для экстраполяции и предвидения. О том, что ЭВМ принесли с собой техническую революцию и связанную с ней индуст- риализацию умственного труда, я уже говорил. Мне хочется провести еще одну аналогию, которая имеет более прямое отношение к профессии програм- миста. Разработка и распространение софтвера, мне кажется, во многом на- поминает то, что произошло в результате появления книгопечатания. Как книги накапливают внешний образ мира в глазах их авторов и позволяют воспроизвести процесс его познания, так и программы и банки данных нака- пливают информационную и операционную модели мира и позволяют не только воспроизводить, но и предсказывать его эволюцию, давая тем самым небыва- лую власть над природой. Быть хорошим программистом - это сейчас такая же привилегия, как быть грамотным человеком в ХVI веке. Эта привилегия дает право програм- мисту ожидать аналогичного признания и уважения со стороны общества. К сожалению, эти ожидания не всегда оправдываются. Хочу только заметить, что осуществление этого признания требует работы с обеих сторон. В част- ности, для программиста необходимо следование одному этическому принци- пу, который носит общий характер для всякого профессионала, но имеет специальную интерпретацию для программиста. Чисто логически имеют место три варианта: работа ради работы; работа ради денег; работа ради цели. В системе координат программиста первые два мотива стоят на первом плане, хотя в абсолютной системе координат имеет значение лишь третье. Потому я хочу сказать, что программист сможет достичь полной гармонии с обществом только в том случае, если лояльность той цели, в достижении которой его программа является лишь частью, станет его внутренней уста- новкой. Говоря об общественной функции программирования, не могу не заме- тить, что на пути к реализации этой функции лежит одна нерешенная техни- ческая проблема - обеспечение аккумулятивного эффекта программирования. Это очень сложная, но абсолютно необходимая для решения проблема. Спектр мнений о ней - бесконечен. Одни говорят, что сейчас работают только счи- танные проценты составленных программ, другие считают, что ОС/360 - это уже практически бессмертный комплекс программ. Возвращаясь к теме моей речи, хочу сказать, что предоставление программисту перспективы длитель- ного и стабильного использования его продукта окажет решающее воздейст- вие на его профессиональное самосознание. Позвольте теперь с позиций только что сделанных утверждений завер- шить обсуждение ранее перечисленных альтернатив и трудных проблем. Об индивидуальных способностях в программировании. Нам необходим об- раз идеального программиста. Конечно, это будет мифическая личность. Но кто сказал, что нам не нужны мифы и сказки о программистах? Каждый из нас должен хоть раз в жизни видеть или хотя бы слышать о чудо-программи- сте, из программы которого нельзя убрать ни одной команды, или который пишет тысячу команд в день, или обнаруживает ошибку при исходном шансе один к миллиону и т.д. Человеку свойственно искать ориентиры и примеры. Именно с этих позиций хочу внести свой вклад в спор о пресловутых "при- мадоннах" в коллективах программистов. Объявлять их нежелательными - это по крайней мере близорукость или зависть к их исключительным качествам. Мне посчастливилось в жизни встретить несколько таких примадонн от про- граммирования, которые при всей их индивидуальности и даже экстравагант- ности вносили неоценимый вклад в работу коллектива, особенно в трудных ситуациях. Так что я решительно стою за признание и полный учет весьма широкого диапазона в индивидуальных способностях к программированию. О разделении проектирования и изготовления софтвера. Налицо двойст- венное отношение к этому вопросу. Руководители, ответственные за долго- временные проекты, и многие другие ищут пути к формализации этапов раз- работки и передачи проекта из одних рук в другие. В то же время само де- ло отчаянно сопротивляется такому разделению. Я хочу сказать, что пра- вильное решение этого вопроса невозможно без учета человеческого фактора и эстетической потребности, препятствующей тому, чтобы заниматься реали- зацией чужих идей или не видеть самому овеществления своей идеи. Отда- вать технический проект в чужие руки - то же самое, что посылать своих детей в интернат, что хотя и бывает необходимо, но чревато потерями. В заключение хочу вернуться к тезису об элитарности программирования и о его будущем. Моя апологетика на первый взгляд подчеркивала исключи- тельный, особый характер программирования и его предельные требования к человеческим возможностям. Эта требовательность и образует тот самый вы- зов человеку, о котором я говорил вначале. Когда я был последний раз в Соединенных Штатах в 1970 г., на меня произвели большое впечатление но- вые идеи профессоров Массачусетского технологического института Марвина Минского и Самюэля Пейперта об обучении детей. Они выбросили в корзину ходячее представление, что дети учатся бессознательно методом подража- ния. Они доказывают, что человек чему-то научается только в том случае, если у него в голове складывается блок-схема действия, выделены подпро- граммы и приложены информационные связи. Профессор Пейперт навсегда об- ратил меня в свою веру на примере жонглирования двумя мячами, когда, апеллируя к моим способностям программиста, он за десять минут научил меня тому, чего я сам не сделал бы и за несколько часов. Таким образом, человек неизмеримо усилит свой интеллект, если сдела- ет частью своей натуры способность планировать собственные действия, вы- рабатывать общие правила и способ их применения к конкретной ситуации, организовывать эти правила в осознанную и выразимую структуру, - одним словом, сделается программистом. Когда-то возможность читать и писать считалась божьим даром, уделом избранных. Сейчас в эпоху грамотности, на что потребовалось 1000 лет, мы выделяем новую избранную категорию людей, которые становятся посредника- ми между человечеством и информационной моделью мира, упрятанной в маши- ны. Сделав искусство программирования общим достоянием, мы лишимся своей элитарной исключительности перед лицом повзрослевшего человечества. Это ли не высший эстетический идеал для нашей профессии. Я назвал ряд актуальных проблем, в том числе связанных с человечес- ким фактором в программировании. Я не назвал, пожалуй, самой главной. Мы сейчас ненасытно вербуем молодежь в программисты, обещая им златые горы. Однако поколения людей меняются значительно медленнее, чем поколения ма- шин. Почитайте рекламы технических журналов за последние 10 лет. Слова "революция", "Новое поколение" появляются там с неимоверной частотой. Я хотел бы спросить авторов этих реклам, а знают ли они, как сделать, что- бы программист в возрасте свыше 50 лет был бы не меньше полезен ему, чем 30-летний. Через 30 лет у нас таких программистов будет миллион. Пожа- луй, честно будет сказать, что сейчас у нас нет даже подхода к тому, как ассимилировать ветеранов в современных условиях изменчивости и неста- бильности, сделав тем самым профессию программиста пожизненной и дающей человеку ощущение социального удовлетворения. КИБЕРНЕТИКА 1972 No.5 с.95-99 (со стилистическими исправлени- ями Н.Безрукова)