重要的是抽象的思想
2013-10-14
知道这本书是在2010年,当时看了公司内部的分布式系统说明文档,当时我还是个刚入职一年的菜鸟,对于文中的分布式系统设计与实现自然是看不明白滴。不明白归不明白,写C++出身的我感觉到这个系统的设计,lib的实现,有些面向对象的味道(环境是Linux下面用C)。苦于自己的不理解,我开始在网上寻找“C语言的面向对象实现”,于是,就找到了这本书。先是看了李先静大侠的博客以及连载,后来就在china-pub上下了单。技术书,我一直觉得还是要看实体的,而且一旦看了就要做笔记。
应该说这本书介绍了一部分C语言的面向对象实现,但主要是讲思想,引导你在开发中走上正确的方向,教会你如何思考。
记得过目就忘同学离开公司之前留下的话:“工作中有很多问题,不要抱怨,尝试解决它。如何尽量做到自动化,如何把我们从重复的工作中解脱出来,这些都是值得考虑的事情。你不去解决它,换个环境你还是会遇到。不要满足现状,多思考,实在不知道做什么,就仔细想想,如何能把手头的事情做的更好。”我想这本书,也是对这段临别赠言的一种诠释。这本书不是和你讲技术细节的,而且用来启发你的,要真正领悟,则需要花很大一番功夫,自己亲自动手来跟着作者来操作。
该书里面最重要的思想:不要重复、尽量抽象出公用的东西。道理很简单,做起来,特别是用C语言这种面向过程的语言就不是那么容易。我天性比较愚笨,加上交流不多,花了两年多的时间才真正能在开发中较好地做到这一点。很多现在看来很明确的道理,如果没有掉过坑,没有足够的实践经验,就不会领悟得很透彻。期间这本书断断续续反复地看,经常有看不下去理解不了的时候,便停下来想一想,隔一段时间再读。虽然不能赞同作者的全部观点,但确实能感觉到有所提高。今年我终于能把这本书全部看完,后来又看了设计模式,发现原来很多模式很多思想,我已经用在了开发中,只是不知道名字罢了。所谓的模式,无非也就是各种层次的抽象吧。
其实,要实现一个需求,首先要把现实中的需求转换为较为抽象的实现方案描述,可以说这是一个建模的过程,是问题转化为数学模型的过程,属于架构层面。接着便是模型到编码的细化,属于实现层面。模型做的好,细化会相对简单,但如何细化,就是程序员自己思考的事了。如何做的有弹性可维护可扩展,这本书可以告诉你。
该书的另一重要思想:要从计算机的角度思考问题,要了解系统是如何工作的。工作这几年,我深深感到对os的认识不足是自己的一大缺陷,其实工作中很多问题的方案,都能在linux系统实现中找到对应的影子。遇到问题多思考,多问自己为什么,多利用互联网来学习,否则,永远都是浮于表面一知半解,再华丽的大厦,如果建筑在沙滩上,也必然是倒塌的命运。
三年多,终于读完了这本书,当然,是读了很多遍。我知道高手是不屑于看这本书的,但这本书对于很多初学者,很多像我一样的菜鸟,还是有不少借鉴意义的。也因此,我推荐立志走技术路线的同学,好好看看这本书。