技术的目的与代码简洁性

本文探讨了技术解决物理问题与人类问题的不同效果,分析了代码复杂度的主观性本质,并分享了Google开发者体验的成功经验,强调软件工程基础的重要性。

代码简洁性:技术的目的

作者:Max Kanat-Alexander 发布日期:2014年2月14日

通常来说,当技术试图解决物质、能量、空间或时间问题时,它是成功的。但当它试图解决人类思维、沟通、能力等问题时,它就会失败或产生危险的适得其反的效果。

例如,互联网解决了空间的巨大问题——它让我们能够瞬间与世界上的任何人交流。然而,它并没有让我们成为更好的沟通者。事实上,它让许多不善于沟通的人拥有了一个巨大的平台,可以传播仇恨和恐惧。这并不是说互联网一无是处——我个人其实非常喜欢它。我只是举个例子来说明技术能成功解决和不能成功解决的问题类型。

这个原则之所以有用,是因为它提前告诉我们哪种软件目的或创业想法更有可能成功。专注于用技术解决人类问题的公司很可能会失败。专注于解决可以用物质事物表达的问题的公司至少有可能成功。

这条规则可能有一些看似反例的情况。例如,Facebook的目的不是连接人们吗?这听起来像是一个人类问题,而Facebook非常成功。但连接人们实际上并不是Facebook所做的事情。它提供了一个人们可以沟通的媒介,但它实际上并不创造或导致人际联系。事实上,我认识的大多数人似乎对Facebook有一种不舒服的上瘾感——感觉他们在那里花费的时间对他们作为人来说价值不大。所以我认为,每当它专注于解决这些问题时,它都在加剧某些人类问题(比如对连接的渴望)。但它在实现其他目的(从广泛沟通中消除空间和时间)方面做得非常出色。再次强调,这不是对Facebook的攻击,我认为它是一家善意的公司;这是试图使用技术只解决物理问题的原则,对其目的中哪些方面是成功的进行客观分析。

这个原则也有助于澄清技术进步是否是“好的”。我有时对技术进步有复杂的感受——它真的给了我们一个更美好的世界,还是让我们都成了机器的奴隶?答案是技术本身既不好也不坏,但当它试图解决人类问题时,它倾向于邪恶;当它专注于解决物质宇宙的问题时,它倾向于善良。最终,我们当前的文明离不开技术,这包括公共卫生系统、中央供暖、自来水、电网,以及我正在写这篇文章的电脑。技术实际上是我们生存所必需的重要力量,但我们应该记住,它不是万能的答案——它不会让我们成为更好的人,但可以让我们生活在一个更美好的世界里。

-Max

评论

Ram Rachum 说: 2014年2月15日凌晨3:21 好文章!有趣的经验法则。 回复

Dave Hansen-Lange 说: 2014年2月19日上午11:29 那么,有没有一个技术例子,它本意是解决人类问题,但现在却让世界变得更糟? 回复

Aasher Naeem 说: 2018年2月24日上午10:44 例如,燃烧化石燃料,难道不会造成污染和全球变暖吗?将化学物质倒入河流会污染水源,杀死数百万条鱼,进而破坏水生态系统。基本上,所有污染(光、声音、水、空气等)都是由技术引起的。 回复

Virendra Rajput 说: 2014年4月20日凌晨12:41 好文章。解释得很好。完全同意你的观点——“它不会让我们成为更好的人,但可以让我们生活在一个更美好的世界里。” 回复

Max Kanat-Alexander 说: 2014年5月9日晚上7:50 谢谢! 回复

Neeraj Wagh 说: 2014年8月15日凌晨2:58 发人深省的好材料! 回复

Naz-Al Islam 说: 2015年11月18日下午12:59 你好 Max, 文章很好,但我期待更多关于这个主题的阐述。肯定还有更多有害技术的例子,包括Facebook、Twitter或其他社交媒体。为此,我们不应该试图通过技术来解决人类思维的问题。我们可以使用冥想作为带来内心平静的方式。但是,技术只对无生命物体有用。 回复

Peter Williams 说: 2016年5月25日凌晨2:46 技术现在已经渗透到一切领域,但有些东西需要保持原样。例如,无人驾驶汽车。我喜欢驾驶,我无意将方向盘交给某些该死的软件代码。我的担忧不是安全问题,而是人们将错过的驾驶乐趣。我可以预见,几年后,许多制造商将涌入无人驾驶汽车的潮流。我希望那一天永远不会到来。只是我的个人看法。 回复

Nick 说: 2016年7月20日下午12:45 今天开发的消费技术并不总是着眼于解决大问题,而是试图创造可销售的产品。而且需要解决的问题也越来越少!(这至少在大多数创新发生的发达国家是如此。)这导致市场上出现的“颠覆世界的技术”越来越少。这篇MIT科技评论文章也探讨了这个问题:https://www.technologyreview.com/s/429690/why-we-cant-solve-big-problems/。 附言:很棒、深思熟虑的文章! 回复

Ashish Goyal 说: 2017年4月18日凌晨12:49 太棒了,先生…#尊敬.. 回复

Ashish Goyal 说: 2017年4月18日凌晨12:49 太棒了,先生…#尊敬.. (y) 回复

John 说: 2017年11月14日晚上9:05 好文章!我的老师推荐了这篇文章,我实际上从这里得到了很多答案。可以从中学到很多东西。我必须做一个天才小时项目,我的问题是技术如何改变了人体。技术的目的也是一个很好的研究课题。阅读这篇文章并从中受益。谢谢。 回复

Max Kanat-Alexander 说: 2017年11月15日凌晨12:43 不客气,John。很高兴能帮助到你。 回复

kolin.brown 说: 2018年1月31日上午9:19 非常感谢这些信息,帮助很大 回复

kolin.brown 说: 2018年1月31日上午9:21 好文章!我的老师推荐了这篇文章,我实际上从这里得到了很多答案。可以从中学到很多东西。我必须做一个天才小时项目,我的问题是技术如何改变了 回复

Just Because We Can, Doesn’t Mean We Should. – Mrs. Laurencot’s Student Blogs 说: 2018年3月22日上午8:58 […] 两点之间”或者说,让事情变得更容易,但它也有其缺点。正如Max所说,“当技术试图解决物质、能量、空间或时间问题时,它是成功的。 […] 回复

Shirleen Mauigoa 说: 2018年5月21日下午6:04 非常感谢这些有用的信息。它帮助了我的研究。 回复

simeon sylvester 说: 2018年8月29日下午1:55 好文章,但列出目的是为了帮助进一步研究。 回复

simeon sylvester 说: 2018年8月29日下午1:58 好文章,但目的没有列出以帮助更多的研究工作。 回复

Samuel Elkina 说: 2019年10月21日凌晨1:55 谢谢我的朋友,我觉得这些信息很有用。 回复

Top 25 Future Technologies in which we should invest as a business - Geta-Suggestion 说: 2021年2月5日晚上8:36 […] 技术的主要目的过去是并且仍然是让我们的生活更舒适,给我们更多时间进行休闲活动。在 […] 回复

Technology Has to Serve Humans – CX by Design 说: 2025年4月30日中午12:10 […] 当我们环顾我们充满技术的世界时,关于创造物是否成功实现了这一目的的问题 […] 回复


最新动态

Max Kanat-Alexander 3天前 我很高兴地宣布,我将于11月20日在纽约市的AI工程师代码峰会上发言。过去几年里,关于软件工程的未来存在很多不确定性。在本次演讲中,我将讨论我们可以应用的原则,以确保无论发生什么,那个未来对你的业务都是有利的。 很希望在那里见到你! 阅读更多 773 分享

Max Kanat-Alexander 6天前 从2011年到2015年左右我们停止定期每周会议为止,我几乎每周都参加Google代码健康小组的周会。这是一个非常棒的会议,有一个核心小组几乎总是参加,外加每周一些一次性参加的与会者,他们希望在其领域获得有关代码质量、测试或重构问题的帮助。 大多数情况下,会议作为一个支持小组,为那些关心代码质量并希望在其领域采取行动的人服务。他们会来,抱怨他们如何关心却难以让别人也关心。我们会支持他们,说我们真的很关心,他们应该坚持下去,然后他们会回到自己的领域去做伟大的事情。实际上,令人惊讶的是,该会议的许多与会者后来成为了Google一些最资深的技术负责人。(关于长期职业成功的一个好建议:如果你专注于做正确的事情,尽管有反对或困难,从长远来看,这几乎总是对你职业有利的事情。我们当然在代码健康小组中一次又一次地看到这种情况发生。) 然而,几乎每周,都会有人来参加会议问我们同样的问题:“我如何客观地衡量代码复杂度?”周复一周,我们会给他们同样的答案:“没有办法做到,请不要这样做。” 这个小组的负责人代表了代码质量和重构领域世界上一些最有经验的工程师,随着时间的推移,我们都得出了相同的结论:代码复杂度测量行不通。所有尝试制定量化指标(圈复杂度、计算静态分析失败次数、确定内聚和耦合的算法)的努力都失败了——它们将团队引向错误的道路,并没有解决真正阻碍开发者的重要问题。 最终,我明白了为什么这些指标行不通,而且永远行不通。这是因为代码“简单”的定义是:易于阅读、理解和正确修改。这里的“阅读”和“理解”本质上都是主观的。只有人类才能告诉你某物是否易于阅读。 有些人曾希望现代的LLMs能在这方面提供帮助。当我看到时我愿意相信,但现在这实际上是所有模型一直表现糟糕的领域:告诉你是否产生了高质量的输出。它们在发现特定问题并以代码审查的形式提供具体指导方面表现不错。但它们完全缺乏经验丰富的软件工程师在构建真正简单的软件系统方面所具有的判断力。无论你如何告诉它们“要简单”或“编写好的代码”,它们根本做不到。 所以这仍然是事实:代码质量本质上是主观的,如果你想理解它,你需要关于它的主观数据。这是我见过的唯一有效的方法。 阅读更多 8717 分享

Max Kanat-Alexander 10月15日 今年我很高兴在2025年开发者生产力工程峰会上发表了主题演讲之一。我谈到了什么造就了伟大的开发者体验。特别是,这次演讲涵盖了我们在所有开发者体验工作中试图优化的三个核心方面。希望对大家有所帮助! :) https://lnkd.in/g-AJtJ2b 阅读更多 什么造就了伟大的开发者体验? lnkd.in 815 分享

Max Kanat-Alexander 10月13日 为什么Google拥有如此出色的开发者体验?它只是在这方面投入了比任何人都多的资金吗? 嗯,是的,如果你把花在Google基础设施上的所有人力成本加起来,Google可能在这方面投入了比任何人都多的资金。但这实际上并不是Google在这里取得成功的核心原因,因为Google开发者体验的早期并没有涉及大量工程师。它实际上涉及了相对较少的一些优秀工程师,他们随着时间的推移相当缓慢地构建工具。Google一些最受喜爱的工具最初总共只有三、四个人构建。 关键在于,这些工程师被允许专注于开发者基础设施的基础工作,直到把它做对为止。每个人都在朝着开发者体验的长期全局最大值努力,而不是短期的即时需求。非常优秀的工程师被赋予自由去问诸如“一个完美的构建工具应该是什么样子”这样的问题,然后尝试构建它。源代码控制、代码审查、编程语言基础设施、CI、IDE、通用库以及开发者体验的许多其他部分也是如此。当然,有时我们在此过程中构建了一些糟糕的东西,但公司足够关心把它做对,以至于我们(通常)会回去修复它,最终。 Google开发者体验和速度的关键在于这种对软件工程基础的关注。这不仅仅是在开发者工具团队中,而是遍布整个公司——Google的工程师比我在任何其他地方看到的都更关心代码质量、测试等等。 我在行业其他地方看到的技术领导者最常犯的错误之一就是未能关注所有这些工程基础。代码库可维护吗?你是否有基本的工具来高效、有效地构建可靠、高质量的软件?是否有系统确保新软件工程师能够快速上手项目,并随着时间的推移提高他们的技能?等等。 相反,我经常看到领导者坚持在破碎的基础之上紧急解决眼前问题,没有任何计划能够真正在未来解决这些基础。这有点像是一个酒店建造者,看到所有其他酒店都有很棒的顶层套房,然后就坚持让团队建造一个漂亮的顶层套房,而大楼的地基已经开裂,管道也在漏水。修复那个地基可能很困难,但如果你不修复,你肯定会后悔。 基础有时感觉抽象或不重要,因为它们不是你被要求交付的即时产品。但让我告诉你,如果你想能够交付任何东西,基础才是最重要的。 阅读更多 24043 分享

加载更多

© 2025 版权所有。由 The Fox 提供技术支持。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计