11

文学编程是一种开发软件的方式,首先是文档,然后是编码。一个人编写代码片段的文档,然后编写代码片段的实现。软件源代码的视觉外观将是一个像单词一样的普通文档,其中包含代码段落。

我正在尝试将我工作的开发商店转换为仅使用文学编程,因为它为代码的可读性和维护带来了巨大的优势。然而,由于缺乏工具,LP 在公司中的使用受到限制。例如,编程 literate 的理想方式是使用文字标记编写一个段落,然后插入一个带有实现的子段落。但我似乎找不到任何用于 VS200x 执行 LP 的好工具。

理想情况下,这样的工具看起来就像 Word 2007,但集成到 IDE 中。当编码人员将光标设置在代码段上时,它将具有我们现在在 IDE 中提供的所有功能。

什么是 LP 的好工具,尤其是 .NET 和 VS200x?

4

9 回答 9

15

感谢您尝试改进团队的工作方式。只要您尝试这样做,您就比那些不这样做的人更有优势。

我曾经在一个项目中使用过文学编程。这真的很难,结果真的很好。似乎是一个合理的权衡。

然而,今天我宁愿采取不同的方法:我宁愿写出清晰到人类不介意阅读的代码,而不是人类的散文和机器的代码。当我有写评论的冲动时,我想“我可以让这段代码更清晰”。这意味着我正在编写更少的文档,而不是更多。

好吧,无论你选择什么道路,祝你好运。

于 2008-10-20T17:35:16.820 回答
7

我只能建议你用doxygen注释标记你的代码,然后你可以从你的代码生成文档,我知道这几乎是做你想做的事的倒退方式,但至少你最终得到了想要的结果:代码和文档来自相同的源文件。显然,这样做的好处是您可以使用现有的 IDE 进行编码,并附带所有常见的代码友好的好东西。

如果您正在尝试转换您的开发团队,这种方法可能比成熟的识字方法更容易让他们接受,他们仍然对相同的编码感到满意,但他们必须编写更好的文档嵌入到代码。

这是我能建议的最好的,看看你的团队对这个想法的看法。

于 2008-10-20T17:27:03.123 回答
5

+1 尝试改进团队的流程

-1 表示走上死胡同

恕我直言,单元测试比文档更好

  • 单元测试不能过时
  • 在调试时用散文污染代码是一个巨大的分心
  • 如果您的代码确实需要这么多的说明,那么它可能设计不佳且有问题
于 2008-10-20T18:23:28.627 回答
2

我所知道的唯一真正支持 LP 的非深奥语言是 Haskell,老实说,我没有听说现代编程语言对 LP 有太多需求。大多数人似乎对使用内联文档格式(javadoc、rdoc 等)感到满意

于 2008-10-20T17:30:20.183 回答
1

我很抱歉。我应该提到我们已经在使用带有自动文档构建脚本的 Doxygen。我们尽可能使用 .NET 文档标签,并且在 .NET XML 文档标签不足的地方,我们混合使用 doxygen 标签。这工作得很好。关键是在编写文档时产量会大大减少:我们(人类)在没有任何所见即所得编辑器的情况下制作文档非常糟糕。更不用说对错误敏感了。

该团队目前正处于将思维方式从直接编码转变为首先编写文档,然后是代码的阶段。这是最重要的一步,因为它让编码人员接受 LP 范式。

我猜这里有一个 VS 插件的市场。

此外,Doxygen 似乎确实是一个很好的工具,可以积极地使用 LP 方法解决这个问题。虽然它的使用非常有限。

于 2008-10-20T17:32:13.190 回答
1

然而,今天我宁愿采取不同的方法:我宁愿写出清晰到人类不介意阅读的代码,而不是人类的散文和机器的代码。当我有写评论的冲动时,我想“我可以让这段代码更清晰”。这意味着我正在编写更少的文档,而不是更多。

这也是我们所做的。尽管对于我们生成的大量代码,编写清晰、人类可读的代码是不够的。如果你想解释一个图像渲染函数怎么办?最好用一张图片来解释它,而不是写半页来描述它。

于 2008-10-20T17:40:39.943 回答
1

我不知道任何用于文学编程的现代工具。我在 15 年前做过一些 WEB 编程。

Doxygen 是一个不错的工具,但对 LP 毫无帮助。问题在于 LP 专注于编写代码供人类阅读。对连续细化/披露没有很好的支持。LP 需要查看与 VS 中的文件类属性/方法具有不同结构的源代码。NSpec 可能会更好一些,但也过于自下而上。

于 2008-11-18T16:20:29.233 回答
0

你好源小说作者,

正如有人在这里提到的DOxygen:虽然这不允许真正的文学编程 (作为限制的一个例子,这不允许对源代码进行重新排序),但是它似乎被认为是该领域的一种有价值的工具,由它自己的拥护者(LP 拥护者):在此参考页面的顶部提到了关于 LP 工具:文学编程工具

于 2010-02-24T07:34:36.753 回答
0

文学编程的主要思想是将程序编写为数学文本。人们可以尽可能清楚地定义程序中所需的每个概念是什么意思,然后解释它是如何在语言中实现的,以及为什么决定以这种方式而不是其他方式来实现,或者以后会改变什么。

还可以通过注释要更改的代码段并插入解释更改原因的新代码来记录更改。某些更改可能取决于代码的转换以优化其性能。例如创建一个循环,而不是在某些类似 C 的语言中创建 2 个循环,将一个表达式更改为一个更简单的表达式,等等。或者更复杂的东西,例如更改其他数据结构以表示信息。每一次更改都有充分的理由和记录。关于程序的问题域,只要阅读源代码,深入了解即可。避免由于模棱两可而导致的错误。程序的起源有完整的记录,以后可以回忆起一切,因为每个想法都在程序中。

严格来说,如果程序被开发,可以用纯文本编写有文化的程序,但是用 TeX/LaTeX 排版是最美观、最实用、最简单的方法,因为在大多数编程语言中放置 LaTeX 标记并不困难。

用 Haskell 编写识字程序是很自然的,因为 Haskell 脚本包含一组声明而不是指令。您可以按任何顺序放置所有声明。这在其他语言中有所不同,在这些语言中,以特定方式对指令进行排序很重要。

我没有使用过 web 或 cweb 或类似的程序,但这些程序有助于以人类的逻辑顺序排版程序,而可以生成程序模块以进行正确编译。

有一个名为 Listings 的 LaTeX 包,它很容易使用,你可以开始每段代码关闭评论并结束打开新评论的代码,据我所知,是这样的:

% /* begin of literate program 
\documentstyle{article}
\usepackage{listings}

\lstdefinitions here I do not remember the syntax. Here one can define 
                a replacement for startcode*/ and /*endcode for spaces.

more definitions here

\begin{document}
Your explanation including formulas like $s=c\times\sum_{i=0}^{i=N} x_i$ etc.
\begin{lstlising}
startcode*/

s=0
for(i=0;i<=N;i++) s=s+x[i];
s=c*s;

etc..

/*endofcode
\end{lstlisting}

More explanation ...
\end{document} 
% end of literate program */

在正文的序言中,您可以将 startcode*/ 和 /*endofcode 定义为关键字,以替换为 Listings 包的额外定义中的空格。请参阅软件包文档。

在 LaTeX 源代码的末尾只需键入:

% end of literate program */ 

这是开始时 LaTeX 中的评论,您可以放置​​相反的内容:

% /* start of program

编译程序时去掉%LaTeX注释符号,用LaTeX编译时再放上。

如果您以前从未使用过 LaTeX,则可以先从纯文本开始。也许将它与 doxigen 结合起来以索引所有内容。LaTeX 不需要 Doxigen,因为它是一个排版系统,您可以在其中创建多个索引、超链接,将文档组织成一本书。

Haskell 程序通常以文字风格编写。也许浏览一些书或文章来看看是个好主意。

于 2015-11-23T12:07:11.410 回答