程序员的自我修养
程序员文章站
2022-05-30 17:57:47
...
最近项目组为了提高代码质量,组队一起学习了代码精进之路课程,来提升代码质量,减少线上bug的产生。一部电影的好坏,一部分因素靠演员的自我修养,涉及到代码质量问题,同样要靠程序员的自我修养。
一、代码规范
(1)命名规范
平时在编码时,声明变量方法时,一定要规范,语义清晰。让阅读代码,评审代码时可读性强。记得之前学习Object-C语言时,那里面的方法名称就是特别长,但是只要能看懂英文,就知道方法是干什么用的。Python靠缩进就可以控制方法的开始与结束。
(2)注释规范
代码注释主要是常量,枚举等声明时,要解释一下使用的意义;方法注释主要是要说明方法的作用,参数以及返回值,作者以及时间;实体要加对应字段的注释,避免字段混淆;类注释主要描述类的作用以及版本信息。
(3)异常处理
编写代码要有正向思维,也要有逆向思维,这时候就需要考虑异常情况,需要进行异常处理,这样就可以提升代码的可用性以及健壮性。
(4)接口规范
每个公司都有自己的组织架构,业务组,业务中台,后台,架构等等,各个部门在业务协作的时候,就会有互相调用的情况,这时候就需要接口规范来控制。接口规范是协作合约,所以需要有一定的原则。
以下是接口规范的四个原则:
合约要成文,落地成文,避免甩锅。
合约要清晰,接口规范主要是用来描述接口的设计和功能,包括边界条件,指定参数范围以及极端情况,所以在清晰。
合约要稳定,部门协作,当然需要保障接口的稳定性。
变更要谨慎,由于业务不可能一成不变,所以接口在变更时,一定要谨慎。及时通知使用方,以及做好兼容性。
强调编码规范,因为代码规范有以下几点好处:
1、提高编码效率
2、提高编码质量
3、降低维护成本
4、扩大代码影响
代码的产生最好要经过以下五道关卡,通过层层关卡,来约束编码质量:
1、程序员编写
2、编译器编译
3、回归测试
4、代码评审
5、代码分析
在编码完成时,需要按照编码规范清单检查,如代码是否按照预期工作?文件目录是否合理?代码是否易于阅读,理解?是否遵守命名规范?异常处理是否准确,描述是否清晰?等等。这个规范有团队共同协商。
目前一般都会安装阿里巴巴编码规范插件,按照阿里巴巴的规范(规范是人定义的,只要合理就可以),在编码时,开启自动扫描,出现不规范时,会有警告提示。
二、代码经济
(1)避免需求膨胀,避免过度设计
识别最核心需求,持续交付,从0到1,从1到无穷。每次需要需要明确需求的范围,避免需求膨胀,管理好需求,是提高工作效率和软件效率最有效的路径。这可能不是程序员决定的,但是跟产品打交道的时候,最好还是明确需求。
设计是程序员必须要做的,过度设计导致过度复杂,复杂导致效率降低,性能降低,危险加剧。
(2)简单直观
乔布斯的苹果,张小龙的微信都体现出对极简主义的追求,编码也要追求简单直观,少就是多,一个接口尽量只做一件事,如果做不到,那就要减少依赖关系,并表明依赖关系。
(3)避免线程同步
线程的执行方式一般有同步与异步,如果必须要强一致性,只有同步,那就尽量减少线程同步时间,如果能异步处理,还是采用异步处理,响应快。比如日志记录等,可考虑异步记录。
(4)减少内存使用
程序的运行少不了内存,为了避免内存溢出,就要合理的利用内存,虽然Java有JVM自动回收机制,不用自己手动管理内存,但是为了性能,还是要减少实例数量,减少实例大小。延迟分配,延迟初始化,需要时再声明,需要时再分配原则。
(5)代码的可持续性
代码的可持续性主要体现在垂直扩张(纵向)和水平扩张(横向)两方面。代码应该具有可伸缩性,可拓展性。毕竟从1到无穷是一个漫长的过程。垂直扩张一般指同一个处理单元处理更多负载的能力。如增加硬盘,更换cpu,内存硬件方面,软件方面主要是算法优化等。水平扩张主要是增加更多的处理单元,来处理更多的负载。如增加服务器,分布式系统,负载均衡,集群等技术手段。水平扩张的时候需要考虑有状态数据和无状态数据。比如让微信官方给一面国旗的活动,活动太火爆,换头像的时候,服务就提示异常,这就需要水平扩展服务来支撑这么大的并发量。
编写经济的代码可以带来以下好处:
1、提升用户体验
2、降低研发成本
3、降低运营成本
4、防范可用性攻击
怎样编写经济代码,可参考以下规则:
1、避免过度设计
2、选择简单直观
3、超越线程同步
4、减少内存使用
5、避免性能陷阱
6、规模扩张能力
要做到经济代码,同样需要代码清单检查:
1、需求评审
2、设计评审
3、代码评审
三、代码安全
提到代码安全,一定会先想到黑客攻击,为什么被黑客攻击,就是代码存在安全漏洞。
掌握安全编码的技术,熟练修复软件漏洞的实践,需要有意识,知晓,看到。
(1)如何评估代码安全缺陷
关注用户感受,从用户感受出发,衡量软件缺陷两个最常用的指标,缺陷影响的广度和缺陷影响的深度。缺陷,需要从内向外看,有的缺陷用户感知不到,只有程序员内部知道情况,比如金额扣为负的情况。细化的优先级从高严重性、高可能性(P1)到低严重性、低可能性。优先级的灵活性,如果已经存在对应办法,优先级可下调,如果缺陷影响了重要的运营或者客户,优先级可上调,可以灵活调动。管理好自己的时间,人的时间总是有限的,一天工作的时间有限,所以就优先处理优先级高的缺陷。
(2)敏感信息的处理
敏感信息主要包括两方面:个人敏感信息和商业敏感信息。个人敏感信息主要是电话、地址、家庭等,商业敏感信息主要包含客户信息,商机信息等。要做好加密处理,避免数据泄露,被黑市交易利用等等。要做到特殊信息 需要特殊处理。
安全缺陷严重性,主要体现以下几点:
1、对私密性的影响
2、对完整性的影响
3、对可用性的影响
4、对授权范围的影响
安全缺陷的可能性:
1、安全攻击的路径
2、安全攻击的复杂度
3、安全攻击需要的授权
4、安全攻击是否需要用户参与
编写安全代码基本原则:
1、清楚调用接口的行为
2、跨界数据不要信任
3、最小授权原则
4、减少安全攻击面
5、深度防御原则
程序员的自我修养,要做好一个程序员,需要以下六个技能:
1、掌握一门编程语言(技能)
2、解决现实问题(目标)
3、发现关键问题(敏锐)
4、沉静的潜行者(妥协)
5、可以依赖的伙伴(队友)
6、时间管理者(时间)
关于健康
健康是一切的根基,没有健康,也就天方夜谭,平时要注意锻炼身体,养成健身的习惯。
关于生活
人活一生,还是要享受人生,享受生活,不给人生留遗憾。工作也是为生活服务的。要多陪伴自己的家人,因为一旦错过就不在。
关于工作
工作无贵贱之分,只要自己喜欢,开心就好。
关于学习
作为程序员,学习是不可少的,毕竟靠技术吃饭的,技术又更新替代的那么快,所以还是要不断的学习新的技术,来满足工作的需要,生活的需要。平时也可以读书,开拓一下自己职业的局限性,了解一下外面的世界,避免在圈内失业,颓废。
https://mp.weixin.qq.com/s/VcYOpMz6SLYFznSJ9S9eSQ
一、代码规范
(1)命名规范
平时在编码时,声明变量方法时,一定要规范,语义清晰。让阅读代码,评审代码时可读性强。记得之前学习Object-C语言时,那里面的方法名称就是特别长,但是只要能看懂英文,就知道方法是干什么用的。Python靠缩进就可以控制方法的开始与结束。
(2)注释规范
代码注释主要是常量,枚举等声明时,要解释一下使用的意义;方法注释主要是要说明方法的作用,参数以及返回值,作者以及时间;实体要加对应字段的注释,避免字段混淆;类注释主要描述类的作用以及版本信息。
(3)异常处理
编写代码要有正向思维,也要有逆向思维,这时候就需要考虑异常情况,需要进行异常处理,这样就可以提升代码的可用性以及健壮性。
(4)接口规范
每个公司都有自己的组织架构,业务组,业务中台,后台,架构等等,各个部门在业务协作的时候,就会有互相调用的情况,这时候就需要接口规范来控制。接口规范是协作合约,所以需要有一定的原则。
以下是接口规范的四个原则:
合约要成文,落地成文,避免甩锅。
合约要清晰,接口规范主要是用来描述接口的设计和功能,包括边界条件,指定参数范围以及极端情况,所以在清晰。
合约要稳定,部门协作,当然需要保障接口的稳定性。
变更要谨慎,由于业务不可能一成不变,所以接口在变更时,一定要谨慎。及时通知使用方,以及做好兼容性。
强调编码规范,因为代码规范有以下几点好处:
1、提高编码效率
2、提高编码质量
3、降低维护成本
4、扩大代码影响
代码的产生最好要经过以下五道关卡,通过层层关卡,来约束编码质量:
1、程序员编写
2、编译器编译
3、回归测试
4、代码评审
5、代码分析
在编码完成时,需要按照编码规范清单检查,如代码是否按照预期工作?文件目录是否合理?代码是否易于阅读,理解?是否遵守命名规范?异常处理是否准确,描述是否清晰?等等。这个规范有团队共同协商。
目前一般都会安装阿里巴巴编码规范插件,按照阿里巴巴的规范(规范是人定义的,只要合理就可以),在编码时,开启自动扫描,出现不规范时,会有警告提示。
二、代码经济
(1)避免需求膨胀,避免过度设计
识别最核心需求,持续交付,从0到1,从1到无穷。每次需要需要明确需求的范围,避免需求膨胀,管理好需求,是提高工作效率和软件效率最有效的路径。这可能不是程序员决定的,但是跟产品打交道的时候,最好还是明确需求。
设计是程序员必须要做的,过度设计导致过度复杂,复杂导致效率降低,性能降低,危险加剧。
(2)简单直观
乔布斯的苹果,张小龙的微信都体现出对极简主义的追求,编码也要追求简单直观,少就是多,一个接口尽量只做一件事,如果做不到,那就要减少依赖关系,并表明依赖关系。
(3)避免线程同步
线程的执行方式一般有同步与异步,如果必须要强一致性,只有同步,那就尽量减少线程同步时间,如果能异步处理,还是采用异步处理,响应快。比如日志记录等,可考虑异步记录。
(4)减少内存使用
程序的运行少不了内存,为了避免内存溢出,就要合理的利用内存,虽然Java有JVM自动回收机制,不用自己手动管理内存,但是为了性能,还是要减少实例数量,减少实例大小。延迟分配,延迟初始化,需要时再声明,需要时再分配原则。
(5)代码的可持续性
代码的可持续性主要体现在垂直扩张(纵向)和水平扩张(横向)两方面。代码应该具有可伸缩性,可拓展性。毕竟从1到无穷是一个漫长的过程。垂直扩张一般指同一个处理单元处理更多负载的能力。如增加硬盘,更换cpu,内存硬件方面,软件方面主要是算法优化等。水平扩张主要是增加更多的处理单元,来处理更多的负载。如增加服务器,分布式系统,负载均衡,集群等技术手段。水平扩张的时候需要考虑有状态数据和无状态数据。比如让微信官方给一面国旗的活动,活动太火爆,换头像的时候,服务就提示异常,这就需要水平扩展服务来支撑这么大的并发量。
编写经济的代码可以带来以下好处:
1、提升用户体验
2、降低研发成本
3、降低运营成本
4、防范可用性攻击
怎样编写经济代码,可参考以下规则:
1、避免过度设计
2、选择简单直观
3、超越线程同步
4、减少内存使用
5、避免性能陷阱
6、规模扩张能力
要做到经济代码,同样需要代码清单检查:
1、需求评审
2、设计评审
3、代码评审
三、代码安全
提到代码安全,一定会先想到黑客攻击,为什么被黑客攻击,就是代码存在安全漏洞。
掌握安全编码的技术,熟练修复软件漏洞的实践,需要有意识,知晓,看到。
(1)如何评估代码安全缺陷
关注用户感受,从用户感受出发,衡量软件缺陷两个最常用的指标,缺陷影响的广度和缺陷影响的深度。缺陷,需要从内向外看,有的缺陷用户感知不到,只有程序员内部知道情况,比如金额扣为负的情况。细化的优先级从高严重性、高可能性(P1)到低严重性、低可能性。优先级的灵活性,如果已经存在对应办法,优先级可下调,如果缺陷影响了重要的运营或者客户,优先级可上调,可以灵活调动。管理好自己的时间,人的时间总是有限的,一天工作的时间有限,所以就优先处理优先级高的缺陷。
(2)敏感信息的处理
敏感信息主要包括两方面:个人敏感信息和商业敏感信息。个人敏感信息主要是电话、地址、家庭等,商业敏感信息主要包含客户信息,商机信息等。要做好加密处理,避免数据泄露,被黑市交易利用等等。要做到特殊信息 需要特殊处理。
安全缺陷严重性,主要体现以下几点:
1、对私密性的影响
2、对完整性的影响
3、对可用性的影响
4、对授权范围的影响
安全缺陷的可能性:
1、安全攻击的路径
2、安全攻击的复杂度
3、安全攻击需要的授权
4、安全攻击是否需要用户参与
编写安全代码基本原则:
1、清楚调用接口的行为
2、跨界数据不要信任
3、最小授权原则
4、减少安全攻击面
5、深度防御原则
程序员的自我修养,要做好一个程序员,需要以下六个技能:
1、掌握一门编程语言(技能)
2、解决现实问题(目标)
3、发现关键问题(敏锐)
4、沉静的潜行者(妥协)
5、可以依赖的伙伴(队友)
6、时间管理者(时间)
关于健康
健康是一切的根基,没有健康,也就天方夜谭,平时要注意锻炼身体,养成健身的习惯。
关于生活
人活一生,还是要享受人生,享受生活,不给人生留遗憾。工作也是为生活服务的。要多陪伴自己的家人,因为一旦错过就不在。
关于工作
工作无贵贱之分,只要自己喜欢,开心就好。
关于学习
作为程序员,学习是不可少的,毕竟靠技术吃饭的,技术又更新替代的那么快,所以还是要不断的学习新的技术,来满足工作的需要,生活的需要。平时也可以读书,开拓一下自己职业的局限性,了解一下外面的世界,避免在圈内失业,颓废。
https://mp.weixin.qq.com/s/VcYOpMz6SLYFznSJ9S9eSQ