C++程序员需要了解哪些技术?

39

C++是我真正喜欢的第一种编程语言,但我在它上面的大部分工作都是在学术或者游戏编程领域。我所在地区的大多数编程工作需要Java或.NET程序员,除了基本语言外,我对他们所需的技术有一个相当好的了解。例如,Java程序员可能需要了解EJB、Servlets、Hibernate、Spring以及其他技术、库和框架。

然而,我不确定C++在实际生活中的应用情况。对于一般的业务编程,除了语言特性之外,C++程序员需要了解什么?例如Win32 API、某些库、框架、技术、工具等。


编辑:当我说基本语言时,我也考虑了标准库,如果表述不清或有误请见谅。我想知道是否有任何更具体的领域要求,类似于所有Java或.NET程序员可能需要学习的技术,与C++程序员需要了解的一般情况不同。我同意标准库和Boost是必不可少的,但是否还有其他方面,或者每个公司/项目/领域都不同?

10个回答

37

对于每种语言而言,我相信有三个相互关联的知识层次:

  1. 精通你的语言。每个程序员都应该(做必要的工作)精通语法。以下是达成此目标的好参考资料:
    • C++ Primer by Stanley B. Lippman, Josée Lajoie, and Barbara E. Moo.
    • Effective C++系列 by Scott Meyers(中文版:《Effective C++》)。
  2. 广泛了解库。
    • STL绝对是必须掌握的,因为它已经被包含在C++标准库中,所以掌握它非常接近第1点:你必须精通它。
    • 了解boost可能会非常有趣,因为它是一个多平台和通用的库。
    • 了解你需要使用的库,无论是Win32 APIOCCIXPCOM还是UNO(这里只举了几个例子)。如果你开发的纯粹是图形组件,就不需要去了解数据库库了...
  3. 发展你的模式知识。无法避免地要提到《设计模式:可复用面向对象软件的基础》...


所以,对于你更新后的问题,我的答案是:了解你的编程语言、了解你的平台、了解你的领域。我认为在 C++ 中,这些本身就足够了,这是一项永恒的工作,绝不能忽视。


16

C++ 开发人员需要掌握 stdboost 库。

其他技术的列表很大程度上取决于项目类型。肯定会与SO交互,因此您需要了解环境的API。

至于数据访问和其他东西,有各种不同的解决方案。在这方面,C ++比一些托管语言丰富得多。 99%的旧流行系统都有C / C ++接口。

在您澄清了问题并在我的回答中发表了评论后,我可以推荐:

  • 好的代码浏览器(例如SourceInsight或Understand For C++)
  • 静态分析工具(Link、KlockWork Inforce等)
  • MySQL\SQLite(我在大量的C ++项目中遇到了这些DB)
  • UI技术(OpenGL\GLUT,DirectX,GDI,Qt等)

1
是的,我认为这是显而易见的。如果不清楚,对不起。我更多地谈论商业技术,如果有的话。这不是关于C++需要知道什么,而是是否有任何在专业圈子中广泛采用的概念。 - Firas Assaad

6
作为C++程序员,您应该了解以下技术(因此比其他程序员更具技术知识;)):
性能问题-是什么导致程序运行缓慢,如何查找和修复此类问题。我还指的是上下文切换、缓存行、优化搜索、内存使用和限制以及其他平均VB/C#开发人员不关心的内容。
线程问题-如何从多线程应用程序中获得最大收益,如何检测和修复滥用问题。
低级通信-特别是能够连接到没有其他人编写工具包的晦涩系统(尤其是无线电通信),延迟和带宽管理。
否则,针对特定工具-这取决于您的目标,Windows开发与Linux不同,嵌入式也不同。

5

这将在很大程度上取决于所使用的平台和其他限制条件。一般而言,一个优秀的(C++)程序员应该能够在很短的时间内学习特定于平台的API。对于C ++ 来说,更重要的是了解不同的工具链(例如Windows程序员也应该了解GCC工具链)和编译器之间的差异。程序员还应该了解语言的限制和依赖于平台的行为。

至于库,C++程序员绝对需要了解STL和Boost。没有讨论的余地。


我曾经接触过的最稳定的C++代码并没有使用boost。虽然它很常见,但它还不是行业标准。 - tloach
说起来,它也没有使用STL,我们有内部代码来实现相同的目的,但是它是针对我们的业务领域特定设计的。 - tloach
@tloach:即使您最终不使用它们,了解它们也是至关重要的。这样您就不会不必要地复制现有功能。 - Konrad Rudolph

4

1
请注意,当C++程序员谈论“标准模板库”(STL)时,他们几乎总是指的是标准C++库。STL是标准C++库的基础,但除了那些不实现标准的C++实现之外,STL已经过时。 - Kristopher Johnson

2

除了其他人列出的东西外,要记住C++程序员在嵌入式系统市场上有很大的空间(比大多数其他高级语言都要多)。因此,熟悉嵌入式系统和开发可能会为您打开许多门和工作机会,您将不会像与Java开发竞争那样激烈。因此,学习编写紧凑的代码(编译后紧凑)和低内存使用技术是一个不错的选择。


1

如果你正在使用gcc,你应该一定要了解gdb。实际上,你应该熟练掌握你使用的编译器的本地调试器。除此之外,有如此广泛的库被使用,能够快速掌握API比任何特定的库都更有用。我建议学习doxygen。


1
如果你正在使用Linux,那么Valgrind是一个非常有用的工具,可以检查你的程序如何处理内存访问。

0

无特定顺序

  • COM/ATL
  • DirectX
  • MFC & Win32
  • STL
  • GDI
  • BOOST

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接