返回

文章详情

为什么编程如此吸引人,却又如此痛苦?

Hacker News2026年7月24日 12:15

今天,人工智能编码工具以空前的速度降低了编程的门槛。越来越多的人开始亲手构建产品,并重新审视一个根本性的问题:编程是什么样的工艺?它为什么如此吸引人,又为什么如此困难?弗雷德里克·P·布鲁克斯(Frederick P. Brooks Jr.)在《神话中的人月》(The Mythical Man-Month)中写的《沥青坑》(The Tar Pit)在今天读来仍拥有令人惊讶的相关性。布鲁克斯最著名的是领导IBM的System/360及其操作系统的开发。他把构建大型软件系统比作史前巨兽被困在沥青坑中:真正的危险从来不是任何单一的困难,而是无数问题同时浮现并彼此纠缠。团队越是奋力挣扎,有时就越陷得更深。编程既痛苦又快乐。它让你陷入琐事之中,却也赋予创作者将想法变为现实的能力。愿你能够穿越沥青坑,依然在创造中找到乐趣。 沥青坑 在史前时代,最生动的场景之一就是巨兽在沥青坑中挣扎至死的情景。恐龙、猛犸象、匕首虎……它们越是努力挣脱,沥青就越是紧紧抓住它们。没有任何兽类能够避免下沉。在过去的十年中,大型系统编程就像是沥青坑。许多强大的团队在其中猛烈挣扎,许多人虽然开发出了可运行的系统,却很少有同时满足目标、时间表和预算的团队。困难并非取决于某个单一方面。任何一个问题似乎都能解决,就像一只仍能挣脱的爪子。真正可怕的是,许多因素同时出现并相互作用,最终将整个项目拉得越来越深。要解决这个问题,首先必须理解编程这一工艺本身,以及其中固有的喜悦与困境。 程序、产品、系统 我们常常在新闻中读到这样一个故事:两个程序员在一个改造的车库中开发出超越巨头的程序。每个程序员都想相信这样的故事,因为我们知道,如果只是写程序,我们的速度远远超过了一个组织的"每年1000行代码"的节奏。那么,为什么大公司的开发团队没有被专注的车库组合替代呢?1976年,21岁的史蒂夫·乔布斯和他的朋友史蒂夫·沃兹尼亚克在一个车库中创立了苹果电脑。 "程序"是一个完整的自我,能够在开发环境中由其作者运行。这是车库项目,也是程序员在估算自身生产力时隐含参考的内容。但要让程序真正有用,它必须跨越两个边界。第一个边界是从程序到产品。仅仅作者自己运行已不再足够,每个人都必须能够运行、测试、修复和扩展它。它必须能在不同的操作环境中运行,并处理多样的数据。要成为通用产品,程序必须以更通用的方式编写。尤其是输入的范围和形式必须尽可能地通用,以适应基本算法的合理限制。然后,程序必须经过彻底测试,以便人们可以信任它。这意味着需要准备、运行和记录大量测试用例,以探索其输入范围和边界。最后,需要完整的文档,以便任何人都可以使用、修复和扩展它。根据经验,一个产品的成本至少是调试后的功能性程序的三倍。 第二个边界是从程序到系统中的一个组件。系统不是一个孤立的程序,而是一个交互程序的集合,在功能上协调并在格式上受限。要成为系统组件,程序的每一个输入和输出都必须符合定义的接口规范,包括格式和含义。它还必须设计到预定的资源预算中——内存空间、I/O设备和计算时间。最后,必须在所有可预期的组合中与其他组件进行测试。这种测试必须是广泛的,因为测试用例的数量呈组合增长。它也很耗时。即便每个组件在孤立状态下已被调试,组件之间的意外交互仍然可能导致微妙的错误。系统组件的成本至少是具有相同功能的独立程序的三倍。当一个程序同时是产品和组件时,它的成本是简单程序的九倍。然而,这就是最有用的结果,也是大多数开发工作的目标。 工艺的乐趣 为什么编程是有趣的?首先是创造东西的纯粹乐趣。就像孩子乐于制作他的泥饼一样,成年人也享受构建东西,特别是自己设计的东西。我认为这种快乐必定是上帝创造的喜悦的回响——每一片叶子、每一片雪花都是独一无二且新鲜的。其次是创造对他人有用之物的喜悦。内心深处,我们希望他人能使用我们的工作并发现其帮助。在这方面,编程系统与其他任何创造物没有区别。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡