高质量的工程代码为什么难写
之所以想起写这篇文章,是因为最近看到的一个著名的开源项目在内部使用时的各种问题,不得不说,很多的开源的东西思想是不错的,但离真正工程化都有不小的距离,所以没什么商业公司采用的开源产品如果要引入的话一定要慎重,通常会有N多的坑等着你去填,而比较成功的开源项目的背后多数都会有商业公司在背后不断的改进。
遥想我2000年开始学习写asp代码时,觉得写代码也不难呀,无非就是学学语法规则、库就可以写出来,记得有一次我实习面试的时候是让我在一个下午左右的时间写一个完整的留言板,那也就是刷刷刷就写好了,但随着后来工作,尤其是加入阿里以后,越来越明白高质量的工程代码为什么难写。
在写代码初期,最关注的是如何用代码实现需求,如果是仅仅实现业务需求的话,即使是刚上手的程序员,只要解题能力还OK,基本上都是可以写出代码来的。所以我自己一直认为数学成绩是程序员的一个非常重要的要求,数学好的人通常解题和逻辑思维能力是还不错的。
上面的这个基本的写代码的过程中,写的更好的同学的体现会在对业务的深刻理解以及抽象上,写出的代码会具备一定的复用能力,这个在这里不多加探讨。
但代码是不是实现了业务需求就结束了呢,其实远没有,这其实只是写代码的开始,除了正向的逻辑实现外,任何一个点的异常的分支逻辑怎么处理才是工程化的代码中更难处理的部分,这个问题在单机式的系统中会相对还好处理,在分布式的环境会变得非常的复杂,例如调用其他机器的功能超时了,出错了,到底该怎么处理,这也是为什么有了那么多的分布式的理论的东西出来,在增加了异常分支的处理逻辑后,通常会发现这个时候正向逻辑的代码在整个代码的占比中会大幅下降。
异常分支逻辑处理好后,通常还需要增加必要的日志信息,以便在出问题时方便排查,而不是到了要排查问题的时候,一点目前系统的状况都搞不清楚,所以吃掉重要的异常信息不抛出这种行为在写代码中是非常可耻的。
在处理好上面异常的相关动作后,代码的健壮性也要处理好,这个主要指:
1. 自我保护能力
对外提供的接口是否具备足够的自我保护能力,就是即使使用的人没仔细看API文档随便乱用也不会导致系统出问题,这种案例非常的多,例如对外提供了一个批量查询接口,结果用户一下传了一个里面有上千个用户id的数组,查询一下直接把内存耗光,像这种情况下不能怪使用的人,而应该怪实现API的这一端的保护做的不够好,按照这样的标准去看,会发现开源的很多东西的API都不太合格。
还有一种就是能力保护,如果超出了处理的并发量的能力,这个时候会发生什么。
2. 对资源的使用限制
这也是代码新手或一些开源产品中做的比较差的地方,很容易出现规模一上去,资源使用量也一直涨,没有限制,然后导致系统挂掉,很常见的案例是对线程池的使用,例如像Java中的Executors.newCachedThreadPool,这个接口很多人会用到,但很多用的人都没有仔细想过会不会在某种情况下这里创建出巨多的线程;还有例如用Map做cache,也没考虑大小限制的问题,结果就是随着数据量增长,某天突然就挂了。
健壮性是代码中比较复杂的部分,通常也是比较展现代码能力的部分,可能看起来就几行代码,但其实背后反映的差距是巨大的。
开源产品除了在健壮性上的差距外,通常还会出现的一个巨大差距就是整个系统的设计的伸缩能力,伸缩能力不够的话通常会导致结构性的重构,另外常见的就是在并发的处理上不够高效,例如锁的合理使用、无锁算法的引入等等,而这些需要非常强的系统设计和代码功底能力。
除了上面说的这些外,高质量的工程代码还需要考虑可维护(例如监控信息暴露)、安全性等,对我而言,我一直认为所谓的工程化其实就是把一些玩具性质的代码变成可在商业系统中真正健壮运行的代码。
上面的内容写的比较简略,不过应该也能看出,对于高质量的工程代码而言,其实实现业务逻辑只是其中占比很小的一部分,甚至花的时间是相对最少的一部分,所以我确实非常赞同面试的时候让同学写代码,这个时候很容易看出同学写代码的功力;有些时候为了考察同学写代码的熟练程度,我会问问IDE的快捷键,或者让手写一段不是太复杂的代码。
相关推荐
### 如何编写高质量Java代码 #### 一、引言 随着软件工程的发展,尤其是敏捷开发理念的普及,软件项目的质量成为衡量开发团队能力和产品成功的关键因素之一。在Java项目开发中,通过实施一系列最佳实践和技术手段...
在编程领域,编写高质量的代码是每个开发者的追求。"100个高质量代码编写建议"这个资源旨在提供一系列有助于提升代码质量的指导原则。这些原则涵盖了编程规范、设计模式、错误处理、性能优化等多个方面,对于提升...
### 编写高质量代码——Web前端开发修炼之道 #### 一、引言 随着互联网的发展,Web前端开发已经成为了一个至关重要的领域。从最初的静态页面到现在的动态交互式应用,前端技术经历了翻天覆地的变化。《编写高质量...
从基本语法、应用架构、工具框架、编码风格、编程思想等5大方面对Web前端工程师遇到的疑难问题给出了经验性的解决方案,为Web前端工程师如何编写更高质量的JavaScript代码提供了188条极为宝贵的建议。对于每一个问题...
"软件工程代码"这个主题涵盖了软件开发过程中的编码规范、版本控制、测试、调试以及维护等多个环节。这里我们将深入探讨这些方面,结合描述中的“大连理工离线作业\2.27日 56355作业3个完稿”,我们可以推断这是一个...
软件工程学习笔记第十一节-编写高质量代码
代码质量是软件工程的核心要素,尤其在大型软件项目中,高质量的代码是构建可靠产品的基础。面对软件工程教育,培养学生的代码质量意识和能力至关重要。在当前的教学实践中,尽管学生们专注于实现软件的功能,但他们...
"设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...
"KEIL+IAR工程代码.rar"是一个包含在KEIL和IAR开发环境中编写的STM32项目的压缩文件。KEIL和IAR是两种常用的STM32开发工具,它们为开发者提供了集成开发环境(IDE),用于编写、编译、调试和烧录固件。 1. **KEIL ...
《编写高质量代码:改善java程序的151个建议》一共12章,第1~3章针对java语法本身提出了51条建议,例如覆写变长方法时应该注意哪些事项、final修饰的常量不要在运行期修改、匿名类的构造函数特殊在什么地方等;...
《编写高质量代码:改善javascript程序的188个建议》是web前端工程师进阶修炼的必读之作,将为你通往“javascript技术殿堂”指点迷津!内容全部由编写高质量的javascript代码的最佳实践组成,从基本语法、应用架构、...
从基本语法、应用架构、工具框架、编码风格、编程思想等5大方面对Web前端工程师遇到的疑难问题给出了经验性的解决方案,为Web前端工程师如何编写更高质量的JavaScript代码提供了188条极为宝贵的建议。对于每一个问题...
《工程&代码规约-阿里巴巴》是一份详细阐述阿里巴巴内部编程规范和工程实践的重要文档,旨在提高代码质量、增强程序的健壮性以及提升开发效率...遵循这些规约,开发者不仅能写出高质量的代码,还能提升自身的专业素养。
- 反观**工程级软件**,这类软件被投资用于实际生产生活中,因此对其质量有着非常高的要求。一旦软件出现错误,可能会给用户带来重大的损失,比如影响其生命财产安全。因此,工业级软件通常会设定更高的质量标准。 ...
《林锐博士的软件工程和高质量CC编程指南》是一份深度探讨软件开发实践与编程技巧的重要资源,由知名专家林锐博士编著。该指南涵盖了软件工程的基本原理以及C++和C语言的高级编程技术,旨在提升软件开发的效率和质量...
总之,"VB.NET 工程代码统计"是一个实用的开发辅助工具,它简化了代码量的统计工作,为项目管理和团队协作提供了便利。同时,通过研究其源代码,开发者可以提升自己的编程技能,并了解到如何利用VB.NET处理文件和...
在IT行业中,Linux环境下的C和C++编程是至关重要...总之,通过深入学习这些资源,你可以系统地提升在Linux环境下使用C和C++编程的能力,了解如何写出代码大全式的高质量程序,并在实际项目中实现高效和可靠的软件开发。
软件工程中的代码规范与代码审查 软件工程中的代码规范与代码审查是软件开发的重要组成部分。代码规范是指在软件开发中遵循的一致的编程风格和约定,以提高代码的可读性和可维护性。代码审查是指通过人工检查代码,...