2019独角兽企业重金招聘Python工程师标准>>>

版权声明:本文为北京尚学堂原创文章,未经允许不得转载。

很长一段时间以来,我们都在关注如何提高代码质量,也为此做过一些尝试,在这里分享一下关于如何提高代码质量的一些体会。

1. 打好基础

写出高质量代码,并不是搭建空中楼阁,需要有一定的基础,这里我重点强调与代码质量密切相关的几点:

  • 掌握好开发语言,比如做Android就必须对Java足够熟悉,掌握好扎实的Java基础, 有助于写出高质量Java代码。
  • 熟悉开发平台, 不同的开发平台,有不同的API, 有不同的工作原理,同样是Java代码,在PC上写与Android上写很多地方不一样,要去熟悉Android编程的一些特性,iOS编程的一些特性,了解清楚这些,才能写出更加地道的代码,充分发挥各自平台的优势。
  • 基础的数据结构与算法,掌握好这些在解决一些特定问题时,可以以更加优雅有效的方式处理。
  • 基础的设计原则,无需完全掌握23种经典设计模式,只需要了解一些常用的设计原则即可,甚至你也可以只了解什么是低耦合,并在你的代码中坚持实践,也能写出很不错的代码。

2. 代码标准

代码标准在团队合作中尤为重要,谁也不希望一个项目中代码风格各异,看得让人糟心,即便是个人开发者,现在也需要跟各种开源项目打交道。标准怎么定是一个老生常谈的话题,我个人职业生涯中经历过很多次的代码标准讨论会议,C++, C#, Java等等,大家有时会坚持自己的习惯不肯退让。可现如今时代不一样了,Google等大厂已经为我们制定好了各种标准,不用争了,就用这些业界标准吧。

  • 注释尽可能全面

  • 对于方法的注释应该包含详细的入参和结果说明,有异常抛出的情况也要详细叙述;类的注释应该包含类的功能说明、作者和修改者。

  • 多次使用的相同变量最好归纳成常量 多处使用的相同值的变量应该尽量归纳为一个常量,方便日后的维护。

  • 尽量少的在循环中执行方法调用

    尽量在循环中少做一些可避免的方法调用,这样可以节省方法栈的创建。例如:

for(int i=0;i<list.size();i++){  
  System.out.println(i);  
}

  可以修改为:

for(int i=0,size=list.size();i<size;i++){  
  System.out.println(i);  
}

3. 想好再写

除非你很清楚你要怎么做,否则我不建议边做边想。
你真的搞清楚你要解决的问题是什么了吗?你的方案是否能有效?有没有更优雅简单的方案?准备怎么设计它,必要的情况下,需要有设计文档,复杂一些的设计需要有同行评审,写代码其实是很简单的事情,前提是你得先想清楚。

4. 代码重构

重构对于代码质量的重要性不言而喻,反正我是很难一次把代码写得让自己满意、无可挑剔,《重构》这本书作为业内经典也理应人人必读,也有其他类似的教授重构技巧的书,有些也非常不错,遗憾的是我发现很多工作多年的同学甚至都没有了解过重构的概念。

5. 代码审查

我曾经听过一些较高级别的技术分享,竟然还不时听到一些呼吁大家要做代码审查的主题,我以为在这个级别的技术会议上,不应再讨论代码审查有什么好,为什么要做代码审查之类的问题。同时我接触过相当多所谓国内一线互联网公司,竟有许多是不做代码审查的,这一度让我颇为意外。

这里也不想多谈如何做好代码审查,只是就代码质量这点,不客气地说:没有过代码审查经历的同学,往往很难写出高质量的代码,尤其是在各种追求速度的糙快猛创业公司。

6. 静态检查

很多代码上的问题,都可以通过一些工具来找到,某些场景下,它比人要靠谱得多,至少不会出现某些细节上的遗漏,同时也能有效帮助大家减少代码审查的工作量。

Android开发中有Lint, Find bugs, PMD等优秀静态检查工具可用,通过改进这些工具找出的问题,就能对语法的细节,规范,编程的技巧有更多直观了解。

建议最好与持续集成(CI),代码审查环境配套使用, 每次提交的代码都能自动验证是否通过了工具的代码检查,通过才允许提交。

7. 单元测试

Android单元测试,一直备受争议,主要还是原生的测试框架不够方便,每跑一次用例需要在模拟器或者真机上运行,效率太低,也不方便在CI环境下自动构建单元测试,好在有Robolectric,能帮我们解决部分问题。

单元测试的一个非常显著的优点是,当你需要修改大量代码时,尽管放心修改,只需要保证单元测试用例通过即可,无需瞻前顾后。

8. 充分自测

有一种说法:程序员最害怕的是他自己写的代码,尤其是准备在众人面前show自己的工作成果时,因此在写完代码后,需要至少跑一遍基本的场景,一些简单的异常流。在把你的工作成果提交给测试或用户前,充分自测是基本的职业素养,不要总想着让测试帮你找问题,随便用几下就Crash的东西,你好意思拿给别人吗?

9. 善用开源

并非开源的东西,质量就高,但至少关注度较高,使用人数较多,口碑较好的开源项目,质量是有一定保证的,这其中的道理很简单。即便存在一些问题,也可以通过提交反馈,不断改进。最重要的是,你自己花时间造的轮子,需要很多精力维护,而充分利用开源项目,能帮助你节省很多时间,把精力专注在最需要你关心的问题上。

从另一个方面来说,开源项目中的一些知名项目,往往是领域内的翘楚所写,学习这些高手的代码,能让你了解到好的代码应该是怎样的,培养出更灵敏的嗅觉,识别代码中的各种味道。

10. 注重细节

10.1   包装类和基本类型的选择

在代码中,如果可以使用基本数据类型来做局部变量类型的话尽量使用基本数据类型,因为基本类型的变量是存放在栈中的,包装类的变量是在堆中,栈的操作速度比堆快很多。

10.2   

尽早的将不再使用的变量引用赋给null

  这样做可以帮助jvm更快的进行内存回收。当然很多人其实对这种做法并不感冒。

10.3

在finally块中对资源进行释放

典型的场景是使用io流的时候,不论是否出现异常最后都应该在finally中对流进行关闭。

10.4   在HashMap中使用一个Object作为key时要注意如何区分Object是否相同

在jdk的HashMap实现中,判断两个Object类型的key是否相同的标准是hashcode是否相同和equals方法的返回值。如果业务上需要对两个数据相同的内存对象当作不同的key存储到hashmap中就要对hashcode和equals方法进行覆盖。

北京尚学堂:2016年10月

转载于:https://my.oschina.net/u/2947706/blog/760025

北京尚学堂:献给奋斗在一线的“码农”相关推荐

  1. 北京尚学堂|程序员励志名言

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为北京尚学堂原创文章,未经允许不得转载. 北京尚学堂科技有限公司 编者的话:作为一个真正的程序员,首先应该尊重 ...

  2. 北京尚学堂|程序员的智慧

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为北京尚学堂原创文章,未经允许不得转载. 编程是一种创造性的工作,是一门艺术.精通任何一门艺术,都需要很多的练习 ...

  3. 北京尚学堂退课退课,口碑还不错

    解约协议书 甲方:北京尚学堂科技有限公司 统一社会信用代码:911101067855246634 乙方: 手机号: 甲方北京尚学堂科技有限公司与乙方 姓名 于 年 月 日签订的教育培训服务合同,乙方以 ...

  4. 北京尚学堂python 百度网盘_北京尚学堂_1903期_Python_全套视频教程(视频、源码、课件)...

    北京尚学堂_1903期_Python_全套视频教程(视频.源码.课件) |____尚学堂官网.url |____尚学堂_程序员修炼手册(电子版).url |____软件开发常用词汇(北京尚学堂发布). ...

  5. 北京尚学堂JAVASE课程

    北京尚学堂JAVASE课程 一.java历史-特点 1.计算机语言发展史 何为要发明计算机:为了进行科学计算,复杂的科学计算. 人类如何和计算机沟通,去分配任务. 通过计算机语言 实现 人类和计算机的 ...

  6. @[springboot初学,附北京尚学堂教程网址

    @springboot初学,附北京尚学堂教程网址https://www.bjsxt.com/a/10247.html 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 ...

  7. 北京尚学堂|为什么要学习Java

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为北京尚学堂原创文章,未经允许不得转载. 1. 思考一下​ 学习Java之前,先别急,静下心来好好想想: 1) ...

  8. 北京尚学堂偷偷告诉你:作为程序员必备的基本品质

    2019独角兽企业重金招聘Python工程师标准>>> 大多数对程序员的认识都停留在"代码机器,整天就知道敲代码的宅人类",其实不然,一个好的程序员是需要很好的创 ...

  9. 学习python,北京尚学堂,第07课到第30课的个人的总结

    在学习了那几节课以后,又找了一个新的视频,北京尚学堂的百战程序员,感觉还挺全 链接:https://pan.baidu.com/s/12HT1UCkK9SHadn8zESZRFA  提取码:zc7l ...

最新文章

  1. C# 指定格式的字符串截成一维数组(二维数组)的操作类
  2. Python:给定一个不超过5位的正整数,判断有几位
  3. Google准备开始新一年的大扩张
  4. java中如何设置浏览器宽度_[Java教程]关于JS中获取浏览器高度和宽度值的多种方法(多浏览器)_星空网...
  5. 浮点数计算机的表示案例,计算机中的数据及其应用案例.docx
  6. 操作系统:虚拟页式存储管理(缺页中断、页面置换算法)
  7. 实验二:编写输出Hello World!
  8. 配置Apache服务器的虚拟主机
  9. cmd无法运行python_通过Java-%1在cmd中运行python文件不是有效的Win32应用程序 - java...
  10. LeetCode(999)——车的可用捕获量(JavaScript)
  11. windows nginx 停止和启动_nginx在window与linux中启动、停止、与关闭
  12. Sql Server 性能优化之包含列
  13. Codeforces Manthan, Codefest 18 (rated, Div. 1 + Div. 2) E.Trips
  14. 检测1的个数_面部皮肤检测仪是美容院的新套路吗?
  15. 色谱计算机常用英文,【分享】色谱常用中英文单词
  16. 【upc】生命曲线(线段树) —— 一个能让你搞懂线段树懒标的题目
  17. 海量固定资产如何进行盘点?
  18. linux 右键没有终端,ubuntu鼠标右键没有打开终端选项解决方法
  19. 四川大学2014年数学分析考研试题
  20. ashx输出json_se7en3_新浪博客

热门文章

  1. equals和==和hashcode的恩怨情仇
  2. Excel插入数据透视表,实现合并同类项(office2007)
  3. 分析型数据库 AnalyticDB学习 ----基本介绍
  4. html让页面卡住,网页假死 网页总是假死,失去响应怎么办
  5. 二进制会是计算机最好的选择吗?
  6. Flutter 3.X二维码扫描功能
  7. 读书笔记-职位本身的权力也许不是你的能力
  8. android Facebook deeplink 坑坑坑
  9. Win10重新做完系统后点关机按钮变成了注销
  10. UI基础总结和个人作品集