从代码里你可以看到什么?
2012-11-26 07:19
239 查看
经常有小同事和我说,这程序的代码写的太垃圾了,什么水平。确实如此,大部分持续存在一段时间的程序代码质量都不怎么样。从圈复杂度的角度看,超过15的代码就很看了会头疼了,但可怕的是圈复杂度到70,、80的也不是没有。谁要摊上改这种代码,估计上吊的心都有:不改不行,改了谁知道出什么问题? 从这种代码里能看出来什么,很说明的人的心境。说看到技术水平较差的大多是刚毕业的兄弟。说看到利益纠葛,人心世道的大概就是成年老鸟了。 我持后一种观点。 为什么世界上会有这么多垃圾代码,这绝对不只是因为技术不行。如果世界只由技术因素主宰,那么按理说只要一个软件存在的时间足够长,投入的人力足够多,代码一定会变的足够好。但事实恰恰与这相反,存在时间越长的代码往往越垃圾。这可以做简单理解。既存的代码表征着一种市场价值,如果改了它那么一旦造成的损失谁来负责?程序员来负责?经理来负责?没人来负责,那么只能破坏逻辑清晰性来保证妥当性,代码自然就会变得越来越垃圾。所以说这里首先是利益纠葛问题。这是非常有意思的一个课题,因为改好代码长期有收益,短期必然有风险---再牛的人也没办法保证自己的修改毫无偏差。宏观来看,保证好代码真的很简单:找一帮有责任心的很牛的人,让他们不考虑市场因素的持续进行重构,那代码必然越变越好。而关键则是,如果你是CEO,你愿意这么干么?所以说在闭源的前景下,谁要是真想保证代码质量,先要摆平利益纠葛。软件工程离了这个就真像任人打扮的小姑娘,实质上可以是翠花、可以红袖,但就不能是自己。 接下来是个人的问题,假设说是闭源的代码,同时更进一步,Review不怎么做,或者说做了也就意思一下,那会怎么样?结果也很简单,代码这时候会成为负面心思的大集合。想换工作的、家里有事的、感觉公司里不重视技术的都在写代码,赶进度的、加班熬夜的也在写代码,作为结果代码也就成了种种心思的具体体现。很多代码一看就是没怎么思考,抱着能用就行的心思写的。很多代码一看就是为了安全起见写的,写的人大多时候应该能认识到,长期来看这不好。当然前面说的技术不足也会和这些因素混合在一起影响最终呈现出来的代码。但要想代码质量好,利益纠葛之后,要摆平人的心思--这大致就是人件的基本出发点。 国内很有意思的一个现象是ISO,CMMI这类东西往往会在异常火爆之后折戟沉沙。很多人对此做不同的解释,但如果让我来解释,我会讲,纯工程这个维度太没力量,在利益纠葛,人心世道面前完全就不是个有重量的砝码,所以方法论特别容易挂。这不一定对,但同我个人的某些经历以及看到的案例来验证的话,也还算勉强有道理。让人开心的是,从各种报道来看,愿意脚踏实地整代码的组织似乎越来越多了。 最后说一句,从这个角度看,开源具有绝对的优势。虽然没有官方统计,但至少从日常感受来看,开源代码的质量远高于闭源的代码---学习或参与优秀的开源项目应该对技术提升非常有帮助。------------------------------------------------------------------------------------------------------------------------------------理想流 + 软件 = 《完美软件开发:方法与逻辑》
理想流 + 人生 = ??
理想流 + 管理 = ??
理想流 = 以概念和逻辑推演本质,追求真理。
理想流 + 人生 = ??
理想流 + 管理 = ??
理想流 = 以概念和逻辑推演本质,追求真理。
相关文章推荐
- 请问有没有人知道可不可以根据已经编译好的exe(这里具体指窗体),通过什么工具可以看到它里面的某一个控件的事件里面的代码(比如timer的tick)。
- 从代码里你可以看到什么?
- 从代码里你可以看到什么?
- C#之WinForm基础 主窗体在哪里可以看到,如何更改主窗体,主窗体有什么特殊的地方
- 分享一个从国外网站看到的socket程序,程序并不强悍,但能从代码中看到老外是怎么写代码的,咱可以取长补短
- 在linux里怎么设置环境变量啊,用env可以看到所有的环境变量,那什么指令可以改它们啊
- Julia: 一行代码可以写出什么优雅?
- MTK当修改一些代码时,使用什么编译命令可以最有效率
- 当修改一些代码时,使用什么编译命令可以最有效率
- 执行数据库查询时,如果要查询的数据有很多,假设有1000万条,用什么办法可以提高查询速率?在数据库方面或java代码方面有什么优化的方法
- 在JSP中看到"<!--"和"-->"包起来的代码,又不是注释,这个是什么意思呢?
- 在java代码里写Map<String, ?>和Map<String, Object>都是可以用的,他们两个有什么区别?
- 国际:写出漂亮代码的七种方法----看了美化化码的想法,觉得很好,故加以引用,希望更多人可以看到
- Android 当修改一些代码时,使用什么编译命令可以最有效率
- eclispe中Java代码中可以看到编译错误红叉-但是左侧package explorer视图中却看不到的解决办法
- 如何实现把CListCtrl类中的数据存储到txt或excel中,并且存储位置可以自己选择?具体代码是什么?
- 一行代码可以干什么
- [吐槽]每次上来都可以看到些私信什么的
- Android 当修改一些代码时,使用什么编译命令可以最有效率
- 有没有代码可以判断一个List<View>集合里的view是什么view