花时间保持代码整洁不但有关效率,还有关生死存亡。
20 世纪80 年代末,有家公司写了个很流行的杀手应用,许多专业人士都买来用。然后,发布周期开始拉长。缺陷总是不能修复。装载时间越来越久,崩溃的几率也越来越大。至今我还记得自己在某天沮丧地关掉那个程序,从此再不用它。在那之后不久,该公司就关门大吉了。
20 年后,我见到那家公司的一位早期雇员,问他当年发生了什么事。他的回答叫我愈发恐惧起来。原来,当时他们赶着推出产品,代码写得乱七八糟。特性越加越多,代码也越来越烂,最后再也没法管理这些代码了。是糟糕的代码毁了这家公司 。
只要你干过两三年编程,就有可能曾被某人的糟糕的代码绊倒过。如果你编程不止两三年,也有可能被这种代码拖过后腿。进度延缓的程度会很严重。有些团队在项目初期进展迅速,但有那么一两年的时间却慢如蜗行。对代码的每次修改都影响到其他两三处代码。修改无小事。每次添加或修改代码,都得对那堆扭纹柴了然于心,这样才能往上扔更多的扭纹柴。这团乱麻越来越大,再也无法理清,最后束手无策。
随着混乱的增加,团队生产力也持续下降,趋向于零。当生产力下降时,管理层就只有一件事可做了:增加更多人手到项目中,期望提升生产力。可是新人并不熟悉系统的设计。他们搞不清楚什么样的修改符合设计意图,什么样的修改违背设计意图。而且,他们以及团队中的其他人都背负着提升生产力的可怕压力。于是,他们制造更多的混乱,驱动生产力向零那端不断下降
最后,开发团队造反了,他们告诉管理层,再也无法在这令人生厌的代码基础上做开发。他们要求做全新的设计。管理层不愿意投入资源完全重启炉灶,但他们也不能否认生产力低得可怕。他们只好同意开发者的要求,授权去做一套看上去很美的华丽新设计。
于是就组建了一支新军。谁都想加入这个团队,因为它是张白纸。他们可以重新来过,搞出点真正漂亮的东西来。但只有最优秀、最聪明的家伙被选中。其余人等则继续维护现有系统。
现在有两支队伍在竞赛了。新团队必须搭建一套新系统,要能实现旧系统的所有功能。另外,还得跟上对旧系统的持续改动。在新系统功能足以抗衡旧系统之前,管理层不会替换掉旧系统。
竞赛可能会持续极长时间。我就见过延续了十年之久的。到了完成的时候,新团队的老成员早已不知去向,而现有成员则要求重新设计一套新系统,因为这套系统太烂了。
假使你经历过哪怕是一小段我谈到的这种事,那么你一定知道,花时间保持代码整洁不但有关效率,还有关生存。
作者语:
衷心的希望
1、不要让混乱毁了xinyuan的电采系统,虽然它现在卖的很火,但混乱确实是至关生死存亡!公司如此庞大的研发团队,从侧面反映出了生产效率的低下,那么什么导致了生产效率如此之低?我想领导们是该想想了!我离职的原因之一就是与其在混乱中苟且偷生、度日如年、生不如死,还不如离开混乱,重新开始.....希望xinyuan保兴争霸的目标能尽快实现!
2、尽可能的减少目前caiyangyang的混乱,拒绝混乱,持续重构,从我做起,从一点一滴做起!
3、写的不但是代码,还是责任,它事关企业的前途和命运!
相关推荐
Gaodongzhen Xinyuan Road 436 Long.m4a
**配置文件**:根目录下的`_config.yml`是Hexo的主要配置文件,包含了博客的基本信息(如站点标题、副标题、作者等)以及各种设置,如URL、部署策略等。\n\n4. **HTML基础知识**:虽然Hexo自动生成HTML,但了解HTML...
描述中提到的"quartus平台实现"表明这个FIR滤波器的设计是为Altera的FPGA(Field-Programmable Gate Array)设备编译和实现的,Quartus是Altera公司的软件开发工具套件,用于FPGA的设计、仿真、综合、编程和调试。...
这篇文件主要讨论的是中国房...这些知识点揭示了现代土地面临的财务挑战,以及债券市场对此的反应和分析,同时展示了信用分析过程中考虑的各种因素,包括公司财务状况、市场情绪、关联公司的影响以及同意征求的策略。
报告的作者团队包括Victor Bo Huang、Kate Wang、David Yuen、Shawn Wu、Yeye Lai、Xinyuan Zeng和Sherry Zhao等人,他们都是国泰君安国际投资咨询部的专业人士,具备丰富的行业洞察力。 总的来说,这份报告为读者...
轻量级(〜20 kb)转换器,可将xml内容转换为运行时对象。 用户可以自由地仅指定接口或提供数据类实现。
MM32系列烧录器支持列表中包括多家第三方厂家的支持,例如创芯工坊、河洛Hilosystems、芯园电子XINYUAN、立功科技ZLG和西尔特xeltek等。这些厂家提供的烧录器型号支持MM32系列MCU的烧录,包括PWLINK2、PW200、PW300...
参考项目地址:[https://github.com/xinyuan6009/study-all.git](https://github.com/xinyuan6009/study-all.git) 以上是对“springmvc-dubbo完整demo”的详细解析,希望能够帮助您更好地理解如何将 Spring MVC 与 ...
- **应用场景:** 如日志记录、配置管理等场合,单例模式可以有效减少资源消耗并简化代码结构。 **3. 代理模式:** - **基本概念:** 代理模式在客户端和目标对象之间加入了一个代理对象,用来控制对真实对象的访问...
ServerAdmin zzxy@xinyuan.com.cn # ServerName localhost:9090 在最后添加: <Location /svn> #其中 /svn就是访问时第一级目录的名字 DAV svn SVNParentPath e:/svn/repository # SVNParentPath是物理地址 ...
Visual Basic是微软公司推出的一种面向对象的编程语言,它以其简洁的语法和强大的Windows应用程序开发能力而闻名。学习Visual Basic不仅可以帮助你理解编程的基本概念,还能让你快速构建出用户界面友好、功能丰富的...
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 ...
- mflood.cc/mflood.h:这是实现多播路由的源代码,展示如何处理广播或多播数据包的分发。 通过这些脚本和源码,我们可以深入探究网络协议的实现细节,如数据包的封装、解封装过程,路由算法的执行,以及各种网络...
2. **CSS第4天案例和笔记**:在经过前三天的学习后,这可能涉及到更高级的主题,如定位、浮动、布局模式(如流体布局、网格布局)以及过渡和动画效果。笔记将涵盖这些新概念的理解和应用技巧。 3. **CSS第2天案例和...
ISO 15765-2是其中最关键的一部分,它详细描述了数据链路层和物理层的具体操作,包括诊断请求和响应的编码规则,以及用于不同数据传输速率的帧拆分和重组算法。 在工作场景中,理解ISO DOCAN协议对于汽车软件开发...
同时,它也用于生产过程中的车辆调试和测试,以及售后服务中的故障排查。 6. **ISO 14229文档**:提供的压缩包文件"ISO 14229 - UDS"很可能包含了UDS协议的官方标准文档,详细阐述了协议的各个方面,包括服务定义、...
这里我们将深入探讨这两个库的核心概念、功能以及它们在实际开发中的应用。 **ASM 库** ASM 是一个Java字节码操控和分析框架,它可以直接生成和修改Java类和数组的字节码。ASM 提供了低级别的API,使得开发者能够...
XCP协议的全称是“扩展标定协议”,它建立在底层通信协议之上,如CAN(Controller Area Network)、LIN(Local Interconnect Network)、FlexRay或Ethernet等,以实现不同硬件平台之间的数据交换。XCP的设计目标是...
ISO 15765-1涵盖了物理层和数据链路层的规范,定义了信号传输的电气特性、物理连接以及数据帧结构。数据帧由起始符、标识符、数据段和校验码等组成,支持单次传输(Single-PDU Transfer)和多次传输(Multiple-PDU ...
这一过程通常包括但不限于编译配置、内核模块定制、驱动集成以及系统优化等环节。 #### 标题和描述中的知识点 - **嵌入式Linux内核移植**:指将通用版本的Linux内核裁剪、配置,并针对特定硬件平台进行必要的修改...