.net 识字编程

.net 识字编程,.net,ms-word,ide,literate-programming,.net,Ms Word,Ide,Literate Programming,是一种开发软件的方法,首先是文档,然后是编码。编写代码段的文档,然后编写代码段的实现。软件源代码的视觉外观将是一个类似word的普通文档,其中包含代码段落 我正在尝试将我工作的开发车间转换为只使用识字编程,因为它为代码可读性和维护带来了巨大的优势。然而,由于缺乏工具,LP在公司的使用受到限制。例如,编程识字的理想方法是使用word标记编写段落,然后在实现中插入分段。但我似乎找不到VS200x执行LP的好工具 理想情况下,这样的工具看起来就像Word2007,但是集成到IDE中。当编码人员在代码段

是一种开发软件的方法,首先是文档,然后是编码。编写代码段的文档,然后编写代码段的实现。软件源代码的视觉外观将是一个类似word的普通文档,其中包含代码段落

我正在尝试将我工作的开发车间转换为只使用识字编程,因为它为代码可读性和维护带来了巨大的优势。然而,由于缺乏工具,LP在公司的使用受到限制。例如,编程识字的理想方法是使用word标记编写段落,然后在实现中插入分段。但我似乎找不到VS200x执行LP的好工具

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


对于LP,特别是.NET和VS200x,什么是好的工具?

我只能建议您用注释标记代码,然后您可以从代码生成文档,我知道这几乎是一种逆向的方法来做您想做的事情,但至少您最终得到了期望的结果:来自相同源文件的代码和文档。显然,这有一个优点,就是您可以使用现有的IDE来编写代码,而这些代码通常都是代码友好型的

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


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

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

对不起。我应该提到,我们已经在使用Doxygen和一个自动化的文档构建脚本。我们尽可能使用.NET文档标记,如果.NET XML文档标记比较短,我们将混合使用doxygen标记。这很有效。关键是,在编写文档时,生产会大大减少:我们(人类)在没有任何WYSIWYG编辑器的情况下生成文档是非常糟糕的。更不用说对错误敏感了

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

我想,VS插件在这里是有市场的


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

感谢您努力改进团队工作方式。只要你努力做到这一点,你就比那些不这样做的人有优势

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

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

不管你选择哪条路,祝你好运

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


我们也是这样做的。虽然对于我们生成的许多代码来说,编写清晰、可读的代码是不够的。如果要解释图像渲染功能,该怎么办?最好用图片来解释它,而不是写半页来描述它。

+1感谢您尝试改进团队流程

-1.走死胡同

考虑到Knuth,单元测试比文档更好

  • 单元测试不能过时
  • 在调试时,用散文污染代码是一个巨大的干扰
  • 如果您的代码真的需要那么多的解释,那么它可能设计得很糟糕,而且有缺陷

我不知道有任何现代工具可用于识字编程。15年前我做过一些网络编程


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

你好,源代码作者


正如有人在这里提到的那样:虽然这不允许真正的读写编程(作为限制的一个例子,这不允许对源代码进行重新排序),但它似乎被它自己的倡导者(LP倡导者)视为这一领域的一个有价值的工具:本参考页顶部提到了LP工具:

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

还可以通过注释要更改的代码段并插入新代码来说明更改的原因来记录更改
% /* 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 */
% end of literate program */ 
% /* start of program