温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
程序员为什么不能一次性把代码写好?看完下面这个故事你就明白了。假设你是一名经验丰富的程序员,今天接到一个任务,写一个计算器,用户输入两个数,程序输出他们的和需求,清晰的不能再清晰了,你3分钟搞定,输入X和Y,计算Z=X+Y,打印Z,本地跑了一遍,输入3和5,输出8,完美。你满意的把程序发给了用户,没过多久,用户反馈输入100+100,结果是-56。你皱起眉头翻出代码一看,数据类型用的是8位整形,只能支持-118~127的整数,一旦超出就会溢出回绕,产生莫名其妙的负数。你般类型换算成64位长整型,顺手加了一个边界检查,超出范围就弹P4,这次应该万无一失了。用户又来了,输入3.6和4.4,结果是7,小数部分直接消失了。你无奈的回复,当初需求里没提过小数啊,用户拍着胸脯保证,只有小数,绝对没有无理数,就这一个要。
01:00
求你叹了口气,把数据类型改成double,重新发布版本。没想到用户这次发来了一张截图,输入0.3和0.6,输出0.8999999。你盯着屏幕沉默了几秒钟,这是浮点数的经典精度问题,二进制表示小数天生存在误差,和你的代码没有半点关系。好在用户不是做金融的,差个零点几他也能够接受。你在输出环节加了个四舍五入,保留两位小数,问题暂时消失了。凭借了没几天,用户再次出现了,输入6和7,程序输出0。你深吸了一口气,打开聊天框,花了20分钟向用户解释为什么不能在数字输入框里填汉字。沟通完毕,你给输入框加上了格式校验,非数字字符一律拦截,过大或过小的数值也会有对应的提示,前前后后把所有的编辑情况都堵死了,终于程序稳了,然后你打开技术论坛,所以推送的一个热门帖子,程序员为什么不能一次性把程序写好?
02:00
好。
我来说两句