anton_nazarov: (Default)
Дочитал книгу Говарда Зинна "People's History of the United States". Книга посвящена истории угнетения и борьбы против угнетения жителей США. Начинается все с рассказа про открытие Колумбом Америки, которое сопровождалось похищением индейцев, а затем и их массовым истреблением, когда они не смогли добыть нужного количества золота. Английские поселенцы в Америке ничем особенным от испанцев не отличались. Они тоже истребляли и сгоняли индейцев с земли с огромным упорством. Пожалуй удивили здесь только французы - их политика колонизации в Канаде была направлена на торговлю и кооперацию с индейцами, в результате у французских колонистов установились союзнические отношения с различными племенами. Кстати, одно из определяющих событий в формировании США - это "Война с французами и индейцами". Боевые действия происходили в колониях во время Семилетней войны в Европе. Естественно, с английской стороны участвовали не только и не столько кадровые военные из Великобритании, а в основном местные ополченцы. Именно в этой войне будущие командиры войны за независимость получили первый боевой опыт. Джордж Вашингтон так и вовсе развязал эту войну =)
С английской стороны война велась типично имперским методом и в результате многолетнего заваливания трупами англичане превозмогли, французы ушли из будущих Канады и США в, индейцев выпилили, а государственный долг Великобритании достиг таких размеров, что пришлось вводить дополнительные налоги на чай, в результате чего вскоре произошло знаменитое чаепитие.
Уже в ранние годы колонизации Америки были заложены различные традиции, которые определили историю и культуру США. В частности, первых чернокожих рабов стали ввозить уже в 1619 году, индейцев истребляли с самого начала, а вся собственность сразу была сосредоточена в руках небольшой группы людей.
Из школьного курса может показаться, что история США после войны за независимость была относительно мирной и спокойной, но это не так. Например, уже в 1812 году произошла первая попытка "экспорта демократии" - США попытались завоевать Канаду. Как это чаще всего бывает в истории всех стран, причины войны были внутриполитическими - президенту от Демократически-Республиканской партии хотелось переизбраться на второй срок. Повод тоже был сомнительный - рейды индейцев с территории Канады. Удивительно, что индейцы радиостанцию не захватили =)
Сама война велась совершенно бездарно, так что в результате не только Канаду не завоевали, а наоборот англичане сожгли свежепостроенную столицу Вашингтон.
Говард Зинн пишет про общественную историю, поэтому его интересуют не столько внешнеполитические события, такие как ход войны, сколько реакция населения. Например, выясняется, что уже первые войны - за независимость и 1812 года, - не пользовались популярностью у населения и набранные солдаты немедленно разбегались. Электоральная политика с самого начала была скорее свистком для спускания пара. Именно голосовать за подходящего кандидата предлагали разгневанным произволом фермерам. Потом то же самое происходило с движением негров за свои права, рабочим и прогрессивистским движениями. В результате реформы всегда были минимальными и проводились в интересах стабильности элиты.
Интересные факты про освобождение и равноправие негров я узнал именно из этой книги. Конечно про то, что причиной гражданской войны в США не было стремление освободить рабов, я знал и ранее. Однако в процессе войны рабство отменили и, более того, негры даже сперва получили гражданские права, то есть они могли голосовать. В первые годы после гражданской войны были чернокожие политики, даже сенаторы и конгрессмены. Отмена равноправия случилась позже, когда после экономического кризиса 1873 года потребовался компромисс между партиями при выборах президента для проталкивания полезных бизнесу мер.
Автор книги рассматривает рабство и расизм как следствие интересов капиталистов. Хлопок долгое время был основной экспортной культурой, а противостояние между белыми и черными на Юге вело к тому, что бедные белые не предъявляли экономических требований. В 20 веке расизм стал инструментом борьбы с рабочим движением, когда черных работников завозили в северные города для срыва забастовок. Другими инструментами были спускание пара в свисток выборов, а также аресты и казни непричастных и высылка диссидентов.
Традиция устройства войн по внутриполитическим причинам и под надуманными предлогами неукоснительно соблюдалась и продолжает соблюдаться. Такой прием, как создание всяких донецко-луганских калифорнийских и техасских республик и "проведение референдумов" активно использовался с 19 века. При этом практически всегда в обществе существовало антивоенное движение, а патриотизм использовался для подавления политических противников. В 20 веке добавились мощные спецслужбы, активно противодействующие различным движениям, от коммунистов до "Черных пантер" и пацифистов.
Зинн подчеркивает, что США отличаются от других стран не какой-то справедливой демократией, а изощренной и эффективной системой контроля над обществом, которая позволяет поддерживать высокий уровень имущественного расслоения в богатой стране. Ну а демократия, в которой выбор ограничен республиканцами и демократами, - это лишь один из инструментов.
Такой взгляд на историю США меняет отношение к истории других стран, а также к современной политике. Например, по сравнению с некоторыми американскими лидерами, Путин просто образец здравого смысла и предусмотрительности.
Впрочем, это не значит, что надо терпеть даже самых здравомыслящих лидеров.

Книгу Зинна определенно стоит читать, но надо отметить и то, что она написана с левых позиций и идеализирует социалистические и другие рабочие движения. Так что либертарианцам может не понравиться =)
anton_nazarov: (Default)

Кнут придумал литературное программирование в начале 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 может быть хорошим подспорьем при изучении новых языков программирования.

В следующем посте этой серии я расскажу о некоторых инструментах для литературного программирования, их достоинствах и недостатках и покажу, какие получаются красивые программы.

anton_nazarov: (Default)
Недавно дочитал хорошую книжку Peter-а Seibel-а "Coders at work".

Автор известен своей первой книгой "Practical Common Lisp", которая бесплатно доступна на его сайте. Именно по ней я осваивал Common Lisp. При этом на сайте автора помимо самой книги выложена специальная сборка Emacs+SLIME+sbcl, которая хотя и слегка устарела, представляет собой полную среду разработки на Lisp для начинающих.

Новая книга "Coders at work" состоит из интервью со следующими известными программистами:

  • Jamie Zawinski ([livejournal.com profile] 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 увяз в написании тестов в самом начале, так как просто не знал, как решать задачу. Рассказ [livejournal.com profile] jwz о разработке в Netscape и роли в ней тестов, и реакция на него Joel-a Spolsky также вызвали драму. (Ссылка 1, ссылка 2, ссылка 3).

Почти все говорят о важности чтения кода, но полноценным Literate Programming-ом занимается только Кнут =). Впрочем, проблема заключается лишь в том, что программисты не очень привыкли писать. Поэтому надежда на рост блоггерства. Я вот тоже решил попробовать пойти по стопам Кнута, так что следующий пост будет про Literate Programming.

Надеюсь, я вас убедил прочитать книгу "Coders at work". Бумажную книжку можно купить в Amazone :) А электронная есть на gigapedia.org (нужна регистрация).

anton_nazarov: (Default)
Если вы ещё не изучили Haskell, то у вас есть отличный шанс сделать это! :)

Книга Грэма Хаттона "Programming in Haskell" - одна из самых интересных книг среди тех, которые я читал в последнее время. И кроме того, она понятная, глубокая и короткая - всего 180 страниц.

Скачать можно тут: Programming in Haskell by Graham Hutton

Profile

anton_nazarov: (Default)
anton_nazarov

September 2014

S M T W T F S
 123456
78910111213
14 151617181920
21222324252627
282930    

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 25th, 2017 06:41 pm
Powered by Dreamwidth Studios