代码简洁性
工程师态度
2009年8月20日 by Max Kanat-Alexander
每个工程师在每个工程领域都应具备的态度是:我可以用正确的方式解决这个问题。
无论问题是什么,总有一种正确的方式来解决它。正确的方式可以被知晓,也可以被实施。不实施正确方式的唯一有效理由是资源不足。然而,你应该始终考虑正确的方式确实存在,你能够以正确的方式解决问题,并且如果有足够的资源,你会以正确的方式解决问题。
“正确的方式”通常意味着“考虑到所有合理可能的未来事件,甚至是未知和不可想象的事件的方式”。
一座能够承受任何合理可能的环境条件或任何合理可能的交通量而无需持续维护的桥梁,就是以“正确的方式”建造的。
在提供合理可能的未来增强所需灵活性的同时保持其简洁性的软件代码,就是以“正确的方式”设计的。
有许多无效的理由不以正确的方式解决问题:
- 我不知道正确的方式。 通常这只需要更多的理解或研究来找出正确的方式。当我遇到这种情况时,我会暂时离开问题,然后通常在我散步时或第二天回来时会想出解决方案。我尽量不因为还不知道正确的方式而妥协于不正确的方式。
- 团队无法就正确的方式达成一致。 有时一群人争论什么是“正确的方式”,话题变得非常混乱。团队并不擅长做决策。正如我们所知,你不通过委员会来设计软件,我怀疑其他工程领域的“委员会设计”同样糟糕。这里的解决方案是指派一位经验丰富且值得信赖的工程师,他理解你所从事领域的基本法则,通过仔细研究现有论点并收集相关信息,遵循标准、有效的工程程序,自行确定正确的方式。
- 我现在太懒/累/饿/混乱,无法以正确的方式做这件事。 每个人都会时不时遇到这种情况。现在是凌晨1点,你已经连续工作了15个小时,你只需要这该死的东西现在就能工作!不过,休息一下,稍后再回来。世界不会终结,问题仍然存在并且稍后可以解决。去睡觉,去吃点什么,散散步——做任何需要做的事情来进入一个愿意以正确方式解决问题的心理状态,然后再回来。如果你处于无法以正确方式解决问题的状态,那么真的该休息了。如果你这样做,你并没有玩忽职守——你实际上通过说“这需要做对,而现在做对的方式是休息一下,稍后再回来”来正确地为项目的成功负责。
最重要的是,它只需要你持续不断地相信自己能够以正确的方式解决问题。
-Max
评论
G 说:
2009年8月20日下午12:09
“……甚至是未知和不可想象的事件。”
那些不存在,因为我相当自信我超强大的想象力可以梦想出所有。
回复
Max Kanat-Alexander 说:
2009年8月20日下午2:24
哈哈哈。嗯,在工程中有时谦虚一点是有好处的。-Max
回复
dinesh from india 说:
2018年8月17日上午6:13
这对我非常有用,Max先生。
回复
John Dowdell 说:
2009年8月20日下午2:13
强烈不同意“只有一种正确方式”的方法。我们人类太容易犯错,无法从所有角度预测所有未来。
有多种正确的事情可以做,它们随着你如何看待问题而变化。
“资源不足”也转化为“成本不敏感”,而成本几乎总是每个问题的一部分。
让多双眼睛看!从多个角度思考!识别许多需求和风险,并通过各种方程平衡它们!这些思维方式比坚持只有一种“正确方式”存在而其他任何方式都是“错误方式”更现实。
回复
Max Kanat-Alexander 说:
2009年8月20日下午2:28
嘿John。是的,我们在这里遇到的是英语固有的混淆。“the”确实意味着“那个特定的”,但当然总是有无限多的解决方案来解决任何给定问题。有些会更正确,有些会更不正确。
问题基本上是“a right way”听起来很奇怪,会让人困惑——工程师倾向于说“the right way”,所以我用了那个。(“a”意思是“任何一个”,而“the”意思是“那个特定的”。)
-Max
回复
John Dowdell 说:
2009年8月20日下午4:43
抱歉如果我太急了。如果我们谈论的是“设计得稳健,为意外情况做计划,不走捷径,向前看”,那么我绝对支持你,谢谢。
jd
回复
Max Kanat-Alexander 说:
2009年8月20日下午5:26
是的,那绝对是我们谈论的!-Max
回复
fantasai 说:
2009年8月20日下午3:33
“正确的方式”通常意味着“考虑到所有合理可能的未来事件,甚至是未知和不可想象的事件的方式。”一座能够承受任何环境条件或任何交通量而无需持续维护的桥梁,就是以“正确的方式”建造的。
作为一名结构工程师,我不会称那座桥梁是以“正确的方式”建造的。我会称那座桥梁是过度设计且浪费资源的。那里的每个高速公路立交桥都不是设计来承受10.0级地震的同时还遭受飓风、 bumper-to-bumper 交通和龙卷风的——而且有充分的理由。
工程不是寻找终极答案,而是寻找对多个约束的优雅解决方案,而成为一名好工程师的一部分是知道如何选择正确的约束集。
回复
Max Kanat-Alexander 说:
2009年8月20日下午3:38
嗯,通过“任何环境条件”我意思是“桥梁环境中合理可能发生的任何条件”。显然所有这些事情发生在同一座桥梁上的可能性极小,所以你采取合理可能的,而不是“可能发生的任何事情”。
-Max
回复
Max Kanat-Alexander 说:
2009年8月20日下午3:40
我已经更新了帖子以使其更清晰。
回复
Vladimir Dzhuvinov 说:
2009年8月21日晚上10:34
完全同意培养积极和放松的工程态度的重要性。
如果你是一名经理,你会制定什么激励措施,让你团队中的工程师感到有动力以“正确”的方式做事?
回复
Max Kanat-Alexander 说:
2009年8月21日晚上10:39
这是个好问题。我认为最简单的动机就是总是友善地指出人们何时以正确的方式做事。我认为鼓励正确行为比攻击不正确行为重要得多,作为一名代码审查员,我个人花了太多时间纠正人们,所以我也总是告诉他们他们做对了什么。
-Max
回复
Vladimir Dzhuvinov 说:
2009年8月21日晚上11:33
所以,看起来我们应该只把负面反馈留给机器,人们最好用正面反馈服务。
回复
Max Kanat-Alexander 说:
2009年8月22日下午2:43
哈哈哈, exactly! -Max
回复
Palani Nama 说:
2009年8月27日晚上10:39
Max,如何确保我们不会以“正确的方式”为名过度设计。
回复
Max Kanat-Alexander 说:
2009年8月28日下午12:16
我实际上在我的书中谈到了这一点,我认为我在我的一个或两个博客中涵盖了相同的内容,尽管它不如我书稿中那么清晰。
你可以将其视为“合理可能”中“合理”的一部分。例如,有人使用不支持CGI标准的Web服务器是不合理可能的,所以我们不必在Bugzilla中关心这一点。试图解释那将是过度设计。
-Max
回复
Wladimir Palant 说:
2009年8月28日凌晨2:54
只是有时有些问题,“正确的方式”来解决它们根本就是不解决它们。不幸的是,偶尔我们没有选择(咳嗽…管理…咳嗽)。
回复
Max Kanat-Alexander 说:
2009年8月28日下午12:13
哈哈哈,不开玩笑!这就是为什么我很高兴我从事开源工作,大多数时候,如果我认为一个问题不需要解决,我就不解决它!-Max
回复
Ben 说:
2009年9月4日上午8:13
我认为我最常属于第三类,不