| Свежий номер №10 (387) / В плену у совершенства Дата публикации: 12.03.2001 Игорь Гордиенко, gordi@computerra.ru
WEB-мастер Должен признаться, что выбор названия отчасти злонамерен. В семидесятые я, как и все, был насильно вовлечен в реализацию идей структурного программирования, поскольку не мог вынести обвинения в неструктурированности своих программ. Теперь у меня есть возможность поквитаться. Вводя термин «грамотное программирование», я возлагаю на всякого, кто его слышит, моральное обязательство. Никто ведь не захочет признать, что пишет неграмотные программы. Программист программирует, компилятор компилирует, пользователь использует - так выглядит программирование снаружи. Погружаясь внутрь ремесла, можно сделать три удивительных наблюдения.
На поверку программирование оказывается по преимуществу «коммуникативной», а не «производственной» практикой, и проблемы программирования как профессии - по большей части проблемы, типичные для коммуникативных практик: нормирование «речи» «языками» и развитие «языков», исходя из потребностей «речевой» выразительности и объяснительной потенции. В кавычках «язык» и «речь» стоят только потому, что «язык» здесь - аналог не только языков (включая профессиональные арго), но и нормирующих знаковых систем, языками в строгом смысле не являющихся (математической и химической нотации, биологической номенклатуры, схемотехники, чертежных норм). «Грамотное программирование» и WEB В своей ранней статье «Грамотное программирование» («Literate Programming» можно перевести и как «просвещенное программирование») Кнут предлагает изменить основную парадигму: «Вместо того, чтобы полагать своей главной задачей инструктирование компьютера, давайте сконцентрируемся на объяснении того, чего мы хотим от компьютера, человеку» [1]. Для реализации этой парадигмы Кнут предложил определенный инструментарий - WEB, позволяющий, и даже навязывающий одновременную работу над текстом программы и разработческой документации к ней. WEB 1 - это, по сути, метаязык, строящийся на основе двух формальных языков: языка программирования и языка разметки текста. Первоначально Кнут использовал Паскаль и TеX, соответственно, но заложил подход достаточно общий, чтобы впоследствии круг поддерживаемых языков программирования расширился (сегодня он включает C, C++, Java, Lisp, ML и др.). Из используемых систем на базе WEB (их число перевалило за дюжину) наибольшее распространение получила, видимо, CWEB, разрабатываемая Кнутом и Сильвио Леви с 1987 года [4]; CWEB адаптирована к использованию C в качестве языка программирования. На сайте [3] можно найти примеры использования других языков программирования и эксперименты с другими языками разметки. В этой главке я использую CWEB как пример WEB-системы. CWEB предполагает, что программист структурирует свою работу, разбивая ее на «секции» (которым могут соответствовать «модули», «подпрограммы/функции» или просто фрагменты кода; Кнут и Сильвио рекомендуют ограничиться «дюжиной строчек» [4]), причем каждая секция состоит из трех частей:
Далее предполагается, что все изменения, которые вносятся в программу, производятся на уровне CWEB-файлов - «метаисходников» в своем роде. CWEB-файл подвергается двоякой обработке:
Таким образом поддерживается синхронность нелинейного (состоящего из «переплетающихся», как паутина (web), кусков) кода и разработческой документации. Будучи использованной, WEB-система навязывает программисту элементы грамотности по Кнуту - концентрацию на экспозиции материала и стиле (что, разумеется, не гарантирует адекватность этого стиля), начиная от декомпозиции программ на секции и кончая такими вещами, как выбор адекватных имен и использование понятных конструкций. WEB и Web: код как публичный контент Позволю себе высказать достаточно резкий тезис: в то время, как при традиционном «комнатном» общении участников того или иного проекта (включая сюда не только программистов, но и технических писателей, тестеров, администраторов) грамотность программирования является пожеланием (или моральным требованием, см. эпиграф), в современных моделях, предполагающих телеобщение участников и их ротацию в ходе проекта, она - необходимость и техническое требование. Эти соображения, а также недавно введенная в инструментарий упомянутая идея «гипердокументации» (как с перекрестными ссылками, так и ссылками на код) позволяют взглянуть на идеи грамотного программирования в несколько ином аспекте: исходный код становится просто одним из видов публичного контента, доступного посредством совокупности соглашений и их реализаций, известных как WWW. И оказывается, что WEB-мастер Кнут намного опередил время, еще в середине восьмидесятых введя идею - говоря языком гипермедиа - множественного рендеринга контента - ныне лежащего в ядре развития Web, - я имею в виду X(HT)ML. Построение исполняемого кода (или интерпретация кода) становится одним из типов рендеринга. И, может быть, не менее важно то, что развитые браузеры и редакторы гипермедиа потенциально способны стать средством, гораздо более приспособленным для чтения и написания кода программистами «безбумажной» эпохи, чем ориентированные в основном на бумагу TеX и LaTеX. Максим Отставнов 1 (обратно к тексту) - Его существование - одна из причин, по которым программисты предпочитают труднопроизносимое «triple-double-U (WWW)» попсовому «Web» (читающемуся так же, как «WEB»). «WEB» изначально обозначало «паутину», в то время, как «Web» в «WorldWide Web» на студенческом сленге - Webster’s (равно как и любой другой объемный словарь или справочник). Источники [1] (обратно к тексту) - Donald E. Knuth. Literate Programming // The Computer Journal, 27(2):97{111, May 1984. - Ранняя статья, компактно излагающая концепцию грамотного программирования. [2] (обратно к тексту) - Donald E. Knuth. Literate Programming (CSLI Lecture Notes, No. 27). - Stanford: Center for the Study of Language and Information, 1992, ISBN 0-937073-80-6. - Книга, пространно излагающая концепцию грамотного программирования. [3] (обратно к тексту) - www.literateprogramming.com - Центр «тусовки» приверженцев идеи грамотного программирования. Содержит массу ссылок на инструментарий, документацию, публикации, другие сайты, посвященные тому же предмету. Несмотря на «замерзший» список обновлений, актуальные обновления достаточно часты. [4] (обратно к тексту) - Дональд Э. Кнут, Сильвио Леви. «Система структурного документирования CWEB» (пер. с англ. Сергея Коропа), 36 с. - Очень хороший перевод Руководства пользователя CWEB.
|