谦逊的程序员:软件危机与编程的未来

2025-06-17

本文是Edsger W. Dijkstra在1972年发表的著名演讲,探讨了早期编程的状况以及日益严重的软件危机。Dijkstra回顾了编程早期不被认可的历史,以及随着计算机性能的飞速提升,软件复杂度也急剧增加,导致软件危机出现。他认为,解决软件危机的关键在于改变编程方法,提倡编写“可理解的程序”,并强调程序正确性证明的重要性,以及避免使用过于复杂的编程语言。他相信通过改进编程语言、采用更结构化的编程方法和重视程序正确性,可以显著提高软件质量和开发效率。

阅读更多
开发

自然语言编程的谬误:形式化语言的必要性

2025-04-03

本文批判了自然语言编程的设想。作者认为,将自然语言作为编程接口,虽然看似简化了人机交互,实则会大幅增加机器的复杂性,并可能导致更多难以察觉的错误。历史经验表明,形式化语言(如数学符号)的精确性和严谨性,是高效信息处理的关键。自然语言的模糊性和歧义性,反而会阻碍计算机科学的发展。作者认为,与其追求自然语言编程的便利性,不如珍惜形式化语言带来的精确性和效率,这才是计算机科学发展的正确方向。

阅读更多
开发

为什么数组索引应该从零开始?

2025-03-21

本文探讨了为什么计算机科学中数组索引应该从0开始,而不是1。作者通过数学推理和编程语言经验,论证了从0开始索引的优越性:它更符合数学逻辑,避免了边界条件处理的歧义,并使代码更简洁高效。文章还提及了历史上一些编程语言对索引选择的不同,以及由此带来的不便。

阅读更多
开发

计算机科学的本质:优雅胜于复杂

2024-12-24

这篇由Edsger W. Dijkstra撰写的文章探讨了计算机科学的本质。Dijkstra认为,计算机科学应成为数学的一个高度形式化的分支,注重方法论而非事实知识,从而消弭理论与实践的界限。他批评了当前学术界对复杂性的追捧以及由此带来的对简洁有效的解决方案的忽视,并呼吁计算机科学家追求优雅的解决方案,从中获得乐趣。

阅读更多
开发

论真正教授计算机科学的残酷性

2024-08-20

这篇文章探讨了计算机作为一种根本性新事物的残酷性。作者Edsger W. Dijkstra认为,计算机科学需要一种全新的思维方式,而传统的类比和隐喻方法已经过时。他批评了软件工程领域普遍存在的对渐进式变革的迷信,以及将程序视为类似于其他设备的错误类比。Dijkstra主张采用形式化方法,将程序视为数学公式,并通过数学证明来验证其正确性。他还对人工智能将人类思维拟人化的做法表示怀疑,认为这是一种掩盖计算机真正力量的尝试。

阅读更多
未分类

内存一致性模型教程

2024-05-14

本文介绍了内存一致性模型,它定义了并行线程如何观察其共享内存状态。文章首先解释了顺序一致性模型,该模型要求所有线程以相同的顺序看到内存操作,但由于效率低下,现代架构采用了放松的内存模型,例如总存储排序(TSO)。TSO允许使用存储缓冲区来隐藏写延迟,但这会导致程序员意想不到的行为。文章还讨论了语言级内存模型,以及编译器优化如何影响程序行为。最后强调了数据竞争和同步的重要性,并建议使用同步库来处理内存排序问题。

阅读更多
未分类 内存一致性