继续使用高级C ++的最佳方法是什么?

时间:2010-07-02 14:24:52

标签: c++ programming-languages

对于那些可能被称为中级C ++程序员的人,你有什么建议转向下一级C ++编程?

中级程序员:合理地理解ISO C ++,可以运气好读取和修改其他代码,对数据结构和算法很好但是很好

  1. 了解C ++ 0x
  2. 了解为不同的构造类型生成哪种汇编代码,可能是x86
  3. 忘记语言的细微差别并从基础知识中获取基础知识 - 来自Sipser或Papadimitriou等地方的自动机理论
  4. 如果你知道OOP或至少认为你这样做,请考虑如何将功能编程技巧与C ++结合起来
  5. 处理编译器和LLVM或GNU工具链等开源的内容
  6. 整个想法被破坏 - 下一级意味着更复杂的数据结构。因此,如果您了解AVL,请考虑学习左倾红黑树等
  7. 现在显然没有人可以在没有优先级的情况下完成此列表中的所有操作,因此我们需要一些关于可能是最佳前进方式的建议。

    注意:谢谢大家的回复。

12 个答案:

答案 0 :(得分:14)

我会说你可以在列表上做所有事情,但不是一次性完成。至少IMO,你看起来有些倒退了。学习C ++(或任何其他语言)是达到目的的手段,而不是目的本身。

学习更高级的语言技术,更高级的数据结构等,应该在完成某些事情时根据需要进行。你当然需要一个合理的起始“基础”来做很多事情,但除了一小部分基础知识外,大多数先进技术,数据结构等也是相对专业化的。

不要试图为它自己学习一些东西,而是编写一些代码。当某些东西看起来笨拙,不必要的困难,不灵活等等时,找到一种更好的方法来处理它。通过这种方式,您不仅可以学习更高级的技术,数据结构等,还可以了解它真正实现的目标,这样您就可以很好地了解何时,如何以及为何使用它(以及同样重要的是,至少有一些关于其局限性的想法以及它可能适用或有用的时候。)

答案 1 :(得分:9)

回答您的具体问题:

  

学习C ++ 0x

你肯定需要这样做。所以你可能在那里得到答案......

  

了解为不同构造生成哪种汇编代码   类型,可能是x86

我会说学习如何理解编译器生成的汇编语言,如果没有详细说明的话。但是,你当然不应该试图预测编译器会做什么。

  

忘记语言的细微差别并获得基本原理 - 来自的自动机理论   像Sipser或Papadimitriou这样的地方

如果它让你开启,我想......

  

如果您知道OOP或至少认为您这样做,请考虑如何合并   C ++的函数式编程技巧

在C ++支持的所有范例中,函数式编程可能是最差的 - 如果你想学习FP,学习Haskell(或其他),而不是C ++。

  

在编译器和开源上工作,如LLVM或   GNU工具链

GNU是用C语言编写的,所以它不太可能提升你的C ++技能 - 我对LLVM知之甚少。

  

整个想法被破坏了 - 下一级意味着更复杂   数据结构。所以如果你知道AVL,   考虑学习左倾红色   黑树等

RB树并不比AVL树复杂得多 - 相同的基本概念。如果您了解数据结构教科书中涵盖的基本结构,我认为没有必要进一步挖掘,除非该主题特别令您感兴趣。

答案 2 :(得分:8)

我会了解BOOST

你可以通过使用它来开始零碎,随着你对图书馆的深入了解,你会发现自己在想“这有什么作用?”。

  • 使用它会让你更多 高效且更好的C ++程序员!
  • 了解它是如何工作的 你是一个“大师”徽章!!
  • 贡献并扩展它 确保永生!!!“

答案 3 :(得分:4)

如果您了解基本语言:

然后按这种顺序(虽然会有一些回溯)

  • 学习研究和消化 RAII
    • 弄清楚如何在所有C语境中使用RAII,这样你就不会遇到C代码。
  • 找出异常以及异常保证是什么。
    • 弄清楚如何实现方法,以便保持每种不同类型的保证。
  • 了解标准容器。
    • 了解每个容器所需的要求。
  • 了解迭代器
    • 了解迭代器特征以及它们如何与指针一起使用。
  • 了解算法库
  • 了解流库
    • 返回并了解流和迭代器的工作原理
  • 了解方法指针以及如何在算法中使用它们
    • 弄清楚仿函数是什么以及如何使用它。
  • 了解bind并了解boost bind
  • 了解增压容器及其与标准容器的区别。
  • 了解智能指针。
    • 有哪些不同类型以及何时有效使用每种类型。
  • 开始阅读提升中可用的其他内容。

此时您将开始学习如何使用C ++

答案 4 :(得分:1)

学习汇编(例如编写汇编)可能是一个好主意,但我强烈建议你依赖于编译器生成的细节,因为它会从版本变为版本和优化级别到优化级别。

答案 5 :(得分:1)

我会成为#4的坚定支持者。学习函数式编程非常有价值。我在C ++中没有做过很多,所以我不知道它是多么自然,但我喜欢Ruby和Scala如何进行函数式编程。

答案 6 :(得分:1)

我建议你进入编程的设计部分。学习如何设计,编写优秀的代码,学习良好的编程实践。设计模式,UML,单元测试都属于这里。

正如你所说的那样,我总是推荐使用汇编语言。学习装配很有趣,它确实让你更好地理解计算机。没有什么比了解计算机如何在最低级别工作的感觉。

掌握低级和高级编程的知识可以胜过其他一切。

答案 7 :(得分:1)

现在不要太担心C ++ 0x ...确保你真的真正了解基础知识。这意味着要确保你理解引用,指针,L值,R值,模板,继承,内存管理等等。我不只是说要掌握这些基本的理解,我说的是真的知道C ++内存模型和每个表达的含义。

我真的很喜欢#4和#6。关于#6,尝试用C ++编写一些非常高级的数据结构。没有什么能让你更快地学习语言,然后尝试解决高级数据结构所带来的一些问题。

答案 8 :(得分:1)

研究其他人如何以优雅的方式解决困难问题。非常重要:只需练习,不要忘记评估。检查您的代码或问题解决方法。

是(参考第4点),学习其他编程语言,特别是那些比c ++具有特定优势的编程语言,而不是直接在C ++中应用他们的技术。专注于为您自己编写方法,以尽可能少的错误来破坏您的工作流程,找到一个经过校准的系统和抽象方法,您可以始终将其应用于问题解决和实施。

收集/构建一组工具/库和编码实践,允许您停止发明轮子,但以最佳方式处理所有最常见的任务。因为如果你考虑它,从错误,可读性,可扩展性和可扩展性以及在更低程度上的性能,如果你编写完成工作的代码,你实际上已经证明自己是一个优秀的程序员。

我的目标是生产力。如果你更多地了解理论,你可能只是用一些片段和晦涩的语言特征来占据自己。

答案 9 :(得分:1)

我想说下一步是从封面到封面阅读 Structure and Interpretation of Computer Programs 并进行练习。

答案 10 :(得分:0)

从另一个角度来看:7。学习其他编程语言,与实际的C ++不同。绝对要学习函数式编程,不要担心它如何应用于C ++。要考虑的一些语言:Scheme,Common Lisp,Haskell,Prolog,Forth,Smalltalk。您不必精通它们,但您应该尝试了解它们的工作原理以及这些语言中的优秀代码。

如果您只知道一种语言,那么您的思维将局限于该语言中的自然语言。如果您了解不止一个,您将能够以更多不同的方式思考。你在处理问题时会更加灵活。

答案 11 :(得分:0)

您上面提到的任何内容都会让您成为更好的C ++程序员。您需要根据自己的职业规划做出选择。例如,如果要使用C ++开发硬件驱动程序,则应学习生成的汇编代码。