编码技巧(八):吃自己的狗粮

“吃自己的狗粮” 有好几个层面的含义,

(1)本意是指,一个公司使用自己生产的产品。

(2)对于软件公司或开发者而言,指的是,使用自己开发的软件。

(3)此外,还可能是在介绍一种优秀的编程技巧


首先,开发者亲自使用自己开发的软件,这是有好处的,

不然的话,开发者就很难真正看到解决方案的蹩脚之处。


功能怎样实现,与已经实现的功能如何使用,这是两种不同的知识。

只有真正用一下自己提供的功能,才能发现它的难用之处。


因此,“吃自己的狗粮” 能帮助开发者站在用户角度考虑问题,

有利于开发者编写易学易用的软件出来。


其次,为什么说 “吃自己的狗粮” 是一种编程技巧呢?

这是因为要做到 “能让自己能吃到狗粮”,会改变软件的功能提供方式


我们来详细讨论一下这种编程技巧。

平台

在我看来,软件制品有两种截然不同的分类,

可以按产品的最终用户来划分,面向开发者的,与面向开发者的。


面向开发者的软件系统,通常是为了解决特定业务问题的。

软件在交付之后,所提供的功能一般就确定下来了,

用户只会使用这个软件,并不会为这个软件提供新功能


而面向开发者的软件系统,其出发点就有所不同了,

它除了会提供一些核心的业务功能之外,还会为用户提供 “编程接口”。

这种软件最终提供的功能,是该系统的编写者用户共同实现的。


这种软件系统的 “编写者” 与 “用户” 几乎是平权的,

大家都在同一个舞台上玩耍,一起提供业务功能。

所以,这样的软件系统,也常被称为一个 “平台”。


平台的参与者有三种人,

  • 平台的编写者,即开发平台系统的工程师,也可以称为 “平台开发者”,

  • 平台的开发者用户,即使用平台编程接口的工程师,通常特指为 “平台用户”,

  • 平台的非开发者用户,只使用平台所提供业务功能的普通用户。

(1)归还主动权

平台开发者们,比起一般系统的开发者而言,会更懂得 “吃自己的狗粮”。

这可能是因为平台的用户群体中,天然的就包括他们自己吧。


如果某个功能点,平台用户可以自己编程解决,

那么为何不把主动权还给用户呢?

毕竟猜测用户可能需要什么功能,还不如让用户自己来决定。


所以平台的开发者需要考虑,如何让用户自己开发所需的功能。

愿意开发,而且容易开发。

(2)尊重用户

平台的开发者们,也更不喜欢把用户当成傻子,因为他们自己就是用户。

那种提供 “傻瓜接口” 的建议,最终会坑到他们自己。


所以,“吃自己的狗粮” 会促进开发者们更加的尊重用户。

毕竟提供 “精心设计的” 看似不用自测的操作方式,还不如把责任交还回给用户,

让他们自己为行为负责。


这是因为复杂逻辑的正确性,很难使用通用方法进行验证。

让用户意识到任何新功能的发布,都是需要验证的,是一种很好的软件素养。

核心

在第五篇文章中,我们提到了扩展性,介绍了 “适当可扩展” 的编程技巧。

要做到 “适当” 需要我们摈弃 “奇技淫巧”,回归 “大智若愚”。


少发明新的概念,多用朴实无华的代码表达想法,

少在代码中体现还未证实的假设,想到了不代表要写到代码里面去。


“吃自己的狗粮” 也需要做到 “适当”。

软件系统是否要做成一个 “平台”,要视业务需要而定。

当然系统开发者,可以有编写一个平台的野心,但未必需要在代码中体现出来。

(1)平权

上文我们说 “平台的编写者” 与 “平台用户” 是 “平权” 的。

其实权力并非完全等同。

这里所说的 “平权” 主要体现在以下两个方面。


(1)平台用户,比起一般系统的用户而言,可以为系统贡献新功能。

(2)平台的编写者,也能以平台用户的身份提供功能。


其中第一点,平台赋予了用户更高的权限,

第二点,平台在某种情况下,可以视编写者为普通用户。


于是这里就出现了一个需要权衡的点,

狗粮有很多,哪些是自己要吃的?

盲目把所有狗粮都吃了,其实反而是有问题的。

(2)功能

要想回答上面的问题,还是得站在用户的角度考虑问题,

也就是回到了 “吃自己狗粮” 的原始目的。


值得一提的是,用户在任何时刻,需要的都是功能

而不是自己编写功能的能力

实在没有办法的话,才接受自己动手。


因此,功能 > 自己动手 > 自己无法动手

所以不论我们提供多么优雅的 “编程接口”,都不如直接给用户提供他想要的功能。

同时,如果实在无法提供功能,那么最好让用户可以自己动手。


这才是 “吃狗粮” 的最佳姿势。

结语

“吃自己的狗粮” 是一个很宽泛的概念,可以适用于很多行业,

就算聚焦到软件开发来看,也并非只适用于 “平台开发” 这一狭小的领域。


本文只是借着 “平台开发者” 为引子,介绍了 “吃狗粮” 的几个常用姿势。

  • 把自己当成用户

  • 让用户自己能决定做什么

  • 把责任还给用户,不要越俎代庖

  • 用户想要的是功能,不是自己编写功能的能力


总而言之,“吃自己的狗粮” 代表了一种以用户为中心的工作态度,

用户到底需要什么?我们真的理解用户需求了吗?


毕竟,只有用户赢了我们才会赢,

不听用户的心声,私自做主,是编程之大忌呀。