识字编程 有良好的理想。您为什么认为这不是主流?这是因为它未能交付?

有帮助吗?

解决方案

我首先在努斯特的著作中看到了它,并认为它看起来很整洁。然后,我尝试使用文学编程显示来理解程序中的情况,并发现它比看起来更难。可能是我太习惯了进行程序列表,但这似乎令人困惑。

然后我查看了源代码,那时和那儿让我失望了。我必须学会以一种全新的方式编写程序,在程序文本和编译器所看到的内容之间较少的对应关系,并且没有相应的好处。

此外,人们可以写长期而令人信服的论点,即该代码实际上在做X时正在做X,而且我已经遇到了我的误导性评论。我开发了阅读代码的热情,以便早日了解它的工作。识字编程是对的对立面。

其他提示

我会怪 网络效应。为了使其他人编辑您的代码和文档,他们必须能够理解它。

这使人们远离了CWEB/Noweb之类的东西,因为使用它们需要您学习TEX和您用于该项目的编程语言的特定于程序的语法。这可以看作是浪费时间,尤其是如果他们不需要任何首先对Tex如此大的排版的数学排版。 (对于许多应用程序编程人员来说,他们确实不需要它。)相反,他们更喜欢Visual Studio的XML评论,因为这已经很受欢迎且已建立了良好。

我看到的识字编程的起点是科学/统计计算,大多数程序员在数学,CS或统计中都有大量的培训(又称博士学位),因此已经与乳胶有关。他们编写的文档更有可能包含许多最适合用Tex编写的复杂公式,并且他们更有可能在R中编程。了解CWEB的C程序员的比例。

我对90年代后期的识字编程的概念着迷,但我仍然对Knuths的编程方法和排版的方法很感兴趣。最好的是最好的。

诺斯(Knuth)设计的识字编程系统所做的事情要多得多,远远超过了眼睛,即克服了代码生成工具从Knuths源文档生成的基础编程语言中的许多缺陷,即标准Pascal。

对于那些幸运的人来说,没有尝试过标准Pascal,这里有一些亮点。

  • 为了使单个通行证编译器更容易,该语言规范说,所有声明都必须按一定顺序出现。从Wikipedia页面中:“每个过程或函数都可以拥有自己的goto标签,常数,类型,变量以及其他过程和功能的声明,这些声明必须符合该顺序。”这意味着你可以 不是 在源文件中将您的内容逻辑地组合在一起。
  • 弦乐处理比普通C更乏味。
  • 标识符不能具有任意长度。
  • 我再也无法记得的更多事情了。

所有这些事情基本上意味着Knuth需要一种更好的编程语言(因此他发明了一种),并且使用Pascal作为装配语言。

大多数现代语言都可以无需太多努力就可以做这些事情,因此消除了识字编程要解决的大部分作品。

同样,现代语言具有更大的表现力,可以将更多的思考放入代码本身中。

那么,剩下什么?从源代码和 今天存在。

请想想Javadoc- Java运行时API可能是当今可用的最大的识字编程(除了实际上没有提出代码,但是如果Java从一开始就开放了Java)。例如,请参见在收藏框架上的介绍 http://download.oracle.com/javase/6/docs/api/java/java/util/collection.html

我相信.NET和其他主流程序存在类似的系统。

当我在90年代与识字编程进行掌握时,我发现的一件事是,它吸引了非常热情的人,他们想做正确的事情 - 涉及编写自己的识字编程系统,因为没有现有的人对他们足够好。 Noweb是通过为每个人提供最不可能的共同点来切断这一点的好尝试,尽管即使那样,我还是花了大部分LP时间来为它开发一个相当贴印的时间...

另一个问题是它确实是反敏捷的。在某些方面,放慢脚步是好的,因为它迫使您第一次思考并首次做好事情。另一方面,请仔细记录您,这意味着要重构代码有一个巨大的障碍。而且,如果您要等到LP-IFY之前的代码变硬之前,您最终完成了多天的文档任务,这确实可以阻止您进入轨道。

在我的谦虚意见中,许多公司的文化与识字编程的目标相反:他们想要更快的结果(他们只会在应用程序制作时就对质量哭泣)。根据我自己的经验,我的老板拒绝理解,更快的结果并不意味着“我要求的第二天可以运行的程序”。对于他们来说,如果开发人员不忙于在键盘上打字,那么他没有工作,就是“浪费他的时间在不sense上”。是的,我知道,我的老板是一个arsehole。

编码器编写代码而不是英语。

编码器不喜欢编写文档,因为它无助于代码运行。

编码人员不擅长编写文档,因为它表达了他们的想法的差分。

识字编程似乎是将文档提升到代码更为事后的新级别的想法。也许它会起作用,但是对于大多数编码器来说,它看起来像是令人讨厌的文档。

主要是因为人们很愚蠢。显而易见的证词是年轻人对这种简单技术的本质所表达的无休止的猜测和误解。

人们将LP列入:(a)文档方法(b)撰写一些抛光论文的方法,需要一些特殊技能或才华(c)根本没有任何线索 - 作为Leo编程编辑的创建者,他自己的承认等等,等等

LP只是简单的:(1)用A(=任何)人类语言的代码和短语的编写程序,后者代表其他代码和/或包含的短语。这正是无数编程教科书的作者所做的。(2)是一个简单的预处理器,扩展了人类中的这些短语(就像包含子例程的名称一样),以根据编译器所需的顺序(或解释器)。否则,可以将书面文本与另一个小型实用程序扩展,以包括格式化符号,以将“识字源”变成一个不错的成式可读文本。

年轻人永远不会尝试这个极其简单的想法 - 要么幻想或想象假的原因,因此他们永远不会尝试或做到这一点。

基本上,用人类语言编写的“伪代码”编程的主要思想,然后用简单的预处理器实用程序扩展它有助于管理注意力(有限,对任何长期程序的主要困难),就像程序流的代码折叠或划分一样,进入函数/子例程,您不需要在详细信息中失去自己,而是对机器执行完全不必要的。

我有两个方面的识字编程 愿望被纳入主流编程中 - 嵌入式图像(例如,设计图)和以前和替代尝试的指针(例如,“这样的原因是因为我以其他方式尝试过,并且它不起作用,因为... )。这两个方面都可以用DOC-COMMENTS和URI来处理。

因为程序的逻辑与我们所说的不一样。程序具有明确的流,条件和循环。

在进行编码之后,我认为这些术语。我的大脑将问题转化为可执行代码的目标域。对于我来说,用通常的编程语言写下它比必须采取额外的转换步骤来使我的程序识字要高得多。

实际上,我相信我的程序已经是识字的...说明标识符,良好的功能名称,评论我做了一些黑客,几个月后我会立即理解这些黑客。

总而言之:我的Java代码本身更具识字性,因为每个“识字”编程都希望成为。

我以相反的方式来识字编程 - 我梦想着将代码井井有条,因为它适合我的想法,而不是编译器所要求的。我发现 狮子座 几乎是理想的目的。它还支持跟踪在外部更改文件的跟踪。这些文件不必包含任何特殊的标记,因此我可以自己使用Leo,而无需团队中的其他人知道。此功能 - “ @shadow Tree” - 尽管仍然有障碍,但仍需要更多的眼球。它还通过将所有内容组织到树轮廓中并支持外部文件来解决“哦,不,一个大文件中的所有问题”问题。

对我来说,与名称相反,“识字编程”根本不是关于文档的。我没有比以前更多的文档。这是关于有帮助我的结构 不会迷路. 。我发誓尤其是在管理庞然大物JSP文件时(尽管Leo最初是针对Python的,但它不支持JSP语言 - 我必须手动将文件分配给Leo Tree!)。

我认为它是一种有价值的教学工具,可以编写有关代码的论文,然后在其中交织的工作代码段,以指导读者有关代码的方式,什么和何处。

在纯粹的教育环境之外,我认为只有Knuth真正了解如何最好地使用它。

这是所有世界中最糟糕的 - 您必须用非常非特异性语言=英语编写一个高度正确的,高度特定的计算机程序。因此,您必须使用正确的短语仔细编写它 - 因此,您最好只编写代码。

许可以下: CC-BY-SA归因
scroll top