别让架构宇航员吓到你 (2001)
摘要
Joel Spolsky 警告不要在软件设计中过度抽象,以 Napster 为例,强调过度关注架构会忽视用户需求。他批评了那些优先考虑抽象概念而非实用功能的技术趋势炒作。
<p><a href="https://lobste.rs/s/3xfxnj/don_t_let_architecture_astronauts_scare">评论</a></p>
查看缓存全文
缓存时间: 2026/09/19 14:02
# 别让"架构宇航员"吓到你
来源:https://www.joelonsoftware.com/2001/04/21/dont-let-architecture-astronauts-scare-you/
当伟大的思想家思考问题时,他们会开始发现规律。他们观察人们互相发送文字处理文件的问题,接着看人们互相发送电子表格的问题,然后意识到存在一个通用模式:发送文件。这已经是一个抽象层次了。然后他们再上升一层:人们“发送”文件,但网页浏览器也在“发送”网页请求。仔细想想,调用对象的方法就像向对象发送消息!这又是同一种操作!所有这些都是“发送”操作,于是我们聪明的思考者发明了一个更新、更高、更宽泛的抽象概念,称之为“消息传递”。但这下变得太模糊了,没人真正知道他们在说什么。blah。
当你抽象层次升得太高,就会缺氧。有时聪明的思想家就是不知道何时该停下来,他们创造出荒谬的、包罗万象的、高层次的宇宙图景,这些图景虽好,但实际上毫无意义。
我把这些人称为“架构宇航员”。很难让他们写代码或设计程序,因为他们总在思考架构。他们就像是宇航员,因为已经在氧气层之上了,我真不知道他们怎么呼吸的。他们往往在那些真正的大公司工作,这些公司养得起很多拥有高级学位、但对业务毫无贡献的低效人员。
最近一个例子说明了这点。典型的架构宇航员会抓住“Napster是用于下载音乐的点对点服务”这样的事实,忽略其他一切,只关注架构,觉得点对点很有趣,却完全忽略了真正的重点——它的有趣之处在于你可以输入歌曲名称就能立即收听。
他们只会谈论点对点这个、点对点那个。突然间出现了点对点会议、点对点风险投资基金,甚至点对点反弹潮,那些愚蠢的商业记者幸灾乐祸地互相抄袭报道:“点对点:已死!”
架构宇航员会说这样的话:“你能想象一个像Napster但可以下载任何东西(不仅仅是歌曲)的程序吗?”然后他们会构建像Groove这样的应用,自认为比Napster更通用,却似乎忽略了那个微小但重要的功能——让你输入歌曲名称就能收听——这正是我们最初想要的功能。真是舍本逐末。如果Napster不是点对点的,但确实能让你输入歌名就能收听,它同样会大受欢迎。
架构宇航员常做的另一件事是发明某种新架构,声称它解决了某些问题。Java、XML、Soap、XmlRpc、Hailstorm、.NET、Jini……天啊我跟不上了。这还只是过去12个月的!
我并不是说这些架构有什么问题……绝非如此。它们都是相当不错的架构。让我困扰的是围绕它们的千禧年式炒作。还记得微软的Dot Net白皮书吗?
> 下一代Windows桌面平台Windows .NET支持生产力、创造力、管理、娱乐等更多功能,旨在让用户掌控自己的数字生活。
那是大约9个月前的事了。上个月我们又得到了微软的Hailstorm。那份白皮书说:
> 人们无法掌控围绕他们的技术……HailStorm让生活中的技术为你协同工作,在你的掌控之下。
哦,好极了,那我公寓里的高科技卤素灯应该就不会随机闪烁了。
微软并非特例。这是一段Sun Jini白皮书的摘录:
> 这三个事实(你是新的系统管理员、计算机无处不在、一台计算机覆盖各处)应该结合起来改善使用计算机的世界——让计算机的边界消失,让计算机无处不在,让使用计算机的细节变得像把DVD放入家庭影院系统那样简单。
而别跟我提George Gilder吹捧Java的那些肥料话了:
> 技术史的根本性断裂……
当你发现架构宇航员的典型迹象时,确凿无疑:不可思议的吹嘘;英雄式、乌托邦式的浮夸;自夸;完全脱离现实。而人们居然买账!商业媒体为之疯狂!
为什么人们对这些无聊的架构如此印象深刻?它们往往不过是一种新的RPC传输格式,或是新的虚拟机。这些可能是好的架构,确实会让使用它们的开发者受益,但它们绝不是——我重申,绝不是——骑着白马进入耶路撒冷的救世主,或是世界和平。不,微软,计算机不会仅仅因为全世界每个人都必须拥有Passport账户,就读心术般自动执行我们想要的操作。不,Sun,我们也不可能“像把DVD放入家庭影院系统那样简单”地分析企业销售数据。
请记住,架构师们解决的是他们认为自己能解决的问题,而不是真正有用的问题。Soap + WSDL可能是时髦新玩意儿,但它并没有让你做以前用其他技术做不了的事——只要你有理由的话。架构宇航员喋喋不休的那些分布式服务极乐世界,过去如果我们使用DCOM、JavaBeans、OSF DCE或CORBA,早就被承诺过了。
我们现在能用XML作为传输格式是不错。哇哦。但这对我来说,就像听说我的超市用卡车从仓库运货一样无聊。哈欠。芒果,那才有趣。告诉我一些以前做不到的新东西吧,宇航员们,或者继续待在太空里,别再浪费我的时间了。
相似文章
优秀的架构不需要胡萝卜,也不需要大棒
这篇博客文章主张,良好的软件架构应当是不言自明且毫无阻力的,倡导采用 Netflix/Spotify 式的“铺平道路”模式,而非依赖强制性的治理委员会或嵌入式架构师。
Claude不是你的架构师。别再让它假装了
这篇评论文章尖锐指出,类似Claude的AI智能体缺乏真正软件架构所需的上下文判断力和说“不”的能力,警告人们不要让它们在缺乏人类监督的情况下设计系统。
学习软件架构
一位软件工程师分享了学习软件架构的见解,强调组织架构与激励机制优先于代码本身,并结合 rust-analyzer 与科学计算代码的实例进行了说明。
别再试图用工程方法逃避倾听用户
一篇论述软件工程师和产品设计师常通过过度设计框架与系统来逃避真正倾听用户的文章,同时列出七种妨碍有效倾听用户与利益相关者的常见陷阱。
软件关乎人,而非代码(2020)
一篇论述软件成功更多取决于理解人及其需求,而非编写完美代码的文章,并以被遗弃的、未解决实际问题的代码库为例。