大家都知道,最近以美国为首的西方国家正在打压华为,想把华为的5G排挤出西方市场,作为应对措施,华为的高管尤其是任正非,密集地接受了国内外媒体的采访。
今年1月3号, 网络上还流出一封任正非致全体员工的信, 《全面提升软件工程能力与实践,打造可信的高质量产品》, 初始投入是20亿美元,这是相当大的手笔。
我在知识星球做了一点解读, 其中最感到疑惑的就是这封信的前面主要讲了安全和隐私,达到可信的目标,让客户可以放心购买,放心使用华为的产品。
后面笔锋一转,主要讲要提高代码质量,和腐化的架构/代码做斗争,这和安全和隐私扯不上关系啊。
这中间肯定少了点东西!
今天又看到了英国媒体对华为轮值董事长徐志军的采访,豁然开朗,原来华为最早跟英国政府合作成立HCSEC,华为的源代码是要拿过去,让具备权限的人进行审查,以此证明没有后门,客户可以放心、安全地使用。
现在HCESC提出的问题居然是:华为的代码不够漂亮!
我大胆揣测一下,这句话的潜台词是:你们的代码太多太烂了,我们都看不懂了,怎么能确定有没有后门?
这些代码是华为在通信行业三十年的时间积累起来的,像windows几十年的积累一样,可以想象,这里边得有多少遗留代码。
这要求我觉得确实挺过分的,一般来说,一个软件对外的功能和性能能达到要求就可以了,客户是不去管你内部实现成什么样子,现在人家不但要求功能实现,还要求代码漂亮、易读、易修改。 不但要求结果是高质量的,可信的,连过程也要是可信的。
华为最初的方案是先关注新增代码,对新增代码达到优雅漂亮的要求,别动历史代码,这是很现实的策略,但人家不同意。
没办法,那就开始重构吧, 投入20亿美元,全面提升软件工程能力与实践,打造可信的高质量产品。
要想去重构这样的代码,谈何容易!
首先得理解现有的业务,因为遗留代码虽然烂,但是他能工作!看起来很简单的bug fix是无数人熬夜的结晶,你去重构,能保证这些功能不变吗? 能保证这些bug 不出现吗? 如何用自动化的功能测试,单元测试去覆盖这些代码,让大家去安全重构,真的需要勇气和智慧。
华为这么做,是被形势所迫,也是为未来着想,那其他公司呢?
我在IBM的时候也遇到过很多遗留代码,尤其是那个长达几千行的JSP, 充当了MVC中的Controller角色。代码中充斥这isOK, flag, success 这样的控制变量,搞得程序员痛不欲生。
之前网上流传这一个Oracle数据库开发人员的日常,在Fix一个Bug的时候,需要先花两周的时候去理解20个flag, 理清他们之前的关系, 然后再添加一个新的flag,提交到由100-200台服务器的集群去测试20-30小时,运气好的话有100个测试用例失败,运气不好的话有1000个测试用例失败......
还有很多人吐槽自己公司的烂代码, 可见遗留代码是一件非常普遍的事情,和公司的大小强弱没有关系。
想想也正常,国内互联网行业竞争极为惨烈,工期这么紧,任务这么多,加班加点都干不完, 很多时候简单、快速地完成工作是***要务,根本顾不上优美的设计,漂亮的代码。即使是曾经拥有过的优雅代码, 也会被越来越多的垃圾代码所覆盖。
问题是这样发展下去,早晚要出问题,什么时候去重构代码呢?
【本文为51CTO专栏作者“刘欣”的原创稿件,转载请通过作者微信公众号coderising获取授权】