做科研一样做产品
2016-10-30 21:03:34

题图是一个双盲试验。

计算机最早作为一门科学自然要用严谨的科学方法来做实验得出结论。而当计算机进入工业界,敏捷高速的迭代取代了严谨的科学步骤,但是回过头来我们又能从科学研究的步骤中吸取到哪些经验来改善我们在工业界的产品质量呢?

一个典型的研究过程首先要寻找问题,然后提出针对问题的一种假设,为了验证假设的正确就要设计实验了,之后需要实施实验并收集数据,根据数据之后就要做结论看假设是不是正确的,如果假设恰好是正确的,那么恭喜就可以发论文接收同行评审了,论文最后都要装模作样的写一下 future work,尽管大多数情况 future work 都是做不了的 work,但万一有能 work 的就可以形成个闭环继续研究下去了。

做产品也是类似的过程,先要发现一个生活中的问题,没有问题也要编一个出来好去忽悠。然后就要想这个是不是云计算能解决啊,大数据能解决啊人工智能能解决啊,这样可以再忽悠一票。接下来就需要具体的设计代码实现了。做出来了自然要进行测试或者招一批早期用户来内测,收集一下用户的反馈和使用体验,来验证最早的解决方案并不是忽悠人。再之后根据用户的数据和反馈就可以发现下一步的问题和 future work,就可以再去忽悠来形成一个闭环(逃

所以说尽管形式不一样但是做科研和做产品还是有相通的地方。科研中的设计实验和之后的分析数据中由很多有意思的方法对开发测试的过程都很有启发。

科研实验中很重要的一点就是一定要有对照组,给一组人喝一种特殊的药水,给另一组人喝等量的白开水。由于被实验者是人,当人知道自己被实验观察室的各种反应会和平时不一样更倾向于表现出实验所希望的状态。而实施实验的观察者心理也会起变化更倾向于接受他们所希望的实验结果。所以一般的实验都会设计双盲,被试者不知道自己到底是实验组还是对照组也不知道实验目的,观察统计结果的人也不知道这个人是哪一组,这样可以尽可能的保证实验过程和统计数据的真实性和客观性。

这种策略在很多互联网的产品中都已经应用到了,像 FaceBook 会有线上的 A/B test,一套功能的两种方案线上 pk 看谁的效果好,或者判断一个新的方案到底要不要上线给所有用户。这时候用户是不知道自己是实验组还是对照组的,甚至都不知道自己参加了试验,统计数据大多也是机器通过标准的流程生成,尽量减少人的主观干预,也算是实现了双盲。

双盲的根本原因在于人都是有情绪变化的,无法在实验状态下保证客观,难免会在表现和结论中掺杂个人情感的因素。这些问题存在于所有人和人之间的交互上,那么别的场景下是不是也可以用双盲的策略呢,比如 code review 的时候写代码的人不知道谁会 review ,reviewer 不知道谁写的代码,代码的统一性会不会更好?开发测试的流程中,开发不知道代码会给谁测,测试不知道是谁写的代码会不会使代码质量更好?是不是还有别的场景也可以尝试双盲呢?

在实验状态下保证客观,难免会在表现和结论中掺杂个人情感的因素。这些问题存在于所有人和人之间的交互上,那么别的场景下是不是也可以用双盲的策略呢,比如 code review 的时候写代码的人不知道谁会 review ,reviewer 不知道谁写的代码,代码的统一性会不会更好?开发测试的流程中,开发不知道代码会给谁测,测试不知道是谁写的代码会不会使代码质量更好?是不是还有别的场景也可以尝试双盲呢?