Я не любитель, я другой...
АрхивНазовите меня программистом-любителем - обижусь: "Я не любитель, а дилетант!" В моем представлении разница огромна… Например, химик Пастер в медицине был дилетантом, но уж никак не любителем. Да что Пастер, - в сельской больнице офтальмологу может случиться оперировать острый геморрой, и он сделает это, разумеется, по-дилетантски, но вряд ли кому придет в голову окрестить его хирургом-любителем. Вот и я, химик-синтетик, по многим причинам становлюсь то дилетантом-стеклодувом, то дилетантом-спектроскопистом, а то и водопроводчиком. Существует некая ПРОБЛЕМА, требующая решения, и ты стремишься к нему возможно коротким путем. Да, в идеале следует обращаться к профессионалам, но их то нет поблизости, то нечем им платить, а еще чаще - быстрее сделать самому, чем сначала долго разъяснять, чего хочешь, а потом, спустя немалое время, убедиться, что тебя не так поняли. Любителю хорошо: разлюбил - бросил, надоело - отложил, не вышло - хрен с ним. А наш брат дилетант - потому им и становится, что другого выбора у него нет.
Программы, поневоле созданные дилетантами, редко выходят за стены лаборатории или института, потому что создаются для решения узких задач и работоспособны лишь в специфических условиях. Я знаком с прекрасными доморощенными программами для анализа хроматографических данных, но не мог ими воспользоваться, потому что у авторов чуть другое, и притом самодельное, "железо" для ввода данных (в итоге написал свою, тоже привязанную к собственному "железу"). Чуть не поседел, разбираясь с некоей дареной числодробилкой, которая неведомо зачем умножала результаты на число "пи", если исходно они были меньше 7,5, и на "пи пополам" - если больше. "Ах, черт, забыл сказать! - хладнокровно заявил автор. - Мне так удобней, чем возиться потом". В остальном программа была безупречна.
Любители жаждут популярности, дилетанту она не нужна. Ему, единственному потребителю, и в голову не приходит снабжать свои продукты даже минимальными комментариями или руководствами. Он все помнит. Разумеется, до поры до времени. И когда эта пора настает, а ему нужно внести изменения, неизвестно, что труднее: вспомнить алгоритм или алгоритмический язык. Ибо в интервале он занимался физикой, химией или, скажем, биологией и забыл напрочь, чем динамические переменные отличаются от статических. Кстати, настоящих дилетантов отличает полное безразличие к моде, и они обычно пользуются тем языком, с которого начали, лишь бы за разумное время получить искомый результат. Пусть хоть допотопный BASIC…
Области творчества любителей и дилетантов практически не пересекаются. Первые, как правило, лепят утилиты, игрушки и приколы, а достигнув совершенства в насилии над операционной системой, уходят в профессионалы. Дилетанты же инстинктивно избегают стремления к совершенству, ибо этот мучительный процесс - конкурент основному делу. Их задачи всегда конкретны и прозаичны: обработка результатов собственных опытов, анализ придуманных ими же математических моделей и т. п. Но коль скоро дилетант все же становится профессиональным программистом - ему нет цены, потому что от массы ремесленников его отличает понимание запросов, возможностей и проблем заказчика - недавнего коллеги. Такому программисту не надо объяснять, чем плечо на спектральной полосе отличается от хвоста на хроматограмме и почему в данном случае полиномиальное сглаживание лучше экспоненциального.
* * *
В мое время лишь редкий химик-органик видел вычислительные машины воочию и имел хотя бы минимальное представление об их устройстве. Встретив необходимость использовать ЭВМ (поди еще сообрази, что она есть!), он должен был преодолеть не только организационные, но и психологические барьеры, как если бы понадобилось принимать тяжелые роды или выучить китайский язык. Хорошо помню, как это случилось со мной.
Задача была не из простых: десятки, если не сотни экспериментальных кривых требовалось описать суммой экспонент. Я понятия не имел, как взяться за дело, и обратился за помощью к ныне покойному Саше Полякову, единственному математику, которого тогда знал. Он минут за десять рассказал про координатный и градиентный спуск и поведал, что машинная математика ничего общего не имеет с "человеческой", а программирование ничего общего не имеет с математикой и ближе всего к вышиванию гладью. Как ни странно, эти краткие поучения оказались не только необходимыми, но и достаточными.
Опуская подробности, скажу, что все получилось как нельзя лучше, и самым сложным оказалось выловить ошибки при перфорации карт с координатами точек. Для этого пришлось писать отдельную программу, немногим проще основной.
Самое забавное, что я так и не увидел БЭСМ-6, на которой происходили вычисления. Тишком и бочком проскальзывал в академический ВЦ и воровски подсовывал пакеты карт на полочку: своего пароля у меня, разумеется, не было, и прикидывался я в те минуты Светланой Архиповой, спасибо ей большое!
Когда работа подошла к концу и статьи были отправлены в печать, мне преподнесли подарок из ФРГ - 18 кило перфокарт, содержавших всемирно известную программу разложения кривых на экспоненты, созданную доктором Провенчером (наша тянула кило на полтора). Спустя почти год этого гиганта удалось запустить в МГУ, и, о чудо! - все наши результаты подтвердились… Разница в весовых категориях объясняется тем, что детище Провенчера было нацелено на самые сложные и сильно шумящие кривые, а мы давили шумы на корню, да и кривые были попроще.
Вы спросите, почему, работая в академическом Институте биоорганической химии, я не воспользовался услугами профессионалов из академического же вычислительного центра? Пытался, и не раз, но вполне безуспешно: "У нас список заказов составлен на пару лет вперед!"
* * *
Волна дилетантского программирования прокатилась некогда по всем приличным научным лабораториям, когда в них стали появляться первые ЭВМ, причем такие, на которых нельзя было баловаться шибко завлекательными играми и изготовлять "красивые" документы для начальства. На них можно было только работать, и обычно находились камикадзе, во имя науки рискнувшие соединить компьютеры с приборами или разложить на компоненты сложную кинетическую кривую.
Потребность в такого рода жертвах времени и сил усугублялась невероятным разнобоем компьютеров. Это сейчас куда ни сунешься, везде стоят полностью совместимые РС, а в начале восьмидесятых в лабораториях нашего Института биоорганической химии стояли компьютеры "Хьюлетт-Паккард", "Тектроникс", "Эппл", "Альфатроник", не говоря уже об "Искрах", "ДВК" и "СМ". Все они различались больше чем кошка с собакой, поставлялись с ничтожным матобеспечением, и для каждой приходилось сочинять все нужное почти с нуля.
Это поветрие длилось лет пять-семь, а потом стало быстро сникать. Во-первых, сама собой разрешилась проблема сочленения компьютеров с измерительными приборами. Приборы оснастились микропроцессорами, принявшими на себя многие заботы, а компьютеры - специализированными программами, которые поставлялись вместе с измерительной аппаратурой. В конце концов компьютеры и приборы по большей части слились воедино в измерительные комплексы - своего рода черные ящики, к начинке которых дилетанту не подобраться. Во-вторых, появилась чертова уйма самых разных коммерческих продуктов от Eureka до MathLab и Excel, которые можно приспособить для решения самых разных прикладных вычислительных задач. Математическая грамотность при этом нужна в полной мере, а программистская - в ничтожной.
И, наконец, третья причина заката дилетантского программирования заключается в изменении организации научной работы. Самостоятельный и самодостаточный исследователь, за казенный счет сидящий безвылазно в лаборатории в одиночку или с парой аспирантов, сейчас почти вымер, уступив место члену коллектива, выполняющему строго определенную функцию, производительность труда которого оценивается с куда большим рвением, чем обуревающие его идеи. Отвлекись он от прямых обязанностей - и босс тут как тут: "Это не ваша проблема!" И ведь босс по-своему прав…
* * *
Лабораторные программисты-дилетанты всегда были разобщены, хотя некоторый обмен опытом поддерживался, в основном через специальные бюллетени, выпускавшиеся фирмами-производителями компьютеров вроде "Хьюлетт-Паккард". Их кустарная деятельность часто не находила понимания у коллег, которые полагали более разумным подождать с автоматизацией исследований, пока технический прогресс не одарит лаборатории системами всего с двумя универсальными кнопками: "ПУСК" и "СТОП".
"Зачем вам компьютер, - с насмешкой спросил мой Начальник, академик Ю. А. Овчинников, - свою зарплату сосчитаете и на калькуляторе!" И на другой день мне принесли от него программируемый калькулятор на 35 шагов. Справедливости ради отмечу, что спустя года полтора Начальник все же выделил нам шестнадцать тысяч долларов.
Изоляция от "большого мира" программирования, скудость хорошей литературы и хилость тогдашнего "железа" пробуждали традиционную изворотливость русских умельцев. Сейчас можно только удивляться их достижениям, способности рационально и виртуозно использовать каждый бит памяти, неведомые даже конструкторам возможности ввода/вывода, остроумные и компактные модификации алгоритмов. Некоторые, порой фантастические, кунштюки я еще смутно помню, но вряд ли современный читатель, избалованный мегагерцами и мегабайтами, сможет оценить их по достоинству…
Как правило, программистская изощренность дилетанта коррелировала с его профессиональным экспериментальным мастерством, но подчас контакт с компьютером открывал глубоко запрятанный талант. Особенно эффектно и неожиданно это происходило с девушками. Возраст особого значения не имел - многие мои сверстники вполне успешно решали свои проблемы, сев за клавиатуру лет в сорок - пятьдесят. Разумеется, я имею в виду тех, кто в эти годы еще не воспарил из лабораторий в кабинеты.
* * *
Любопытно, что некоторые производители ЭВМ явно ориентировались на лабораторных, а заодно и заводских дилетантов. Особенно характерна в этом отношении фирма "Хьюлетт-Паккард", выпустившая в середине семидесятых поразительно удачную модель НР-9825. Даром, что в нем сохранились рудименты прежних хьюлеттовских калькуляторов, - этот настольный компьютер был находкой для исследователя. Приличная даже по нынешним требованиям скорость. Мощный и лаконичный вшитый язык с обилием модулей-расширений, включавший полный набор операций со строками и матрицами, редкую возможность вставлять и исключать из работающей программы отдельные фрагменты. Но самое главное - хорошо продуманные операторы ввода/вывода, числом более двух сотен, позволяли даже "чайнику" уверенно обращаться с 16 (!) уровнями внешних прерываний, программно организуемыми и контролируемыми буферами, четырьмя независимыми таймерами с миллисекундным разрешением, полным протоколом приборной шины IEEE-488 и плоттерным языком HPGL. Уфф! Наверняка я что-то забыл… Да, конечно! Набор всех мыслимых интерфейсов - от BCD до RS-232С - и необозримый ассортимент периферийных устройств.
Этих машин выпустили около сорока тысяч, что по тем временам было очень много. Они отличались малыми размерами и потрясающей живучестью: летали в космос, управляли яхтами в трансокеанских гонках. Моему экземпляру уже лет двадцать, и в нем состарились только резинки во встроенной периферии: принтере и стримере.
Чуть позже появившаяся "Искра-226" по своим возможностям была вполне соизмерима с хьюлеттовскими машинами, исключая, конечно, живучесть. Впрочем, был еще один порок, оказавшийся роковым: весь ввод/вывод для подключаемой аппаратуры приходилось расписывать в микрокомандах, что требовало непомерных усилий и времени.
Казалось, таким специализированным машинам суждено большое будущее, но эволюция пошла иным путем, и та же фирма "Хьюлетт-Паккард", слегка поупиравшись, влилась в ряды производителей РС. Это - отдельная тема…
* * *
Жаль, что находки и озарения дилетантов того времени в значительной мере утрачены и забыты. Не знаю, как за границей, а у наших научных работников не было принято ни патентовать удачные программы, ни продавать их. Да и кому? Впрочем, я знаю нескольких дилетантов, которые с воцарением капитализма вполне к нему адаптировались и умудряются совмещать основную работу с торговлей собственными программными продуктами.
Не подумайте, что я намерен спеть отходную дилетантизму, хотя смена эпох в компьютеризации неизбежно сказывается на его природе. Моя уверенность в живучести дилетантизма основана на убеждении, что только люди, искушенные в любой области, будь то наука, педагогика или еще что-нибудь, знают, какими должны быть предназначенные для них прикладные программы. Как страдаем мы от неукротимой привязанности профессионалов к гигантским и якобы универсальным монстрам, в которых нужный именно тебе фрагмент или забыт, или надежно запрятан. Это одна из мишеней для дилетанта, который, разозлившись, заполнит экологическую нишу, жертвуя временем и силами. А любителю это в принципе недоступно, ибо ему просто неведомо, чего не хватает сравнительно узкой группе квалифицированных специалистов.
Когда-то я сам, разозлившись на несовершенство и громоздкость распространенных в то время библиографических программ, написал свою собственную. Она занимала всего 100 Кбайт на диске, умела делать то, что коммерческим продуктам и не снилось, и хранила собранные данные в предельно компактном виде. Я и сейчас ею пользуюсь и никогда не променяю на неуклюжее чудовище вроде Reference Manager.
* * *
До сих пор речь шла только о вынужденном дилетантизме, которого легко избежать, дай вовремя нужную программу со стороны. Самые психологически стойкие и сфокусированные на основном занятии дилетанты за пределы острой нужды и не выходят. Но иной, склонный к увлечениям, нет-нет, да и клюнет на творческие перспективы и возможность самовыражения, которые открываются для него программированием. Основную специальность он, упаси Бог, не оставляет, но у него появляется, как говорится, хобби. А программистское хобби - одно из самых зловредных по части увлекательности. Вовремя не спохватился - оно разрастается как опухоль, оттесняя все прочее. А ведь вроде полезным делом занимаешься, а не диггеров гоняешь…
Вот пример из собственной практики: я вспоминаю о нем, как вспоминают об увлечении иной женщиной (да, красотка, но сколько времени ухлопал!).
Я ненавидел печатание на машинке с бесконечным замазыванием опечаток, склеиванием фрагментов и прочими прелестями. И написал свой первый редактор еще в конце семидесятых для помянутого выше НР-9825, с однострочным дисплеем и 15 Кбайт оперативной памяти.
Дорвавшись спустя лет семь до ХТ, я немедленно перенес на него своего любимца, снабдив массой полезных примочек, в том числе форматированием без разрыва слов переносами. Редакции взбунтовались: им было не под силу сосчитать число печатных знаков при переменном числе пробелов. Ладно, я сочинил роскошный алгоритм переносов, и тут выяснилось, что химические термины нельзя переносить по правилам, обычным для русского языка. Я завелся и преодолел эту трудность, но недели две было загублено.
Потом, забывшись, я стал бороться с опечатками. Прошерстив здоровенный самиздатовский файл стихов Бродского, я установил, какие двухбуквенные сочетания в русском языке исключены или крайне редки, и разом сократил до минимума ошибки при наборе. Еще недели как не бывало.
И, наконец, мне пришла в голову безумная идея вообще избавиться от дурацких опечаток, притом осуществив текущий орфографический контроль при наборе без использования словаря. На этот раз я пробежался по всей великой русской литературе и извлек из нее все разрешенные трех- и четырехбуквенные сочетания. Получилось весьма эффективно и компактно, но где тот месяц?
Впредь я закаялся отдавать дань любительству. Хобби, знай свое место, - отныне я дилетант, и только. Всего раз нарушил клятву, правда, во время отпуска. Меня "достали" литературные редакторы, и пришлось сочинить нечто вроде примитивного контролера стиля. И тут выяснилось, что после редактирования в "Знании-Силе" число погрешностей сокращается, а после вмешательства "Химии и жизни" - увы, увеличивается (посмотрим, как выйдет с "Компьютеррой"…).
Кстати, примерно через год я случайно обнаружил в НЖМД изящную программу Дмитрия Кирсанова Fresh Eye, тоже своего рода контролер стиля, но с чуть иными задачами и совсем другим алгоритмом. Дмитрий прислал мне исходник, но комментировать его отказался - за делами все забыл. Видно, по моей классификации, он настоящий дилетант. Не исключено, что Кирсанову принадлежит приоритет и в бессловарной проверке орфографии: он рассказал, что этим занимался в юности. Впрочем, дилетантам чужды споры о первенстве…
И своим детищем, и кирсановским "Свежим Взглядом" я пытался одарить литературных редакторов и знакомых авторов. Но они не поняли своего счастья и продолжают воевать друг с другом голыми руками.
* * *
Есть у дилетантского программирования один, чисто психологический, аспект, значение которого со временем только усиливается. Напомню, что в основе этого занятия лежит потребность в творческом использовании некоего нового, сложного и эффективного инструмента. Так, токарь применяет хитрый резец, а ваша жена - кухонный комбайн. Им и в голову не придет отдавать этим полезным приспособлениям большую дань, чем они того заслуживают. Не то современный компьютер…
Для наших детей этот, пусть, очень мощный, но всего лишь инструмент грозит превратиться в своего рода кумир, расширенный вариант "тамагочи", помесь супертелевизора с игровым суперавтоматом. Райское наслаждение!
Не то, чтобы я призывал с этим бороться (бесполезно!), но в школьном образовании следовало бы больше внимания уделять свободному владению компьютером при решении разнообразных прикладных задач. И не программированию как таковому учить, а умению и вкусу использовать его применительно к физике, химии, биологии и даже словесности. Кто помнит, именно этого добивался от читателей один из самых замечательных учебников программирования, книга Мак-Кракена и Дорна "Численные методы и программирование на ФОРТРАН'е".
Случись так, - энергия талантливых молодых людей не уйдет в свисток системных фокусов, не рассеется на освоение мгновенно устаревающих модных версий Windows, а будет нацелена на будущее, когда еще неведомые проблемы заставят их стать дилетантами в еще неведомых сегодня областях.