Современная электронная библиотека ModernLib.Net

Компьютерра (№255) - Журнал «Компьютерра» № 34 от 18 сентября 2007 года

ModernLib.Net / Компьютеры / Компьютерра / Журнал «Компьютерра» № 34 от 18 сентября 2007 года - Чтение (стр. 4)
Автор: Компьютерра
Жанр: Компьютеры
Серия: Компьютерра

 

 


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

Гельмгольц в "Руководстве по физиологической оптике" (1896) объяснял эти явления так: "Нетрудно видеть, что все свойства, которые мы им [объектам реального мира] приписываем, означают не более чем воздействия, производимые ими либо на наши органы чувств, либо на другие внешние объекты. Цвет, звук, вкус, запах, температура, гладкость, твердость относятся к первому классу; они соответствуют воздействиям на наши органы чувств. Химические свойства аналогичным образом связаны с реакциями, т. е. воздействиями, производимыми рассматриваемым физическим телом на другие. Так же обстоит дело и с другими физическими свойствами тел: оптическими, электрическими, магнитными… Отсюда следует, что в действительности свойства объектов в природе вопреки их названиям не означают ничего присущего самим объектам как таковым, а всегда указывают на их отношение к некоторому второму телу (в том числе к нашим органам чувств)".

Так что глазомер, некоторая совокупность зоркого глаза и интуиции, бесполезен даже в ряде ситуаций Среднего Мира, нашего обычного мезомира. Давайте пока не нырять внутрь атома, ограничимся миром электромагнитных явлений. Ими пользуется вообще вся цивилизация. Но откуда они пришли к нам?

Вот подводные лодки и воздушные корабли. Их мы видим в записных книжках Леонардо да Винчи, исполненных до оформления современной науки. Скрытые знания, наследие тайных обществ? Да нет, элементарная наблюдательность и способность к аналогиям. Мы же видим и стремительных рыб, и зависающих над цветками насекомых. Вот вам и прообразы вертолетов и субмарин.

А радио? Откуда оно пришло?

Возьмем книгу Василия Щепетнева "Темные зеркала". Альтернативная история с твердой научной фантастикой. Подчеркну для любителей жанра – именно твердой (hard SF). Тридцатые годы альтернативного двадцатого века. Конкуренция не рухнувшей в 1917 году Российской и Британской империй в деле освоения Марса. Никаких ракет – между планетами перемещаются неким пространственным переносом. Используя технологии, которые могли бы быть отдаленными следствиями геометрических многомерных теорий Калуцы-Кляйна, 5-оптики Бартини-Румера.

И в этом мире нет радио. Немыслимо? Но ведь оно не имеет природных аналогов. Электромагнитный шум молний, Солнца, Юпитера, центра Галактики? Так ведь нужно создать приборы, способные его улавливать.

А откуда приходят эти приборы? Что подвигло Гельмгольца порекомендовать Генриху Герцу (1857—94) заняться его опытами? Теория Максвелла. А что такое теория Максвелла? Можете ее объяснить наглядно? Автор этих строк, во всяком случае, не берется. Похоже, что к нашим услугам одно лишь высказывание Герца: "Теория Максвелла состоит из уравнений Максвелла". Ни чувства, ни интуиция, ни даже сама материя, данная нам в чувственном восприятии. Только математика. То есть изобретение радио – результат построения теории, рожденной разумом человека. Больше плод математики, чем природы.

А вот еще Герц: "Трудно отделаться от ощущения, что эти математические формулы существуют независимо от нас и обладают своим собственным разумом, что они умнее нас, умнее тех, кто открыл их, и что мы извлекаем из них больше, чем было в них первоначально заложено" [Клайн М., Математика. Утрата определенности. М., 1984, с.389.].

Так что те, кто говорят, что могут на основе знаний средней школы объяснить, как работает радиоприемник или телевизор, или холодильник, мягко говоря, заблуждаются. Функционирование этих общеупотребительных приборов описывает лишь математический формализм. Доступный немногим. И нет ли тут каких-либо обходных путей? Не царских, но общедоступных? От их существования, а вовсе не от упражнений правозащитников зависит судьба демократии. В полисе Эллады каждый гражданин мог объективно судить о навыках стратега и вороватости логисты [Чиновник, ведающий снабжением армии. От его должности произошла логистика]. Для этого хватало навыков домохозяина. А о судьбах нанотехнологий, которые определят жребии наций, даже в условии полноты информации смогут судить единицы. И не облеченные доверием избирателей или начальства, а владеющие формализмом квантовой механики [Это, к слову, камень в огород нетерпеливых читателей, которым-де тема о нанотехнологиях "ничего не объясняет". «Объяснить» нанотехнологические процессы, квантовую механику, нестандартный анализ и т. д. и т. п. может лишь соответствующее образование в определенной области. Ожидать понимания, прочитав журнальную статью, мягко говоря, наивно. И даже если вы чувствуете, что разобрались в незнакомой теме, перевернув последнюю страницу, – понимание это ложное. – Прим. ред.].


Давид Штраус

Давид Фридрих Штраус (1808—74), германский теолог, философ, историк и публицист. Автор очень важной для понимания девятнадцатого века книги "Жизнь Иисуса" ("Das Leben Jesu", 1835), в которой он провозгласил Иисуса Христа исторической личностью, но находил, что большая часть представлений о нем имеет позднейшее происхождение, и пытался выяснить, из каких греческих, еврейских и восточных элементов составились эти представления.

Приглашение Штрауса на кафедру богословия в Цюрих вызвало революцию и падение правительства в 1839 году. Штраус получил отставку, еще не вступив в должность. Небывалый случай влияния науки на политику!

Штраус отвергал догматическую религию; вместе с Фейербахом защищал пантеизм; из дарвинизма выводил неравенства людей и симпатии к феодализму; во время Франко-Прусской войны 1870 года был одним из германских шовинистов. Но именно ему принадлежит методология научного исследования мифов.




Три лика мифа

Миф ныне – прежде всего нечто небывалое. Миф о коммунизме, которому надлежало быть построенным к 1981 году. Миф об отдельных квартирах к году 2000-му или об ипотеке.

В первой половине ХХ века в Европе миф воспринимался как синоним идеологии. Вот "Миф двадцатого века" А. Розенберга. Книга, без знакомства с которой невозможно понять идеологию германского национал-социализма, обошедшуюся нашей стране в сорок три миллиона душ.

А есть и третье понимание мифа. Оно принадлежит богослову девятнадцатого века Давиду Штраусу.

И вот в русском переводе книги Штрауса "Das Leben Jesu fur das deutsche Volk bearbeitet" (1864), "Жизнь Иисуса, переработанная для немецкого народа", дано очень интересное понимание мифа: "История, которую миф рассказывает, необходима ему, чтобы выразить идею; чистая идея ускользнула бы от него" [Штраус Д.Ф., Жизнь Иисуса. Т. 1—2. С-Пб., 1907, т.1, с.147]. То есть мифы, по Штраусу, есть выражение идей с помощью повествования. Рассказ должен навести слушателя на идею, которая ускользнула бы от него, будь выраженной явно, коротко и четко.

Итак, традиционные примеры и иллюстрации, которыми поясняется изложение естественных дисциплин, обычно порождают мифы в первом значении этого слова – электроны на внутриатомных орбитах, силовые линии…

Когда-то Максвелл, слушая проповедника, смутно излагающего мысли, советовал тому пользоваться наглядными примерами. Однако сам отнюдь не прибегал к подобным методам переложения своей теории (ну, как минимум пытался – ведь демон Максвелла возник не сам по себе? – Прим. ред.). И когда такие иллюстрации появлялись, они уводили сознание в сторону от сути дела. Скажем, поиски механических аналогий для электромагнитных волн долго удерживали в научном сознании ложную концепцию эфира.





Но может быть, возможен еще один (подчеркнем – гипотетический) путь? Вспомним небывалые гравюры Мориса Эшера, изображающие объекты, отсутствующие в реальном мире.

А может быть, возможны графические образы, наглядно отображающие то, что отсутствует в мезомире, в нашей обыденности, но объективно существует в микро– или мегамирах? Или хотя бы в куда более простом динамическом мире электромагнитных процессов теории Максвелла?

И вот (опять "может быть"!) такие образы окажутся способными исполнять задачу повествования в мифе – формировать у воспринимающего, у слушателя или зрителя идею. Причем идею, пригодную для дальнейшей практической работы над ней. Еще в 1970-е годы выдающийся оружейник Рихтер (буква «Р» в пушках НР) призывал будущих конструкторов смелее доверять силе инерции, а не подкреплять ее пружинами и рычагами. Доверяем же мы тому, что она доведет до цели вылетевший из ствола снаряд [Хотя известен и контрпример. Финский пистолет Lahti был очень хорош в оригинальном исполнении L-35 и зауряден в шведской копии M-40. Дело в том, что шведы выбросили пружину запирающего клина затвора, необходимую для безукоризненной работы автоматики в суровых климатических условиях, понадеявшись на одну лишь инерцию]. А проектируя наномеханизмы и прочие устройства квантовомеханических размеров, мы должны доверять силам, отсутствующим в мезомире. Так что гипотетическая визуализация математических описаний реальности может оказаться одной из критических технологий будущего.

При оформлении использованы литографии Мориса Эшера «Относительность» и «Водопад» и их современные «копии», изготовленные с помощью Lego Эндою Липсоном

ТЕМА НОМЕРА: Счищая плесень с цифр

Автор: Юрий Романов

Самолетам и ракетам повезло (и то, кстати говоря, не всем) – их свозят на старые аэродромы, красят, снабжают пояснительными табличками… Монино, авиабаза Эдвардс, Хьюстон… О старых машинах пишут монографии, в которых пофамильно названы создатели бортовых систем и даже отдельных агрегатов, приводится хроника испытаний, отчеты о выполненных доработках и данные о количестве изготовленных машин и местах их «трудовой деятельности». А вот компьютерам не повезло.

Научно-технический «галоп» 1950—80-х (по выражению Анатолия Рудого, заметку которого вы прочтете ниже), восхитительная гонка за быстродействием, памятью и плотностью упаковки компонентов, не дала возможности что-то оставить "для истории". Проведя маленькое исследование, я убедился, что образцов античной и средневековой вычислительной техники – всевозможных вычислителей для парусников, а также абаков, конторских счетов, арифмометров и разного рода «Рейнметаллов» в музеях полным-полно. А вот ЭВМ – отнюдь. Подавляющего большинства из многих десятков их типов сегодня не существует "в железе" [Поэтому так популярны "виртуальные музеи" вычислительной техники в Интернете. Можно, например, взглянуть на nic.icom.org/vlmp/computing.html или зайти на www.bashedu.ru/konkurs/tarhov/russian/museum.htm], а те, что сохранились, – поломаны. Последнее обстоятельство я хотел бы подчеркнуть особо. Ведь в отличие от самолетов, например, Монинского авиамузея, которым летать совсем не обязательно (а некоторым и вовсе противопоказано), старые ЭВМ, если они исправны, представляют собой аппаратную среду для обработки и записи-хранения-считывания информации на старых носителях: перфолентах, перфокартах, магнитных барабанах, дисках и магнитных лентах.

Так вот. Информации на старых носителях не повезло еще больше, чем компьютерам. Мало того, что исправного периферийного оборудования для работы с ними практически не осталось, так даже описания форматов, протоколов, программ-драйверов и операционных систем днем с огнем не сыщешь – весь этот пласт информации "ушел глубоко под землю" за какие-то 25—30 лет (!), частью разрушившись, частью будучи «придавлен» позднейшими "культурными слоями" компьютерной цивилизации.

На праздновании "в узком кругу" пятнадцатилетия (всего-то пятнадцатилетия!) запуска «Энергии-Бурана» я с удивлением узнал, что сохранились лишь бумажные рулоны распечаток на АЦПУ-128 с выборками из данных бортовой и наземной телеметрии, позволяющие воссоздать ход исторического полета. Все, что не было распечатано на бумаге, практически потеряно, так как магнитные ленты для БЭСМ-6 сегодня прочесть не на чем. Разумеется, технически задача чтения этой информации решаема – на "физическом уровне" для особо пострадавших лент или же путем воссоздания в аппаратуре соответствующих считывающих устройств, но… Кто же все это оплатит? И кому это нужно?

Короче говоря, главный вопрос: зачем?

Мне кажется, есть смысл процитировать Карла Харбера, работающего в калифорнийском Университете Беркли над компьютерным восстановлением звуковых записей XIX века, сделанных на восковых валиках фонографов: «История – это то, что интересно и понятно всем. И когда ты видишь или слышишь ее, когда она фактически происходит у тебя на глазах, это открывает для людей совершенно новые измерения».

Ладно, валики фонографов… Ведь и я когда-то думал, что с изобретением лазерных дисков вся история нашего времени, научная и техническая информация наконец-то будет надежно сохранена для следующих поколений. Похоже, я ошибался. Пройдет лет тридцать, и какой-нибудь историк (а также программист, инженер, конструктор, просто любитель музыки, видео или игр), отыскав CD-архив наших годов с интересующей его информацией, будет долго соображать, на чем же его прочесть. А прочесть-то и не на чем…


Творенья старых мастеров

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


Мы с коллегами заметили, что такого рода работа чрезвычайно расширяет кругозор учащихся. Действительно, разбираясь в структуре старых систем команд, архаичных методов адресации и организации массивов данных, пытаясь понять логику интерфейсов, студент, образно выражаясь, выходит из колеи привычных сегодня представлений: "вот это делается так и никак иначе".

В ряде случаев он убеждается, что давно придуманы гораздо более красивые решения, нежели широко применяемые сегодня, причем убеждается, "лично расковыряв" старый код или протокол, восстановив алгоритм, который теперь сам может использовать на практике. Полученные таким образом знания крепче "держатся в голове", чем усвоенные на лекциях.

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

И, наконец, сам процесс… Это же археология чистейшей воды! Увлекательнейшее занятие! Работающей аппаратуры почти не осталось даже в музеях. Электронным вычислительным машинам, особенно ламповым и транзисторным, не повезло – мы так быстро проскочили эти ступени технологии и так стремились к БИСам [БИС – Большая Интегральная Схема], что даже не старались сохранить, пусть и в качестве музейных экспонатов, образцы концептуальных ЭВМ и их периферийных устройств. Высокий "металлургический спрос" на старые радиодетали и аппаратуру довершил дело…

Да что говорить, сегодня в архивах многих знаменитых организаций-разработчиков вычислительной техники отсутствуют схемы, описания алгоритмов, исходные тексты программ и документация на аппаратуру, ими же созданную [Своеобразную роль тут сыграл пресловутый "режим секретности". Эти материалы очень часто имели гриф «секретно», что автоматически включало их в стандартную процедуру учета, хранения и… уничтожения «грифованной» документации. В результате абсолютное большинство их было в плановом порядке уничтожено, с записью в акте о том, что они не представляют научной и исторической ценности]. Наши ребята-студенты и старшеклассники столкнулись с проблемой гибели целых архивов данных на магнитных лентах, которые либо не читаются, либо – что чаще – их вообще не на чем читать, так как соответствующего исправного оборудования просто не существует.

Кстати, когда я говорил о методической многоплановости всей этой «археологической» деятельности, то имел в виду, что возрастные границы участников такой работы тоже очень широки. Младшие школьники, например, с удовольствием занимаются имитационным моделированием – по старым фотографиям и книжным описаниям воссоздают на экранах мониторов анимированные «модели» ЭВМ с «работающими» устройствами ввода-вывода, панелями индикации, инженерными пультами и т. п. Однажды группа школьников столкнулась с неожиданной трудностью – машина МИР-1 [В машинах серии МИР разработки Киевского института кибернетики впервые в мире встроенными микропрограммными средствами были реализованы возможности решения уравнений в аналитической (символьной) форме] в качестве устройства ввода-вывода и операторской консоли была укомплектована ГДРовской электрической пишущей машинкой «Зоемтрон», звук работы которой ребята хотели вставить в программу визуализации модели этой во многом замечательной ЭВМ. Ничего не вышло! Ни одного «живого» «Зоемтрона» мы так и не нашли, а те два экземпляра, которые все-таки отыскались в… инструментальной кладовой одного завода, были безнадежно поломаны и лишены плат управляющей электроники. Понятно, что и шум оригинальных воздуходувок, который так хорошо помнят пользователи давешних малых ВЦ, мы записать "в цифре" так и не смогли.


Анатолий Рудой,

старший преподаватель компьютерного колледжа



Археология исходников

Автор: Виктор Шепелев

Из всех областей «цифровой археологии» – дисциплины использования устаревшего, но все еще ценного контента – труднее всего очертить границы копания в исходном коде «старых» программ и библиотек. Главная тому причина – применительно к исходникам сами понятия «старости» и «устаревания» обрастают новыми, невиданными в других областях смыслами.

Предпосылки старения

Что такое вообще "археология исходников" и зачем она нужна? Примем в качестве первого приближения, что это анализ исходного кода некоторой устаревшей системы (а может быть, программы или библиотеки) с целью понять ее логику – и впоследствии эту логику изменить, воспроизвести в другой системе или встроить данную систему в новую и т. п. «Археологией» приходится заниматься и в тех случаях, когда знаковая система анализируемых исходников нам незнакома – то есть, «двигаясь» по тексту, написанному на "незнакомом языке", необходимо этот «язык» изучить.

Я не случайно взял «язык» в кавычки. Дело в том, что обычное представление о «древнем» коде, как о коде на языке программирования вроде Fortran или Cobol, – крайне упрощенное. Как раз по Фортрану вполне можно найти учебник или справочник. Здесь нет необходимости восстанавливать его правила только по исходному тексту программы. Проблема в том, что любой достаточно объемный кусок кода, помимо «основного» языка программирования, содержит и использует множество «подъязыков» и знаковых систем. Это служебные процедуры и классы, это используемые библиотеки и API операционной системы, это различные паттерны и встроенные алгоритмы. Единственная строчка кода может породить множество вопросов и потребовать многих дней сосредоточенного анализа для выяснения смысла и логики.

Таким образом, понятие «древности» кода (что есть, по сути, характеристика его непрозрачности для чтения и изменения в силу «забытости» правил и логики его написания) определяется не только и не столько языком программирования. Код может использовать устаревшие (а некогда общедоступные) библиотеки, даже документацию по которым сегодня найти весьма затруднительно. Код может быть написан для устаревшей ОС и широко использовать ее сервисы (например, для чтения/записи файлов, работы с сетевыми или графическими примитивами); или для устаревшего «железа» под специфику его процессора, памяти и портов. И, наконец, код может быть "устаревшим условно" – например, в нашей организации решили отказаться от библиотеки Х, так как не осталось людей, в ней разбирающихся, а кое-какой код, ее использующий, все еще актуален и активно применяется. При этом Х может быть вполне современной библиотекой, но в контексте нашей конторы исходники, ее использующие, – "древние".

Впрочем, помимо всех «объективных» компонентов знаковой системы кода, есть и «субъективные» – та часть процедур, библиотек и идиом, которая создана непосредственно автором (авторами) программы. И здесь-то может быть зарыта самая крупная собака "археологии исходников". Программист, работающий над нетривиальной задачей (к тому же работающий, как правило, итеративно – написание-отладка-исправление; и добро еще, если исправления сделаны не "абы запустить"), так вот этот программист, помимо использования существующих знаковых систем, создает множество своих. Они могут быть довольно стройны и логичны – а могут и не быть; объем и связность частей проекта превращает "полное погружение" в него в задачу не для слабых духом [Более того, все это справедливо даже для случая, когда автор кода – ты сам, но с момента написания/отладки прошло значительное время. Искусственность и многочисленность "самодельных знаковых систем" приводит к перегрузкам памяти – логика кода, в который не "закапывался с головой" на этой неделе, быстро забывается. Отсюда – даже если автор некоторого кода "как бы под рукой" – это не значит, что код не потребует "археологических изысканий"].

Совместная работа нескольких авторов (или группы разработчиков) еще больше осложняет задачу – за счет «интерференции» понимания происходящего в проекте (то есть все тех же знаковых систем, на которые разные участники могут смотреть немного по-разному).

Никакие спецификации и комментарии, к сожалению, не могут ни поспеть за кодом, ни исчерпывающе описать все нюансы – разве что в идеальном мире.

Совмещение «самодельных» знаковых систем с проблемой "объективно древних" библиотек, окружений, языков завершает картину того, чем же является "археология исходников". Суммируя вышесказанное, можно сформулировать: практически любые исходники начинают устаревать в тот самый момент, когда их перестают изменять. Устаревать не в смысле соответствия задаче (хотя и это тоже), а в смысле понятности тому, кто вздумает в них разобраться.


Технологии производства окаменелостей

Читатель, знакомый с различными методологиями разработки, может заметить, что «недревнеющий» код, код постоянно обновляемый и частично переписываемый, напоминает о гибких agile-методологиях, с их непрерывной интеграцией и постоянным рефакторингом. Кроме того, мы знаем, что "код, не покрытый тестами, не существует".

Противопоставить этому можно многоступенчатые крайне формализованные процессы типа RUP (Rational Unified Process), где все аспекты работы проекта единожды специфицированы, документированы и изменения в «стерильный» код вносятся крайне неохотно. В нашей «археологической» метафоре такие методологии разработки, кажется, самой природой предназначены сразу производить «окаменелости» – монолитно, надежно, монументально, сто лет простоит. Но вот любое исследование или внесение изменений…




Куда копать?

В идеальном мире программистам не приходилось бы возиться с "историческими артефактами" (по крайней мере, не приходилось бы слишком часто). Мы бы работали лишь с небольшими объемами "кода текущей задачи", который легко перерабатывать и столь же легко удерживать в голове целиком; а библиотеки и программы использовали бы лишь единожды скомпилировав, в бинарном виде. Реальность, к сожалению, куда печальнее и круче.

Ситуации, в которых программист тратит бо, льшую часть своего времени на анализ чужого, давно и не здесь написанного кода, встречаются сплошь и рядом. Причин может быть масса; помимо тривиальной – доставшаяся "по наследству" система или модуль, может возникнуть необходимость разобраться в работе (или исправить баги) исходников используемой (открытой или купленной) библиотеки, поскольку лучшим «справочником» по сложному формату или протоколу зачастую является библиотека, этот формат-протокол реализующая, и т. п.

Кстати говоря, чтение чужого хорошо написанного кода является неплохим подспорьем для самообучения (в том числе – обучения собственно искусству чтения).

Продолжим. Для анализа чужого кода, особенно кода крупного проекта, "с высоты птичьего полета" (построение ментальной модели, выяснение основных знаковых систем) исходники принято сводить к набору "основных сущностей" [Мы здесь не останавливаемся на том, что "объективные знаковые системы" – использованные языки программирования, API и библиотеки – все же придется изучить. Впрочем, для некоторых частных случаев, наиболее востребованных, существуют автоматизированные средства перевода с одного языка на другой (например, Cobol->Java)]. Для популярных языков программирования, в «обиходе» которых существует множество инструментов анализа и проектирования, это может выглядеть как автоматизированное построение диаграмм классов (иерархий наследования и включения и т. п.) или функций и процедур (иерархий вызовов). Здесь еще может помочь спецификация или другая документация на проект (на более низких уровнях, как правило, любая документация малорелевантна коду).

Как только мы спускаемся уровнем ниже "общего плана" – до отдельных строк кода, параметров функций и времени жизни переменных [Знаменитый теоретик computer sciense Гради Буч называет это "археологией при помощи зубной щетки"], – никакого другого метода понять и разобраться, кроме чтения строки за строкой, не остается.

Более того, и чтение кода без готовых, заранее поставленных вопросов – то есть просто "просмотр для галочки" – практически бесполезно. Самый же эффективный метод исследования – «деятельное» чтение, то есть участие в работе исследуемых исходников. В зависимости от свойств исследуемых кусков кода и окружающей среды "деятельное чтение" может означать, например, многократное выполнение «древней» программы с постепенным изменением различных частей ее кода; или прогонку в отладчике, с отслеживанием значений разных переменных; или «заимствование» непонятного куска в «чистую» среду (программу-заглушку) для выяснения принципов работы этого куска. Здесь же могут помочь модульные тесты (специальный код, тестирующий различные аспекты функциональности) – если они прилагались к исходникам, это куда полезнее любой спецификации; если же нет – могут быть написаны с нуля как один из видов деятельности в процессе исследования.

Придирчивый читатель мог бы заметить, что автор упускает из виду "объективно древние" исходники, которые по той или иной причине – нет старого компилятора, нет старой ОС, нет старой библиотеки – просто не могут быть собраны и запущены. Автор не упускает. В этом случае "деятельное чтение" просто становится сложнее – приходится изучать "древнюю драгоценность" почти вслепую; в простейшем случае (чтение интереса ради) – «запуская» код в уме; в более сложном (необходимо таки заставить старую библиотеку работать; или переписать старый алгоритм на новом языке) – по кусочку переводя проект "на новые рельсы" и тщательно анализируя результат.

Короче говоря, практически единственный честный и полноценный способ исследования "археологических древностей" – полное переписывание; не обязательно «честное», оно может выглядеть просто как удаление частей исходника и постепенное их возвращение на место – тем не менее других вариантов "качественного ознакомления" с артефактом человечество пока не придумало [Другой вопрос, многие ли «древности» стоят таких трудов?].

Но самое смешное, что когда «старый» код [Или извлеченные из него идеи] станет «новым», твоим, родным, частью проекта, – он неизбежно начнет стареть, чуть только отведешь глаза, перестанешь обновлять и пересматривать эти части исходников. Остается лишь повторять, как и все, вслед за Черной Королевой: "Здесь, знаешь ли, приходится бежать со всех ног, чтобы только остаться на том же месте!"


Примеры и иллюстрации

Пример довольно простого кода, который для понимания может потребовать длительных изысканий, – быстрый алгоритм нахождения обратного квадрата числа (1/яx), приписываемый разработчику Quake Джону Кармаку. Алгоритм использует метод быстрых приближений Ньютона и включает следующую «очевидную» строчку с использованием магического числа (сопутствующий ей комментарий, как правило, встречается во всех популярных описаниях алгоритма):


i = 0x5f3759df – (i >> 1); // what the f..k?


Пример переписывания «мнимо древнего» кода – одно из первых в истории веб-приложений бизнес-класса, Viaweb. Оно было написано знаменитыми хакерами Полом Грэмом и Робертом Моррисом на Lisp и через некоторое время куплено Yahoo и переименовано в Yahoo!Store. Впоследствии Yahoo, озабоченная экзотичностью Lisp’а, заставила своих программистов провести «археологические изыскания» для переписывания приложения с нуля на Perl и C++. По слухам, код современного Yahoo!Store очень похож на интерпретатор Lisp (иллюстрируя тем самым 10-е правило Гринспуна).


Пример проблемы объективной древности – Strongtalk, эффективная реализация языка Smalltalk с возможностью статической типизации была некогда куплена Sun, а через много лет возвращена программистскому сообществу как open source. Естественно, все исходники виртуальной машины (языки – C и ассемблер) требовали древних версий компиляторов. И если C-часть была «переведена» на современный диалект языка довольно быстро, то ассемблерные куски до сих пор требуют Borland TASM 4.0 (еще DOS’овская версия), поэтому приходится распространять как исходный код, так и скомпилированные «энтузиастами-археологами» файлы.


Пример «археологических изысканий ради понимания алгоритма» – мы знаем, что формат файла Microsoft Word как таковой существует.


  • Страницы:
    1, 2, 3, 4, 5, 6, 7, 8