Компьютеры в моей жизни

Моя первая публикация была сделана по результатам моей дипломной работы. Как раз для выполнения этой работы я приехал в Москву из Екатеринбурга вместе с моим другом по учебе в Уральском университете Костей Кикоиным, который был племянником академика Кикоина, одного из директоров Курчатовского Института. Было это в 1967 году. В процессе дипломной работы я выполнял расчет двумерного интеграла используя простой электрический калькулятор, который был способен делать 4 операции ( + - * / ) но с очень высокой точностью. Калькулятор имел размер с половину письменного стола, но мы были рады, что имеем такую "мощную" технику. Иногда, когда мне было лень идти в институт, я делал расчеты прямо на бумаге используя логарифмическую линейку - главный вычислительный инструмент в те времена. Тем не менее эта работа оказалась очень полезной - она цитируется в книге Пинскера и представляет интерес до сих пор. 28 лет спустя во Франции (ESRF) один немецкий студент спрашивал меня о тепловом диффузном рассеянии рентгеновских лучей и среди других статей он принес перевод и этой моей статьи.

Вскоре после этого, уже в аспирантуре, я имел возможность работать на настоящем компьютере. Мой первый компьютер назывался "M20", потому что он был способен делать 20000 операций в секунду. Он был очень большой и понимал только команды в двоичном компьютерном коде. Поэтому программисты должны были писать программы подобные нижепоказанной

   05 1234 3425 5674
   16 2233 2341 0000
   02 5674 1111 3425
и так далее. Здесь каждое число означает восьмеричное целое (три бита в одном числе). Например, 5 = 101, 1234 = 001010011100. Первая колонка содержит код операции, остальные три колонки определяют адреса двух операндов и результата. Каждый программист имел свой собственный язык высокого уровня и использовал его прежде чем писать числа. Например, вышеприведенный код означает (я не помню точно, но принцип правильный)
   *   a  b  c    ( c = a * b )
   gt  A  B  -    (сохранить данный адрес в A, перейти к адресу в B)
   -   c  d  b    ( b = c - d )
Программирование было рутинной работой, даже была такая специальная профессия, и обычно физики были неспособны писать программы. Однако физик-программист имел преимущество поскольку он был способен решить что-либо, что не могло быть решено аналитическими методами. Вскоре после этого появились алгоритмические языки высокого уровня. В нашем компьютерном центре первым языком был ALGOL - новый язык по сравнению с FORTRAN. Однако этот ALGOL тратил заметное время на трансляцию и делал программы, которые работали в несколько раз медленнее по сравнению с прямым программированием. Поэтому опытные программисты не пользовались им. Я выучил ALGOL но я также редко им пользовался.

Следующий, относительно продолжительный период был связан с компьютером BESM-6. Это была относительно хорошая машина, которая делала 1 миллион операций в секунду. Такая скорость была достаточна для использования алгоритмического языка высокого уровня и основным языком на этом компьютере был FORTRAN. Программисты писали фортранный код программы на бумаге, затем специальная машина типа печатающей машинки переводила текст в пакет перфокарт (специальные картонные карточки с дырочками). После чего множество таких пакетов перфокарт проходило через читающее устройство и компьютер принимал фортранный код, каждый раз транслировал его в компьютерный код и считал по программам, одну за другой без остановки, не запоминая откомпилированный код. Главный счет выполнялся по ночам, в то время как днем делались различные вспомогательные работы. Обычно программисты сдавали свои программы вечером и получали результаты расчетов утром на следующий день. Ночью специальные люди, называемые "операторами" играли роль кочегара около этой печки. Каждая ошибка в программе вела к фатальному исходу отсутствия результатов расчетов. Необходимо было исправить ошибку и ждать следующего дня, чтобы получить результат. Поэтому, чтобы спасти время, нужно было решать несколько задач одновременно снижая тем самым вероятность фатальных последствий полного отсутствия результата.

На такой способ программирования ушли мои лучшие годы. Половина моих научных работ была выполнена таким способом. Но это была хорошая школа. Было не так просто найти ошибку, имея фортранный код в 1000 строк и только одну информацию, что он не работает, да еще обычно место, где произошла остановка. Мы не имели графики в современном понимании. Результаты расчетов печатались на широкой длинной бумаге по 120 символов на строку. Поэтому мы писали специальные программы, которые печатали графику используя индекс строки как x-координату (неограничена) и индеск символа в строке как y-координату (не более 120). Такие графики имели большой размер и использовали много бумаги (бумага текла как река из толстых рулонов, а результаты мы получали толстыми пачками) но они спасали время, потому что чертить графики по числам - не очень приятная работа. Интересно, что у окна выдачи результатов стоял большой железный ящик, куда программисты сразу выбрасывали ошибочные распечатки. Я так не делал и использовал эту бумагу для письма. Но ее все равно было очень много.

Мы получили IBM персональный компьютер только в конце восьмидесятых. Это было замечательное время, но одновременно это было начало новой жизни и конец старой жизни. В старой жизни я имел время поиграть в теннис, выпить вина в компании друзей и просто ничего не делать. Новая жизнь ударила по голове обилием информации. Сначала она была на дискетах, сейчас на компакт-дисках и в Интернете. Я работал на различных персональных компьютерах и выучил различные языки программирования: Basic, Pascal, C, Clarion, Prolog, и так далее. Я пытался делать программы на этих языках но в этом не было необходимости для меня (исключая Basic, на котором я много работал на первом 8-битовом персональном домашнем компьютере). Мой сын, попав в физ.-мат. школу заставил меня купить ему у спекулянтов немецкий компьютер Sсhneider, который считывал информацию с дискеты, а показывал на экране цветного телевизора. Как ни странно, с цветом на компьютере я впервые познакомился дома, а не на работе.

Моим главным языком программирования по-прежнему оставался FORTRAN, потому что Microsoft продолжал традицию IBM/360 компьютеров и развивал FORTRAN в новых версиях. Последний FORTRAN, который я использовал был Power Station 4.0 для Windows-95. Он и сейчас у меня есть, но уже на пенсии. Фортран -- относительно хороший язык, по крайней мере он гораздо более читабелен по сравнению с "C" и не такой глупый как Pascal. Я любил Basic, но это был недостаточно мощный язык, тот, который я знал. FORTRAN существует также на UNIX компьютерах. Например, IBM XLF почти совместим с FPS 4.0, однако некоторые отличия существуют и это довольно неприятно, когда забываешь об этом. Программа работает, но неправильно.

В течение длительного времени я использовал MS Fortran 5.0 для DOS и добавлял мои собственные подпрограммы на ассемблере как расширение к этому фортрану, чтобы иметь возможность выполнить любые операции на компьютере, включая те, которые являются невозможными для простого пользователя. Я не использовал язык Assembler непосредственно, но я его выучил и написал на нем служебные подпрограммы, которые могли быть использованы непосредственно из фортрана. Сейчас программирование на смешанных языках является обычным делом и FPS 4.0 позволяет это делать тоже. Однако, FPS 4.0 способен делать Windows приложения непосредственно, так что Assembler не нужен. Я покупал Digital Visual Fortran 5.0, но даже не устанавливал его. Кое-кто из моих коллег до сих пор использует фортран, уже 6-й, но я выпал из фортрана.

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

До начала 90-х годов эта форма графики предполагала наличие системы подпрограмм (например Fortran subroutines или C procedures) и необходимость их использования на стадии компилляции. Я тоже шел по этому пути и копил подпрограммы в библиотеках. Однако к указанному периоду я обнаружил, что многие программы включают одни и те же процедуры и поэтому имеют неоправданно большой размер. Поэтому я решил разработать собственный язык программирования и интерпретатор этого языка на основе развитой библиотеки процедур. Моя собственная идея - какой язык программирования мне нравится - состояла в убеждении, что язык должен давать возможность использовать любые примитивные операции, например прерывания DOS одновременно с достаточно разработанными операциями типа встроенного редактора текстов включая форматированный техт. С другой стороны, редактор должен быть способен работать с файлом рассматривая его или как текст, или как систему байтов (программу, например). Последняя модификация работы позволяла, например, редактировать различные небольшие фрагменты файла, сохраняя неизменными всю остальную часть. Я сделал такую программу. Я назвал ее "Quick" потому что она позволяла быстро делать различные операции. С другой стороны по русски "Квик" содержало первые буквы моей фамилии и имени (Кон ВИКтор).

Эта программа уже не существует, так как была сделана так сложно, что Виндовс ее не запускает. Она может работать только в ДОС. Тем не менее остался ее код. Он существует до сих пор. Сейчас я этой программой не пользуюсь. Я потратил два года очень тяжелой работы на ее разработку. Она была очень полезной для меня другие три года прежде чем умерла. Такая короткая жизнь у многих программ. Можно сказать, что программа была подобием Windows, но в текстовом исполнении и намного более быстрая. Реальная операционная система Windows и появление 486-х компьютеров убило ее. Сейчас я использую другой путь.

Развитие компьютеров оказалось настолько быстрым, что библиотека готовых подпрограмм на языке программирования оказалась не нужна, так же как и программа-интерпретатор. Современные пакеты включают в себя множество готовых выполнимых файлов, которые загружаются и работают настолько быстро, что использование процедур не приводит к экономии времени. Сегодня разумный способ - это работа под управлением специальной операционной системы. В принципе любой пользователь сейчас работает в рамках более или менее удобной операционной системы: UNIX (LINUX) или Windows-95 (98, 2000, XP ) или Macintosh. Одако эти операционные системы являются системами очень широкого применения, поэтому иногда они работают намного медленнее, чем это необходимо. Например, Microsoft Windows - это более или менее операционная система для бухгалтеров и секретарш. "Excel" - это главная программа, в то время как "Word" содержит "Equation editor" как внешнюю процедуру, далекую от основного ядра. По этой причине она работает медленно при наборе научной статьи даже на Pentium компьютерах. Программа "Scientific Work Place"
[http://www.mackichan.com]
является хорошей программой для приготовления научных статей печатного качества, но она очень замкнута. Она не помогает программисту делать программы, напротив, она это запрещает.

Какое-то время назад я считал, что каждая программа, которая решает определенную проблему, должна иметь собственную мини-операционную систему. Однако, возможны обобщения. Например, операционная система только для научных программ. Различные готовые выполнимые файлы могут быть использованы в различных операционных системах такого типа. Я понимаю операционную систему как систему готовых программ, где одна из них является главной (ядром), а другие могут запускаться по мере необходимости. Многие web-страницы имеют как раз такую структуру (HTML язык посредством гипер-ссылок позволяет делать это легко). Это был мой современный взгляд на компьютерное программирование с точки зрения маленького человека, который хочет решить свою маленькую проблему. Однако это относится только к периоду Pentium-компьютеров и широкого использования локальных сетей.

Последние годы я использовал мою программу "VKS" для просмотра числовых файлов на экране. Простого нажатия клавиши [Enter] на имени файла в каталоге "Windows Commander" (или Windows explorer) достаточно, чтобы иметь хороший график, где оси координат размечены автоматически. Программа является как раз частью старой программы-оболочки "Quick". Для печати графиков на принтере я использовал свою программу "VKPS" - транслятор с моего же относительно простого языка в язык Postscript, которая способна работать с файлами данных различной природы и может делать графику различных типов и в произвольной комбинации этих типов. Эта программа мне очень помогла при работе во Франции в системе UNIX. Там стоят постскрипт принтеры и я мог делать графику не изучая и не используя чужих пакетов. Она до сих пор в рабочем состоянии. Естественно в соответствие с моей общей идеей относительно языков этот язык позволяет выполнять довольно сложные процедуры одновременно с включением простых фрагментов на языке postscript непосредственно. Такой режим позволяет работать с фотографиями, например. В сентябре 2000, я сделал версию 3.0 этой программы, которая позволяет работать с цветными рисунками, поскольку цветные принтеры стали нормальным оборудованием для компьютеров. На этом развитие программы остановилось. И похоже уже навсегда.

Также у меня есть свой собственный калькулятор, работающий в ДОС, который намного лучше чем Windows калькулятор, потому что он позволяет использовать алгебраические выражения и имеет небольшую память, которая может быть использована в расчетах. Естественно "Maple" опция в Scientific Work Place намного более мощная по сравнению с моим калькулятором (но похожая). Однако, иногда нецелесообразно загружать столь большую программу для простых расчетов. Для этих целей мой калькулятор намного быстрее. Я пользовался им каждый день до тех пор, пока мой компьютер перестал запускать досовские программы. Но еще раньше я сделал аналогичный калькулятор на языке Javascript. Как раз этот калькулятор (точно такой же структуры, как и досовский) вы можете увидеть на этой моей web-странице. Сейчас я пользуюсь им.

В таких условиях специальные научные программы могут делать только расчеты и записывать результаты в виде числовых файлов на жесткий диск. С другой стороны, каждая специальная физическая программа может работать под управлением общей "menu" программы, которая позволяет использовать специальную информационную помощь и комбинировать различные операции, включая вызов указанных выше программ (VKS, VKPS или калькулятор) одновременно с редакторами текстов. UNIX является более жесткой операционной системой, поскольку она рассчитана на многих пользователей. Здесь я использовал тот же самый режим через командные файлы. Я сделал программу 'VKPM' (vk=VictorKohn, PM=ProgramManager) которая являлась Windows-95 приложением. Она может работать с любой вычислительной программой пользователя. При этом показать результаты на графике, сделать Postscript файл и использовать другой сервис оказывается простой и автоматической процедурой.

В 2002 году я получил новый компьютер вместе с программой IGOR-PRO фирмы WaveMetrics
[http://wavemetrics.com].
Эта программа удивительным образом соответсвует моим взглядам на программирование. Она состоит из ядра, представляющего собой мини операционную систему, позволяющую писать свои собственные расчетные и графические программы, и набора уже написанных модулей, встроенных в эту операционную систему. Язык программирования отличается от фортрана -- некоторые операции можно сделать проще, а некоторые намного сложнее, но использование любых модулей, написанных на других языках не представляет проблемы. Я научился работать в этой среде и кое-что сделал. Интересно, что несмотря на то, что это графически ориентированный пакет (Integrated Graphically ORiented PROgram), мне и в нем часто было удобнее использовать свою собственную графику. Долгие годы я видел как во Франции (я ездил туда на 2 месяца каждый год) народ работал в UNIX с программой IDL (Interactive Data Language),
[http://www.rsinc.com].
Она очень дорогая и там ее ставят на казенные машины. Сейчас я имею эту программу под Виндовс и бесплатно. Мне дали версию IDL-5.2. Это похожий пакет и его преимущество в том, что он работает как под WINDOWS, так и под UNIX в отличие от IGOR-PRO, который в UNIX (Sun) не работает. Но он более дорогой и не у всех есть. Точнее в России наверно практически ни у кого нет. Что касается IGOR-PRO, то соответствующую папку можно просто перенести с компьютера на компьютер даже не имея дистрибутива. Хотя это и незаконная операция, но она работает и если эту программу не использовать в коммерческих целях, но состава преступления нет.

В 2003 году передо мной встал вопрос о кардинальной смене языка программирования с возможностью писать, причем относительно просто, многооконные программы и желательно в нескольких операционных системах сразу. Мне подсказали обратить внимание на язык Java. Язык Javascript я знал с 1998 года, но он не годился для серьезного программирования научных задач. С другой стороны, я просто не знал, что язык Java совершенно бесплатный. Я все пытался его где-то купить и никто не продавал. Летом 2003 года, сделав это открытие, я скачал с сайта
[http://java.sun.com]
SDK версии 1.4.2 (которая предлагалась в то время) и стал его изучать. Пришлось прочитать пару книг, которые я также скачал в интернете бесплатно на английском языке. Потом я все же купил одну книжку на русском и очень дешево (за 50 рублей). Но читать ее уже не было надобности Я научился читать API. Язык Java мне очень понравился. Я так и не полюбил эти виндосовские visual режимы. Я вообще не люблю Виндовс, хотя должен признать, что она с каждым годом становится все лучше. Пожалуй только с Виндовс 2000 - ОС стала на что-то похожа. А так был примитив, особенно для тех, кто работал в UNIX. Я в UNIX работал в 1998 году (раньше тоже была возможность, но не умел). Первую программу на Java я писал довольно долго. Она была непростая, но все равно язык от фортрана отличался очень сильно, причем местами не в лучшую сторону. Но классы и zip-архивация классов меня восхитили. Не надо библиотек и головной боли. Подключил новый класс или убрал его. Это очень просто. Правда я очень быстро обнаружил, что с Java лучше не шутить. Использование многих классов или формальных параметров с виде больших массивов может увеличить время счета в десятки, а то и в сотни раз. Большой счет надо делать одним классом и по возможности использовать общие (глобальные переменные). А тогда все работает быстро и все разговоры о том, что Java плохая, я не принимаю. Да, надо немного подождать в самом начале. Но с этой проблемой я тоже справился.

В конце 2003 года во время двухнедельной поездки во Францию мои друзья показали мне новое приобретение - карманный компьютер (КПК). Оказалось - это хорошая машинка и многое может. И многие физические задачи можно делать. Меня попросили перенести свою программу на КПК. Вернувшись в Москву и проведя маркетинг я остановился на русской машинке Rover PC P4. Я хотел самую легкую модель, но с большими параметрами и без излишеств. Эта модель как нельзя лучше подходила. Итак я ее купил и стал смотреть как на ней писать программы. Так получилось, что я очень скоро вышел на сайт
[http://www.ewesoft.com]
и обнаружил, что можно писать программы для КПК на Java и бесплатно. Увы, родная фирма Sun Microsystems виртуальные машины для карманников бесплатно не дает. А это значит, что мне это не подходит. Странная вещь - некоторые условно-платные программы не так уж и дорого стоят. Но я сторонник бесплатных программ. Не знаю почему. Вероятно потому что не умею покупать то, что нужно. А покупать то, что не нужно, не хочется.

Этот вопрос до сих пор не утрясен. Вот свечки в церкви продают в 100 раз дороже их себестоимости, так там якобы они святые. А CD с песнями продают в 100 раз дороже их себестоимости -- почему ? Скопировать программу стоит 0 копеек. Почему каждая новая копия стоит столько же, сколько и предыдущая. Меня учили, что любой товар стоит столько, сколько за него дают. Ну так я и не хочу платить за копию как за оригинал. Я понимаю разработку программы на заказ в нескольких экземплярах. За это можно и заплатить и договор можно составить. Но тиражирование программы и принудительное навязывание операционной системы за немалые деньги - это грабеж. Билл Гейтс - не удачливый бизнесмен, а бандит и за это я его не люблю. Меня умиляет, когда я вижу в магазинах программу WinZip за немалые деньги. На Java работа с зипами делается в три строчки и ничего не стоит. А есть другая программа Blender
[http://www.blender3d.org].
Она позволяет делать мультики виртуальной реальности и сложна настолько, что трудно представить. И она бесплатная. Так что решайте сами.

Короче, я остановился на Ewe и быстро сделал программу. Но с Ewe на КПК программировать нельзя. Надо сделать программу на ПК и затем перенести на КПК. А как же поступать, если есть только КПК. И тут я снова вспомнил про свой Quick. Я достал старый код и высунув язык две недели переводил программу с фортрана на Java, часто уже не понимая даже что я делаю. Ведь у меня был очень сложный код расшифровки математических выражений, программного кода и многих наворотов. От каких-то сложностей я отказался, но в целом удалось почти все восстановить. И я снова сделал интерпретатор своего языка, который я переименовал в ACL (advanced command language) по аналогии с IDL. Получилось даже лучше, чем я ожидал. Мой КПК стал универсальной машинкой для научного работника. Правда я сам редко им пользуюсь для расчетов, так как все время сижу перед большим экраном. Но иногда пользуюсь. А последнее время все чаще, так как появились новые возможности.

А потом вдруг я ощутил, что не хочу писать программы на Java. Точнее хочу сделать только одну большую программу, которая будет уметь делать все, что мне надо, но писать я это буду только один раз. Ясно, что разговаривать с такой программой путем тыкания кнопок сложно и не интересно. Есть язык ACL и его надо развить так, чтобы он был способен делать все что мне нужно. Это очень просто на Java, так как классы очень компактные и компилируется все достаточно быстро. Итак я начал писать интерпретатор под виртуальную машину Java 1.4.2. Что касается математики, то все было похоже. А вот интерфейс на Java Sun и на Java Ewe все же делается по разному. То есть кое-что пришлось переписать. ACL для ПК сейчас стал моим главным языком программирования. Он намного удобнее, чем Java хотя бы тем, что писать надо меньше. Команды короткие, а можно разрабатывать суперкоманды и почти любую работу запрограммировать в несколько строчек. Проблема в том, что команд много и опять надо читать свои собственные описания. Я их тоже сделал в виде вэб-страниц, но пока это не API, а просто статьи. Но читать и перечитывать все же проще, чем писать.

Первоначально я делал программу как интерпретатор и отладчик (среду) в одном лице и у меня была идея создать одну бесконечную программу. При этом на конкретную реализацию внешнего вида программы большое влияние оказал IGOR PRO. Как раз такого типа программы и представлены на странице
[http://vkacl.narod.ru].
Но уже первый же опыт общения с пользователями моих программ привел к горькому осознанию, что люди не находят путей выхода на нужную программу, когда в одной программе много разных программ. Если в программе очень много опций и разделов появляется известная проблема -- как не заблудиться в большом городе. Значит иногда нужен компромисс. Какой-то кусок отлаженных ACL-программ можно представить как самостоятельную программу, снабдить ее специальным меню и специальной версией интерпретатора без средств отладки. Кому-то больше ничего и не надо. Я уже сделал и такой вариант, но пока еще не выставил его на страницу ACL. Нужно все проверить. В новом варианте размер программы всегда около 200 Кб, то есть размер голого интерпретатора, а сами ACL-программы очень компактные. Со временем на этой странице появятся такие ACL-программы, которые будут выглядеть как простые Java-программы.

А что в будущем. Увы, пока не понимаю. Java уже не самый новый язык. Кое-кто называет его языком 90-х, хотя это не так. Java-2005 отличается от Java 90-х как слон от моськи. Быстро развивается Python. Кто-то пишет на Perl, Delphi. Но основная масса рабов Билла Гейтса пишет на Visual Basic. И очень довольны. Быстрыми темпами набирают обороты технологии: .NET, Activ-X, OpenGL. А почти родная фирма Sun Microsystems уже готовит новый язык "Fortress", как замену седому дедушке "Fortran". Я только начал читать описание и обнаружил, что там полный отказ от ASCII, программы можно писать в уникодах, знак умножения можно не ставить. Интересную дискуссию можно почитать на сайте:
[http://forum.vingrad.ru].
Уже этого мне хватило, чтобы понять: жизнь на месте не стоит. Всю жизнь я потратил на изучение компьютера и так ничему и не научился. А я ведь помню детство, отрочество и юность, когда компьютеров не было совсем. Впрочем для большинства населения земного шара его и до сих пор нет. Такие темпы развития не способны проходить адиабатически. Кто-то отрывается вперед, а кто-то ничего этого не замечает. Буквально 6 лет назад я носил домой с работы по 50 дискет, чтобы переписать программу. А сейчас SD-карта размером в одну сотую дискеты имеет емкость 8 Гб, то есть 5500 дискет. Конечно, для искусственного интеллекта и этого очень мало. Но похоже, что в будущем наще время будут слабо отличать от времени Римской Империи. Мы все еще в начале пути.


написано в мае 1998 на английском,
на русском с сентября 2000,
последняя правка в июле 2006 года.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Hosted by uCoz