LINUX.ORG.RU

Literate programming - востребовано ли?


0

0

Интересует, использует ли кто-то сабж в своих разработках(не обязательно на работе, может в своих проектах). И еще если можно подскажите инструменты которые могут позволить программировать в этом стиле. И вобще, интересно было бы услышать ваше мнение.


Да востребовано, в R использую Sweave как основной способ написания программы размером больше однострочника.

У этого автора неплохой пост про технологию применительно к разным языкам. http://anton-nazarov.livejournal.com/

psv1967 ★★★★★
()
Ответ на: комментарий от psv1967

У этого автора неплохой пост про технологию применительно к разным языкам

на примере алгебр Ли и Scheme :) спасибо за ссылку, очень интересный журнал

jtootf ★★★★★
()
Ответ на: комментарий от psv1967

Спасибо за ссылку и за наводку на Sweave. Я так понял возможности noweb(по размещению chunk в нужном порядке) в современных языках не очень востребованы(по сравнению с С), поэтому всю идею можно упростить до : написание статьи с сопровождающим кодом(как реализована поддержка literate haskell в ghc).

recon88
() автор топика
Ответ на: комментарий от psv1967

> Да востребовано, в R использую Sweave как основной способ написания программы размером больше однострочника.

Поддерживаю и поступаю точно так же. На самом деле это жутко удобно, экономит кучу времени, когда возвращаешься к своим, написанным год назад программам.

ugoday ★★★★★
()
Ответ на: комментарий от recon88

> написание статьи с сопровождающим кодом

Соотношение код/описалово может быть любым. От статьи с кодом, до кода с комментариями.

ugoday ★★★★★
()

Успокойтесь уже, ботаны. Матан не востребован, лиспы с хаскелями не нужны, Кнут устарел. Учите PHP и не эпичьте людям мозги.

anonymous
()

apt-get source ifupdown

Я был удивлён.

anonymous
()
Ответ на: комментарий от anonymous

> или они все на самом деле этим не пользуются, а так - выдумывают?

Это они понтуются. Хотят как-то оправдать годы, бесцельно потраченные на изучение матана. Все равно каждый день на работе они пишут примитивный, не нуждающийся в комментариях код на PHP, а в свободное время троллят на ЛОРе о том, как круто они лабают на R и хаскеле.

anonymous
()
Ответ на: комментарий от ugoday

> Утешай себя этим.

Чем? Меня чужие страдания не утешают, я умею сопереживать другим людям. Мне ботанов жаль. Они, бедненькие, так мучаются. Потерянные годы жизни ведь уже не вернуть, а пользы от матана никакой не нашлось. Только и остаётся, что на ЛОРе для себя альтернативную реальность сочинять. И нет никого, кто объяснил бы им, бедным, что эскапизм - это путь в никуда.

anonymous
()
Ответ на: комментарий от anonymous

Если в твоей области «матан» не используется это не значит что нигде не используется. Формальные методы широко используются в областях где очень важна корректность(системы реального времени, системы управления), тебе просто не повезло с областью.

recon88
() автор топика
Ответ на: комментарий от recon88

> Если в твоей области «матан» не используется это не значит что нигде не используется.

Матан не используется практически нигде и никогда. В том числе и в ОСРВ.

Для обслуживания тех крайне редких задач, где какой-то там матан нужен, хватает сотни человек на весь мир. А матан учили сотни тысяч несчастных идиотов, которым теперь до боли обидно за бесцельно потраченные годы.

anonymous
()
Ответ на: комментарий от anonymous

Кстати, лучше бы попробовали сами вместо критики - бывает очень полезно взглянуть на проект с высоты «птичьего полета». Причем не по реализации, а именно по идеям. Какая идея за какой следует, что еще не сделано, что надо поправить. Современные средства для literate programming позволяют это делать.

recon88
() автор топика
Ответ на: комментарий от anonymous

Давайте определимся с терминологией, а то я перестал вас понимать. Что вы понимаете под матаном?

recon88
() автор топика
Ответ на: комментарий от mclaudt

\documentclass[a4paper,11pt]{scrartcl}
%\usepackage[warn]{mathtext}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english,russian]{babel}
\usepackage{indentfirst}%first paragraph indent
\usepackage{cmap}
\usepackage[unicode=true]{hyperref}
\usepackage{graphicx}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{srcltx}
%научные символы и смайлики \smiley \frownie
\usepackage{wasysym}
\usepackage[noae]{Sweave}
\title{Пример использования \textsf{Sweave} в среде статистических расчетов \textsf{R}.}
\author{Х.Х.\,Ххххх}
\begin{document} % Тело документа
\maketitle

<<setup,echo=FALSE,print=FALSE>>=
library(cacheSweave)
setCacheDir("./testcache")
@ 

<<echo=false>>=
options(continue=" ")
@

\SweaveOpts{keep.source=TRUE}

tttttttttttttttttttttttttttttt
tttttttttttttttttttttttttttttt
tttttttttttttttttttttttttttttt
tttttttttttttttttttttttttttttt

\end{document}


в чунках использовать опции включающие/отключающие кеширование.

Дополнение к образцу из LF взято http://www.stat.auckland.ac.nz/~ihaka/?Papers_and_Talks

PS вторую в списке статью человека не читайте, он не знал чем это кончается на LORe :)

psv1967 ★★★★★
()
Ответ на: комментарий от anonymous

вобще не понятно откуда такая агрессия в сторону хороших практик программирования. Такие же нападки постоянно в сторону функциональных языков, они ведь используются, и используются довольно успешно. Erlang набирает обороты, куча сервисов на нем написано, и все равно надо говорить что это «ненужный матан».

recon88
() автор топика
Ответ на: комментарий от psv1967

> Ничего, сейчас в школе нет «производных», нет «интегралов».

И слава всему, что больше нету. То убожество, которое преподавали в обычных школах, можно называть только «производные» и «интегралы» (я кавычки имею в виду). Лучше уж совсем никак, чем так.

kemm
()
Ответ на: комментарий от recon88

> Давайте определимся с терминологией, а то я перестал вас понимать. Что вы понимаете под матаном?

Всё тупое задротское ботанство. Если что сложнее, чем 2+2 или чем страничка на PHP - то это «матан».

anonymous
()
Ответ на: комментарий от psv1967

> Ничего, сейчас в школе нет «производных», нет «интегралов». Небо услышало твои молитвы неизвестный

И геометрии тоже нет, хвала Джехове. Но не всё ещё идеально. Надо очистить не только школу, но и ВУЗы. А то что за хрень такая, работодатели требуют диплом о в/о, а диплом получить можно только с матаном, который потом в жизни совсем не нужен никогда.

anonymous
()
Ответ на: комментарий от recon88

«Успешно используются» они только в воображении замученных матаном троллей с ЛОРа. В дикой природе никаких ерлангов с оккамами и прочими кложурами не встречается.

anonymous
()

Использую noweb для страшных языков типа Octave и даже Python,
для Хаскелля Literate Haskell очень хорош,
для Лиспа не нужно вовсе.

Sphinx ★★☆☆
()

> востребовано ли?

Ситуация за прошедшие десятилетия значительно поменялась.
Компьютеры стали быстрее, что расширило наши возможности по
использованию красивых языков высокого уровня, в том числе
функциональных.

Выразительность Lisp и Haskell позволяет записывать мысли
программиста с минимальными потерями. Таким образом, проблема
наличия промежутка между алгоритмической записью и формой,
понятной человеку (являющая проблемой из-за необходимости
затратной интерпретации при чтении кода), которая в структурную
эру наивного Паскаля могла быть обойдена с помощью WEBообразных
утилит, разрешается уже на уровне самого языка программирования.

Конечно, до сих пор существуют языки, по некоторым причинам
весьма удобные для решения определённого круга задач, но для
которых при этом языконезависимые средства вроде noweb
могут оказаться очень полезными.

Sphinx ★★☆☆
()
Ответ на: комментарий от Sphinx

>Ситуация за прошедшие десятилетия значительно поменялась.

Компьютеры стали быстрее, что расширило наши возможности по

использованию красивых языков высокого уровня, в том числе


функциональных.



Да, ситуация действительно изменилась. Набрали популярность многие скриптовые языки, например JavaScript, Python, PHP. А вся функциональщика как была в ж, так там и осталась. К сожалению или к счастью - я не утверждаю, это просто факт.

anonymous
()
Ответ на: комментарий от Sphinx

> Выразительность Lisp и Haskell позволяет записывать мысли программиста с минимальными потерями. Таким образом, проблема наличия промежутка между алгоритмической записью и формой, понятной человеку (являющая проблемой из-за необходимости затратной интерпретации при чтении кода), которая в структурную эру наивного Паскаля могла быть обойдена с помощью WEBообразных утилит, разрешается уже на уровне самого языка программировани

иногда важно донести не столько «как работает», а «почему сделано именно так», и тут никакая выразительность языка не поможет.

anonymous
()
Ответ на: комментарий от anonymous

> Да, ситуация действительно изменилась. Набрали популярность многие скриптовые языки, например JavaScript, Python, PHP. А вся функциональщика как была в ж, так там и осталась. К сожалению или к счастью - я не утверждаю, это просто факт.

Хохо, js же вроде очень даже функциональный - scheme with curly braces.

anonymous
()
Ответ на: комментарий от anonymous

Вы прослушали басню «Лиса и виноград» в исполнении молодого эстрадного артиста anonymous (01.02.2010 23:56:11)

ugoday ★★★★★
()
Ответ на: комментарий от recon88

Под матаном он понимает всё, что выходит за пределы его убогого понимания. Тоесть почти вообще всё.

ugoday ★★★★★
()
Ответ на: комментарий от anonymous

Или, например, если в расчётах встречается какая-то формула, нужно объяснить что это такое и откуда взялось.

ugoday ★★★★★
()
Ответ на: комментарий от Sphinx

> для Лиспа не нужно вовсе.

Вам не понравился пример со схемой и алгебрами Ли? Любопытно, но я лично на описание ЛП в ЖЖ попал из дневника, где автор писал о том, что запутался в сложной программе написанной именно на cl :)

ЛП это способ структурирования мыслей программиста. Если проект большой никакой памяти не хватит все в ней держать. А самую большую книгу человек пишет и пишет себе. Причем как раньше, без негров, сам --- лично.

Ну не нравится систему макросов использовать из ЛП --- не используйте (пока не умеете, например я тоже не умею :).

psv1967 ★★★★★
()
Ответ на: комментарий от anonymous

>Всё тупое задротское ботанство.
однажды крутые пацаны отжали сейф, но вскрыть его не смогли и стали выносить через бетонные катакомбы, но на последнем повороте он не влез

смотри, дружок, на автарку.

dimon555 ★★★★★
()
Ответ на: комментарий от anonymous

> Объясните мне, чем этот подход лучше классической абстракции?

-_- -_- О_о -_-

Ну если она (абстракция) одна и написана на схеме аля лекции sicp. Но даже там разжевывают каждый шаг, только тем что написано на доске не ограничиваются.

Да и по моему крайне неплохо ход мыслей приведших к этой самой «абстракции» запротоколировать. И если Вы не сторонник вести дневник, или если все же пишете мемуары, но находитесь в глубоком цейтноте, то ЛП лучшая методика написать не одноразовый код.

По выходу из отпуска например не чесать в области головы --- «какой я умный и сосредоточенный был в молодости» и страдать что теперь «всего лишь сосредоточенный». А просто прочитать увлекательную историю... немного подумать, и начать писать дальше :)

А представьте что действительно большой проект и по времени тоже и абстракций много?

Я пользуясь Sweave могу сказать, что в таком режиме я вообще не ограничен в объеме работы совершаемой работы. Не надо пытаться как раньше в порыве озарения получить полное решение «за один присест». Промежуток между работой может быть практически любым без потерь производительности написания решения. Ну и последнее специфично для R я получаю полностью готовый к употреблению отчет/статью/шаблон.решения.стандартной.задачи .

psv1967 ★★★★★
()
Ответ на: комментарий от psv1967

Какой-то невнятный поток эмоций, и в итоге ничего по делу, никакой конкретики. Вам бы как раз мемуары писать.

anonymous
()
Ответ на: комментарий от anonymous

>Какой-то невнятный поток эмоций, и в итоге ничего по делу, никакой конкретики. Вам бы как раз мемуары писать.

Ладно, доедай их без меня.(я не на столько толстый)

SV0L0CH
()
Ответ на: комментарий от psv1967

Хорошо, я прокомментирую твой пост, чтоб ты понял о чём речь.

Ну если она (абстракция) одна и написана на схеме аля лекции sicp. Но даже там разжевывают каждый шаг, только тем что написано на доске не ограничиваются.


Смысл этой фразы остался только у тебя в голове. Какая доска? Какие шаги? Какой-то несвязный поток слов. Если думаешь, что все смотрели лекции SICP, то ошибаешься. И зачем опять переходить на конкретные языки, я спросил вопрос без привязки к языку.

Да и по моему крайне неплохо ход мыслей приведших к этой самой «абстракции» запротоколировать.


Для этого есть документация, где подробно описывается (в заголовках, как правило) зачем нужен это класс (или другая сущность), его роли, связи, т.п. диаграмку/схему можно даже набросать. Я не понимаю как будет удобнее, если эту информацию перемешать с реализацией или с кодом вообще.

И если Вы не сторонник вести дневник, или если все же пишете мемуары, но находитесь в глубоком цейтноте, то ЛП лучшая методика написать не одноразовый код.


В спешке по-моему ничего хорошего вообще не рождается. Это мне напоминает чтение литературы в метро с сотового телефона. Ни о каком «глубоком погружении» в материал и речи быть не может. Если Вы в таком же режиме пишите код, то мне жалко и Вас, и Ваши программы.

И насчёт не одноразового кода. ЛП так или иначе выводит нового игрока - систему ЛП (*web). Её нужно кому-то поддерживать (не факт что завтра она умрёт и все твои поделки будет нечем интерпретировать), устанавливать (не факт, что пользователь увидит в зависимостях какую-то редкостную непонятную хрень и скажет ну её эту поделку), изучать (не факт, что программист, который будет читать код, захочет разбираться с синтаксисом очередной *web системы).
А учитывая, что все приведённые примеры на wiki (а других я не видел) можно легко реализовать средствами самого языка, то шансов на долгую жизнь у традиционного не-ЛП кода становится определённо больше.

По выходу из отпуска например не чесать в области головы --- «какой я умный и сосредоточенный был в молодости» и страдать что теперь «всего лишь сосредоточенный». А просто прочитать увлекательную историю... немного подумать, и начать писать дальше :)


Или просто посмотреть на комментарий, на код, немного подумать и продолжить писать код. Вообщем это неаргументированный субъективизм и утверждение аля зелёное лучше синего.

А представьте что действительно большой проект и по времени тоже и абстракций много?


Абстракции для того и нужны, чтобы их не было много, работать всегда с ограниченным набором сущностей, что без проблем укладываются в голове. Если этого не получается и в голове каша, значит проблемы в проектировании, нужны новые абстракции и т.п.

Я пользуясь Sweave могу сказать, что в таком режиме я вообще не ограничен в объеме работы совершаемой работы. Не надо пытаться как раньше в порыве озарения получить полное решение «за один присест». Промежуток между работой может быть практически любым без потерь производительности написания решения.


Бла-бла-бла я могу привести стотыщмильёнов примеров, где один человек писал длинный сложный код. И про без потерь производительности - не верю (см. выше, про литературу в метро). Это всё трёп аля я вчера за ночь пять раз.

anonymous
()
Ответ на: комментарий от anonymous

Комментарии, комментарии... Ну пишите комментарии. Только учтите, что они будут следовать логике _реализации_ «абстракции», а не той цепочке рассуждений которая привела к появлению «абстракции».

Возможно если вы пользуетесь готовыми «абстрактными абстракциями в вакууме» Вам это и не нужно.

Однако единственный способ родить сложную «абстракцию», которую не успеть выплеснуть в код за один присест, это записывать ход своей работы над задачей.

Простыми комментариями удобно просто пояснения в коде сделать который уже написан. И никто не отменяет и не запрещает в чунках кода ставить и комментарии. Более того так и поступаю. Но описывать процесс решения задачи в комментариях? :)

И вообще непонятно, что непонятно в Sweave, и её удобности для работы в R? Это что шутка такая? Значит я должен отдельно код лопатить, потом собирать вручную результаты до кучи, потом всё это связанное веревочками в охапку вставлять в MSWORD, и мучительно морщась от воспоминаний «о чём я думал когда выводил картинку №57», писать текст отчета? Спасибо, занимайтесь такой х:?*?ёй сами.

psv1967 ★★★★★
()
Ответ на: комментарий от psv1967

>Только учтите, что они будут следовать логике _реализации_ «абстракции», а не той цепочке рассуждений которая привела к появлению «абстракции».
Не путайте тёплое с мягким. Реализация - это совсем другой этап разработки, там документируются не назначение, а тонкие моменты, которые простым прочтением кода оставляют вопросы. Абстракции же создаются, обдумываются и описываются на этапе проектирования.

Однако единственный способ родить сложную «абстракцию», которую не успеть выплеснуть в код за один присест, это записывать ход своей работы над задачей.

Опять не догоняю. Вовсе не обязательно реализовывать всё сразу. Сначала продумывается архитектура программы, все классы, т.п. Потом неспешно реализуется, где уже понятно кто есть кто, пусть он ещё и не реализован.

Простыми комментариями удобно просто пояснения в коде сделать который уже написан. И никто не отменяет и не запрещает в чунках кода ставить и комментарии. Более того так и поступаю.

Ну да, и я про это.

Но описывать процесс решения задачи в комментариях? :)

Что есть процесс решения задачи? Если у меня есть набор заголовочных файлов, к которых я описал все интерфейсы в доксиген формате - это оно. Или Вы ещё каким-то образом описываете почему решили сделать именно этот класс? Хочу пример тогда.

И вообще непонятно, что непонятно в Sweave, и её удобности для работы в R?

Я просто не шарю в этом, может там и было бы проще понять. Я с R сталкивался поверхностно и только в магистратуре, уже не помню по какому вопросу...
Мне бы что-ть C++'ное понятнее было.

anonymous
()
Ответ на: комментарий от anonymous

Вы сами ответили, именно почему таких классов нагородили и описывают. Почему это не является обузой я рассказал. Могу еще раз: записывая размышления и одновременно код -> получая из этого автоматически документацию и программу + сохраняя всю логику разработки программы, можно работать эффективнее не теряя нисколько в скорости разработки. Что это за свобода когда у тебя куча файлов с разрозненными кусочками кода которая реально помещается только в голове покрытой шляпой размером большей чем артельный котел?

Ну вот ещё ссылок конкретно про Sweave, хотя я так понял, Вы не прочитали две публикации в ЖЖ из первого же ответа топикстартеру (там есть масса примеров «на C»)? Почитайте ниже приведенное и раскажите зачем мне все это делать вручную, если я могу нажав M-n s и получу TeX файл, дополнительно нажав M-n P готовую pdf? А могу запустить stangle и получить чистый код, хотя в случае R это понадобится только когда мне будет нужно например приложение типа «рабочее место пользователя c графинтерфейсом» а не результат анализа или отчёт.

Author: Leisch, Friedrich Title: Sweave, part I: mixing R and LaTeX Journal: R News Date: 2002 Volume: 2 Number: 3 Pages: 28--31

month: December pdf: http://CRAN.R-project.org/doc/Rnews/Rnews_2002-3.pdf

Author: Leisch, Friedrich Title: Sweave, part II: package vignettes Journal: R News Date: 2003 Volume: 3 Number: 2 Pages: 21--24

month: October pdf: http://CRAN.R-project.org/doc/Rnews/Rnews_2003-2.pdf

Author: Betebenner, Damian Title: Using control structures with Sweave Journal: R News Date: 2005 Volume: 5 Number: 1 Pages: 40--44

month: May pdf: http://CRAN.R-project.org/doc/Rnews/Rnews_2005-1.pdf

Author: Garbade, Sven; Burgard, Peter Title: Using R/Sweave in everyday clinical practice Journal: R News Date: 2006 Volume: 6 Number: 2 Pages: 26--31

month: May pdf: http://CRAN.R-project.org/doc/Rnews/Rnews_2006-2.pdf

Author: Gorjanc, Gregor Title: Using Sweave with LyX Journal: R News Date: 2008 Volume: 8 Number: 1 Pages: 2--9

month: May pdf: http://CRAN.R-project.org/doc/Rnews/Rnews_2008-1.pdf

psv1967 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.