腾x的代码也没好到哪里!开发:腾x的PRD你见过吗?
在我所有的程序错误中,80%是语法错误,剩下20%里,80%是简单的逻辑错误,在剩下4%里,80%是指针错误,只有余下的0.8%才是困难的问题。
—— Marc Donner
了解bug的产生
99.99%做技术的都会被问到或者被吐槽到:“你的程序怎么又出bug了!”
代码的复杂度和产生bug的概率是成正比的,并且具有「边际效用递减」的效果。
那么怎么降低bug?
表面看,bug出自程序员之手。程员做的是“造房子”的事情。这件事完整的步骤分为3步:
与产品经理讨论并确定功能(确定一个可以实现的设计图纸) 将每个单独的元件抽象出来(确定施工方案) 将相关的元件实现并进行组合,完成建设(带上材料开始施工)
第一步,“与产品经理讨论并确定功能”主要是沟通,靠“看”和“理解”。
沟通是相互的,这锅只让程序员背的话的确太委屈了点,还有产品经理的PRD。
更具体点看一个小小例子:
PRD中我们说update,但是实际上开发是采用的删除后insert。这时候,产品经理会发现这条数据看起来是更新了,但是“创建时间”也变了。
所以要防范,你起码需要约定一下“更新时间”和“创建时间”的,避免开发的实现手法跑偏。
第二步,“将每个单独的元件抽象出来”这主要是一个人抽象能力的体现。
因此,有经验的薪资也比后者高。学费教的不一样。
这就是实际的coding过程,而coding是一个主观的,完全由人主观掌控的事情。这就是为什么需要技术研讨,专家论证。
因为连杀猪有人都是从屁股先下刀子的,同样代码的实现手法,不同老师教出来不同语言,加上后期自身修为不同,也不见得都能找到最佳实践路径。
一位昵称“oraguy”的程序员对Oracle数据库代码的吐槽。大意是: Oracle 数据库12.2版有近 2500 万行C代码。 无法在不破坏成千上万个现有测试的情况下更改单行代码。 好几代程序员在有限的期限内编写了这些代码,其中充斥着大量的垃圾代码。 非常复杂的逻辑、内存管理、上下文切换等,这些都用数千个flag连接起来。 整个代码充斥着神秘的宏命令,甚至可能需要一两天才能真正理解某个宏命令的作用。 有时你需要理顺20个不同flag的值和效果来预测代码在不同情况下的行为方式,有时多达数百个flag! 这个产品仍然存活仍然可用的唯一原因是数百万次的测试!
结尾是:开发一个小功能需要6个月到1年的时间(如果是添加一种新的身份验证模式,比如支持 AD 身份验证,可能需要2年)。
1、入职3个月内,喷,这么大的系统,上亿pv的系统居然这么做的,这么做的,我提出那么做,那么做,你们都不鸟我,推翻我,哎 你们都是傻逼。 2、入职半年,咦,好像他们说的有道理啊,如果按我那么做,就会出现那些问题,那些问题。。。 3、入职一年,哦,只能这么做,这么做,你一个新来的,知道个屁啊,还那么做那么做 。 4、 入职两年,噢,这么做,这么做有好处,有坏处,可以在此基础上那么做那么做。
产品:然后呢? 客服:对比到差异,则修改线上价? 产品:怎么修改? 客服:在线下零售价的基础上按公式计算,比如上涨1%,得出线上零售价,然后逐个编辑。 产品:是否可以理解为,目的是让线上价格,按自己期望的卖,不取线下零售价? 客服:是 产品:那么为什么不在根源处理呢:创建一组用于线上销售的价格,直接引用不就可以了吗?
END
评论