标签 标准库 下的文章

聆听编程“古训”

市面上关于优秀编程风格和习惯养成的书籍还真不少,其中“叫好又叫座”的书诸如《代码大全》、《编程精粹:编写高质量C语言代码》、《编程匠艺》、《重构》以及《Clean Code》等。不过前些天我在网上下载了一本名为《The Elements of Programming Style》的电子书,看过此书后,我才知道开创编写优秀风格代码之路的鼻祖是谁(不知道是否还有比这本书更加古老的且系统地讲述优良编程元素的书籍了?)。

这本书的两位作者来头都大得很。Brian W. Kernighan,K&R C中的那个“K”,C语言的鼻祖之一。 P. J. Plauger,《C标准库》一书作者,同样是大师级人物,说不准你现在使用的C标准库还是Plauger当初操刀实现的呢^_^。这本书的出版年份为1978年,Wow,Older Than Me!距今有30多年了,在编程领域算是一本“古书”了。其第一版则更早,于1974年出版。这本书的中心思想是计算机程序编写不应该只满足于编译器或者某些个体的编程风格,还要满足人们对程序的“可读性”的要求。据说当时这本书的出版让全天下的程序员们恍然醒悟,从此大家便知道了优秀编程风格是什么样子的,优秀的代码是应该这么写的。

这本书我还没有全部看完,目前也只看完了前面的十几个条目和例子。本以为书中会用C语言做例子,没想到作者居然用了Fortran和PL/I,整本书“充斥”着用陌生的Fortran和PL/I语法编写的例子。后来我也想明白了:在那个年代,Fortran才是老大,C语言初出茅庐,还仅仅停留在Bell Lab中。不过也正因为如此,这本书看起来那叫一个费劲,让人头疼。于是我到网上搜出了这本书的所有条目列表。完整地看完一遍这些条目后,我甚感吃惊,吃惊的是这本古书中的大多数条目对我们今天的代码编写依旧具有着非凡的指导意义,甚至可以理解为编程领域的公理(至少在目前以及可预见的时间段内都是生效的)。另外当你看完这些条目后,你会发现有些似曾相识的感觉,原因也很简单。我们看到的《代码大全》、《重构》等“近现代”书籍可能都或多或少的从这本古书中继承了一些内容,并结合现代编程思想加以扩展和升华了!

那《The Elements of Programming Style》这本“古书”是否还值得去读呢?毕竟我们已经有了像《代码大全》这样的百科全书了。我觉得至少应该过一遍这本书的条目列表,并且针对你感兴趣的重点条目去精读。三十多年前的古训也许更能还原出条目在当时所处的历史场景,这也许是当前一些书籍所不具备的。特别是如果你觉得《代码大全》太厚重,那么不妨可以先来聆听一下这本小书中的“古训”^_^。

别为代码的"Bad Smell"提供土壤

上周初参加了一次代码评审,评审时发现一位同事在自己负责的子模块代码里定义了一个私用宏,"重复"这个Bad Smell立马在我头脑中闪现。当时我给出了一个建议:检查一下这个宏定义的必要性,依次检查一下C运行库头文件中是否已经有了同功用宏定义,基础库头文件中是否已经有了同功用宏定义,业务层代码的共用头文件中是否已经有了同功用宏定义。

周末这位同事给出了答复:C运行库、基础库和业务层代码中都没有定义此功用的宏。考虑一下这位同事如此编码的动机:显然一方面他为了避免magic number才去定义一些宏,提高可读性。另一方面确实无此功用的宏可用才考虑定义在自己的子模块中。但是这个宏的定义到底该放在哪里才是正确的呢?

这个宏是作为一个buffer的size而定义的,这个buffer会作为基础库中某个函数的输出参数,而这个函数原型声明所在的头文件中却没有提供相关宏为上层开发者所使用,这才导致了调用者自己猜测并设置buffer size。不讲究的开发者很可能就直接使用一个magic number,而像我这位同事采用的这种方法又会导致一些"重复"的Bad Smell的出现。这样来看,也许正是这个库函数的设计者为Bad Smell提供了滋生的土壤。

库设计者应该多为上层调用者考虑,这方面可参考一些优秀库的设计,如C标准库等。因为你的接口设计而给调用者带去Bad Smell,这是我们不希望看到的。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats