我会发布一个 C++ 的书单,但是我现在要给你一个选择。我认为作为一个程序员要读的第一本书就是 Steve McConnell 的《代码大全》。尽管这本书不是专注于 C++ 的,但是它把写好代码要注意的几乎所有方面都教给你了。从写一个 if 语句(没错,有好多方法把 if 语句搞砸)到分配类责任,再到代码审查,《代码大全》涵盖了软件架构的所有方面。在读完这本书以后你永远不会还用一样的方法来编程。
如果你还没有读过《代码大全》,你应该去看看 Scott Meyers 的《Effective C++》。我建议《Effective C++》要读两遍。我已经读过三遍了,但是我想两遍的效果应该一样好。尽管这本书是在 C++11 之前写的,但是大部分内容在今天也仍然是有用的。而且《Effective Modern C++》涵盖了C++11 和 C++14 中的特性,可以作为这本书的补充材料。
今年夏天我要看的是 Eric Evans 的著名书籍——《领域驱动设计》(Domain Driven Design)。《领域驱动设计》涵盖了领域专家和开发人员之间的密集交流,建立领域模型以及在讨论模型与代码时使用同一种语言。
如果你不练习的话,是无法理解很多特性的。尤其是变参模板,它是现代标准 C++ 的一个重要特性。上面第一点中的项目和其他任何包含变参模板的项目都可以作为练习。
6)提高你对 boost 的了解
Boost 是设计良好的 C++ 库的集合,可移植且开源。很多现代 C++ 的特性都源自 Boost。
了解 Boost 的内容很重要。有两个原因:第一,在代码中确实需要它们,因为 boost 主要应用于综合使用;第二,更重要的原因是即使你在产品代码中没有使用 boost,它可以给你一个通用的精心设计的 API 和 C++ 代码模型。留心 boost 中的内容可以给你自己的设计带来灵感。
学习大量的 boost 库的一个方法是阅读 Boris Schling 的书——《The boost C++ Libraries》。这本书有电子版,但是纸质版可以放进沙滩包供你躺在沙滩上阅读(真的,我去年夏天就读的这本书)。不过这本书是基于 boost 1.55.0 的,所以它包含了很多库,但并不是所有。
特别地,它没有包含 Boost Hana。Boost Hana 是一个流行的现代 C++ 元程序库。实际上,学习 Boost Hana 可以作为今年夏天的一个目标。
我询问了 Louis Dionne(Boost Hana 的创始人)怎么样才能有效地学习 Boost Hana。从官方指导入手是一个好的开始,而且你可以看他的 ACCU 演讲(或者Meeting C++ keynote,内容相似)来获取初步的介绍。这里是 Louis 的所有演讲,大多数都与元编程和 HANA 有关,可以帮助加深你的了解。
7)观看网络视频
C++ 社区上有超多网络视频,尤其是年会的视频。今年夏天是观看这些视频的好时机。
下面是一些我觉得有近期指导性的演讲:
Patrice Roy – 异常处理(The Exception Situation)。这个演讲让你对在 C++ 中使用异常处理对你的代码意味着什么有一个大致了解。该演讲结构合理,而且 Patrice 的演讲风格很让人愉快。
Arthur O’Dwyer – Template Normal Programming。在这个演讲中,Arthur 在不用模板元编程的情况下,展示了关于模板的所有知识,同样有板有眼。
Stephan T. Lavave – tuple<>:新特点以及它的用法(tuple<>: What’s New and How it Works)。这里有很多关于 tuples 的有用信息和练习帮助你更了解标准库。
Howard Hinnant – chrono 导论(A <chrono> Tutorial)。这个演讲教你使用 chrono 库,告诉你它是怎么用强类型来完成安全又表达清楚的代码。
David Sankel – Monoids, Monads, and Applicative Functors: Repeated Software Patterns。David Sankel 展示了纯函数概念如何应用于 C++。
David Sankel – Variants:过去,现在和未来(Variants: Past, Present, and Future)。一个关于 variant 的优秀展示,并且 variant 在 C++17 中被放进标准库里了。
Dietmar Kühl – Constant Fun。一个关于 constexpr 的优秀展示。
Jason Turner – C++周刊(C++ Weekly)。在这个周系列中,Jason 制作了一些短视频(5 到 10 分钟),每个视频都展示了一个 C++ 的精彩应用。我通常把这系列视频描述为“精彩 5 分钟”。