`

献给xinyuan公司以及我的团队 代码整洁之道

    博客分类:
  • J2SE
阅读更多

                       花时间保持代码整洁不但有关效率,还有关生死存亡。

20 世纪80 年代末,有家公司写了个很流行的杀手应用,许多专业人士都买来用。然后,发布周期开始拉长。缺陷总是不能修复。装载时间越来越久,崩溃的几率也越来越大。至今我还记得自己在某天沮丧地关掉那个程序,从此再不用它。在那之后不久,该公司就关门大吉了。

20 年后,我见到那家公司的一位早期雇员,问他当年发生了什么事。他的回答叫我愈发恐惧起来。原来,当时他们赶着推出产品,代码写得乱七八糟。特性越加越多,代码也越来越烂,最后再也没法管理这些代码了。糟糕的代码毁了这家公司

 

只要你干过两三年编程,就有可能曾被某人的糟糕的代码绊倒过。如果你编程不止两三年,也有可能被这种代码拖过后腿。进度延缓的程度会很严重。有些团队在项目初期进展迅速,但有那么一两年的时间却慢如蜗行。对代码的每次修改都影响到其他两三处代码。修改无小事。每次添加或修改代码,都得对那堆扭纹柴了然于心,这样才能往上扔更多的扭纹柴。这团乱麻越来越大,再也无法理清,最后束手无策。

 

随着混乱的增加,团队生产力也持续下降,趋向于零。当生产力下降时,管理层就只有一件事可做了:增加更多人手到项目中,期望提升生产力。可是新人并不熟悉系统的设计。他们搞不清楚什么样的修改符合设计意图,什么样的修改违背设计意图。而且,他们以及团队中的其他人都背负着提升生产力的可怕压力。于是,他们制造更多的混乱,驱动生产力向零那端不断下降

 

最后,开发团队造反了,他们告诉管理层,再也无法在这令人生厌的代码基础上做开发。他们要求做全新的设计。管理层不愿意投入资源完全重启炉灶,但他们也不能否认生产力低得可怕。他们只好同意开发者的要求,授权去做一套看上去很美的华丽新设计。

于是就组建了一支新军。谁都想加入这个团队,因为它是张白纸。他们可以重新来过,搞出点真正漂亮的东西来。但只有最优秀、最聪明的家伙被选中。其余人等则继续维护现有系统。

现在有两支队伍在竞赛了。新团队必须搭建一套新系统,要能实现旧系统的所有功能。另外,还得跟上对旧系统的持续改动。在新系统功能足以抗衡旧系统之前,管理层不会替换掉旧系统。

竞赛可能会持续极长时间。我就见过延续了十年之久的。到了完成的时候,新团队的老成员早已不知去向,而现有成员则要求重新设计一套新系统,因为这套系统太烂了。

      假使你经历过哪怕是一小段我谈到的这种事,那么你一定知道,花时间保持代码整洁不但有关效率,还有关生存。

    

作者语:

      衷心的希望 

                  1、不要让混乱毁了xinyuan的电采系统,虽然它现在卖的很火,但混乱确实是至关生死存亡!公司如此庞大的研发团队,从侧面反映出了生产效率的低下,那么什么导致了生产效率如此之低?我想领导们是该想想了!我离职的原因之一就是与其在混乱中苟且偷生、度日如年、生不如死,还不如离开混乱,重新开始.....希望xinyuan保兴争霸的目标能尽快实现!

                   2、尽可能的减少目前caiyangyang的混乱,拒绝混乱,持续重构,从我做起,从一点一滴做起!

                   3、写的不但是代码,还是责任,它事关企业的前途和命运!

 

 

 

 

13
1
分享到:
评论
19 楼 zxkevin1989 2011-10-03  
前几天去xinyuan面试了,刚毕业,还不了解……
18 楼 huashuizhuhui 2011-04-17  
呵呵 同是天涯沦落人啊
17 楼 lz_cleaner 2011-04-17  
我刚辞职了,就是文中的原因,感同身受啊!
16 楼 huashuizhuhui 2011-04-14  
领导是不会同意让你去重构的,所以我们要自己重构,优化。这是我们的天职
15 楼 laolinshi 2011-04-14  
现在我公司做的东西都是紧急上线的,哪有那么多时间去重构代码,况且系统太复杂了,自己重构的代码也不敢上生产啊。
14 楼 li2005 2011-04-14  
这几天看到关于项目corruption的文章就深有同感,个人感觉就是自己要遵守规范,然后自己在工作中看到那里不对就尽量修改规范点,能够在自己能力范围内能重构就重构
13 楼 xyh 2011-04-13  
[b][/b]
12 楼 huashuizhuhui 2011-04-12  
pistachio 写道
一针见血

呵呵 3Q
11 楼 pistachio 2011-04-12  
一针见血
10 楼 poson 2011-04-10  
poson 写道
如果最开始代码没有写,现在不断的加功能上去的时候,代码会越来越烂。而且越来越没有机会去重构这个项目,我是深有体会。


如果最开始代码没有写好,现在不断加功能上去,代码会越来越烂,而且越来越没有机会去重构这个项目,我是深有体会。
9 楼 poson 2011-04-10  
如果最开始代码没有写,现在不断的加功能上去的时候,代码会越来越烂。而且越来越没有机会去重构这个项目,我是深有体会。
8 楼 hanyou 2011-04-10  
每个人都在抱怨说以前的代码烂,其实你现在写的代码过几年后也会被别人骂,其实骂人解决不了问题,只有虚心学习,定义好规范,注重开发过程,而不是开发速度才能最终解决问题。但大家想想,中国的市场环境是这样的吗?
7 楼 xiaojin21cen 2011-04-09  
至少在我接触的项目中,那个代码真是乱,烂死了。
6 楼 huashuizhuhui 2011-04-08  
《重构改善既有概要》

《代码整洁之道》

都是程序员的必修课

呵呵
5 楼 jiasky 2011-04-08  
你说的没错,
作为程序员代码是至关重要的,他是衡量一个程序员基本素质的砝码。
作为管理者,如果有手下万一离开团队,代码之好坏,直接关系到维护成本之高低。
像《重构》、《effective java》是程序员的必修课。
4 楼 itsuki 2011-04-06  
我现在就在干这事儿...你只要把你自己的东西弄进去,改什么重写什么就好了.... 保证不会浪费过多时间...
3 楼 constant 2011-04-06  
我现在就在挣扎中。。。
2 楼 mqlfly2008 2011-04-06  
非常普遍的一种现象!
1 楼 kulinglei 2011-04-05  
我前公司也有个项目,第一批开发的人走完了,后来的人都在那个系统上做开发,但除了我认真的研究原有代码的风格,其他的人都是按自己的风格编码,他们用很短的时间就实现了自己任务,领导就经常表扬他们,现在那个系统至少有10中风格的代码,谁接触谁死。
这样的公司没必要呆。他们看中的只有时间和钱

相关推荐

    Gaodongzhen Xinyuan Road 436 Long.m4a

    Gaodongzhen Xinyuan Road 436 Long.m4a

    xinyuan-he.github.io:我的Hexo博客

    **配置文件**:根目录下的`_config.yml`是Hexo的主要配置文件,包含了博客的基本信息(如站点标题、副标题、作者等)以及各种设置,如URL、部署策略等。\n\n4. **HTML基础知识**:虽然Hexo自动生成HTML,但了解HTML...

    FIR_滤波器;Verilog_并行流水线_fir_源码

    描述中提到的"quartus平台实现"表明这个FIR滤波器的设计是为Altera的FPGA(Field-Programmable Gate Array)设备编译和实现的,Quartus是Altera公司的软件开发工具套件,用于FPGA的设计、仿真、综合、编程和调试。...

    MOLAND: Termination of the consent solicitation.pdf

    这篇文件主要讨论的是中国房...这些知识点揭示了现代土地面临的财务挑战,以及债券市场对此的反应和分析,同时展示了信用分析过程中考虑的各种因素,包括公司财务状况、市场情绪、关联公司的影响以及同意征求的策略。

    TMT行业5G深度报告(二):产业链全面解析-20190410-国泰君安-50页.pdf

    报告的作者团队包括Victor Bo Huang、Kate Wang、David Yuen、Shawn Wu、Yeye Lai、Xinyuan Zeng和Sherry Zhao等人,他们都是国泰君安国际投资咨询部的专业人士,具备丰富的行业洞察力。 总的来说,这份报告为读者...

    XML converter-开源

    轻量级(〜20 kb)转换器,可将xml内容转换为运行时对象。 用户可以自由地仅指定接口或提供数据类实现。

    MM32支持的烧录器(中文版)

    MM32系列烧录器支持列表中包括多家第三方厂家的支持,例如创芯工坊、河洛Hilosystems、芯园电子XINYUAN、立功科技ZLG和西尔特xeltek等。这些厂家提供的烧录器型号支持MM32系列MCU的烧录,包括PWLINK2、PW200、PW300...

    springmvc-dubbo整合demo

    参考项目地址:[https://github.com/xinyuan6009/study-all.git](https://github.com/xinyuan6009/study-all.git) 以上是对“springmvc-dubbo完整demo”的详细解析,希望能够帮助您更好地理解如何将 Spring MVC 与 ...

    南航移动面试题总结

    - **应用场景:** 如日志记录、配置管理等场合,单例模式可以有效减少资源消耗并简化代码结构。 **3. 代理模式:** - **基本概念:** 代理模式在客户端和目标对象之间加入了一个代理对象,用来控制对真实对象的访问...

    SVN与CVSpdf格式详细说明书

    ServerAdmin zzxy@xinyuan.com.cn # ServerName localhost:9090 在最后添加: <Location /svn> #其中 /svn就是访问时第一级目录的名字 DAV svn SVNParentPath e:/svn/repository # SVNParentPath是物理地址 ...

    30天学通Visual.Basic项目案例开发

    Visual Basic是微软公司推出的一种面向对象的编程语言,它以其简洁的语法和强大的Windows应用程序开发能力而闻名。学习Visual Basic不仅可以帮助你理解编程的基本概念,还能让你快速构建出用户界面友好、功能丰富的...

    ANDROID MALWARE

    Xu, Peng Ning, Xinyuan Wang, Shihong Zou, and others, whose valuable insights and comments greatly enriched our work. The authors are also grateful to colleagues in the Cyber Defense Lab at NC State ...

    ns协议仿真源码

    - mflood.cc/mflood.h:这是实现多播路由的源代码,展示如何处理广播或多播数据包的分发。 通过这些脚本和源码,我们可以深入探究网络协议的实现细节,如数据包的封装、解封装过程,路由算法的执行,以及各种网络...

    cssdemo资源文件css

    2. **CSS第4天案例和笔记**:在经过前三天的学习后,这可能涉及到更高级的主题,如定位、浮动、布局模式(如流体布局、网格布局)以及过渡和动画效果。笔记将涵盖这些新概念的理解和应用技巧。 3. **CSS第2天案例和...

    ISO DOCAN标准协议

    ISO 15765-2是其中最关键的一部分,它详细描述了数据链路层和物理层的具体操作,包括诊断请求和响应的编码规则,以及用于不同数据传输速率的帧拆分和重组算法。 在工作场景中,理解ISO DOCAN协议对于汽车软件开发...

    ISO UDS标准协议(AUTOSAR架构/各服务介绍/报文应答)

    同时,它也用于生产过程中的车辆调试和测试,以及售后服务中的故障排查。 6. **ISO 14229文档**:提供的压缩包文件"ISO 14229 - UDS"很可能包含了UDS协议的官方标准文档,详细阐述了协议的各个方面,包括服务定义、...

    asm-cglib开发包

    这里我们将深入探讨这两个库的核心概念、功能以及它们在实际开发中的应用。 **ASM 库** ASM 是一个Java字节码操控和分析框架,它可以直接生成和修改Java类和数组的字节码。ASM 提供了低级别的API,使得开发者能够...

    车载+标定+xcp标注协议

    XCP协议的全称是“扩展标定协议”,它建立在底层通信协议之上,如CAN(Controller Area Network)、LIN(Local Interconnect Network)、FlexRay或Ethernet等,以实现不同硬件平台之间的数据交换。XCP的设计目标是...

    车载+docan+15765协议

    ISO 15765-1涵盖了物理层和数据链路层的规范,定义了信号传输的电气特性、物理连接以及数据帧结构。数据帧由起始符、标识符、数据段和校验码等组成,支持单次传输(Single-PDU Transfer)和多次传输(Multiple-PDU ...

    嵌入式linux内核移植

    这一过程通常包括但不限于编译配置、内核模块定制、驱动集成以及系统优化等环节。 #### 标题和描述中的知识点 - **嵌入式Linux内核移植**:指将通用版本的Linux内核裁剪、配置,并针对特定硬件平台进行必要的修改...

Global site tag (gtag.js) - Google Analytics