编程语言与软件工程2021blog.frantovo.cz
对精简软件的呼吁 (1995)
A Plea for Lean Software (1995)
入门 · 约 30 分钟读完前置知识:软件工程基础、操作系统基础
导读
这是 Niklaus Wirth(Pascal 之父)1995 年的经典演讲《对精简软件的呼吁》。他批评软件日益臃肿膨胀的趋势,认为单体式设计把所有可想到的功能都塞进系统是复杂度的重要来源,呼吁开发者追求精简、高效的软件。
HN 关注点:HN 读者长期关注软件臃肿与性能问题,这篇经典文章引发了关于精简设计 vs. 现代功能需求的讨论。
HN 评论精选
这几条评论里:质疑 1 补充 3
补充模块化虽增加开销,但能显著提升稳定性和开发效率
文中提到软件复杂度的另一个重要原因在于单体式设计,即所有可想到的功能都是系统设计的一部分。这其实是在呼吁模块化。我信奉模块化,但它并非万能药:模块化带来不少负担,比如代码重复、生命周期管理以及更高的资源占用(有点讽刺,因为这篇文章主要讲的是减少资源占用)。但我依然信奉它——以我的经验,模块化能极大提升系统稳定性、质量、敏捷性和开发速度。
ChrisMarshallNY查看英文原文
> Another important reason for software complexity lies in monolithic design, wherein all conceivable features are part of the system's design. This is really a call for modularity. I'm a believer in modularity, but it is not a cure-all. Modularity brings a lot of baggage with it, like duplication of code and lifecycle management, along with increased resource usage (ironic, as the article is mainly about reducing resource usage). But I am still a believer in it. In my experience, it makes for a massive increase in system stability, quality, agility, and speed of development.
质疑对普通用户而言,界面和体验并非“不必要”,优化讨论常沦为炫技
作者把“任意重叠的窗口”和“花哨的图标”称为“可爱但不必要”,这一点很能说明问题。去街上随便找个人问问这些东西是否“可爱但不必要”。有时我觉得软件工程师忘了我们生活在什么样的世界里:虚拟世界中这些东西显然不需要,浪费算力有辱“工匠精神”;但现实世界中,大多数应用是为有需求和偏好的、不完美的人类而做的,这些需求并非源于逻辑推理,而是源于情感和体验。这并不能为糟糕的工程开脱,但尤其就作者举的文本编辑器和操作系统而言,这份批评严重失当。ed 和 VS Code 的核心功能一样吗?当然,都是编辑文本。VS Code 相比 ed 多用的资源是浪费吗?对这里某些人也许是,但我敢打赌对大多数人答案是否定的。归根结底,很多关于优化的讨论更多是为了炫耀、证明自己是“真正的工程师”,而非真正关心性能。
fisensee查看英文原文
I've found the part where the author talks about "arbitrarily overlapping windows" and "fancy icons" as "cute but not essential" pretty telling. Find me someone on the street and ask them if these things are "cute but not essential". Sometimes I feel like software engineers forget what world we live in. In the virtual world all these things are obviously not needed and wasting precious computing power on them is a disgrace to the "craftsmanship". In the real world most applications are made for flawed humans with needs and preferences which stem not from logic and reasoning but from emotions and experience. This doesn't excuse shoddy engineering in any way (everybody has some horror story of somebody not understanding runtime complexity or something, so there certainly is a lot of it). But especially with the examples the author brings up like text editors and operating systems I find these critic/plea severly lacking. Are the core features of ed and visual studio code the same? Absolutely, you edit text. Are the extra ressources used for visual studio code compared to ed a waste? For some people here probably, but I would bet quite a lot that for most the answer would be no. In the end I often find that discussions about optimatization are often more for people to show off and prove that they are a "real engineer" than any real concern about performance.
补充提醒读者作者是 Pascal 之父 Niklaus Wirth
如果这很显然请见谅——这篇文章的作者是 Niklaus Wirth,Pascal 及其他重要语言的作者。
ape4查看英文原文
Sorry if this is obvious - the article is by Niklaus Wirth - author of Pascal and other important languages.
补充提供了整理后的易读版本文档
这篇论文太经典了,我觉得它值得一个更易读的版本。所以我把文本复制进 Word 并稍作清理,可能对视觉障碍者等更友好。链接在此(旧版 .DOC 格式,任何软件都应能打开),欢迎随意转发。
lproven查看英文原文
This is such a classic paper that I felt it deserved a more readable copy. So I copied the text into Word and cleaned it up a bit. May be easier for those with visual impairments etc. Here: https://www.dropbox.com/s/kmpo4c2q9klqx1e/A%20Plea%20for%20Lean%20Software.doc?dl=0 (MS Word format, old .DOC version. Should be readable in anything.) Feel free to reshare.
相关资源
从这篇论文所有 HN 讨论帖的全部评论里整理出来的链接。
历次讨论
- 2021Hacker News 讨论帖146 分 · 137 评
同领域还值得读
Google 的软件工程(2017)
Software Engineering at Google (2017)
介绍了 Google 的软件工程实践,包括其单一代码库(monorepo)、几乎全部开发在主干进行而非分支、代码审查、构建系统 Blaze、协议缓冲区等工具与流程,并讨论了频繁重…
编程语言与软件工程2017 · 1,127 分 · 465 评 · 引用 15入门 · 约 45 分钟编辑精选Peter Naur:编程作为理论构建 (1985)
Peter Naur – Programming as Theory Building (1985)
Peter Naur 1985 年的经典论文《Programming as Theory Building》提出:编程的本质不是写代码或文档,而是在程序员头脑中构建对程序及其运行…
编程语言与软件工程2016 · 629 分 · 74 评入门 · 约 45 分钟编辑精选SciPy 1.0:Python 科学计算的基础算法
SciPy 1.0: fundamental algorithms for scientific computing in Python
这篇发表于 Nature Methods 的论文介绍了 SciPy 1.0——Python 科学计算生态的基石库,涵盖其核心算法模块(优化、积分、插值、线性代数等)、软件架构与社…
编程语言与软件工程2020 · 387 分 · 98 评入门 · 约 45 分钟编辑精选Lisp 的历史(1979)
History of Lisp (1979)
这是 Lisp 发明者 John McCarthy 于 1979 年为 HOPL(编程语言史)会议撰写的回顾文章,讲述 Lisp 的起源、设计动机与早期演进,文中也涉及 if 表…
编程语言与软件工程2018 · 352 分 · 44 评入门 · 约 45 分钟编辑精选使用 NumPy 进行数组编程
Array Programming with NumPy
这篇 Nature 文章介绍 NumPy 的数组编程模型及其在科学计算中的核心作用:以 ndarray 为中心,通过向量化操作让 Python 高效处理多维数组。
编程语言与软件工程2020 · 318 分 · 134 评入门 · 约 40 分钟编辑精选