在学习C++之前,我应该先学习什么?

8
我正在学习C语言,但在此之后或同时,我应该先学什么然后再进入C++?编译器、数据结构、UML或设计模式?(还有何时开始学习Win32 API?)我一点也不着急,所以我可以从最基础的开始掌握要求。我只是不想因为浅薄和疏忽而迷失方向。
另外,哪些数学学科对于编码非常重要?线性代数、离散数学、微积分?
如果有人能指导我这个旅程,我将不胜感激。我有很多问题想知道答案。谢谢。

14
学习如今被认为是好的C++,听起来可能很荒谬,但通常会受到对C语言的经验的阻碍。如果你想学习C++,那就跳过C语言吧。如果你想两个都学,那么要做好准备,需要放弃许多C语言的知识才能写出好的C++代码。 - sbi
3个回答

16

首先,你应该了解C++并不是一种优越的语言。C语言有其用途,不仅仅是作为进入C++的跳板。C和“C风格”的C++之所以被使用,是因为它们:

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

数据结构是列出的最有用的内容,其次是算法。如果你打算学习C ++,同时拥有良好的设计技能也是有用的(强制?)。

你不一定需要学习Win32。考虑学习POSIX的API、GTK+Boost,因为它们更加便携,在Windows以外的平台上也可以使用。

你可以做出的最好的决定就是在Unix平台上将彻底学好C作为一个独立的技能,然后再去学习C++,这样可以避免混淆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状态。


你能详细说明“不需要操作系统支持”、“更简单,更容易实现”的含义,以及为什么在编写良好的C代码与编写良好的C++代码完全不同时,C是成为C++的好入门课程的良好基石吗? - Sebastian Mach
此外,我认为“首先你应该学会C++不是一种优越的语言”是纯粹的个人观点。我会概括为“一种语言是否优越完全取决于你喜欢什么和想要实现什么”。例如,Haskell在写许多复杂算法时只需2或3行代码,因此完全优于C。同时,C比C++更优越,因为它适用于更多平台,并且更容易雇用C程序员。C++比Haskell更优越,因为平均而言它可以导致更快的代码。 - Sebastian Mach

3

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

数据结构和算法。

此外,数学中哪些学科对编写优秀代码影响最大?线性代数、离散数学、微积分?

离散数学和数论。


1

你应该先学习一种结构良好的编程语言:推荐使用Ocaml,Haskell也不错,但是获取工作编译器有点困难,并且因为它是纯函数式的,所以学习起来更加困难。

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

你不能通过像C这样的语言学习到好的编程,重要的东西被深深地埋藏在繁琐的任务和历史上的愚蠢之中。


你当然要学习关于计算机和操作系统的知识,这同样重要。那些被限制在用户空间、依赖平台的程序员并不是特别有用。 - Matt Joiner

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