学习过C ++所有关键方面并且非常了解该语言基础知识的人是否有可能更快,更轻松地学习其他语言(例如Python,Perl,Java)?
学习过C ++所有关键方面并且非常了解该语言基础知识的人是否有可能更快,更轻松地学习其他语言(例如Python,Perl,Java)?
Answers:
对任何编程语言的深刻了解都可以帮助您更快地学习其他语言。这部分是因为编程比学习语法更是一种思考的方式。大多数编程实践都适用于大多数其他编程语言。这就是为什么人们说您总是比第二种语言学习第二种编程语言更快的原因。
C ++是一种比其他语言允许更多“控制”的语言。这可能是好事,也可能是坏事。 例如,当您进入森林时,真实的枪比气枪要好(因为您实际上可以用它射击东西),但是这对您和您周围的人也更危险。C ++具有诸如内存管理的概念,在大多数其他语言中,您无需担心。但是,即使使用自动内存管理语言,也要牢牢掌握这些概念并非毫无意义。您还可以执行按位运算,并使用C ++这样的语言深入到“金属”。即便是对这些领域的基本了解也可以以任何语言为您提供很多帮助。
在学习C ++之前,我亲自学习Java已有近3年的时间,我应该对此感到后悔(单门课程...)。这使得学习C ++(我仍在学习-远非“深刻的”知识:D)并不像我想要的那么简单。如果我反过来做的话,我会说对我来说要容易得多。尤其是当您知道为什么要以某种特定方式完成某件事时,不仅要保证该语言的自动性。如果允许我提出意见,我建议:C(用于基本和通用编程范例)-> C ++(用于对OOP和内存管理进行基本理解)->然后,您可以使用任何“真正的” OOP语言良好的基础,或者您可以继续学习C ++中更高级的主题,所有这些都取决于您
OR
和AND
抱歉不行。在编程类(尤其是初学者级)中教授C ++时,这实际上是一个大问题:您可以学习编程原理,也可以学习C ++语言,但是C ++语言有很多陷阱和愚蠢的小技巧,无法在两者之间有效地学习两者。一学期课程的范围!
有很多在C ++中尝试过的东西,最终由于纯粹的惯性而成为该语言的惯用语,此后几乎所有其他语言都被研究并拒绝了,因为事实证明这是一个巨大的错误。主要的是C ++的模板和C ++的对象模型(将对象作为值类型从来都不是一件好事,因为它破坏了Liskov替换和OOP本身。)
所以,如果你得到的C很深的造诣++第一,然后你想学习其他编程语言,也将是一大堆的有害和起反作用的CRUD你就必须忘却,以便可以在其他编程语言有效。
不会。精通C ++将使学习其他类似于C ++的语言变得更加容易。但这将很无聊。您为什么想知道两种相同的语言?那什么都没买。(请注意,这并非特定于C ++。它适用于任何语言。与自然语言相比:学习意大利语不会使学习其他语言变得更加容易。它将使学习西班牙语,法语或葡萄牙语以及学习三种语言变得更加容易。这些语言将使学习第四语言变得更容易,但是即使学习所有浪漫语言也不会帮助您一点点学习芬兰语,中文,印地语,希伯来语,希伯来语,阿拉伯语,普什图语,希腊语等)
编程语言实现范例。彼得·范·罗伊(Peter van Roy)收集了34种主要编程范例的海报。
范式又由概念组成。那张海报列出了大约18个概念。
所有范式(或至少海报中的范式)均由这些概念组成。所有语言都实现由这些概念组成的一种或多种范例。因此,如果您学习这些概念,则(在某种意义上)您将一次学习每种编程语言。
当然,仍然存在许多特定于语言的怪癖(其中包括语法)。而且,该张贴者完全忽略了键入,并且System F <:ω样式类型系统,Scala样式类型系统或动态Duck类型类型系统之间当然存在显着差异,更不用说从属类型系统了。 Idris,Agda,Coq,Guru或ATS。
我想说,深入了解任何编程语言都将有助于学习其他语言,至少可以学习同一家族中的其他语言。例如,C ++知识对LISP或Haskell并没有多大帮助,但对于面向对象的过程语言,它将有所帮助。我的方法是尝试从不同的语言家族(过程性,功能性,面向对象等)中学习每种语言,然后将知识传播到该家族的其他语言中。另一方面,对APL的深入了解无济于事。
我将在这里采用不同的解释。
C ++是一种学习内存和数据结构的好语言,因为它迫使您仔细考虑诸如对象所有权和寿命之类的概念。学习内存和数据结构是任何软件工程课程的重要组成部分之一。
但是您必须学习数据结构。如果您只是“学习C ++”,您将不会真正获得很多收益,并且短期内它可能会减慢学习其他语言的过程。
当我上大学时,数据结构是一门必修的新生课程,是在CS1之后修完的(至少是全班的一半)。那个挺难。该课程的格式基本上是“这是您之前从未见过的数据结构(例如,左派堆)。一周内用C ++实现它,并使您的输出与我们的预期输出完全相同,逐字节,所以我们可以对其自动评分。” 然后,下周您将获得一个新的数据结构和新的分配。我可能在一门课程中学到的知识要比其他所有课程加起来要多。
为了使C ++有价值,您需要进行这种学习。
不会。对C或“基本为C”的C ++子集的深入了解,将在学习其他语言时,至少在描述其实现必须做什么时,将有所帮助。另一方面,对C ++的深入了解将主要是学习其他语言时令人困惑或不相关的信息。例如,如果您学习C ++的面向对象的知识不仅仅涉及表面层面,那么当您转向Perl / Python / Ruby时,与使用它相比,您将花费更多的时间来学习您所学的知识,因为这些语言中的对象是在一个完全不同的方式比在C ++中。对于大多数其他语言和其他语言功能(无论是C ++模板还是Haskell多态本质上都是相同的功能,但实现方式完全不同),或多或少的情况都是相同的。因此,对C ++的深入了解通常将特定于C ++。