我们在研究自表达代码之前,首先要先弄明白代码的本质。
在研究代码的本质之前,我们看一下音乐设备的发展:
留声机 -> 磁带 -> CD -> Mp3
不论设备怎么变化,有一点没有变化的是:这些设备都是用来记录声波信息的——不管记录的形式是塑料还是磁介质。
那么代码是如何发展的呢?
纸带打孔 -> 汇编语言 -> 解释语言(BASIC) -> 高级语言(C) -> 面向对象语言(C++) ...->
一般情况来说,编程语言的主要作用是在人和计算机之间建立翻译机制,把人类能懂的语言写出代码转换成二进制代码。
但是,除此之外,代码还有一个更重要的作用被忽视了——代码是人和人之间的交流方式——这个比在人和计算机之间建立沟通机制更为重要。由于对于这个作用的重视程度不够,代码的阅读质量才就不高。
有些编程人员以能写出别人看不懂的代码为乐,而另一部分人以写代码不用写注释就可以让别人读懂自己的代码而骄傲。我们主张后者。
能够自我表达而无需注释的代码成为自表达代码(Self-Expressive Codes)。
能够自我表达的代码,无疑给代码理解带来非常大的便利。
下面是关于一个游戏中“以拳攻击”的三种不同的书写方式:
scene.fight(hero, enemy, fist); //不知道到底谁打的谁
hero.fight(enemy, fist); //可以知道谁打的谁
hero.fist.hit(enemy); //击打的职责是属于拳头的,而不是英雄的,更具体。
为了能够书写更加易懂的代码,应该从如下几方面提升能力
1. 补充理论知识
这在《理论知识匮乏》一章曾经提过匮乏的理论知识。具体如何补充以后再讲。
2. 提升设计能力:
第一搞清楚包含、组合、依赖、继承、实现等各种对象间的关系。
这个是主要因素。很多代码的可读性不好是因为这个引起的。比如,MVC的分层不了解而导致代码的UI和逻辑处理混合在一起。这个我推荐大家看看Android源代码中的OpenWnn日文输入法的代码,它把UI显示,逻辑处理混合在一起,造成了代码阅读的障碍。
具体请从这里查找
http://source.android.com/source/downloading.html
第二,掌握设计技巧
A. 依赖注入(Dependency Injection)
比如:spring那样的通过配置文件动态加载依赖
B. 领域特定语言(Domain Specific Language)
比如:OpenGL那样的状态机
等。
第三,学习先进理念
可以通过对先进的设计技术,比如Groovy, Scala, Ruby等进行学习,以从中体会其具有高度的设计理念,并将其中的设计理念应用到自己的项目中。
3.学习编程语言
通过对于前例的Annotation, Exception, Reflect等的学习,你可能不再认为你对Java掌握到很深入的程度。不停地学习才是掌握更多技能的方法。
4.掌握更好的编程习惯。
代码风格上的改进
代码结构上的改进
代码命名上的改进
代码注释上的改进
5. 学习编程工具
如果有人说他可以用NotePad来编写一个强大的系统,你一定不要认为他很酷。也许他真的很酷,但是这没有什么值得推崇的。这就好像一个人掌握了特异功能一样,那只是他自己的事情。
对于编程工具中已经集成的强大功能置之不理的行为就如同把黄金当成废铁一样。
让强大的工具发挥强大的力量吧。
6. 提高英语能力
英语的确是一个障碍,但是如果有针对性的提高,那么所花费的功夫并不像考4,6级那么困难。毕竟编程需要的英语单词数量并不非常的多。
这些都将会后续的章节中逐步阐述。