产品沉思录 产品沉思录 产品沉思录 产品沉思录
设计的审美和代码的品味

设计的审美和代码的品味

设计的直觉在于识别美丑,而程序员的直觉则是对代码的“嗅觉”。编程是一种管理复杂性的练习,代码的复杂性和潜在问题需要通过“嗅觉测试”来评估。代码的“气味”可以指示深层次问题,程序员需谨慎对待难闻的代码。过度自信是程序员的常见问题,培养良好的嗅觉有助于避免复杂系统带来的调试困难。

对设计需要有的直觉是能看到美丑,看过足够多美丑的案例,训练你审美。

那么对程序员来说,其代码的直觉是什么? Kevin Simler 写了一篇文章在谈这件事。

code = 一种管理复杂性的练习

Kevin Simler 说其每天大部分时间都在编写代码。

当他带入上帝视角看其自己写代码,意识到编程基本上是一种管理复杂性的练习

很难向非工程师传达软件有多么复杂。

作为一个软件的使用者,当您处于外部时,它基本上只能工作。

但从内部来看,作为一个建造者,它看起来更像一个香肠工厂。

中等规模应用程序的代码(例如,日历应用程序)可以长达数十万行,分割成成千上万个文件。

作为一名工程师,您可以在任何时间在屏幕上放置大约50行代码,并且在您的大脑中保存大约1000行代码。

每行代码都指定了计算机执行该行代码时将要执行的操作。

从极其简单的(把两个数字相加)到极其复杂的操作,

不惜一切代价从地球另一端获取特定的数据,并将其复制到计算机的内存中,

或者,如果失败了,不管出于什么原因,执行另一段代码,试图找出出错的地方。

所以这些东西有成千上万条线,你一次只能在屏幕上放50条线。

这就像眯着眼睛近距离地看着一艘战舰。

Linux 内核开发的“代码群”
Linux 内核开发的“代码群”

在人类社会世界中导航与构建软件几乎没有任何共同之处。

但现实世界至少与代码世界有一个共同特征: 难以处理的复杂性。

软件和社会都有太多动态的、相互依存的部分,任何一个人都无法完全理解,更不用说预测它们未来的行为了。

你所能做的最好的事情就是尽量保持一个模糊的“大图景”,并且集中精力去理解你的小的、局部的细节。

练习对代码的嗅觉

很有意思的是

面对在一个棘手的世界中的挑战,工程师和社会生物学家设计了类似的工具来应对复杂性。

作为一名工程师,在职业生涯中开发的最重要的技能之一就是对代码的“嗅觉”。

有了精心校准的“嗅觉”,你可以通过“嗅觉测试”快速评估一段代码是健康的还是有病的

换句话说,一个好的鼻子可以帮助你发现潜在的危险。

代码味道是潜在的深层问题的表面指示器。

例如,一个500行的方法可能不会导致实际的错误,

但是它将是棘手和脆弱的,它可能会在您的面前爆炸。

如果您使用的代码有问题,那么您需要格外小心,因为您所做的任何更改都可能导致意外后果。

难闻的气味是一个警告信号,表明你应该花更多的时间和精力尽可能彻底地了解发生了什么。

如果您发现自己编写的代码闻起来很糟糕,那么在提交代码之前需要非常仔细地考虑。

难闻的代码并不总是错误的,但是你应该双重或三重确定没有更好的方法。

在人类世界中,我们也有一个“鼻子”,能够感觉到社会环境中潜伏的危险: 道德直觉。

当某些东西感觉(或闻起来)不对劲时,并不意味着自动出现问题,但绝对值得关注。

例如,利益冲突本身并不一定是错误的,但它是一个潜在的深层次问题的表面指标,值得特别注意/小心。

如果你正在考虑采取一个你觉得不对劲的行动,你应该在行动之前三思,以确保你真正了解后果。

即便如此,承认自己的错误,跟着感觉走也许是更明智的做法。

程序员因过度自信而臭名昭著。

我们高估了我们的技能,低估了问题的难度,并且经常建立对我们来说过于复杂的系统来管理。

正如 (Brian Kernighan)的名言:

调试的难度是编写代码的两倍。因此,如果您尽可能巧妙地编写代码,根据定义,您就没有足够的智能来调试它。

人们在现实世界中同样过于自信。

我们都认为自己比一般人聪明,我们总是愿意为自己破例。

我们擅长计算,但没有我们想象的那么好。我们太聪明了,太自大了。

这就是为什么培养良好的嗅觉是值得的。

推荐: