特意区分开这两个不同的概念,前者是大家常常提到的,例如如何命名之类的,估计现在的老师在课堂上也会教。后者是我自己乱起的,是工程中的体会。
工程中同课堂不同的地方是,项目庞大,往往是几十几百万行的code,需要在给定的时间添加新功能或者更加紧迫的是解决客户问题。对于庞大的项目,想要理解系统架构,一个基本的技能要求是快速理解函数调用关系。我们常常使用cscope或者更高级的是source insight等等进行代码的索引,然后可以在编辑器内部快速的跳转。
实际的工程中会遇到一些情况,可读性和易读性相悖,例如:
1.宏替换
在C这种语言中,宏替换是常用或者滥用技巧。利用一些字符串拼接宏定义功能,可以使得代码看起来更加简洁,达到类似复用的效果,可读性好了。但是对于代码浏览者,想要跳转到宏对应的函数麻烦了很多,我们只能通过查找功能手动输入完整的函数进行查找,效率很低。
2.函数间接引用
很多实现模拟C++类方法组织数据结构,使用函数指针;有些实现传递函数指针为参数;也有将指针存储在数据表中通过数据触发调用。总之到底调用那个函数在阅读的时候不容易看到,有些模块从上到下都是如此实现的,头脑鲁钝如我的必须打印trace才知道功能是怎么调用。
对于大系统的开发维护,代码阅读和查找占据了程序员大量的时间,易读性差会耗费许多青春啊。