从流行的试错驱动(test driven)谈起

作者:钓鱼城  于 2022-5-27 03:23 发表于 最热闹的华人社交网络--贝壳村

通用分类:流水日记

当前软件编程中一个流行的新方式是BDD (Behavior Driven Development), 即行为驱动开发。好些公司都在推行这种编程方法。大家似乎都在做,但光是这名字就让人如坠五里云外。所在的公司不惜花费大量的金钱,让每个软件程序猿去接受一到两周的培训,并要求在今后的程序编写中应用推广。学完后,同事们大都不甚了了,不得要领。不停地问头头,到底这种方式有多大的好处,头头说,他们也不清楚,是上面要求的。再问上面,回答道,听说别人在推行,我们不跟上能行吗?
这使人想起了一段网上的笑话,是关于大数据的。这段英文的原话用青少年性行为来说事。
“Big Data is like teenage sex: Everyone talks about it, nobody really knows how to do it, everyone thinks everyone else is doing it, so everyone claims they are doing it too”
翻译过来就是,大数据就像青少年的性:每个青少年都在谈它,其实没人真正知道怎么做它,但是每个人觉得其他人正在做它,因此他们声称自己也在做它。
初初看到,让人忍俊不禁。
其实BDD这种方法跟其它近些年所流行的五花八门软件编程方法一样,像DDD(Data Driven Development), 都属于所谓的极限编程,不外乎是为了工程化流程,提高效率,减少错误,写出好的程序。愿望是没错,效果怎么样,那就难说了。
这使我想起另一种在前些年非常流行的软件开发方式,即所谓的TDD(Test Driven Development),即试错驱动开发。 二者有些区别,但是都差不多。
前些年,我所在的团队非常强调TDD编程。招收新人,第一件事就是问会不会先写第一行试错代码,然后再写第一行真正的代码。如果不能,一律枪毙。这一极端的举措是由一个印度同事推动并实施的。据说,由于他在前一个公司受到了同样严苛甚至残酷的对待,花了几年的工夫,忍受了无数的痛苦和嘲笑,缩身挤进了这条窄窄的胡同。到后来他自己也认为,这是天底下最好的编程方法,从此痛苦并快乐着。而今媳妇熬成了婆,在公司深得业余时间在一起做私人投资的VP的青睐。所以斯德哥尔摩综合征爆发,也要把过去吃的苦一股脑在他人身上重复一遍,一句话,同享苦乐。
姑且不说这TDD到底有没有好处,但是从common sense来讲,就可以闻到一股“两个凡是”,“舆论一律”那种似曾相识的霉味。一花开后百花杀,大有黄巢君临天下的气概。当然印度人不知道这些有中国特色的专用名词和与此关联的惨痛教训,但这并不妨碍他如此这般的行事为人。看来普天之下,人性使然,没有例外。
看到一个个的应聘者被中途腰斩 - 最少的逗留时间是五分钟!礼貌送人,连起码的尊重都不要了。以至于为了找一个工程师,应聘者翩然而来,铩羽而归,来来回回,居然找了两年而没有任何结果。总觉得有什么东西不对头。想着该跟这位开挂的大叔沟通沟通了。于是有了这样一段对话。
我:看来这“North America's best team”真是名不虚传(注:这儿的美国公司也好虚名,经常自娱自乐,喜欢把高帽子往自己头上戴,姑妄言之,姑妄听之),宁缺毋滥啊。
他:是这个道理。想在我们这里做事,不做到令行禁止, 动作整齐划一,那怎么行?
我:这TDD好是好,但总要给以前没有这样写代码的人一个适应的过程。否则这样下去,漏掉一个比尔盖茨或者扎克伯格岂不可惜?想当年,这些大神哪个不是直奔主题,急火急赶写好实用代码,就赶紧拿出来,哪里会去写试错代码? 这就跟狗发现前面有一个面包时的情形一样,这狗如果不是直直地跑过去,而是弯来弯去,绕着圈子,扭着舞步,这儿瞧瞧,那里看看,就是不直奔面包,你说这得要多别扭有多别扭!这会是事实吗?除非这狗给吓怕了。时不我待呀。
他:此一时彼一时也。时代不同了,要求也就不一样了。那些大才是创业的,自然不同凡响。我们是守成的,是螺丝钉,摆正自己的位置,不要想入非非。
我:这似乎说的不是一回事。。。人当然有重要不重要之分,就像阶级(cast)不同有区分一样,但还不至于这些不重要的人连思想动作都必须整齐划一,连呼吸的节奏都必须一样,那不成了机器人了不是?那样的话,不成了动物庄园?我们不是强调以公司为家、创造快乐的工作环境吗?不是强调文化要多元化吗?技术的发展和进步也是多元化的结果。因此怎么做好工作才是王道!
他:可我认为TDD就是最好的编程手段。没有之一!
我:说到TDD,我有一些问题。
他: 但讲无妨。
我:你一直强调必须先写一行试错代码,才能写第一行真正的代码,这是不是有形式主义之嫌?难道先写一行真代码,再写一行试错代码,就不行了?
他:形式决定内容,帽子决定脑袋,板凳决定屁股,衣服决定身材。在我们这里,服从是第一位的,尊卑秩序必须分清楚。另外,你要想从口中说出一句不出格的话,先要经过脑子想想是不是?脑子为你判断对错。你要想写出好的实用程序,那首先得想到这程序必须有什么样的特性,而你难道不首先设置一定的门槛(以他的想法,就是试错代码)来检验它?
我:没错,但 商业计划书(business plan) 才是一个产品的框架 - 它规定产品被接受的标准。怎么从技术的角度去实现它,做技术的人有他们的自由度。我们这里讲的是技术范畴的实用和试错两个方面。从技术的角度来看,但凡一个产品出世,当然要经过多道测试检验,这是必须的。但是这并不需要在产品还没有影子的时候,就要把试验设备先搞出来。其实每一个产品从开始设计,到制造样品,都几乎是先造出样机,再测试性能,直到符合设计要求。几乎所有的产品都是这样一遍一遍的升级,迭代,演化而来,变得成熟,完善。完全没有必要必须是先有测试手段,才能去设计产品。人完全可以先有样品,再设计测试手段来检测;或者二者可以同步进行。谁先谁后都没有错,都可以试试,一点也不影响最后的结果。难道不是这样吗?
他:反正我认为TDD最符合人的思维方式。这是方法论的问题,不得含糊。
我:正相反,我认为,TDD最不符合人的思维逻辑方式。人造一个新东西,即便你脑子里有一个最初的蓝图,但最终造出来的东西可能跟最初的蓝图相差太多。这说明什么?只说明创造的过程是一个不断修补,添加,舍弃,完善的过程。很多东西最后达到什么状态,是最初根本没有想到过的。试想你能够什么东西都还没有的时候,想得到怎么去测试那些根本不曾想到过的性能指标吗?你如果先写试错代码,写什么,你怎么写得出来?因此我认为,这绝对不是人大脑正常的思维过程。除非你是万物之神 - 你在创造万物,你所想要的是智慧造物论 - 你事先知道每一样事情,每一项功能。但我们不是神。我们是人。我们没法预见什么会一定发生,什么一定不会发生。
他:有很多东西,我们是可以预见的。我们有这样的能力并且掌握有这样的资料。
我:你所说的能力可能是一种综合思考能力。综合思考能力很重要,但通常是在所有的事件已经发生过了,并且由此而产生的资料为你完全占有的情况下才有用。大数据就是一个例证。原始资料已经在那里了,你可以拿来分析,从中得出有益的结论。当然你可以先写一些试错代码,规定哪些是你所想要的,然后再写实用代码。这没有问题。但即便在这样的情形,也不是说TDD是唯一可行的方式。绝对不是。
在大多数情况下,很多东西在最开始的阶段是不可知的,甚至没有一点感觉。你根本不清楚你会得到什么,你怎么去预测去试错?这个时候,人更需要的是逻辑思维的能力,一步一步地推论,先出样品,再进行测试。这是大多数学习的过程所经历的轨迹。举个最简单的例子,就是小孩语言能力的增长过程。当婴幼儿丫丫学语时,他们的大脑还不发达,因此只能模仿,不停地尝试着发出清晰准确的语音,且符合语法。他们不停改进,练习,假以时日,终得正果。他们不是先通过试错的方式,规定好必须发出这样的音调,才去练习发音,否则就不发音。他们才不干这样的事情!
他:生活中也有先预判结果,再去找怎么实现的方法。比如说那些先知就能。
我:不要装神弄鬼。按照你的试错先行的原理,难道你敢向你老婆提出,由于我不了解你,我们先不结婚,我们先试婚怎么样?你看她不扇你耳巴子,不让你跪榴莲?
难道夫妻俩生孩子之前,必须平心静气在那里商量怎么智慧造人?预先规定好各种指标,不达标就不准生?比如说,这还没有影子的孩子(还是处于精子卵子的分离态)生下来之后,他(她)必须有讲八国外语的语言能力,篮球达到NBA水准,足球参加超级杯,外加体操柔道还有一百米跑九秒的田径运动能力,智商必须达到250,身高至少1米9,形象男的要像阿兰德龙,女的则似苏菲索玛。谁这样计划好了才生孩子的?你这样做了吗?鲁迅说了,儿女是公母俩及时行乐的衍生物,是激情的副产品而已。请注意,正是激情,才产生了一切!试想谁在手忙脚乱做这些事的时候,去设计这狗屁孩子生出来是个什么东西?只要有鼻子有眼睛,不是怪物就行了。
他:现在不是提倡优生嘛。
我:优生不是这样强制统一在一个标准下的。鸡要生蛋,你能让它先憋着,想好了一定得保证生出来的蛋又大又圆,才能生出来,否则不合格,不准生,这能行吗?主人所能做的,只是平常给它喂合理的饮食,有一定的活动量,以保证身体健康。写软件也是如此,领导所能做的,只是为程序猿创造良好的工作环境,让他们发挥主动性,心情愉快,对他们的特点表现出信任和赞赏,只有这样,才能激发他们做出优质的工作。而不是这样限制,那样强加,搞一刀切。 硬性规定右手写字,你就绝不能用左手。难道你喜欢右手抓饭吃,左手擦屁股,你觉得这是世上最好最节能的方式,别人就再不能用勺子或筷子吃饭.用手纸上厕所?你这样做就是把人的手束缚起来,让人动弹不得。是把人的脑子搞僵化,不让人自由地想问题,非要跟阁下你所思所想一模一样才行。如果是这样,干脆你一个人干算了。
哈哈。这就是关于试错驱动利弊的遐想沉思录。明眼人从这出对话语句長短的不对称,一眼就能看出,这不过是对往事幻化追忆的结果,半是事实,半是臆想,说得不好听一点,自己的回答被添油加醋了。对活确曾发生过,但远不及这样平顺自然。当时谈话只不过触及了点皮毛而巳,蜻蜓点水罢了。过后自己一番思想,觉得当时,如果,倘若,假定,如此这般应对,或许,可能,想必,更加有说服力。人就是这么喜欢把自己变得更加正确的,尽管他只是个事后诸阁亮,门背后的关公。人只是在自己的冥想中显得世事洞明,有不世之材似的。梦醒之后,方知不过是一枕黄梁. 闻到了饭糊了焦香的味道。权着笑谈罢了。


高兴

感动

同情

搞笑

难过

拍砖

支持
2

鲜花

刚表态过的朋友 (2 人)

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

关于本站 | 隐私政策 | 免责条款 | 版权声明 | 联络我们 | 刊登广告 | 转手机版 | APP下载

Copyright © 2001-2013 海外华人中文门户:倍可亲 (http://www.backchina.com) All Rights Reserved.

程序系统基于 Discuz! X3.1 商业版 优化 Discuz! © 2001-2013 Comsenz Inc. 更新:GMT+8, 2024-5-24 22:51

倍可亲服务器位于美国圣何塞、西雅图和达拉斯顶级数据中心,为更好服务全球网友特统一使用京港台时间

返回顶部