C++0X的三件好东西(零)

先说一些废话,可以跳过不看。

我主张,在具备基础之后,学习任何新东西,都要抓住主线,突出重点。对于关键理论的学习,要集中精力,速战速决。而旁枝末节和非本质性的知识内容,完全可以留给实践去零敲碎打。

原因是这样的,任何一个高级的知识内容,其中都只有一小部分是有思想创新、有重大影响的,而其它很多东西都是琐碎的、非本质的。因此,集中学习时必须把握住真正重要那部分,把其它东西留给实践。对于重点知识,只有集中学习其理论,才能确保体系性、连贯性、正确性,而对于那些旁枝末节,只有边干边学能够让你了解它们的真实价值是大是小,才能让你留下更生动的印象。如果你把精力用错了地方,比如用集中大块的时间来学习那些本来只需要查查手册就可以明白的小技巧,而对于真正重要的、思想性东西放在平时零敲碎打,那么肯定是事倍功半,甚至适得其反。

因此我对于市面上绝大部分开发类图书都不满——它们基本上都是面向知识体系本身的,而不是面向读者的。总是把相关的所有知识细节都放在一堆,然后一堆一堆攒起来变成一本书。反映在内容上,就是毫无重点地平铺直叙,不分轻重地陈述细节,往往在第三章以前就用无聊的细节谋杀了读者的热情。为什么当年侯捷先生的《深入浅出MFC》和 Scott Meyers 的 Effective C++ 能够成为经典?就在于这两本书抓住了各自领域中的主干,提纲挈领,纲举目张,一下子打通读者的任督二脉。可惜这样的书太少,就算是已故 Richard Stevens 和当今 Jeffrey Richter 的书,也只是在体系性和深入性上高人一头,并不是面向读者的书。

最近我闲逛各技术社区,最深的一个感受,就是开发者的niubility value也跟中国社会的 income distribution 一样,呈现严重的两极分化状态。所以我建议那些老鸟们,多做一点提纲挈领的总结工作,把真正紧要的东西总结出来,给社区一些贡献。

我现在只在业余时间看看技术,写写程序,聊以自娱,对于最近一年多的风起云涌,了解有限。下面所说,如果有错误,请指出。

言归正传。

C++0X出来之后,网上对它的讨论已经很丰富,大大小小几十个新的特性,如果详细论述,当然又是一本(平庸的)厚书。但在我看来,其中很多特性是不用花太大精力的。分这么几类:

1. 亡羊补牢的,早就应该有,没有就该遭雷劈的。比如unordered_table, shared_ptr/weak_ptr, regexp, auto/decltype。

2. 锦上添花,可有可无的。比如 tuple, array container, range-base for, initializer lists, delegate/inheriting constructors, nullptr等等。

3. 犄角旮旯,库开发专用工具,一般不推荐使用的:如static_assert、可变模板参数等。

4. 还不成熟的,没有完全想清楚的:主要是 thread,其中的 future, promise等抽象,勇气可嘉,但有早产嫌疑,仍需留院观察。

那么C++0X中真正的主角,值得你投入精力去学习的,有可能对你的编程实践构成重大影响的,我认为就三个东西:

1. Rvalue reference;

2. function/bind;

3. Lambda expression and closure.

这三个东西,网上的讨论也已经有很多了。我也来凑凑热闹,会陆续写三篇简明扼要的东西,介绍它们的厉害。

 

 

posted on 2010-09-11 11:01  哼哼唧唧  阅读(77)  评论(0编辑  收藏  举报

导航