Архив 4 февраля 2009

Поп-сталинизм и отечественное программирование

Этот пост я писал давно, в качестве ответа на запись уважаемого [info]dm_kalashnikov про советскую вычислительную технику. К сожалению, тогда не “нарисовалось” ничего вразумительного, так что запись отправилась “в стол”. Кстати, в Wordpress очень удобно откладывать записи для последующего редактирования и опубликования. Мне после перехода из ЖЖ это очень понравилось.

Вчера в комментариях к записи про “Урал-1″ снова прозвучала мысль о том, что копирование западных образцов погубило отечественную вычислительную технику. К сожалению, здесь не все так просто. Начну, впрочем, издалека.

Сегодня можно смело говорить о существовании общественно-политических взглядов, которые можно охарактеризовать, как “популярный сталинизм”, или, короче, “поп-сталинизм”. Численность “поп-сталинистов” довольно велика, а их взгляды варьируются от коммунистических до умеренно националистических. Объединяет их всех одно – сугубо положительная оценка личности И. В. Сталина и его эпохи вкупе с полным отключением критического восприятия в их отношении. Основывается эта убежденность в том, что при Сталине “все было хорошо” в основном на разглядывании каталогов “Союзавтоэкспорта” и просмотре всевозможных фильмов 50-х годов про хорошую жизнь советских трудящихся.

В принципе, появление “поп-сталинизма” на фоне сверхкритики СССР вообще и сталинской эпохи в частности вполне закономерно. Во-первых, это определенный протест против современной идеологии, которая с трудом скрывает ошибки нынешнего руководства, а в качестве “положительных героев” нашей истории предлагает либо сомнительного “царя-мученика” Николая Второго, либо невероятно далекого Александра Невского. Не надо напоминать про конкурс “Имя России”? Во-вторых, промахом критиков сталинской эпохи является охаивание всего, что делалось в промежутке с 1924 по 1953 год – вплоть до обвинения Советской Армии в изнасиловании всего населения оккупированной Германии по несколько раз. Это противоречит тому, что называется “генетической памятью” – ведь это касается не кого-то абстрактного, а наших дедов и прадедов – обвинение их в том, что они все поголовно грабители, насильники и убийцы, вызывает естественное отторжение внушаемой точки зрения. Соответственно, “агитаторы” наподобие Сванидзе достигают прямо противоположного эффекта. В-третьих, наиболее упрощенной точкой зрения “поп-сталиниста” является утверждение о том, что “при Сталине был порядок” – и этому порядку противопоставляется его отсутствие сейчас, с трудом скрываемое лубочными образами царя Николая.

Нельзя сказать, что в “поп-сталинизме” отсутствует рациональное зерно. Напротив, эта точка зрения вполне имеет право на существование, да и образ Сталина намного привлекательнее с идеологической точки зрения, чем нынешние продукты идеологов с канала “Россия”. Очень многие – от коммунистов до националистов находят в политике Сталина привлекательные для них стороны. Более того, Сталин – не просто политический деятель середины XX века, но и Верховный Главнокомандующий, триумфатор во Второй мировой войне. Это намного лучше, чем “святой мученик” Николай Второй. Наконец, при Сталине Советский Союз превратился в сверхдержаву.

Но порой происходит отключение критического восприятия, и гордость за Советский Союз, совершивший невероятный скачок в развитии за 29 лет, сменяется самой неприятной чертой “поп-сталинизма” – оголтелой критикой всех без исключения решений советского и, впоследствии, российского руководства с аргументом “при Сталине так не делали”. В принципе, на образец такой критики можно посмотреть по вышеприведенной ссылке.

А сейчас вернемся к вопросу о копировании IBM/360 под названием “Ряд” или “ЕС ЭВМ”. Обычно это решение подвергается жесткой критике с примерно такой аргументацией: в 50-е годы в СССР были разработаны ЭВМ, многократно превосходившие западные, развитие советской вычислительной техники во многом опережало “общемировой” уровень. Тем не менее, в 1967 году было принято решение о продолжении развития вычислительной техники в СССР на основе копирования западных образцов. У “поп-сталинистов” это дополняется еще и аргументом “все лучшее – это продукт специалистов сталинской эпохи”.

К сожалению, такая аргументация не учитывает одной важной проблемы. Сегодня даже школьников учат тому, что компьютер без программного обеспечения – это просто набор микросхем. В 50-60-е годы ситуация была той же, с поправкой на то, что вместо микросхем были лампы или транзисторы. Согласно докладу академика А. А. Дородницына, в СССР в 1969 году было всего лишь 1500 программистов, а в США – около 50 000. Компания IBM затратила 2 миллиарда долларов на разработку операционной системы для IBM/360, причем 2000 математиков занимались математическим обеспечением этих систем. В СССР из-за малочисленности программистов было невозможно в разумное время разработать операционные системы, более-менее удовлетворявшие “мировым стандартам”.

В СССР прикладные программы для ЭВМ создавались, фактически, “пользователями” – то есть специалистами вычислительных центров. Сейчас у меня на столе лежит книга Н. С. Бахвалова “Численные методы” издания 1973 года, которая, в основном посвящена методам решения вычислительных задач на ЭВМ. Немалую часть книги занимают вопросы написания и использования “стандартных программ” – то есть, фактически, будущих математиков-программистов готовили не к применению существующих численных методов, а к написанию программ, эти методы реализующие. Соответственно, немалая часть сил тратилась на “изобретение велосипеда”.

Решение о создании серии ЭВМ, функционально подобной (но не технически идентичной, как это себе представляют многие) принималось, исходя из желания использовать готовые, разработанные на Западе программы. Кстати, это породило ряд забавных технических ухищрений. Например, кодировки русских букв КОИ-7 и КОИ-8 “устойчивы” к некорректной работе знакогенератора благодаря “согласованному” размещению русских и латинских букв. Семибитная КОИ-7 при использовании знакогенератора, подддерживающего только латиницу, OSTANETSQ ^ITABELXNOJ – причем заглавные буквы превратятся в прописные, а прописные – в заглавные, чтобы было видно – что-то пошло не так. С восьмибитной КОИ-8 то же самое произойдет при “потере” восьмого бита, чем грешили многие западные программы.

Поэтому решение о копировании архитектуры западных ЭВМ было не “глупостью или вредительством”, а вынужденным шагом, который был вызван нехваткой программистов в СССР. Как ни странно, это решение не “похоронило” отечественные разработки по теоретической части вычислительной техники. Напротив, оно позволило развивать исследования по синтезу схем из функциональных элементов, тестированию правильности схем, “укладке” плоских графов – все эти задачи возникают при проектировании сложных микросхем, например, микропроцессоров. Кстати, на Западе до последнего времени многие из этих задач решались полуэмпирически, без должного теоретического обоснования – что привело, например, к известной ошибке в первых образцах процессоров Pentium при вычислениях с плавающей запятой. После этого отечественные специалисты по дискретной математике стали востребованы и на Западе.

А теперь, после перехода от “поп-сталинизма” к задаче об укладке плоских графов, поделюсь своими впечатлениями об использовании продукта отечественных программистов (замученных лично Сталиным в застенках Лубянки, не иначе) под названием TopoR. Данная программа – это “топологический” трассировщик печатных плат, фактически – реализация алгоритмов “укладки” плоских графов. Используемые алгоритмы позволяют очень эффективно автоматически “разводить” печатные платы с минимальным количеством межслойных переходов.

“Топологические” алгоритмы порождают и до жути удобный “ручной” трассировщик:

Плата, разведенная в TopoRе, выглядит довольно необычно, напоминая “ручную” разводку “на бумажке”:

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

Но, к сожалению, TopoR – это всего лишь программа, но не “программный продукт”. Любой, кто читал “Мифический человекомесяц” Брукса (кстати, написанный на основе опыта разработки софта для все того же IBM/360) понимает, в чем здесь разница. Зачастую отечественный софт так и остается “программой”, но не превращается в “продукт”. TopoR использует уникальные технологии, но для серьезного использования пока, мягко говоря, сыроват. При “некоммерческом”, любительском использовании можно терпеть некоторые неудобства и редкие ошибки при работе с программой, но когда дело доходит до коммерческого применения – никто не будет использовать софт, который требуется “доводить напильником”.

Подобная ситуация в отечественном “софтостроении” – прямое следствие сложившегося еще в СССР дефицита программистов и отсутствия школы “коммерческого” программирования. Конечно, отечественный софт зачастую отличается высоким качеством – те же Касперский, ABBYY, Agnitum выпускают очень неплохие программные продукты, да и многие “поделки на коленке” не уступают западным аналогам. Многие ошибки, допускаемые западными разработчиками, наши программисты зачастую обходят – покажите мне программу российской разработки, “спотыкающуюся” на русских буквах в имени файла или на длинных именах файлов. А в импортном софте, особенно узкоспециализированном, такое – сплошь и рядом.

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

Собственно, на этом я закончу. Кстати, ждите пост про TopoR – несмотря на все недостатки, софтина очень неплохая и для “любительских” целей вполне подходит.