|
Кнут придумал литературное программирование в начале 1980-х годов, во время работы над TeX-ом.
Надо сказать, что первую версию TeX-а он написал и отладил на бумаге, а ввёл в компьютер лишь спустя несколько месяцев.
Понятно, что для успеха такой разработки код должно быть легко читать. Вообще читаемость кода, по мнению многих опытных разработчиков - это главное, что сейчас требуется от программистов.
Кнут предложил довести требование читаемости кода до предела и превратить написание программы в написание книги об этой программе. При этом код и документация не разделяются, они описывают решение проблемы формально и неформально. Естественно, что логика изложения может отличаться от последовательности команд.
Кроме того, текст должен быть представлен в удобном для читателя виде. Поэтому нужны специальные инструменты, которые позволяют смешивать разметку текста и код.
Кнут, вполне естественно, предложил для текста TeX. Кроме того, в тот момент он использовал язык программирования Pascal, строгость которого усугубляется требованием однопроходной компиляции. Из-за этого порядок определения функций, типов и переменных строго фиксирован, что противоречит требованию понятности изложения. Так что Дональду Кнуту пришлось написать свою систему WEB, которая устроена примерно так.
Программа состоит из кусочков (chunks)документации, чередующихся с кусочками кода. В кусочках кода можно ссылаться на другие кусочки, причем ссылки могут идти и вперед, и назад, а на один кусочек может быть несколько ссылок. Получается своего рода сеть, отсюда и название, которое потом использовали для похожей структуры документов в интернет.
Чтобы такую программу можно было использовать, есть две утилиты - tangle, которая вытаскивает кусочки кода, подставляет их на место ссылок и формирует программу, которую можно скомпилировать, и weave , которая форматирует кусочки кода командами TeX и создает документ TeX, который можно распечатать.
TeX и написан таким образом, а человеко-читаемая версия вышла в виде книги "TeX: The program".
Кстати, чтобы получить эту книгу в электронном виде, достаточно скачать исходный код TeX и выполнить следующие команды:
weave tex.web
tex tex.tex
xdvi tex.dvi
или
pdftex tex.tex
xpdf tex.pdf
Потом Кнут перешёл на язык C (который он хвалил в своём интервью, см. предыдущий пост ) и написал CWEB. Возникли и другие инструменты, например, noweb, nuweb, rambutan и другие.
Литературное программирование пока не достигло большой популярности, хотя многие опытные программисты и считают его хорошей идеей.
Причина этого в том, что немногие люди умеют и любят писать.
Сам Дональд Кнут в своем интервью в книге описал ситуацию следующим образом, сославшись на Джона Бентли:
"[Т]олько два процента людей могут быть программистами. И только два процента могут быть хорошими писателями. А Кнут хочет чтобы все сочетали эти качества."
Я не думаю, что количество программистов в мире когда-нибудь превысит два процента - я имею в виду программистов, которые действительно способны находить общий язык с машиной от рождения. Однако теперь люди ведут блоги. Поэтому я заметил, что в среднем способность выражать свои мысли сильно растет, поэтому второй аргумент уже не имеет такого значения.
То есть ситуация улучшается благодаря всеобщему увлечению блогами. Программисты начали писать про программирование и иногда получается очень интересно, например у Джоэла Спольски (Joel on software) или у Стива Йегги (Steve Yeggae и тут). Так что литератуное программирование, возможно, ещё достигнет популярности.
Литературные программы, ориентированные на то, что их будут читать люди, хорошо подходят как для сопровождения в течении длительного времени, так и для совместной работы и обучения. Мне кажется, что литературное программирование в этом смыкается с OpenSource-движением. Для совместной работы над кодом существует масса сервисов, начиная от систем управления версиями (и социальных сайтов типа github на их основе) и заканчивая различными pastebin-ами (paste.lisp.org, pastebin.org и т.д.).
Поэтому мне было приятно обнаружить сайт, посвященный совместной работе над литературной реализацией различных алгоритмов на разных языках. Мне кажется, что этот сайт literateprograms.org может быть хорошим подспорьем при изучении новых языков программирования.
В следующем посте этой серии я расскажу о некоторых инструментах для литературного программирования, их достоинствах и недостатках и покажу, какие получаются красивые программы.
|
|
В предыдущий пост пришёл прикольный спам:
Telekontro-над вашей перепиской будет плакать все фСБ Гордость АНБсегодня - это система радиоэлектронной разведки"Эшелон", которая в состоянии перехватывать информацию по всему миру. Сбор электронной информации осуществляется по всей территории земного шара. США контролируют Латинскую Америку, Центральную Азию и Северный Китай. В зоне ответственности Англии находятся Европа, западная часть России до Урала и Африка. Австралия осуществляет радиоперехват с территорий стран Юго-Восточной Азии и Южного Китая. Собираемая информация направляется в память самых современных компьютеров, в которых осуществляется ее расшифровка. Любые переговоры по мобильнику в обязательном порядке пропускаются через мелкое сито суперкомпьютеров системы "Эшелон", которая действует не только в интересах государственных органов власти США, но и для обеспечения крупных американских компаний. Для радиоперехвата в "Эшелоне" используются специальные орбитальные разведывательные спутники, закамуфлированные "отводы" от фиксированных линий связи, множество специальных баз радиоразведки по всей планете, получающих, кроме всего прочего, информацию и через коммерческие спутники связи, различные радиосети. Все это в автоматическом режиме накапливается и обрабатывается - "Эшелон" "процеживает" множество телефонных переговоров, отправлений электроной почты и других всевозможных видов телекоммуникаций. Несколько лет назад на многих сайтах Рунета можно было видеть баннер с надписью «СОРМ-2: завтра над вашей любовной перепиской будет плакать все ФСБ». Сейчас эфир мобильных и интернет-операторов "процеживают" с помощью другой системы. В России успешно функционирует и развивается система внутреннего мониторинга информации (СОРМ). Следует различать "СОРМ-1" ( организованную в 1996 году) и "СОРМ-2" (систему протоколирования сеансов связи: как телефонных переговоров, так и обращений к сети Интернет, организованную в 2000 году). Миниатюрным "центром вселенной" для СОРМ является специальный "агрегирующий маршрутизатор", который устанавливается в сети оператора (их выпускают различные компании, как российские - к примеру, НТЦ "Протей"). Это оборудование представляет собой точку концентрации всего трафика сети, через которую проходит 100% информации. Сервис "TelekontrolЭшелон" обещает дать возможность доступа к другим мобильным телефонам в виде чтения чужих сообщений и информации о входящих и исходящих звонках вашего партнёра. Для этого всего лишь необходимо зайти на сайт сервиса и ввести код мобильного оператора и номер абонента.
СОРМ Эшелон Точность слежения: 10 метров - 50 метров (Макс). для мобильных телефонов Мы хотим, чтобы у вас была возможность предотвратить нехорошие события. Для этого зайди на сайт сервиса "Telekontrol Эшелон" и введи номер мобильного.
СОРМ Эшелон
Как бывший сотрудник "НТЦ Протей" могу подтвердить - в одном продукте действительно была предусмотрена возможность подключения СОРМ =)
По ссылке спамеры ненавязчиво предлагают послать sms-ку за 150 рублей, чтобы прочитать посредством СОРМ-а sms-ки своей второй половины. Привет Мише :)
|
|
http://anton-nazarov.posterous.com/cp1251-doesnt-work |
|
Занятная штука Posterous - блог-сервис, куда посты можно отправлять по электронной почте, а он сам выкладывает текст, картинки, музыку и даже pdf-файлы в удобном просмотрщике. Кроме того, он умеет кросспостить много куда :) http://anton-nazarov.posterous.com/-pdf-32 |
|
Недавно дочитал хорошую книжку Peter-а Seibel-а "Coders at work".
Автор известен своей первой книгой "Practical Common Lisp", которая бесплатно доступна на его сайте. Именно по ней я осваивал Common Lisp. При этом на сайте автора помимо самой книги выложена специальная сборка Emacs+SLIME+sbcl, которая хотя и слегка устарела, представляет собой полную среду разработки на Lisp для начинающих.
Новая книга "Coders at work" состоит из интервью со следующими известными программистами:
-
Jamie Zawinski (
jwz) - основатель XEmacs, автор bbdb, один из создателей Netscape
-
Brad Fitzpatrick - создатель LiveJournal, memcached
-
Douglas Crockford - изобретатель JSON
-
Brendan Eich - автор JavaScript
-
Joshua Bloch - один из авторов Java Collections Framework, автор кучи книжек про Jav-у, главный архитектор Google по Java
-
Joe Armstrong - создатель Erlang
-
Simon Peyton Jones - ведущий разработчик GHC
-
Peter Norvig - автор известных книг про искусственный интеллект, директор исследовательского подразделения Google
-
Guy Steele - серийный создатель и стандартизатор языков программирования. Придумал Scheme и Fortress, участвовал в стандартизации Scheme, Common Lisp, Fortran, C, ECMAScript и Java.
-
Dan Ingalls - один из создателей Smalltalk и первого GUI.
-
L Peter Deutsch - работал над Interlisp и Smalltalk, один из авторов Just-in-time компиляции, автор Ghostscript.
-
Ken Thompson - создатель UNIX.
-
Fran Allen - пионер оптимизирующих компиляторов, первая женщина, получившая Turing Award.
-
Bernie Cosell - автор первой реализации Arpanet.
-
Donald Knuth - в представлении не нуждается :)
Набор вопросов разным людям задавался примерно одинаковый, поэтому
очень интересно читать, как зависит отношение к тому или иному
предмету от опыта человека.
Например, взгляды на язык C у Дональда Кнута и Fran Allen прямо
противоположны - Кнут считает, что язык C очень хорош, так как
позволил программистам самим создавать гибкие структуры данных,
такие, как двусвязный список. А для Fran Allen его появление стало
катастрофой, так как после этого пропал интерес к оптимизирующим
компиляторам. По её мнению это отбросило всю отрасль на десятилетия назад.
В отношении C++ взгляды почти у всех сходятся - этот язык не
нравится никому =)
Peter Seibel просуммировал это в своём посте.
Однако Java тоже вызвала некоторые споры.
Небезынтересно также обсуждение TDD
и Literate
Programming. Оказывается, почти никто из почтенных героев книги
не использует TDD, хотя все соглашаются с важностью тестов. Питер
Норвиг вообще считает, что тесты - это не главное. Он приводит в
подтверждение историю написания программы для решения судоку. Сам
Питер Норвиг написал эту программку, а другой блоггер,
пропагандирующий TDD увяз в написании тестов в самом начале, так как
просто не знал, как решать задачу. Рассказ jwz о
разработке в Netscape и роли в ней тестов, и реакция на него Joel-a
Spolsky также вызвали драму. (Ссылка
1, ссылка
2, ссылка
3).
Почти все говорят о важности чтения кода, но полноценным Literate
Programming-ом занимается только Кнут =).
Впрочем, проблема заключается лишь в том, что программисты не очень
привыкли писать. Поэтому надежда на рост блоггерства.
Я вот тоже решил попробовать пойти по стопам Кнута, так что
следующий пост будет про Literate Programming.
Надеюсь, я вас убедил прочитать книгу "Coders at work".
Бумажную книжку можно купить в Amazone :)
А электронная есть на gigapedia.org (нужна регистрация).
|
| » Странный вопрос |
Читал этот пост jwz в ответ на статью Джоэла Спольски. Сами тексты довольно интересны и вызвали некоторое обсуждение среди публики, но речь не о них.
При чтении журнала jwz мне захотелось инвертировать цвета на экране. То есть я, конечно, понимаю, что можно добавить к адресу ?style=mine или поменять тему в браузере, но я осознал, что мне не хватает сочетания кнопок для инвертирования. Тем более, что когда я ещё использовал KDE3 и Compiz, negate был единственным действительно полезным эффектом.
Две минуты поиска в гугле не дали простого готового решения на уровне X-ов, поэтому пришлось изобразить следующее.
( Технические детали ) А как у вас устроена кнопка для инвертирования экрана?
2 Окт, 2009 @ 23:37
|
| » Сила неведомого |
По телевизору показали Кашпировского и в этот момент сгорел монитор.
18 Сент, 2009 @ 00:50
|
| » Ерунда всякая |
Вчера сидел за компьютером и занимался всякой ерундой. В частности, исправил скриптики для скачивания музыки и видео с одного сайта. Брать тут и тут. Чего только не сделаешь для девочек :)
А ещё allocco попросил меня разобраться, как сделать, чтобы на разных сайтах Conkeror предлагал сохранять в разные каталоги. Например на http://lib.rus.ec в ~/books/fiction а на http://arxiv.org в ~/science/articles.
Решение под катом ( Для гиков )
В качестве благодарности allocco показал мне мегапрограмму для управления коллекцией статей на диске и библиографией. Она бесплатная, но требует регистрации, зато есть для Linux, Mac OS и даже Windows. Брать тут: http://www.mendeley.com/
9 Сент, 2009 @ 23:50
|
| » Про науку |
Ездил сегодня в Петергоф обсуждать с научным руководителем приложения редукции представлений аффинных алгебр Ли в конформной теории поля.
Мы обсуждали вот этот материал из уже упоминавшейся книжки Di Francesco и соавторов по конформной теории поля.
Пришли к выводу, что физические требования позволяют ограничиться частичным решением задачи редукции, но что утверждение о том, что вычисление коэффициентов ветвления представлений аффинных алгебр сводится к вычислению коэффициентов ветвления представлений соответствующих классических алгебр, как-то сомнительно.
Так что будем это в пятницу обсуждать.
А в четверг утром (в 11.30) в ПОМИ будет семинар, на котором Людвиг Дмитриевич Фаддеев будет рассказывать про вот эту свою работу. Она подверглась некоторой переработке с того момента, как докладывалась на симпозиуме по теоретической и математической физике в начале июля.
P.S. Ещё встретил в электричке Максима, он теперь, оказывается, в университете работает.
2 Сент, 2009 @ 00:45
|
| » Про книжки |
Давно я что-то ничего не писал тут. На самом деле лето я провёл довольно весело - послушал доклады на серьёзном международном симпозиуме по теоретической и математической физике в институт Эйлера и съездил на две школы, в Дубну и Протвино. Но про школы я напишу немного позже, когда разберу фотографии и выберу что стоит опубликовать.
Так что пока пост про книжки, которые я недавно прочитал, начал читать или хотел бы прочитать, но не прочитал.
Пожалуй про художественные книги я напишу так, а специальные спрячу под катом.
Недавно я осилил два больших американских романа. Такая литература явно писалась в расчете на людей прошлого, когда жизнь не была такой суматошной, а люди умели заниматься делом и сосредотачиваться на том, чем они занимаются. Можно сказать, я читал эти романы для борьбы с интернетом.
Первый из романов "Something happened" Джозефа Хеллера. Вообще Хеллер известен в первую очередь "Уловкой-22"("Catch-22"), классическим американским романом про войну, который мне в своё время очень понравился даже в русском переводе.
Роман "Something happend" такой психологический. В нём практически нет действия, точнее весь текст представляет собой размышления и воспоминания рассказчика о своей жизни, отношениях с семьёй и тому подобное. При этом читать довольно интересно, хотя местами и занудно. Английский язык не самый простой, но в принципе понятный.
Другой большой роман - это "Moby Dick" Германа Мелвилла. Он считается классикой американской литературы и чуть ли не главным романом. (Хотя на самом деле это просто воспоминания о рыбалке).
Я захотел прочитать эту книгу после того, как случайно посмотрел по телевизору кусок фильма. Наверно это был вот этот фильм. Я сразу понял, что роман должен быть наполнен символизмом и выдержан в духе древнегреческой трагедии о противостоянии человека и судьбы, и чтение меня не разочаровало. Кроме того, в романе много всяких занятных авторских рассуждений, довольно забавных по прошествии стопятидесятилетия. Однако действия там не очень много, а английский язык довольно тяжёл для понимания. Особенно меня подвели создатели словаря Multilex для Palm-а, которые умудрились составить его так, чтобы он практически не содержал слов из этого классического произведения американской литературы.
Зато роман уже давно перешёл в public domain и никакие козни владельцев прав на диснеевских персонажей у нас его не отберут. Поэтому его легко и совершенно официально можно скачать с сайта Project Gutenberg, где даже есть аудио-версия. Зато наш любимый пиратский Либрусек радует нас русским и французским переводами.
Дальше надо упомянуть несколько научно-популярных книжек, а уж потом перейти к тому, что интересно только совсем уж конченным псифизикам.
А вот, совсем забыл - Тоня выдала мне книжку широко известного в узких кругах предпринимателя в белых штанах Ричарда Бренсона "К чёрту всё! Берись и делай!", которую я в тот же вечер и осилил и куда-то потерял. Я думаю, что белые штаны и название полностью передают содержание этой книги. Можно добавить только, что русский перевод довольно плохой.
Теперь можно переходить к более содержательным текстам.
( Тексты на любителя )
Всё, с про умные книжки я закончил, так что упомяну две книги про то, что интересно всем - про деньги. Первая - это "Воспоминания биржевого спекулянта" 1923 года издания. Там есть про ForEx-конторки, рекламой которых обклеено наше метро!!
Вторая, которую я ещё не дочитал, называется "My Life as a Quant: Reflections on Physics and Finance" by Emanuel Derman. Американский физик рассказывает про то, как он попал на Wall Street. Я пока читаю вторую главу, так что узнал только про атмосферу в Columbia University в 60-х - 70-х годах. Порадовала фраза про отношение к аспирантам, что до них никому не было дела. Значит это общемировая традиция.
25 Авг, 2009 @ 15:39
|
| » Хозяйке на заметку |
Если вы хотите, чтобы интерфейс Mathematica под Linux из ужасно тормозного стал просто тормозным, воспользуйтесь вот этим решением: http://ubuntuforums.org/showpost.php?p=7515845&postcount=56 Работает для версий ядра > 2.6.27
Бонус Документация к Mathematica в формате PDF. Мне её сильно не хватало.
13 Июл, 2009 @ 20:08
|
| » Про принтеры |
Возникла тут проблема с принтерами на кафедре, опишу решение - вдруг кому-то будет полезно. Проблема такая - наш доблестный отдел закупок купил по нашей заявке принтер/сканер/копир Xerox WC 4118, но купил, конечно же, более дешевую версию без Ethernet-интерфейса. Никаких проблем с подключением по USB нету, но в более дешевой версии принтер не поддерживает PostScript, а работает только посредством драйверов, которые, естественно, есть только для Windows.
Так как большинство компьютеров на кафедре все-таки под Windows, то проблема не столь уж велика - подключили принтер к компьютеру с Windows и все. Но печатать с Linux-машин тоже хочется, а драйвер есть только для более продвинутой модели.
Решение состоит в использовании Ghostscript и программы RedMon для создания виртуального PostScript-принтера. Пошаговая инструкция здесь: http://www.stat.tamu.edu/~henrik/GSPSprinter/GSPSprinter.html
13 Июл, 2009 @ 16:15
|
| » (No Subject) |
Заметки с семинара по эконофизике, который был у нас в понедельник: http://spbu-hep-students.googlegroups.com/web/econophysics2009-06-29.pdf
Там есть довольно забавное соображение о том, что биржа генерирует больше данных, чем Теватрон :)
Хотя я перестал понимать, почему биржа должна отличаться от генератора случайных чисел и как можно строить теории из огроменной кучи экспериментальных данных, которые были собраны вообще без теории, без какого-то первоначального предположения о том, что существенно, а что нет. Вроде бы на философии нас учили, что эксперимент без теории не возможен, а ситуацию с попыткой построения моделей по биржевым данным о сделках мне почему-то хочется сравнить с попыткой вывести законы Ньютона из массива фоторафий яблок в интернете.
1 Июл, 2009 @ 17:00
|
| » Ещё немного фотографий про войну |
Кто тут просил немцев? Они, и не только они, под катом.
( Много фотографий )
23 Июн, 2009 @ 13:03
|
| » Болею. Склеил лаптоп |
Что-то я простыл, поэтому сегодня сижу дома. Зато приклеил очередную отвалившуюся пластмассовую деталь лаптопа. То, что я клеил в прошлый раз выделено синим, а то, что сейчас - красным.

А у кого-нибудь ещё такие детали отламывались, или мне достался особенно ломкий лаптоп?
23 Июн, 2009 @ 12:52
|
| » Про войну |
Сегодня мы с Аней съездили в деревню Перевоз посмотреть шоу реконструкторов, посвящённое годовщине начала Великой Отечественной Войны.
Мне мероприятие очень сильно понравилось. Шоу было совершенно великолепным, как и организация, а ещё очень повезло с погодой.
 Внимание! Под катом много красивых больших картинок.
( Read more... ) Шоу очень порадовало количеством техники - самолеты, танк, два броневика, артиллерийское орудие, автомобили и мотоциклы. Правда большая часть техники была со стороны немцев, что впрочем, соответствовало сюжету.
А ещё поразило количество и качество пиротехники - самолёты бомбили, орудие и миномёты стреляли, не говоря уже про стрелковое оружие.
После завершения представления зрители могли свободно сфотографироваться с реконструкторами и с техникой.
Под катом ещё несколько фотографий. ( Read more... )
21 Июн, 2009 @ 21:23
|
| » Про компьютеры |
Давно что-то я ничего не писал.
Неожиданно для себя я обнаружил, что пользуюсь не одним, а сразу несколькими компьютерами, причём не всегда все они подключены к сети. Зачастую я работаю на этих компьютерах над одним и тем же, то есть файлы надо как-то синхронизировать. Кроме того, я очень люблю использовать системы управления версиями, чтобы не так страшно было что-то менять. Поэтому решение пришло быстро.
Я создал аккаунт на GitHub, добавил открытые ключи всех компьютеров в настройках аккаунта и теперь использую git для управления версиями. Любое изменение я могу зафиксировать в локальном репозитории git (git commit), а потом, когда компьютер подключён к сети, я синхронизирую изменения с репозиторием на GitHub (git push/git pull).
А ещё на GitHub есть удобный браузер кода, просмотр изменений и так далее. Можно смотреть, кто над чем работает. Например, мои статьи и программки для аффинных алгебр Ли тут: https://github.com/naa/Articles/tree
19 Июн, 2009 @ 23:01
|
| » Отличная книга |
Если вы ещё не изучили Haskell, то у вас есть отличный шанс сделать это! :)
Книга Грэма Хаттона "Programming in Haskell" - одна из самых интересных книг среди тех, которые я читал в последнее время. И кроме того, она понятная, глубокая и короткая - всего 180 страниц.
Скачать можно тут: Programming in Haskell by Graham Hutton
6 Май, 2009 @ 23:59
|
| » You and your research |
Отличное выступление известного учёного Ричарда Хэмминга о том, как и какими исследованиями стоит заниматься. Содержит воспоминания о других великих учёных, с которыми Хэмминг работал.
Читать тут
6 Май, 2009 @ 23:50
|
|