如何追求高质量的代码?

成长总是很痛苦的,每天总是不舒适的,尤其是被问到一层又一层的点时,很多人总是说自己精通这个精通那个,实际飘的很,最表面的东西,谁都想得到,能在表象之上想通一个局部,也是很费功夫,如果能从系统上和全局上考虑的认少之又少。每一行代码的用意的揣摩,每一个细节的深挖,都是需要很痛苦的折腾。你不去深入理解,只是浅层次的实现某个功能,在很多时候,并不能得到别人的认可。因为任何东西写出来后,希望以后尽量都是少的改动,这样才有时间做其他事情,否则永远陷入在恶性循环中,Bug永远解不完,代码永远是那样千疮百孔。修也修不过来,下个来维护的人,只能是重写。所以,如果你在代码非常苛刻的公司,恭喜你,你是幸运的。因为当下你确实很痛苦,心也累。但是长远看,你是受益的。因为你的代码可以承受住各种压力和并发测试。这样的代码会永远保留下去,而那种一次性代码,不到几天就到垃圾站去了。优秀的代码总是惊人的相似,不好的代码有是不谋而合。学习优秀代码本身就是很费功夫的事。优秀代码有它的思想,原则,界限,范围。能做什么,不能做什么。什么可以暴露,什么不可以暴露,函数/方法的命令,规范及风格。很多人在进度的压力下潦草应付,只要测试通过就算搞定。表面上看,开发速度很快,进度有保障;但实际上,这样的程序连开发者自己都很难读懂,一旦有bug,很难调试,将来维护升级都非常困难。这样的代码多半只能重写,浪费自然严重。如果每个人写程序的时候当艺术品来写,写每行都认认真真、干干净净的,虽然速度略微慢了一点,但综合的开发成本会低很多。如何写像诗一样美的代码呢?雷布斯曾用到过几个方法:

一、买几本经典的编程书,把书上所有例程全部重新写一遍,逐个比较和书上范例的差距,一步一步改善自己编程的风格和技巧。时间长了,自然就能写出象书上例程一样的代码,甚至可以比书上写得好。

二、基础扎实后,多看看Linux 等系统级的源代码,看看高手是如何写的,就有感觉了。

三、通读一下MSDN中所有的资料,这样,“读书破万卷,下笔如有神”。

还有,一定要牢记软件工程的铁律:可能出错的地方一定会出错。每个变量都做初始化,引用每个参数都会做有效性检查,在可能出错的每个地方都会做边界条件检查,这样开发出来的程序一定会稳固很多,就是出错也会很容易修改。野路子出来的高手,一般开发速度很快,但做完后bug很多,经常需要很长时间修改。而真正的高手,追求的境界是 bugfree code(零缺陷代码)。

我也有一些总结如下:

1、看那些Bug很少的人代码,他们的代码,每行逐字的读,用了什么技巧?有哪些思想?我自己来写,会想到这些么?想不到的原因是什么?基础不够扎实?还是有知识黑洞?为什么要用某个API,而

不用另外一个相近的API?if条件里的判断是否也可以想到?重复代码巧妙用过变量或求同存异的方式抽离走了。

2、记下别人review后批评点,做人有韧性。批评你的代码恰恰说明要有很多要改的地方。当时尽管不爽,过一段时间,review你的代码,问题越来越少了,说明你也得到提高了,但是我知道很多公司很少有人逐行逐字代码review,出现问题,还是由写代码的人去修。隐式隐藏了潜在的问题以及可能会遇到的问题。

3、对于一个简单系统API,如Android或是C++库函数,要去搞清楚局限,场景,包括参数的边缘测试。正常逻辑往往不会出问题,都是一些边缘性导致,如nullptr,越界,单元测试方法健壮性,至少传入4种以上不同场景参数。有时还伴随多实例,并发等。是否能顺利通过。这样写出来的才有自信。系统的API,没有理解背后的局限和优缺点,也可能误用而出问题。

4、字字如刺,每一步都是一步一步淬炼,成长也是一刀一刀削在心底。然后不断变得更好。

原文发布于微信公众号 - 何俊林(DriodDeveloper)

原文发表时间:2017-11-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PHP在线

我见过的最糟糕的程序代码

原文出处: jacquesmattheij 译文出处:外刊IT评论 大多数的客户项目在任务完成之后都会很快的从记忆里消退,但有些,你一辈子都不会忘记。我要说...

3025
来自专栏阮一峰的网络日志

代码的抽象三原则

软件开发是"抽象化"原则(Abstraction)的一种体现。 所谓"抽象化",就是指从具体问题中,提取出具有共性的模式,再使用通用的解决方法加以处理。 ? 开...

3964
来自专栏Python爬虫实战

爬取手机靓号-看手机号到底有多好

前几天分享了如何使用pyecharts,但是只是用一些简单的数据,感觉有一点不真实。今天就来实战演练一下。从爬虫,到数据清洗,到数据库,最后可视化,带你完成这个...

3012
来自专栏web编程技术分享

小兔JS教程(一) -- 环境搭建与JavaScript初探1.开发环境搭建2.JavaScript初探

3509
来自专栏Golang语言社区

改变未来IT世界的十种编程语言:Go语言

这里要说的都是革新,说这些的目的就是要保持关注最新技术。如果你是一个程序员,想要探寻未来技术,那这篇文章就是你的必读之选。我们这里列出了10种编程语言,10种将...

5135
来自专栏Python爬虫与数据挖掘

爬取手机靓号-看手机号到底有多好

前几天分享了如何使用pyecharts,但是只是用一些简单的数据,感觉有一点不真实。今天就来实战演练一下。从爬虫,到数据清洗,到数据库,最后可视化,带你完成这个...

902
来自专栏月牙寂

golang设计模式的一些看法

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

3385
来自专栏Crossin的编程教室

input vs raw_input

今天是教师节,祝老师们节日快乐。然后,今早,我居然也收到了祝福。。。暗自窃喜。 把之前有几篇不属于课程系列的文章整理了一下,回复 w 可以看到文章列表。包括罚点...

30811
来自专栏小樱的经验随笔

设计模式六大原则(1):单一职责原则

定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需...

3446
来自专栏Java技术栈

起死回生的分布式神器-Dubbo

Dubbo概述 一个分布式、高性能、透明化的RPC服务框架,提供服务自动注册、自动发现等高效服务治理方案。 Dubbo是阿里巴巴SOA服务化治理方案的核心框架,...

2837

扫码关注云+社区

领取腾讯云代金券