程序员们,你愿意维护别人写的“烂”代码么?

程序员们,你愿意维护别人写的“烂”代码么?相信各位的回答都是不愿意。不幸的是绝大多数的程序员或多或少的都在做这样的事情。自然我也不例外也做过不短的一段时间,现在回想起来那段时间真是后怕。

 

首先是文档,相信谁都喜欢看看文档就能了解产品是如何实现,各个模块之间的关系如何,甚至都希望文档具体到每个成员都有详细的说明。然而直至现在这种事情我还没有遇到,相信绝大多数读者也没遇见过。这个时候有人会想有一份简单的文档说明也行,然 而很多时候这份简单的文档也可能是旧的。要是能碰到一个文档和代码相差不大的,那恭喜你赶快去买彩票。最惨的是没有任何文档。不过据我所知,最惨的人还真 不是占少数。这时候有人会说“看代码呗,代码总是最新的吧。”这时候允许我泼点冷水,我遇见代码和产品不同步的,有多个分支版本还有多个发布出去的版本, 谁都不知道那个版本的代码对那个发布版。没文档没说明,连个搞C++的人都没有。我还真没见过这方面比我更惨的。

“没文档,不要紧咱会看代码,怎么说这是咱老本行,这还搞不定以后还混啥?”相信看代码之前有不少人这样想过,但我相信十分钟之后多数人会收回之前说的。“这是啥玩意?kao5000多行的函数。这是C++么? 之前写的人脑子是不是有问题了?”脑子里不断的重复这样的话,于是就开始思考这玩意我做的话该怎么做,改怎么设计,这个地方该用啥模式等等。我绝对相信有 这种想法的人水平肯定不错。于是程序员们雄心勃勃的向上司反应,这代码如何如何的烂,自己是如何如何有能力设计好,把代码重写的多好多好等等。然而通常这 个时候都上司的话都差不多“先把问题解决吧,这个要紧,重写的话等有时间”于是一个伟大的计划夭折了,你只能找啊找,在某个几千行的函数代码中找到要改的 地方,前面加点声明,后面加点代码。呼一个Bug就这样修正了。同时烂代码的规模又曾加了一点点。归根结底代码没有丝毫的改善,反而更烂。

说起来烂代码不单是程序员的责任,还有半数的责任在于BOSS

第一点程序员水平差,这点在C方面不是那么的严重,但在C++方面则非常严重。先说C语言,我知道有不少公司都有入职培训,有详细的编码手册。对常见的问题都有强化培训,甚至连编码风格都有严格的规定,使代码看起来都是一个人写的。再说了C语言不容易掌握的地方比较少。一般来说掌握了指针和内存管理这2个大问题外遇见棘手的问题就大大减小了。另外宏也是一个大的问题,不加限制的话,很容易写出来难以看懂理解的代码。总的来说C语言属于比较容易控制代码质量的语言。再说说C++,这个复杂的语言。不知道各位是看谁的书学的C++。我已经不记得了,但我记得书里面的内容,绝大多数在讲C的东西,用了几页讲了一下类,顺带提了一下virtual,函数模板也是顺带提的形式,没有类模板,没有STL,后面有几页是讲如何读写文件。总的来说是一本讲C的书籍。C++是一种非常复杂、灵活和体现程序员个性化的语言。有篇帖子是说C++的十大流派(见帖子最后)。由此可见C++的灵活性,和个性化。虽说C++号称开发效率比C高,维护也比C容易。但我觉得这仅仅是对于水平达到一定程度的程序员来说,而且代码还得是有一定水平人写出来的。但实际上呢?绝大多数是古典C流,而且代码还继承了C不容易维护的地方,指针、变量声明在函数头部、宏使用的频繁、函数几百行甚至几千行上万行、滥用全局变量。一旦这几点综合到一起极具杀伤力,在这其中成百上千行的函数最具杀伤力。

第二点懒惰。一般来说每个程序员在新写一段代码的时候都会去思考怎么做,不管是C还是C++,都会认真的去写代码,但无奈的是水平是大问题。但总体来说最开始写的代码是最容易维护的。好景不长,需求变更Bug的增多,程序员们疲于在代码之间奔命。就在这个时候代码开始膨胀起来,本来需要拆分的函数偷懒写到一个函数里面。结果一个函数的功能越来越多,参数越来越多,最要命的是里面还有不少标志性的变量。变成名副其实的巨无霸。一旦到了这个时候后悔也基本上来不及了,首先没时间 ,再次功能混杂的太厉害拆分也就是想想的事情,没有人愿意做的,再后来改Bug更要命。本来可维护的代码就这样变成了不可维护的代码。代码中处处充满了巨无霸,对维护人的身心有这巨大的打击。因为懒造成的不可维护,后来的人想维护也难。

BOSS的原因很简单,对于大多数BOSS眼前的利益永远是最重要的。问题变得麻烦的时候不是去想如何彻底的解决,而是光想着凑合着解决。还有一点是不那么愿意多花钱请水平高的人监管代码质量。

 

再 扯一下软件工程,我觉得软件工程是解决了一大的问题。提出了控制代码质量的方法。从大的方面控制了代码的质量,但小的地方就得看程序员的能力了。有时候尽 管大的方面设计的很好很出色,但具体的代码质量很差,也会造成代码不可维护。毕竟架构设计不可能设计那么具体,考虑的那么清楚。大多数时候还得考程序员们 的功力。

 

 

 

1.经典C++流:类是核心,例程多用C   Runtime的,很少用模版,一般是正统教育的结果。

2.古典C流:基本上当C用,偶尔用用对象,不使用异常,喜欢怀旧。

3.MFC流:秉承MFC的风格,主要使用MFC/ATL对象和Win32   API,不喜欢STL,用很多的宏把IDE的语法提示模块折磨到崩溃。

4.Portable流:以C   RuntimeSTL为主要工具,使用类和模版,不跨平台毋宁死。

5.Functional流:以模版和STL为主要武器,大量使用函数式语言的设计方法,并号称这才是真正的C++

6.Win32流:多使用全局函数,偏爱Win32   API,但不排斥C   Runtime,通常喜欢轻量级的程序,所以身材也比较苗条。

7.Java流:全面使用Java的风格,不能容许任何全局成员,但允许使用STL的集合类,写很多叫Factory的类。

8.COM流:喜欢AddRef()Release(),大量使用接口,隐藏一切可以隐藏的东西,诵经的时候要把上帝替换成COM

9.戒律流:追求完美的C++程序,计较每一个constthrow(),极力避免不安全的cast,随身一定要带一本ISO   C++手册。

10.混沌流:其程序无常形,无恒道,变幻莫测,吾不知其名。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值