【问题标题】:What should I learn first before heading to C++? [closed]在去 C++ 之前我应该​​先学习什么? [关闭]
【发布时间】:2010-12-04 07:10:10
【问题描述】:

我正在学习 C,但是在那之后或同时,在进入 C++ 之前,我应该先学习什么,然后再学习什么?编译器、数据结构、UML 还是设计模式?(还有什么时候开始学习 Win32 API 的?)我一点也不着急,所以我可以从最深处掌握需求。我只是不想因为粗心大意而迷失方向。

除此之外,哪些数学科目对编码的影响最大?线性代数、离散数学、微积分?

如果有人指导我完成这段旅程,我将不胜感激。有很多问题我想知道答案。谢谢。

【问题讨论】:

  • 这听起来很荒谬,但是学习现在被认为是好的 C++ 通常会受到 C 经验的阻碍。如果你想学习 C++,请跳过 C。如果你想同时学习两者,请准备好为了写出好的 C++,不得不放弃大量的 C。

标签: c++ c design-patterns data-structures compiler-construction


【解决方案1】:

首先您应该了解 C++ 不是一门高级语言。 C 的用途不仅仅是进入 C++ 的垫脚石。使用 C 和“C 风格”C++,因为它们:

  • 生成更小的二进制文件
  • 使用更少的内存
  • 编译速度更快
  • 不需要操作系统支持
  • 更简单,更易于实施

数据结构是迄今为止列出的最有用的学习方法,其次是算法。如果您打算进入 C++,拥有良好的设计技能也很有用(强制?)。

您根本不必学习 Win32。考虑学习 POSIX API、GTK+Boost,因为它们更便携,并且可以在 Windows 以外的平台上工作。

您可以做出的最佳决定是将learn C thoroughly 作为 Unix 平台上的一项单独技能,然后再因看不到 C 和 C++ 之间的区别而苦恼自己。

在列出的数学学科中,我只使用了离散数学。线性代数也很有用,但迄今为止最好的编程学科是集合论和数论。

享受您在 C 中的时光,不要依赖 Windows/Visual Studio,也不要急于使用 C++。

更新0

差点忘了!你绝对必须使用一个像样的 C 编译器。 C++ 在企业中广泛使用以及 C 在 Windows 开发人员中的坏名声的一个核心原因是 Visual Studio。 Visual Studio 无疑是最好的 C++ IDE,但它也是我所知道的最差的 C 编译器。请务必使用支持 C99 的 C 编译器,例如 GCCmingwClang。我对 C 的第一次体验是使用 LCC,它在 Windows 上非常好用,但自从转到 Linux 后我就没有使用过,所以我无法评论它的 C99 状态。

【讨论】:

  • 您能否详细说明Do not require OS-supportAre simpler, and easier to implement 以及当好的 C 代码与好的 C++ 代码完全不同时,为什么 C 是通往 C++ 的良好垫脚石?
  • 另外,我认为First you should learn that C++ is not a superior language 是纯 POV。我会将其概括为Whether a language is superiour always and at any time totally depends on what you like and want to achieve。例如,Haskell 完全优于 C,因为您可以在 2 或 3 行代码内编写许多复杂的算法。同时,C 优于 C++,因为它适用于更多平台,并且更容易雇用 C 程序员。 C++ 优于 Haskell,因为平均而言,它可以生成更快的代码。
【解决方案2】:

编译器、数据结构、UML 或设计模式?

数据结构和算法。

除此之外,哪些数学科目对编码的影响最大?线性代数、离散数学、微积分?

离散数学和数论。

【讨论】:

    【解决方案3】:

    您应该首先学习使用结构良好的语言进行编程:推荐使用 Ocaml,Haskell 也不错,但获得一个可以工作的编译器有点困难,而且更难学习,因为它是纯函数式的。

    数学在编程中用处不大(有用的数学太难了,即范畴论)。然而,一些基本的类型理论是有用的。

    你无法用像 C 这样的语言学习好的编程,重要的东西被埋在了家务活和历史愚蠢中太深了。

    【讨论】:

    • 您当然会了解有关计算机和操作系统的知识。我认为这同样重要。用勺子喂食的平台困在用户空间的程序员并不是特别有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 2016-02-13
    • 2010-10-17
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多