Информатика, философия и программирование

[info]ailev написал интересную запись, где объявил так называемую Computer Science лишь частью более обширной «информатики», а также заявил о непустом пересечении последней с философией.

http://ailev.livejournal.com/1008054.html

Крайне рекомендую ознакомиться.

Про Lisp

А вот вопросец созрел. Допустим, хочется мне какой-то «рабочий» проект реализовать на лиспообразном языке — в порядке «использования самых маргинальных технологий«, по терминологии минского раввината. Для начала — что выбрать, Common Lisp или Scheme? Common Lisp мне сразу резко «не понравился» — хотя бы из-за объема документации и кучи малопонятных вещей категории «так сложилось исторически», типа неочевидных различий между set, setq и setf. Scheme выглядит попроще, да и SICP я прочитал где-то до половины — в общем, там все достаточно знакомо.

Что мне не нравится в Scheme? Нет какой-то «эталонной» реализации. MIT/GNU Scheme поддерживает «устаревший» стандарт R5RS (с некоторыми незначительными отклонениями), в четвертом издании TSPL описывается R6RS. Этот вариант реализован в Chez Scheme и Racket, остальные реализации мне не нравятся «организационно» — один-единственный «незаменимый» разработчик — это «несерьезный» подход. Вообще, огромное количество реализаций Scheme мне представляется следствием наличия упражнений 5.51 и 5.52 в SICP.

Более того, все пригодные для использования реализации предлагают свои ни с чем не совместимые расширения. Исключение — разве что MIT/GNU Scheme, где расширений относительно «стандарта» практически нет. Эти «несовместимые расширения» тоже напрягают — а вдруг выбранная реализация окажется по каким-то причинам некошерной, и что тогда?

Наконец, хочется нормальной «современной» IDE с возможностями отладки. Emacs не предлагать, он отвратителен (сугубое ИМХО). Edwin из MIT/GNU Scheme — те же яйца, только в профиль — какое-то тяжкое наследие из 70-х. Похоже, что это пожелание сужает выбор до Racket.

Теперь — про Common Lisp. Тут попроще с реализациями. Основных — всего три: SBCL, CMUCL и CLISP (коммерческие я не рассматриваю, тут начинаются те же проблемы с несовместимыми расширениями и прочий vendor lock-in). IDE, кроме Emacs, отсуствуют. Сам язык мне не очень нравится. Из-за совместимости с древними диалектами Лиспа в Common Lisp воткнули таких «костылей», что иногда создается впечатления — а не Фортран ли это вперемешку с Алголом и синтаксисом Лиспа?

Чего мне от всего этого счастья хочется? Во-первых, простого развертывания. Насколько я понимаю, «сделать экзешник» в Лиспах непросто. Хочется хотя бы возможности установить работающую систему «двумя нажатиями мышки», а с этим возникают некоторые проблемы.

Во-вторых, я не такой маньяк, чтобы писать на Лиспе все приложение целиком — начиная от GUI и заканчивая самыми низкоуровневыми частями. К тому же, я несколько напуган статьей The Lisp Curse, где утверждается, что для любой задачи в Лиспе можно найти стопицот библиотек — и все говно. Я планирую реализовывать на Лиспе только те компоненты, где это оправдано — и с помощью какого-нибудь разумного интерфейса связать это, скажем, с веб-частью или «десктопным» приложением. Какие для этого существуют интерфейсы?

В общем, приглашаю знатоков маргинальных технологий рассказать, как все это счастье применить в «реальной жизни».

«Водопада» не существует

На прошлой неделе в нескольких «околоэлектронных» и «околопрограммистских» ЖЖ состоялся срачик по поводу ГОСТов в частности и стандартов вообще, а также про необходимость следовать им. Итоги подвел [info]hedgeov, заодно собравший ссылки на некоторые части дискуссии:

http://hedgeov.livejournal.com/337510.html

В этой записи я тоже хотел бы вспомнить про ГОСТы, конкретно — про серии 19 и 34, регламентирующие содержание документации на программы и автоматизированные системы соответственно. Их, разумеется, считают устаревшими — хотя из явных анахронизмов там можно назвать лишь необходимость распечатки текста программы (да и ее можно обойти). Более конструктивный аргумент — это то, что в ГОСТах 34 серии приведен список документов, которые сопровождают процесс разработки программы и якобы этот список вынуждает при разработке использовать «модель водопада».

Видимо, эти критики не видели ни одного титульного листа самого завалящего технического задания, составленного в соответствии с ГОСТ. Берусь утверждать, что эти ГОСТы определяют «итеративную модель» наподобие RUP или OpenUP, а «модель водопада» существует лишь в воспаленном бреду различных апологетов «внедрения RUP».

Аргументация будет очень простой. Во-первых, и в так называемой «модели водопада», и в RUP-подобных итеративных процессах, и в ГОСТ выделяются четыре стадии разработки, только называются они по-разному. У буржуев это Inception, Elaboration, Construction и Transition, в ГОСТах названий не приводится и обычно «стадии» называют по получающимся в конце документам («артефактам», в терминологии RUP): техническое задание, технический проект, рабочая документация (одновременно с ней разрабатывается и сама ИС) и ввод в действие. Конечно, апологеты RUP утверждают, что стадии RUP и стадии «водопада» — это «две большие разницы», но их настойчивость в этом убеждает в обратном.

Перейдем ко второму пункту. Я не зря упомянул про титульный лист. Дело в том, что он убивает все противопоставления «водопада» итеративным процессам. Фанаты последних утверждают, что в случае «водопада» ТЗ, проект и вообще все «требования» «спускают сверху». Так вот, на титульном листе всегда есть подписи двух сторон — заказчика и исполнителя. Всякое согласование документов само по себе и порождает итерации — и в «идеальном» случае порождает из ГОСТовской модели что-то похожее на OpenUP.

Разумеется, я не зря упомянул об «идеальном случае». Дело в том, что основная часть всех «методологий» — это здравый смысл и прочие Best Practices. А если на здравый смысл положили с большим прибором — то «от дурака» не спасет ни ГОСТ, ни RUP.

PS Типичная (к сожалению) ситуация, когда ТЗ согласуется на уровне какого-нибудь недостижимого начальства, а в патологическом случае — этим же впадающим в маразм начальством и пишется — на уровне RUPовского здравого смысла называется «неправильным определением заинтересованных лиц» и к ГОСТам отношения не имеет.

PPS Кстати, применительно к фазам RUP, по-новому звучит шуточка «любое начинание делится на четыре части: запутывание, запугивание, наказание невиновных и награждение непричастных».