之所以想起写这篇文章,是因为最近看到的一个著名的开源项目在内部使用时的各种问题,不得不说,很多的开源的东西思想是不错的,但离真正工程化都有不小的距离,所以没什么商业公司采用的开源产品如果要引入的话一定要慎重,通常会有N多的坑等着你去填,而比较成功的开源项目的背后多数都会有商业公司在背后不断的改进。

  遥想我2000年开始学习写asp代码时,觉得写代码也不难呀,无非就是学学语法规则、库就可以写出来,记得有一次我实习面试的时候是让我在一个下午左右的时间写一个完整的留言板,那也就是刷刷刷就写好了,但随着后来工作,尤其是加入阿里以后,越来越明白高质量的工程代码为什么难写。

  在写代码初期,最关注的是如何用代码实现需求,如果是仅仅实现业务需求的话,即使是刚上手的程序员,只要解题能力还OK,基本上都是可以写出代码来的。所以我自己一直认为数学成绩是程序员的一个非常重要的要求,数学好的人通常解题和逻辑思维能力是还不错的。

  上面的这个基本的写代码的过程中,写的更好的同学的体现会在对业务的深刻理解以及抽象上,写出的代码会具备一定的复用能力,这个在这里不多加探讨。

  但代码是不是实现了业务需求就结束了呢,其实远没有,这其实只是写代码的开始,除了正向的逻辑实现外,任何一个点的异常的分支逻辑怎么处理才是工程化的代码中更难处理的部分,这个问题在单机式的系统中会相对还好处理,在分布式的环境会变得非常的复杂,例如调用其他机器的功能超时了,出错了,到底该怎么处理,这也是为什么有了那么多的分布式的理论的东西出来,在增加了异常分支的处理逻辑后,通常会发现这个时候正向逻辑的代码在整个代码的占比中会大幅下降。

  异常分支逻辑处理好后,通常还需要增加必要的日志信息,以便在出问题时方便排查,而不是到了要排查问题的时候,一点目前系统的状况都搞不清楚,所以吃掉重要的异常信息不抛出这种行为在写代码中是非常可耻的。

  在处理好上面异常的相关动作后,代码的健壮性也要处理好,这个主要指:

  1. 自我保护能力

  对外提供的接口是否具备足够的自我保护能力,就是即使使用的人没仔细看API文档随便乱用也不会导致系统出问题,这种案例非常的多,例如对外提供了一个批量查询接口,结果用户一下传了一个里面有上千个用户id的数组,查询一下直接把内存耗光,像这种情况下不能怪使用的人,而应该怪实现API的这一端的保护做的不够好,按照这样的标准去看,会发现开源的很多东西的API都不太合格。

  还有一种就是能力保护,如果超出了处理的并发量的能力,这个时候会发生什么。

  2. 对资源的使用限制

  这也是代码新手或一些开源产品中做的比较差的地方,很容易出现规模一上去,资源使用量也一直涨,没有限制,然后导致系统挂掉,很常见的案例是对线程池的使用,例如像Java中的Executors.newCachedThreadPool,这个接口很多人会用到,但很多用的人都没有仔细想过会不会在某种情况下这里创建出巨多的线程;还有例如用Map做cache,也没考虑大小限制的问题,结果就是随着数据量增长,某天突然就挂了。

  健壮性是代码中比较复杂的部分,通常也是比较展现代码能力的部分,可能看起来就几行代码,但其实背后反映的差距是巨大的。

  开源产品除了在健壮性上的差距外,通常还会出现的一个巨大差距就是整个系统的设计的伸缩能力,伸缩能力不够的话通常会导致结构性的重构,另外常见的就是在并发的处理上不够高效,例如锁的合理使用、无锁算法的引入等等,而这些需要非常强的系统设计和代码功底能力。

  除了上面说的这些外,高质量的工程代码还需要考虑可维护(例如监控信息暴露)、安全性等,对我而言,我一直认为所谓的工程化其实就是把一些玩具性质的代码变成可在商业系统中真正健壮运行的代码。

  上面的内容写的比较简略,不过应该也能看出,对于高质量的工程代码而言,其实实现业务逻辑只是其中占比很小的一部分,甚至花的时间是相对最少的一部分,所以我确实非常赞同面试的时候让同学写代码,这个时候很容易看出同学写代码的功力;有些时候为了考察同学写代码的熟练程度,我会问问IDE的快捷键,或者让手写一段不是太复杂的代码。

高质量的工程代码为什么难写相关推荐

  1. 老司机写的java代码_老司机告诉你高质量的Java代码是怎么练成的?

    一提起程序员,首先想到的一定是"码农",对,我们是高产量的优质"码农",我们拥有超跃常人的逻辑思维以及不走寻常路的分析.判别能力,当然,我们也有良好的编码规范, ...

  2. ​如何编写高质量的C#代码(一)

    如何编写高质量的C#代码(一) 从"整洁代码"谈起 一千个读者,就有一千个哈姆雷特,代码质量也同样如此. 想必每一个对于代码有追求的开发者,对于"高质量"这个词 ...

  3. HTML Inspector – 帮助你编写高质量的 HTML 代码

    HTML Inspector 是一款代码质量检测工具,帮助你编写更优秀的 HTML 代码.HTML Inspector 使用 JavaScript 编写,运行在浏览器中,是最好的 HTML 代码检测工 ...

  4. html空格代码_编写灵活、稳定、高质量的CSS代码的规范(推荐收藏)

    01 编写灵活.稳定.高质量的HTML代码的规范 一.唯一定律 无论有多少人共同参与同一项目,一定要确保每一行代码都像是唯一个人编写的. 二.HTML 2.1 语法 (1)用两个空格来代替制表符(ta ...

  5. 如何用 GitHub Actions 写出高质量的 Python代码?

    这篇博文将与你分享如何在Python项目中搭建起GitHub Actions工作流,以确保你写出的代码既优雅,又符合所有最佳实践,且已经过完备测试. 作者 | Wojciech Krzywiec 译者 ...

  6. 如何编写高质量的C#代码(一)

    从"整洁代码"谈起 一千个读者,就有一千个哈姆雷特,代码质量也同样如此. 想必每一个对于代码有追求的开发者,对于"高质量"这个词,或多或少都有自己的一丝理解.当 ...

  7. 如何书写高质量的jQuery代码

    想必大家对于jQuery这个最流行的JavaScript类库都不陌生,而且只要是前端开发人员肯定或多或少的使用或者接触过,在今天的这篇文章中,我 们将介绍一些书写高质量jQuery代码的原则,我们不单 ...

  8. 怎样编写高质量的Java代码

    代码质量概述 怎样辨别一个项目代码写得好还是坏?优秀的代码和腐化的代码区别在哪里?怎么让自己写的代码既漂亮又有生命力?接下来将对代码质量的问题进行一些粗略的介绍.也请有过代码质量相关经验的朋友提出宝贵 ...

  9. [精华]如何编写高质量的VB代码

    2003-01-01· ·冯睿··yesky简介: 本文描述了如何通过一些技术手段来提高VB代码的执行效率.这些手段可以分为两个大的部分:编码技术和编译优化技术.在编码技术中介绍了如何通过使用高效的数 ...

最新文章

  1. 优达同学波士顿房价预测
  2. 吐司面包的做法_无糖粗粮吐司面包的做法+配方,超柔超软,一次发酵
  3. Scikit-Learn 机器学习笔记 -- MNIST
  4. 【C语言】控制台窗口图形界面编程(三)窗口相关设置
  5. (dijkstra算法+多权值)最短路径问题
  6. 统计学习方法六:支持向量机三(支持向量定量理解和算法总结)
  7. Assets.car 解压工具 cartool 使用报错 segmentation fault cartool 解决方案
  8. Unity Animator动画状态机 深入理解(一)
  9. java怎么把程序写入持久化_如何将DataFrame持久化到Hive表?
  10. 《MATLAB智能算法30个案例》:第6章 遗传算法工具箱详解及应用
  11. [IOS APP]毕淑敏经典有声小说
  12. 集合论的创始人康托尔(G.Cantor)的故事
  13. Freemarker使用xml生成word模板
  14. 华为line服务器无响应,line注册链接不到服务器
  15. 大天使之剑服务器维护,大天使之剑部分区服维护公告
  16. 厉害了!看嘴型竟然就能识别发音
  17. Camera ITS测试
  18. python汉字转拼音首字母_python获取一组汉字拼音首字母的方法
  19. Hive集成Phoenix
  20. ReactiveCocoa详解-李文瀚-专题视频课程

热门文章

  1. 人生在世,运气很重要
  2. Mac中找不到.bash_profile则自己创建.bash_profile文件
  3. 无惧上代信号差诟病?谷歌Pixel 7系列继续搭载三星基带芯片
  4. 陆正耀神州优车被强制执行超10亿
  5. 消息称苹果正在启动生产iPhone SE 3
  6. 荣耀2021年度手机颜值天花板首销!2699元起
  7. 万达辟谣王健林去世:已报警!造谣账号已封禁
  8. 蔚来、威马抢装的英伟达Orin,正成为高端智能车标配
  9. 爱奇艺推出国际娱乐服务iQIYI App:科技和内容同时出海 携手Astro展开马来西亚地区本土化运营...
  10. 你手中的iPhone 7已过时!被苹果列为清仓产品,或为iPhone SE2让路