[原创。欢迎复制。转载请您注明出处 -- Gavin]
Tips: Correctness, simplicity, and clarity come first.
序言:
2006年圣诞节这天,我终于买来了传说中的《The C++ Programming Language》这本Bjarne Stroustrup亲自撰写的著作。在此之前,也曾读过一些其它经典系列,但细细品读了该书的第一、二章,掩卷之时仍不禁百感丛生。遂生写下本篇杂记的想法。也算对自己学习C++这门博大、优雅的语言的一次小结,更是与巨人对话后不得不做出的、发自内心的赞叹!
第一章:致读者
1.2 学习C++
有很多人读书总是喜欢跳过序言、致读者等等看似无关紧要的章节,名曰节约时间。我则不然。每每拿起一本新买回来的书后,总是喜欢翻开首页,细细品读序言及致读者之类的章节,且每每会得到一些意想不到的乐趣:或被作者的真情所感动,或对作者的风趣所折服,或对作者个人魅力所倾倒,或被作者引入深刻的思考,读外国名家作品尤是。在读本书第一章“致读者”的时候,我发现我突然变成了一个不知世事的小孩子,在圣诞夜火炉旁,听一位充满睿智的长者,用充满智慧、耐心与希望的语言,为我讲述一个从未听说过的故事。惬意啊!已经很久没有这种感觉了,像刚得到宝贝的孩童似的,不停把玩手中的玩具,时而陷入思考,时而会心一笑。而在这一动一静之间,则是高山仰止般的敬仰。
“学习一门语言的目的是成为更好的程序员;是为了使自己在设计和实现新系统时,或者维护老系统时,能够更好的工作。为此,对于程序设计和设计技术的理解远比对细节的理解更重要。”[1]
对于程序员,很多人都有误解,认为只是单纯的写写代码,因为目前国内有很多人找到的所谓的“程序员”的工作就是这样。但是,这与真正的程序员之间的差距可谓甚远。曾经有位资深程序员曾经一语点破:“编程的乐趣在于设计,在于创造。remember: To be a programmer,never a coder。”[2]细细品味这句话,不禁会心一笑。我们之所以乐于此道,不是因其模仿、因其控制,而是因其创造,因其在创造过程中探索的乐趣。我想大概Stroustrup也这么想,所以他才会有后面“为此,……”的教诲。
程序设计,设计技术。目前有另外一个词,我觉得也差不多的,就是“设计模式”,英文称作“Design pattern”。我更愿意叫同类的概念为“设计哲学”(Design philosophy),因为这个概念好像是“务虚”的。虽然虚,但我觉得如果没有一定的实践经验其实想务虚也是挺难的。身边有好多同学为了找工作、开发项目等等,学语言的目的是为了实用。因此,往往追求能尽快地用这门语言写出自己的程序,“套现”。C++是一门入门非常容易的编程语言,只要有点C的底子,你可能2天就可以声称自己已经“学会”了C++。可惜,结果因此而忽略了C++真正精彩的地方——他的思想。无论哪种语言也好,从实用角度讲都是一个工具,一个可以为你解决各种问题的工具。可是当我们拿到一个问题到解决这个问题之间还有一个不可逾越的鸿沟——去探索、创造一个解决问题得方法,而这恰恰是最重要、含金量最高的部分。计算机解决问题的思路、模式有很多:有面向过程的(PO)、基于对象的(OB)、面向对象的(OO)以及最近提出的面向服务的(SO)。C++同时很好地支持前三者。但这些只是C++本身应该做的,我们呢?我们主要花精力的应该在于如何用PO、OB、OO的思想来找到最合适的解决问题得方案,有时候我们更要选择采用哪种模式:一些情况我们采用PO就可以简洁明了的做到我们想要的,但有些时候我们不得不采用OB甚至OO。这个过程一如stroustrup所指出的那样:“其根本是时间和实践”[3]。我们注意到他的原话,不是说细节(具体语言的实现)不重要,而是说对于那些超然于不同语言之上的,关于更通用的模式的理解更加重要。孔子说:“学而不思则罔,思而不学则殆”。想来,不禁学古人感“大道殊途同归”之叹啊(一笑)。
请记住:C++支持OOP,但不是说用C++只能写OOP的程序,或者只能用C++写OOP程序。我在自己的第一个作品中就曾刻意的使用OOP技术,当时颇为得意。此时看来真有点邯郸学步、东施效颦的意味。真正的大师都是“去繁就简,返璞归真”的(后续章节陆续会有介绍)。
1 楼 康乐啊 2014-12-18 09:01