本文首发自「慕课网」,想理解更多 IT 干货内容,程序员圈内热闻,欢送关注 ” 慕课网 ”!
造就一个好的编程习惯,能让你整个职业生涯收益。
例如,做好正文,不便本人也不便他人读懂代码;用迷信的办法命名变量,而不是得心应手;规范化测试,而不是拖到所有程序都实现再去测试,等等。
上面是一些值得保持的好习惯,编程是个充斥创意的工作,但同时也是细节决定成败的工作,你真正工作中可能 80% 的工夫都在解决一些琐碎的问题。
所以,尽可能防止它们的频繁呈现,会让你的职业生涯更轻松,也能更好的迈向胜利。
一、技术层面
1. 高级技巧(技术细节)
1)咱们晓得在类 C 语言的编程语言中,int 和 bool 是能够互相转换的。 因而 a = 1 与 a == 1 都能够作为 if 的判断条件。很多老手会把“=”当成“==”,而这并不会引起报错。因而这种谬误是比拟难以发现的。一个小技巧是将判断条件写成:1 == a**,这样如果误写为“=”,则会引起编译器的语法层面的报错,这样谬误就会立即被发现。
这个技巧只起到一个抛砖引玉的作用,编程语言品种繁多,但差不多每种语言里都能发现一些相似在类 C 语言中的这个技巧,这类技巧使用好了有时候可能节俭大量工夫。
2)长于利用位运算进步运行效率
在运算量较大的时候,长于使用位运算来代替一些一般的运算,往往能够起到进步代码效率的作用。例如,a * 2 能够写成 a << 1;再比方判断一个数字是否为奇数或偶数时,a & 1 要比 a % 2 的效率要高得多。
2. 中级技巧(代码的易读性)
1)空格的应用
很多老手程序员还没有领会到一个小小的空格作用能有多大:
a=b+c 和 a = b + c ——— 对计算机来说这是一回事,然而对程序员来说却是齐全两回事。当你面对成千上万行的代码要浏览时,你肯定会感激应用空格的程序员。
2)格调统一的代码
代码格调包含了代码自身的格调以及文件的命名。总之所有由你的手通过键盘写入到计算机里的货色,都应该保持一致的格调,包含文件名称、变量与函数名称、缩进等。这一点有教训的程序员肯定深有体会,统一的代码格调不仅会不便你也会不便读你代码的人。
举个简略场景,你四周亲戚朋友有个两三岁的小孩,他说了两个字“gu hu”,每一个字你都听的很分明,但因为音调和吐字的缘故很难第一工夫就了解这两个字的具体含意,通过他妈妈的翻译之后,你豁然开朗:哦,原来说的是“姑父”。这就和格调不一的代码一样,你很难弄懂它的意思,要花费大量工夫去解读敲代码的人的思维。
3)命名要有含意
这一条不须要多解释,a = 1.2 和 price = 1.2 哪种更清晰高深莫测。原则上,宁肯让变量名或者函数名长一些,也不要起含糊的或没有含意的名字。
4)学会如何写正文
什么时候用正文,这是个古老的问题,它始终没有一个特定的规范。有这样一个说法:在一个健全的代码中,正文的局部应该是代码自身的二分之一到三分之二。小慕对这种说法不是很同意,正文应该视状况而定,但这也阐明了正文的重要性。永远不要置信,只有变量名函数名起得好,就不须要正文这种舆论。
依据教训来说,在逻辑比较复杂的时候、容易踩坑的中央,正文是肯定要写的。至于每个函数是不是都要写对于函数的返回值、参数这样的正文,要具体情况具体分析。如果我的项目要求你必须写,那无需多问;而如果我的项目没有这类硬性要求,那么对于那些常常被大家应用的较为简单的函数,最好有正文。这样每个应用这个函数的人就能够通过正文很快明确如何应用这个函数。
另外,在一些函数体为空的中央,写一行正文也会起到踊跃的作用。比方:
void func () {}
和
void func ()
{
// nothing to do
}
当这两种写法呈现在很多代码中时,很显然第二种写法要远好于第一种。
然而同时要留神,写正文也是有代价的。当你对代码进行批改时,相应的正文也要批改,这无形中就会减少工作量。如果你不小心遗记批改正文,那么很可能会让浏览代码的人产生困惑,也就是说:正文同样须要保护。因而切记不要滥用正文。
3. 高级技巧(debug)
1)用[控制变量法 debug
很多老手往往意识不到一个事实:写代码自身并不会花太多工夫,真正花工夫的是 debug。能够说,debug 的速度能够间接反映出一个人的编程程度。debug 的技巧,兴许不同的程序员会有不同的经验之谈,不过真正能称得上是 debug 技巧的,只有两个:控制变量法 + 二分法。
所谓控制变量法,就是当面对多个不确定因素时,你要人为地批改这些因素,让不确定因素只剩下一个。请看这段代码:
if (func() < func2() && value > getSize())
{
// …
// …
}
当运行这段代码的时候,你发现原本不应该进入到这个 if 的状况下却进来了,此时须要找到问题所在。老手往往会感觉有点大刀阔斧,因为这里有两个判断条件,到底是哪个出了问题?其实依照控制变量法去做,这样的 debug 会很容易被找到:咱们只须要将一个条件临时去掉,让程序执行,就能够立即定位到谬误的中央。
下面这个例子是一个实在的案例。其中,func 和 func2 都是非常复杂的函数,而 getSize()是敌人写好封装在库里的一个函数。bug 是:value 为 - 1 而 getSize()返回值是 4 的时候,竟然执行了 if 外面的局部。其实 bug 的起因在于 getSize 的返回值类型是 unsigned int,而 - 1 是 int 类型,因而 -1 > 4 成了 true。面对这样的 bug,如果通过加断点的形式去逐渐执行,那么仍然须要破费很多工夫能力找到这个谬误。而如果把 func() < func2() 先去掉,只留下前面的判断条件,那么立即就能够定位到谬误。
2)用二分法 debug
面对大量代码呈现 bug 时,想要在用极短的工夫找到谬误,就能够应用“二分法”。举个例子:
// a) 此处有 1000 行代码
// b) 你感觉 bug 大略在这个地位
// c) 此处有 2000 行代码
此时并不需要读懂 a 处和 c 处的代码,只须要读懂 b 处的代码即可。更精确地说,只须要晓得 b 从 a 那里获取了什么、b 给了 c 什么即可。
假如 b 处的代码依赖于 a 处代码所生成两个值,那么齐全能够间接把 a 处的代码全副正文掉,而后模仿两个值给 b,再运行,看看后果如何。如果 bug 仍然存在,那就阐明 a 处的代码没有问题 ——— 至多这个 bug 的源头不在 a 处;而如果 bug 隐没了,则阐明 bug 源自 a 处的代码。
比方:
int func ()
{
// 1000 行代码
return x;
}
void func2 (int a)
{
// 2000 行代码
}
int a = func()
// 扭转了 a 的值
func2(a)
如果这段代码报错,最快的定位 bug 的办法是先模仿一个参数给 func2,看看 bug 是否还在,如果 bug 还在,则阐明 func2 有问题;反之,则阐明问题出在之前的代码。老手们如果能够学会灵活运用这种办法去 debug,置信很快就能够步入“老油条”的行列。
debug 其实和找对象是同样的情理,要考究形式办法,能力防止注孤生的命运。例如:
不要讲她听不懂的编程常识!
修电脑肯定要跑去她家!
能辨别女生说怄气不理你了并不是真的不想理你!
……
二、工作、学习层面
1. 一直温故编程基础知识
对于事物而言,最根底的往往是最外围的。一直温故编程基础知识,了解编程的思维体系,知其然,知其所以然,能力使用的得心应手。才不会找了半天谬误最初一拍脑袋:哦,原来在这出错了。
有个编程老手,前段时间写了一个代码,逻辑是这样的:一个超链接申请后盾,然而点了链接之后,页面刷新,后盾申请没有走到。他找了良久都没有发现问题。最初让资格较高的共事一看,他的 A 标签写的是这样的:
<a href=""onclick="getUserInfo();"/>
。于是改成了 <a href=”javascript:void(0)”onclick=”getUserInfo();”/>。
共事改完扭头就走,他这才豁然开朗。
2. 体系化列举,碎片化整顿
很多人说,本人高三那年是人生常识储备的巅峰期间,就是因为过后最次要的工作就是学习,每天重复背诵相干知识点。然而哪怕过后记得再分明,随着工夫的流逝,大学之后没有温故知新的话,很多货色就会缓缓忘记。这就是人记忆的一个遗忘曲线。
对于编程,语言和技巧太多,指望过目不忘是不可能的事件。买一个笔记本,或者利用各种云端程序,体系化地列举出本人的编程语言条目,条目下细分出具体的模块,平时工作、空闲之际接触有优良的观点、实用的技巧、深刻的分析原理都能够碎片化记录下来。这样能够不便平时翻阅,只有保持一段时间,就会发现自己业余技术晋升不少。
其实也不仅仅是编程,在任何一个行业,没有不必付出就能登顶的蠢才。学习编程自身就须要工夫和教训的积攒,在怠惰的根底上,保持良好的习惯和正确的方法论,成不胜利不敢说,提高必定会有的~
欢送关注「慕课网」帐号,咱们会始终保持提供 IT 圈优质内容,分享干货常识,大家一起独特成长吧!