怎样才能成为专家?在我涉足过的所有领域,答案都一样:
1.掌握基础知识。
2.将相同的内容再学习一遍,但这一次,请将你的注意力集中在细节上—— 这些细节的重要性,你头一次可能并没有认识到。
如果挑选了合适的细节来学习,并且彻底掌握了它们,进而达到不再为之困惑的程度,你就离成为专家为期不远了。然而,除非已经成为了专家,你又怎么知道该挑选哪些细节来学习呢?如果有人已经为你挑选了合适的细节,你就会学得更快,并且乐在其中。
举个例子,我曾经参加过一次摄影学习班,授课的是一位很不错的摄影师,名叫Fred Picker。他告诉我们,摄影中仅有的两个困难环节是:照相机该摆放在哪儿、何时该按快门。然后,他花了学习班的大部分时间教我们有关曝光、加工和冲印的技术细节—— 只有完全了解了这些细节,我们才能够很好地掌握摄影;而只有很好地掌握了摄影,我们去关注那两个“困难的”环节才有意义。
学习C++编程的细节,有一个特别引人入胜的方式,即:尽力去回答有关C++编程的问题。例如:
f(a++);和f(a);++a;的效果一样吗?
可以用迭代器去改变set的内容吗?
假设你正在使用一个名为v的vector,它占用的内存数量已经增长到让你 担心的程度。于是你会想到去清除这个vector,将内存返还给系统。调用v.clear()可以完成这一使命吗?
你可能已经猜到,这些表面上看起来显而易见的问题,其答案一定是No—— 否则我也不会把它们提出来—— 但你知道答案为什么是No吗?你确信?
本书回答了这些问题。此外,它还回答了其他许多精心挑选的问题,这些问题针对的都是看起来很平常的程序。没有多少书籍具有本书这样的特色—— 当然,它的前任Exceptional C++除外。有许多自封“高级”的C++书籍,其实它们中的大多数要么只是针对专项主题进行了讨论—— 如果你只是想精通那些特定主题,而不是想深入研究日常编程中遇到的问题,那些书还不错—— 要么只是用“高级”这个词来引诱读者而已。
一旦透彻理解了这些问题和它们的答案,你在编程时就不必劳神于细节,你就尽可以将注意力集中在真正需要尽力解决的问题上。
Andrew Koenig
2001年6月