高质量程序好文分享之王垠《编程的智慧》
今天有幸读到了王垠博文《编程的智慧》,突然有一种知音得遇、相见恨晚之感。文中诸多观点自己非常赞同,这些观点的形成绝非易事,需要经过大量的实践编程,反思总结和得到大牛的指点云云。
编程中与我契合之极的一个词:优雅。是的,能够写出优雅的程序是我一直所追求的,什么性能、高质量编程完全可以用优雅二字概括,甚至可以从这二字中看出一个程序员的从容自信的性格。
这里将分享文中一些观点:
王垠《编程的智慧》原文地址:http://kb.cnblogs.com/page/549080/
- 编程是一种创造性的工作,是一门艺术。
- 反复推敲代码是提高编程水平最有效的办法。
- 衡量编程水平的标准不是代码行数,而是看他们删掉多少代码。
- 反复提炼代码已经不再有进展,那么你可以暂时把它放下。过几个星期或者几个月再回头来看,也许就有焕然一新的灵感
- 你积累起了灵感和智慧,能够在遇到新问题的时候直接朝正确,或者接近正确的方向前进。
- 优雅的代码在形状上有一些明显的特征,它的逻辑大体上看起来,是枝丫分明的树状结构(tree)。
- 代码真正的模块化,并不是文本意义上的,而是逻辑意义上的。例如函数。
- 避免写太长的函数,通常长度都不超过 40 行。
- 制造小的工具函数以简化主要函数里面的逻辑。
- 使用宏(macro)来代替小函数,这也是一种过时的观念。
- 每个函数只做一件简单的事情。
- 避免使用全局变量和类成员(class member)来传递信息,尽量使用局部变量和参数。
- 真正优雅可读的代码,是几乎不需要注释的。
- 充分利用了程序语言的表达能力,你完全可以用程序本身来表达它到底在干什么,而不需要自然语言的辅助。
- 使用有意义的函数和变量名字。
- 局部变量应该尽量接近使用它的地方。
- 局部变量名字应该简短。
- 不要重用局部变量。
- 把复杂的逻辑提取出去,做成“帮助函数”。
- 把复杂的表达式提取出去,做成中间变量。
- 在合理的地方换行。
- 写简单的代码。
- 永远不要省略花括号。
- 合理使用括号,不要盲目依赖操作符优先级。
- 避免使用 continue 和 break。
- 如果有更加直接,更加清晰的写法,就选择它,即使它看起来更长,更笨,也一样选择它。
- 写无懈可击的代码。
- 使代码可靠的一种通用思想:穷举所有的情况,不漏掉任何一个。
- 代码漏掉任何一种可能出现的情况,都可能产生意想不到的灾难性结果。
- try { … } catch 里面,应该包含尽量少的代码。
- Java 程序员有一种恶习没有catch具体的异常而是catch (Exception e)。
- 尽量不要产生 null 指针。
- 不要把 null 放进“容器数据结构”里面。
- 函数调用者:明确理解 null 所表示的意义,尽早检查和处理 null 返回值,减少它的传播。
- 函数作者:明确声明不接受 null 参数,当参数是 null 时立即崩溃。
- 使用@NotNull和@Nullable标记。
- 防止过度工程,过度的思考一些还没有发生的事情,还没有出现的需求。
- 在现实的工程中,有时候你就是得看近一点,把手头的问题先搞定了,再谈以后扩展的问题。
- 世界上有两种“没有 bug”的代码。一种是“没有明显的 bug 的代码”,另一种是“明显没有 bug 的代码”。
最后作者给三条建议:
a. 先把眼前的问题解决掉,解决好,再考虑将来的扩展问题。
b. 先写出可用的代码,反复推敲,再考虑是否需要重用的问题。
c. 先写出可用,简单,明显没有 bug 的代码,再考虑测试的问题。
这些编程细节真的应该学以致用,有了这些概念之后,需要进行大量的编码实践,从而可以写高质量程序,于是博主将进行编码实践。。。