为什么C ++经常是大学教授的第一门语言?[关闭]


12

我的学校从C ++编程课程开始计算机科学课程,这意味着这是许多学生学习的第一门语言。

我已经看到很多人不喜欢C ++,并且我已经读过各种原因。C ++并不是一种很好的语言,这似乎几乎是一种流行的观点。根据StackExchange上的一些问题以及类似以下的帖子,我得到的印象是不太喜欢它:
http : //damienkatz.net/2004/08/why-c-sucks.html
http://blogs.kde.org/ node / 2298
http://blogs.cio.com/esther_schindler/linus_torvalds_why_c_sucks
http://www.dacris.com/blog/2010/02/16/why-c-sucks-part-2/
等。

(注意:我不认为C ++是一种不好的语言。实际上,它是我使用的主要语言。但是,互联网以及一些教授给我的印象是,它不是一种非常受欢迎的语言。实际上,我的一位教授不断使用C ++,但它仍然是我大学的入门语言!)

考虑到这一点,为什么这是许多学校教授的第一门语言?用C ++开始编程课程的原因是什么?

注意:这个问题类似于“ C ++是否适合作为第一语言”,但是有一点不同,因为我对是否合适并不感兴趣,但是为什么选择它。


6
哪所学校和哪里?我附近所有的人(镇上只有3个,而在几个小时的车程内就有几个其他人)将Java当作第一语言。C ++排在最后一两年(取决于学生修读的课程)。至少在过去的十年中一直是这种方式。
FrustratedWithFormsDesigner

7
教授和其他程序员一样,只具有适度的理性好恶。同时,他们就像被剥夺了经验的学生一样。
Mike Dunlavey

@Casey您可能会在这里与其他用户发生冲突,因为您仅声称C ++不受欢迎,但没有任何理由。如果您只是为了找出为什么在大学中选择C ++的原因,我强烈建议您编辑它喜欢或不喜欢它的所有引用,因为这与您的实际问题很大程度上无关。
亚当李尔

4
在第一年,一切都与从谷壳中分离出小麦有关。
史蒂文·埃弗斯

2
是有趣的,有关于有多少院校的一些统计数据/大学使用何种语言为他们的入门课程。
杰里·科芬,

Answers:


25

每种语言都有对恋人和仇恨者的狂热追捧。无论是C ++,Java,C#,Haskell,Objective-C还是如此。

喜欢或不喜欢一种语言有很多正当的理由。

最后,为什么在大学主要教授C ++的原因如下:

  • 它建立在C之上;因此,从C到C ++的过渡并不是很痛苦。不少大学在C ++之前就教过C(这在IMO中很有意义)。

  • 它是业界最受欢迎的语言之一(随着Java,移动开发,Web开发等开始发生变化,但仍然存在)

  • 这是一门学术界为学术(即研究)目的编写的语言;因此,许多教授每天都在使用它,并且对它非常熟悉,这使其成为课程内容的明显选择。

不要过于仓促地将其视作一种“不良”语言。我建议您深入学习它,真正学习它,并使用它来构建一些中型到大型项目。然后对其他语言进行同样的操作;到那时,您将有足够的经验和见解可以说“我认为C ++不好,因为X,Y,Z”或“我认为C ++很好,因为Java所没有的A,B,C”。

蚱grass,您还有很多东西要学习。


2
如果您采用“不好是主观的”哲学,它可能不是“不好”的语言,但是实际上,对于技术问题的每一种组合,都有一种生产率更高,更安全的语言。在我看来,讲授C ++的原因是因为它是人们使用的东西,也是人们使用的东西,因为这是人们知道的东西,而人们知道的东西是因为这是大学教的东西。除了普及之外,我还没有看到C ++的实质优点,因此我会对其进行专业编程。
weberc2

13

简而言之,这是一种非常好的教学语言,因为它不会牵手。学会手动变速器的人第一次自动变速器几乎没有麻烦,但事实并非如此。学习需要更长的时间,但是在大学里,有4年的玩具计划需要实践,然后再进行任何有用的设计。


9
我为这个错误的类比引起了很多反对而感到担忧。这不是学习的方式。对教学方法的许多误解之一。
康拉德·鲁道夫

12
C++ isn't that bad. 

在学校讲授的内容通常是由教授所知道的,以及该行业所使用的和当时流行的内容来驱动的。

将学校视为过去的时间囊。:)

我真的希望这是相反的方式。


很明智的一点!在大学里,我没有进行任何有关智能指针或RTTI或RAII的练习。WTF!
Chani 2012年

12

英语也被描述为一种非常糟糕的语言,相互干扰,语言不一致,但是由于周围的很多人都知道英语,所以我的父母和老师认为将其教给我是个好主意。

我认为C ++也是一样。这是很多人都知道的语言,因此基本流利是值得的。

它还具有足够低的级别的优势,可以使您真正了解硬件级别的情况。

最后,它没有某些其他语言(如Java-Oracle或.NET-MS)所具有的“商业”问题。我知道很多大学都不会被指控在某家特定公司的产品上教另一种产品。


1
+1(对于c ++不是商业语言)。学习一种语言而不用担心政治和商业策略是一件好事。<例如在Linux上安装Java7>
Chani

5

如果C ++太糟糕了,您如何解释您在日常生活中使用的大多数软件产品都是用C ++编写的?

从第一年开始在大学学习C ++可能有几个原因:

  • 它被广泛使用。现有的代码库非常庞大,即使现在有了Ruby,Python或C#之类的语言,即使从头开始创建应用程序(包括网站),C ++仍然被大量使用。在这种情况下,学习C ++是一个不错的选择。至少比花两年学习Ada更好,也就是说,除非您为航天器开发应用程序,否则您一生中将永远不会使用它。

  • 它不是太抽象。例如,如果学生仅学习C#或Java,如何向他们解释什么是指针?

  • 与PHP相比,这已经足够困难了。这意味着不是为编程而生的学生很快就会离开,这还不错,并且避免了在理解软件开发不适合他的情况下让学生浪费两三年。

这使得C ++比Ada,Java或PHP更适合。


1
似乎C对于您的后两点会更好。有教艾达的学校吗?我肯定会超过C ++,但是我又很奇怪!
杰蒂2011年

选择C ++作为商业产品是因为它是更多人知道的,而不是因为其技术问题。与许多现代语言相比,C ++是一种不安全,难以使用的语言。语言不是根据其优点选择的,而是因为它们很流行。
weberc2

此外,我想不出Ada比C ++更糟糕的事情,并且我宁愿使用它而不是C ++(无论如何,我的代码会更简单,更安全),而且我使用C ++进行专业编程!为了教给学生有关指针的知识,总是提供Ada,Go或许多理智的语言。关于最后一点,C ++毫无困难。C ++程序员面临的许多问题与编程无关,但与克服C ++无关。用通俗易懂的语言进行任何级别的编程都是相当简单的。
weberc2

5

一般来说,如果您可以学习和掌握C ++,则可以学习和掌握几乎所有其他语言。不喜欢它的原因是,为了精通它并具有快速的发布时间,您需要非常熟悉该语言及其标准库。

但是,在Java之类的语言中,您仅需具备一些有关语言/标准库内容的高级知识,便可以快速部署。地狱,我只从本质上知道Java标准库中的五件事(当然也包括基础知识,如集合)。

话虽如此,由于C ++将速度与面向对象方法完美地结合在一起,因此仍然是一种广泛使用的语言。虽然许多人认为它不是完整的OOP,但我相信它可以为您提供OOP的大部分灵活性,而不会强迫您完全狂热。大多数编译器甚至允许您编写纯C语言。

如果可以选择的话,我有一天会选择使用C ++而不是Java,但这只是我的忠实粉丝。一般来说,Java是有用的,因为它几乎可以在任何为其构建了Java解释器的体系结构上运行。因此,对于需要在多个平台上受支持的客户端应用程序,它被认为是完成工作的最佳工具,并且编写的大多数新应用程序都是基于Web的。


目标代码可能不是正确的,但是在那时,包括C ++在内的C语言的承诺是几乎每个平台都有编译器,因此可以使用相同的源代码来编译各种平台的应用程序。
JohnFx 2011年

实际上就是如此。大多数* NIX平台都内置了编译器,并且倾向于以“当然,我可以下载THAT编译器,但是这个随操作系统一起提供,因此肯定是最好的”的形式对大多数人产生心理影响。

除了Java之外,您还应该尝试其他语言-有些选择可以同时兼顾两个方面。去实例提供了速度,便携性和简单性它使并发一件轻而易举的事。
weberc2

4

正如我的一些教授告诉我的那样,从底部开始或从一个较低的级别开始,然后逐步提高,这比较容易。像C ++这样的语言为您很好地介绍了计算机科学家的真正身份。它可能不像Java,Python,Ruby等语言那样迷人,但是它使您可以对重要的程序功能(如指针和内存管理)有一个核心的了解。即使这不是您计划或不打算在余生中使用的语言,当您开始寻找所需的编程路径时,也将在未来的几年中感激不尽。


这听起来像是Ada的论点,而不是C ++ ...
weberc2

3

C ++可以是入门级控制台程序最简单的语言之一。确保语言很复杂,但是您可以专注于过程子集。您可以在相当长的一段时间内忽略指针的存在。您可以从简单开始,然后构建。

与java或C#相比,用于启动和运行初始“ hello world”程序的“ fluff”语法更少。初学者是否应该在Hello World应用程序中看到“静态”一词?在java / C#中,它们可以。


3

当我学习计算机科学时,Java最初不是很强硬,但是现在我的大学向我们的计算语言学家教授两种语言:首先是Prolog,然后是C ++。

至少由于以下原因而教C ++:

  • 它是一种通用语言,您可以使用它为任何操作系统编写软件(因为存在许多编译器)。它被设计为一种良好的生产语言,可以轻松地重用程序部件,与实际的硬件和软件进行互操作等。

  • 真的很快。你不能使用Python或Scheme或Prolog的处理庞大的数据集,这是常见的这些时间。考虑具有数百万个节点的图算法。(这也是为什么计算机游戏通常使用C ++编写的原因。)

  • 学生可以学习编译器的功能。实际上,只要我只学过Java(从高中开始),编译器的工作就对我而言似乎一直都是魔术。作为Java初学者,您只是不了解栈和堆,整个静态与动态链接之类的东西。C ++使整个计算机神秘化。

  • 对于它可以做的事情,学习时间是可以的(尽管如果您真的去研究它的话,它可能是最复杂的语言之一)。它提供了一个不错的库,有助于平滑学习曲线。(但是,有不同的方法。在我的大学里,我们被教过如何编写自己的字符串类和智能指针,然后才被允许使用该库; C ++的发明者Bjarne Stroustrup鼓励相反的顺序。)


这并不能解释为什么例如Ada不被作为第一语言来教。
weberc2

2

C / C ++实际上是比大多数其他语言更好的语言,首先是因为它不会增加错误的安全感。其次,因为您知道自己在做什么。

我实际上很喜欢这种语言,并且我认为它比大多数其他语言都优越。

它也和大多数其他语言一样高效,如果您知道自己在做什么,并在复制粘贴随机编码之前进行思考,就不会那么“疯狂”。

也是一本好书-http: //www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html

但是,C ++中的某些东西实际上是不好的,例如异常,在某些情况下会带来不直观的开销。我想这就是为什么Linus在您引用的帖子中对它如此否定的原因。

阅读相关主题之一的好书-http: //blogs.msdn.com/b/oldnewthing/archive/2004/04/22/118161.aspx


3
这个答案是完全错误的。首先,因为没有所谓的“ C / C ++”语言。
康拉德·鲁道夫

1
  1. 教授们不喜欢准备一门新课程,而且开设的课程数量有限。
  2. 语言来来往往,所以他们放弃了尝试保持领先地位(请参阅#1)
  3. 这是一所大学,而不是一所技术学校。比在职培训更注重提供基础。
  4. 涵盖了足够广泛的编程范围:服务器,台式机,嵌入式,UNIX,Windows。
  5. 他们将其用作除草课程。每个主要研究领域至少都有一个。

1

早期有Pascal,早期有Pascal,类似Basic。有趣的部分是-接下来是什么?也许什么都没有。我有一个关于“为什么C ++”的想法。因为这很难,但不像Lisp一样难。不,我真的很了解C ++是系统编程的好语言,我知道有很多用C ++编码的项目,并且有大量的库,以便学生可以用它创建一切。但是,我们谈论的是学生及其创造逻辑和理解系统的可能性。如果您无法创建简单的逻辑并无法理解系统的工作原理,那么您就不能成为优秀的C ++编码器,这是我认为的主要原因。是的,另一个简单的原因是事业稳定。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.