给你的代码《约法四章》:基本功能、错误处理、智能纠错、日志收集
作为21世纪的码农,如果只是想混混工资的话,这篇文章可能不太适合你,但如果想在技术上有所提升,本文也许能帮你照亮前进的道路。程序员不能只是天天埋头写代码,还得关心代码的质量,其实写代码很容易,稍微用心点学都能写,但是要产出好的代码却不是那么容易事,所谓好的代码不是说你完成了某某功能就牛B,在完成了基本功能的同时还有很细节要注意,在各种关于代码质量的书中都的提及到了这样的概念:代码格式、命名规则、功能注释等,虽然这些东西看上去并不能主宰软件的“生与死”,但是谁又能保证一个软件从出生到结束都由一个人维护呢?关于代码规范这个话题我不打算列入本文的内容,原因有二,其一是很多书中都的提及到,我就不必重申;其二是很多程序员其实也很注重这个问题,只是注释多少的问题。那么就标题中的四点来给我们的代码约法四章,让我们这些码农的代码更健壮。
首先是基本功能,这个我不多说大家也应该懂了,程序员就是要完成各种产品提出的需求,如果基本功能都完不成,我们后面一切都是空谈。就好比是建房子,连地基都还没有开始搞,就在想我要买什么家具能让房间更漂亮。鸟虽然能飞,但它也是先学会走才学飞的。所以这一点大多数的程序员都能做到,我也就此罢休,也许这一段是多余的,呵呵。
其次是错误处理,错误处理这个东西如果从程序员的角度去看好像不觉得他有多神秘,只要稍加注意,些事就能避免,但试问有多少人真的注意了?这里举个大家经常看到的例子,字符串拷贝函数strcpy:
[c]
char *strcpy(char *dst, const char *src)
{
char *addr = dst;
assert((dst != NULL) && (src != NULL));
while((*dst++ = *src++) != ‘\0′);
return addr;
}
[/c]
就是这么如此简单的代码, 有多少人会加上断言进行NULL判断?据说这段代码考到了无数牛人,因为在考这段代码的时候不是在考你会不会字符串拷贝,而是在考你是否考虑了错误处理。很多代码都是因为没有错误处理或者处理不当导致程序崩溃,想想其实挺不划算的,花了大把时间把主要功能都实现了,结果因为没有考虑这些看似不起眼的错误导致程序不能稳定运行,对于客户来说你这就是没有完成工作,而对于同行来说,你这就不是合格的码农。其实大家在编写代码时候多考虑一点,程序就更健壮一点。记得在网上有很多文章有这么一说:不要相信任何用户的输入,想想还是非常有道理。
然后是智能纠错,对于大多数web开发人员来说,列表翻页是相当常见的功能,但就是这么一个看似简单而又常见的功能,却隐藏了该文很重视的一个智能纠错的问题。假设page参数为列表的页码,如果page小于等于1,你的代码是否能正确的读取第一页的数据?如果page大于最大页数,你的代码是否还在查询数据库列表?当你看到这里,你不防试试打开你的代码,看你是否真的把这些都做完善了?其实这里只是引用了一个简单的实例来说明智能纠错的重要性,在程序中还有很多地方需要类似的纠错,如果你发现了,请完善他。
最后是日志收集,其实能做到上面两点,我挺羡慕你的,因为到目前,我也算不上合格的码农,代码经常出BUG,虽然说BUG对于程序员来说很常见,但是一有BUG心里总归不爽,不爽又能怎么着?还得找问题继续改之。如果能很快定位问题的根源,那么你是幸运的,能很快解决他。但是如果某一天,你的客户告诉你程序中断了,而你也不知道程序错在哪里,那么你就杯具了,慢慢找吧。真的需要要一步一步来找吗?太浪费时间了,不防在你在程序中添加日志收集,在你觉得可能出现错误地方都做上日志标记,在以后程序崩溃后,至少能通过日志定位程序中断时大概的运行位置,你又一次成了幸运儿。
本文就这么结束了,希望对各位有所帮助。最近也是看到自己的代码各种BUG,也有了很多感触,希望能写出本文能加深自己对程序建壮性、稳定性的重视。
建议继续学习:
- vim的一个js代码整理的插件jsbeautify.vim (阅读:4673)
- 写代码这件事 (阅读:3839)
- 多些时间能少写些代码 (阅读:3404)
- 数据即代码,我和小伙伴们都惊呆了! (阅读:3341)
- 如何写出无法维护的代码 (阅读:2941)
- 十种更好的表达“你的代码写的很烂”的方法 (阅读:2878)
- 如何为PHP贡献代码 (阅读:2802)
- 你的代码是我的地狱 (阅读:2179)
- HTML代码到底该不该压缩 (阅读:1643)
- 在公众号中优雅地呈现代码 (阅读:1711)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:IM鑫爷 来源: IM鑫爷
- 标签: 代码
- 发布时间:2012-03-12 23:45:44
- [67] Go Reflect 性能
- [67] Oracle MTS模式下 进程地址与会话信
- [67] 如何拿下简短的域名
- [61] IOS安全–浅谈关于IOS加固的几种方法
- [60] 图书馆的世界纪录
- [59] 【社会化设计】自我(self)部分――欢迎区
- [58] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [47] 界面设计速成