这是“社区”系列中的第二部分,它是C++开发人员的聚光灯。今天我们见到了James McNellis,一个Visual C++团队和社区的开发人员。
杰姆斯是VisualC++团队的开发者,他在今年七月加入了这个团队。 作为这个团队的一员,他构建了很棒的C++库,目前正在C运行库(CRT)上工作。 在加入VisualC++团队之前,他是VisualStudio团队的一个开发人员,他在Windows More应用程序的XAML设计器上工作。 杰姆斯在C++编程15年,并从事各种各样的项目,从嵌入式机器人软件到三维仿真。
在他的“空闲”时间,詹姆斯 多产的贡献者 关于堆栈溢出,并正在为Windows运行时的开源原生反射库工作,在现代C++中实现 CXXRelect选择 . 他在微博上说 @詹姆斯奈利斯 .
为什么C++?
我喜欢C++,因为它可以很容易地构建正确、可维护、可扩展和高质量的大型软件系统。 它可以在不牺牲性能的情况下实现高层次的抽象。 它拥有有史以来最出色的语言特性之一,在许多其他出色的用途中,它允许我们构建通用组件,这些组件与我们可能考虑构建的任何类型特定组件一样高效。 它对值语义有一流的支持,这使得程序更容易推理。 大多数主要平台都有C++工具链,并且有了一些工作,可以构建几乎在任何地方运行的库。 灵活性、性能和可移植性都非常重要。
你最喜欢C++的什么?
对象生命周期是确定的,有一些规则精确地指定了对象的创建和销毁时间,并且这些规则一致地应用于所有类型的所有对象。 我认为这些基本的语言规则很大程度上是C++如此强大的原因。 它们使资源能够被统一管理(通过RAII),并且通过聚合小的、可组合的部分使构建复杂系统成为可能。 它们使构建在标称和错误情况下都表现出正确行为的程序变得更容易。
我把C++对象模型看作是准许的,直到我花了时间在C语言中实现的一个大系统中,它没有确定性对象生命周期。 C++具有许多优秀的特性,但具有确定性对象生命周期的对象模型是我最不喜欢的东西。
至少?
语言的语法。 C++继承了C语言中的一组语法奇偶(例如,声明语法),然后添加了一些奇特的语法“特征”(例如最令人烦恼的解析)。 这些问题本身都不是特别可怕的,但却令人恼火,因为有太多的怪癖和角落案例。 C++具有更简单、更干净、更容易学习和教学,更一致的语法将是一个真正美妙的语言。 但是,当然,这样的语言不是C++。 .
你会给新的C++开发者什么建议?
不要犯这样的错误:假设C++与你已经体验过的[插入语言]一样。 惯用、正确、编写良好的C++与其他java语言和C语言编写的类似的高质量代码有很大的不同。 C++最佳实践与其他语言的最佳实践有很大的不同。 学习C++程序的最好方法是从一开始就学会一本好书,并学习如何编写习语C++。 你会节省很多时间,避免很多痛苦。
你有什么喜欢的C++作者或书吗?
我推荐 C++引物5 第 预计起飞时间。 由Lippman、拉乔伊和MOO作为介绍性文本和C++的参考文本。 它提供了C++,强调了现代C++风格,涵盖了C++ 11的许多内容,并讨论了许多最佳实践。 (特别值得注意的是: 直到第449页才讨论使用“new”的动态分配,第一句话是“非常棘手。”)
还有很多其他非常好的C++书籍。 C++图书指南及列表 堆栈溢出列出了其中最好的。
你最喜欢的技术网站在哪里?
堆栈溢出 ,当然! 当您试图解决问题时,堆栈溢出不仅仅是一个寻找答案的好地方。 阅读C++问题的答案,即使这些问题与你目前正在做的事情不直接相关,也是一种学习你不熟悉的语言的一种很好的方法。 有许多C++专家和爱好者在堆栈溢出上做出贡献,而且有大量有用的、非常可读的信息。 你很难找到一个友好、乐于助人的专家组成的更好的社区。 作为一个起点,考虑仔细阅读 C++常见问题解答 ,包含常见问题解答。
我也鼓励大家提供答案。 我已经使用C++了一段时间,但我没有真正开始学习语言,直到我开始对堆栈溢出作出贡献。 能够用一种语言编写代码和能够清楚、简洁地解释代码如何工作以及为什么工作(或者不工作)有很大的区别。 帮助别人回答他们的问题是非常有益的,是一个伟大的学习经验。
我应该问什么问题?
你最喜欢什么颜色?
答案呢?
黄褐色(#7fff00)
谢谢詹姆斯!