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

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

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

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

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

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

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


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

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

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




Куда копать?

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

Перейти на страницу:

Все книги серии Компьютерра

Похожие книги

«Если», 2005 № 12
«Если», 2005 № 12

Алексей ЗАРУБИН КРУГИ НА ПЕСКЕ Дороги, которые мы не выбираем, все равно приводят к желанной цели… если к тому времени остаются какие-либо желания. Екатерина СЕДАЯ, Дэвид БАРТЕЛЛ УЛЫБАЮЩИЕСЯ ПАРАЗИТЫ Это не конец света, это всего-навсего подарок генетика любимой женушке к годовщине свадьбы. Майкл СУЭНВИК Я ТОЖЕ ЖИЛ В АРКАДИИ Не сотвори себе кумира: из бронзы ли, плоти, полимера или какой другой материи… Получив премию «Хьюго» за действия неунывающей парочки друзей, писатель втравил их в новую историю. Эдуард ЯКУБОВИЧ ЛИНИЯ ЖИЗНИ Герой забыл одну простую истину: попытки узнать свою судьбу часто кончаются плохо. Или очень плохо. Джеффри ЛЭНДИС ДОРАДО Время — весьма жестокая штука. Нил ЭШЕР СТРУД Кто из этих братьев-инопланетян человечеству младший, а кто старший? Поди разберись! Мэтью ДЖАРП ГОРОД ЗДРАВОМЫСЛИЯ …стоит под угрозой уничтожения. Предотвратить взрыв берется бывший пират. Тимофей ОЗЕРОВ СПАСИТЕ БАБОЧКУ! Более странной экранизации у Брэдбери, пожалуй, еще не бывало. Дмитрий БАЙКАЛОВ РАЗГОВОРНИК ДЛЯ КИНОМАНА Фантастика или мелодрама: кто «крылатее»? Вероника РЕМИЗОВА ОЖИВЛЯЮЩИЙ ЧУДОВИЩ Один из сотрудников журнала «Если» в детстве даже подрался с одноклассником, поспорив о том, как же движется скелет в знаменитом фильме о Синдбаде. Раскрываем секрет — и ему, и читателям. ВИДЕОРЕЦЕНЗИИ Взбесившийся ИИ и другие герои. Эдуард ГЕВОРКЯН АЛЬТЕРНАТИВА ЗДРАВОМУ СМЫСЛУ Итоги очередного интернет-голосования заставили погрузиться в воспоминания известного писателя и публициста. РЕЦЕНЗИИ Кнут и пряник, убеждены рецензенты, есть идеальный метод в деле воспитания фантастов. КУРСОР Неужели у нас снимут фильм по «Обитаемому острову»? Дмитрий ВОЛОДИХИН, Аркадий ШТЫПЕЛЬ ПРОРОКИ И БУРЕВЕСТНИКИ Кажется, «фантастика ближнего прицела» вновь обретает популярность. Пока только у авторов. ЭКСПЕРТИЗА ТЕМЫ Определенно, прозаики что-то скрывают. Наверняка у них припрятана где-то машина времени — иначе как еще объяснить наличие у экспертов этих «завтрашних» документов? ПЕРСОНАЛИИ Геолог, биохимик, астрофизик, юрист — кого только нет в нашем общем доме. ПРИЗ ЧИТАТЕЛЬСКИХ СИМПАТИЙ Вниманию Большого жюри: срок для определения лучших из лучших сокращается!

Аркадий Штыпель , Дмитрий Байкалов , Дмитрий Володихин , ЕСЛИ Журнал , Журнал «Если» , МАЙКЛ СУЭНВИК

Фантастика / Журналы, газеты / Научная Фантастика