程序员应该掌握C ++吗?

时间:2010-06-04 13:47:05

标签: c# c++ programming-languages

我想知道程序员是否有必要拥有至少1种编程语言的专业知识?

C#,java,VB.Net等编程语言每一年或两年都会发生变化。程序员是否应该掌握C ++,这是一种稳定的语言,很少经历变化?

我是C#开发人员,现在使用它大约7年了,我仍然没有掌握它。

EDIT 我认为我的问题被误解了。我并不反对改变或进化。我喜欢C#,VB,Java等语言提供的新功能和抽象。如果它让程序员的生活更轻松,我一直在等待新的功能。但这一事实也使这些语言很难掌握。他们在不断发展。像C ++这样的语言具有缓慢的进化周期。因此,考虑到这种情况,掌握C ++是否有帮助?这就是我原来的问题。 注意: - 根据以下朋友的答案,我了解语言和框架是表达概念的工具。用不同的编程语言表达概念也是一个好主意。

22 个答案:

答案 0 :(得分:69)

  

C#,java,VB.Net等编程语言每隔一两年就会发生变化。

他们不会“改变”而是会发展。您的知识和经验不会丢失。

  

程序员是否应该掌握C ++,这是一种稳定的语言,很少会发生变化?

编程是关于新的和改变的。如果你不喜欢它,可以考虑另一种职业。

  

我是C#开发人员,现在使用它大约7年了,我仍然没有掌握它。

如果你要掌握,生活就会变得无聊,甚至可能毫无意义。也许这不是目标,而是重要的道路?

编辑:在阅读完您的评论之后,我觉得您将.NET类库的数量错误归因于C#语言本身的复杂性。不要混合它们。 C#语言相对简单,很容易“掌握”。您提到的char数据类型的有用方法只是.NET库中的辅助方法。它是该平台的资产之一。这是使.NET开发人员如此高效的原因,因为他们不必浪费时间挖掘第三方库来为他们进行基本操作:XML,成像,网络,数据库等等,它们都可以直接从.NET库中获得。当然,它的庞大尺寸可能会吓到你并给人一种无尽的印象。不是!只需使用你需要的东西,剩下的就是。

答案 1 :(得分:32)

C ++在我使用它的过程中发生了巨大的变化,并且随着C ++ 0x标准的采用即将发生另一次巨大的变化。如果你不喜欢改变,那你就错了。

至于“掌握”,我会说任何声称完全掌握C ++各个方面的人可能都在说谎(如果他曾经说过这样的话,就会包括像Stroustrup这样的人)。大多数经验丰富的C ++程序员都是该语言子集的专家,这对于解决他们感兴趣的特定问题非常有用 - 将他们置于子集之外,他们缺乏知识就会很快显现出来。但是,当然,他们可以同样快速地学习新的东西。

答案 2 :(得分:17)

  

我想知道程序员是否有必要拥有至少1种编程语言的专业知识?

不止一个! ACM杰出科学家Kathleen Fisher编写了"We Need More Than One",解释了为什么理解多种编程语言如此重要。这篇文章范围很广,但它特别提到了C ++。

  

程序员是否应该掌握C ++,这是一种稳定的语言,很少会发生变化?

不一定。两点:

  • C ++似乎只是因为生命周期的后期保持相对稳定而其他语言越来越流行。如果你在20世纪90年代工作过,你会认为C ++非常不稳定。见吉姆沃尔多的优秀书The Evolution of C++。即使是现在,当C ++ 0x标准最终被采用时,C ++即将再次发生痉挛。

  • 对于任何程序员来说,深入理解具有显式内存管理的语言并使用位,字节和单词在机器级进行编程是非常有价值的。为此,C语言更好一些,但C ++是一种非常好的机器级编程语言。但是,至少在我看来,重要的是理解如何使用字节,单词和指针进行编程,而不是模板或受保护成员字段等暗角。

  • 任何程序员都非常有价值地了解如何使用泛型编程。 C ++模板几乎不合适,因为它(还)不可能独立地对C ++模板进行类型检查。更好的模型包括Java泛型,C#泛型和Haskell和ML中的参数多态

  • 掌握几乎不可能像C ++那样复杂的东西 - 或者Haskell或Perl或Common Lisp。如果你想完全掌握某些东西,你必须坚持使用一种非常简单的语言,如Lua

答案 3 :(得分:6)

我相信一个真正的“主”程序员有一个不同的工具集。她可能专注于一种或多种语言,但总体而言,她将确保涵盖更广泛的基础,而不是深入到细微的细节。

我认为有用的一些东西:

  • 一种接近金属的语言。 C,C ++,汇编语言,用于了解程序如何与硬件交互。
  • 一种相对纯粹的OO语言(C#,Java),在认识到OO不是银弹的同时学习OO概念。
  • 一种函数式编程语言(Lisp,Haskell,...),以便超出程序/命令框。
  • 一种“脚本语言” - 一种shell脚本语言,或类似Python和Ruby的东西,因为迟早你会想要“拥有一切”的东西来快速拼凑一些实用程序。

拥有那些能够让你成为任何语言的优秀程序员。

答案 4 :(得分:4)

我使用六种语言进行编程,但是对“裸机”概念的全面理解可能是您在语言之间提供帮助的最佳方法。

对我来说,这意味着了解c / c ++。例如,您可以欣赏Linux内核的面向对象设计 - 用C语言编写 - 很容易理解其他语言提供的“快捷方式”(读取核心语言特性)以及何时以及如何评估效率。 / p>

所以,是的,我认为对低级语言的理解是任何程序员的重要资产。 C / C ++非常符合这个法案。

答案 5 :(得分:2)

一个优秀的程序员应该知道尽可能多的语言。 C ++在那里没有特殊的状态。知道C ++的程序员比不熟悉C ++的程序员更好,就像知道Python的程序员比不熟悉C ++的程序员更好。

如果您不需要编写C ++代码,那么不,您不需要成为C ++专家。它没有伤害,学习语言肯定会教你可以用在其他语言中的东西。

但其他语言也是如此。

答案 6 :(得分:2)

如果您使用C ++,那么您应该知道语言功能。我曾经是一个非常高级别的C ++,但现在我使用C#然后我必须刷新它。有时候知识太多可能会造成干扰,所以我不在乎。

答案:Code C ++每天=是,代码c#=没有

要明确你不能掌握类似的东西,除非你正在做的事情或至少每一天,至少对我来说是这样。

答案 7 :(得分:2)

大多数编程语言都在不断变化和发展,C ++也是如此。随着标准的每个新修订都会出现语法变化,major one (C++0x)即将出现。但即使标准的新版本相对于技术进步而言可能相当罕见,但对该技术的理解仍在不断发展。例如,当前的C ++ Standard首次出现时,大多数人都没有使用模板或异常。随着人们获得更新功能的经验,他们不仅学习了机制本身的语法,而且学习了使用这些设施的更大含义。如果你看一下今天写的应用程序,它可能看起来与几年前编写的应用程序有很大不同,即使两者都是由“专家”编写的。

如果你想成为一名主程序员,那么掌握的途径就是学习。尽可能多地在尽可能多的不同区域尽可能多地使用。我认为,最好的方法之一就是学习尽可能多的语言,如果只是为了获得对该语言的基本理解。学习所有“大”语言,如C ++,VB,Java,C#等。但不要限制自己。学习小语言,学习语言越多。您学习的每种语言不仅教会您使用该语言,还教您如何编程

看看这本书7 Languages in 7 Weeks

答案 8 :(得分:1)

程序员应该具备几乎所有概念的专业知识:)

答案 9 :(得分:1)

我想说程序员必须拥有至少一种编程语言的专业知识,最好是两种编程语言。

这里的关键词是“专业知识”,而不是掌握;我同意几张海报的观点,即对大多数通用编程语言的真正掌握是一种难以捉摸和模糊的卓越水平,可能超出了大多数软件专业人士的成就。问题不在于缺乏时间或能力,而在于缺乏对广泛的编程问题的全面了解。您最终受到组织内当前可以处理的项目类型等的限制。

对一种语言的专业知识的需求是显而易见的。至少两种语言的相当水平的知识和经验有助于更好地理解任何给定语言的局限性,并为选择适合给定项目的工具提供可行的选择。可能还需要两种以上语言的专业知识,但我发现在实践中难以达到任何程度的深度。通常,在第一个2-3之后,一个人在多种编程语言中保持高度专业知识的能力会迅速下降。

最终,重要的是建立和维护任何语言的专业知识,这些语言对于当前正在进行和/或预期在不久的将来执行的工作类型最有用。及时了解变化,尝试新工具,并准备好在需要时采用和接受基本上新的东西。

答案 10 :(得分:1)

我认为C ++是个错误。与C的兼容性从一开始就扼杀了语言,缺乏一个好的模板库已经给程序员带来了多年的麻烦。

现在它相对稳定和成熟,它仍然是一个错误,许多基础设施试图杀死你,一些基础设施真的帮助你。

我订阅了most of the questions raised in this "interview"

语言设计人员试图通过Java和C#的设计来解决语言问题,并且过于安全。

Go是最近尝试使用速度,速度,速度在其设计中创建C的类。 Go仍然不是主流,但如果它依赖于我的话,那就是它。

总而言之,我认为ANSI C仍然是一种功能强大且有用的语言,当性能出现时排名第一(或者考虑Go,排名第二)。

啊,你肯定可以在几个月内掌握C语言,语言设计不会引起对解决方案结构的质疑。

我肯定会向学生教授C语言,也可能使用Python或Java(或Go)来教授OO练习和设计。

答案 11 :(得分:1)

我认为答案是,这取决于你需要做什么,以及你是否想要专业化或拥有更多的一般经验/技能(即使它并不总是那么时髦,也不要打折后者)。这类似于大多数工程(甚至其他)学科,我认为没有正确或错误的方法。

使用汽车行业作为一个简单的类比,在一个乡村小镇开设沃尔沃专家不太可能是一个明智的商业行动,更普遍的汽车维修业务可能是一个更合适的企业(除非你住在瑞典当然...)。在一个富裕的大城市地区,情况恰恰相反。每项业务都需要不同级别的专家和“通才”技术(和工具)。

话虽如此,如果您确实有机会深入了解一种语言和/或环境,您可能会发现您使用它的经验也可以帮助您学习其他语言/环境。

答案 12 :(得分:1)

我也对此问过同样的问题。我的观点(从一个没有任何东西到C#程序员)就是你达到了一个语言成为达到目的的手段。你可以用任何语言做东西,只要你知道它的基础知识(我必须在C ++,VB和Python中做位)。

它是一种语言的高级领域,允许你进一步控制,你会争辩将“Professional X”程序员与“Hobbyist / Occasional X”程序员分开(我知道C ++,但我偶尔使用它。我知道C#并且每天都使用它。)。

不要担心不懂某种语言 - 在一天结束时,语言将继续发展 - 在你的职业生涯中,它们都不会保证存在(尽管有些人极有可能笑)。

答案 13 :(得分:1)

要掌握实际需要努力解决的问题。 语言只是一种工具,而不是文本编辑器和xml解析器的特权。 程序员必须具备强大的语言独立知识,可以应用于每种工具和语言来解决问题。

有人说编程是一门艺术,无论使用什么工具和技术,艺术仍然是艺术。

答案 14 :(得分:1)

我认为你正在混合语言和图书馆。虽然您提到的语言确实发生了变化,但它们的更改通常会被类库的变化所黯然失色(并且经常与它们配对)。

话虽如此,这些语言并没有“不稳定”。他们通过成长而不是移动来“改变”。 C ++(作为一种语言)在很大程度上保持静态的事实对它来说既不好也不坏。

答案 15 :(得分:1)

你对英语(或你说的任何语言)有“掌握”吗?我说英语已有30多年了,但仍然没有掌握它。在这方面,我没有看到英语和C#(C ++,VB,Javascript ....)之间有太大区别 语言不断发展,不断学习,这是你能做的最好的事情。

答案 16 :(得分:0)

真正重要的是,在写一些东西的最佳方式上搜索答案的时间不会松散,是编写优秀代码或能力的能力以及搜索它的能力,C#,java,VB.Net都是旨在成为使您的模型清洁,安全且不易出错的抽象,并将代码编写为尽可能易读的代码。如果你想开发游戏,为windows,linux,驱动程序或所有需要真正最佳性能的游戏编程,或者为最模糊的代码行赢得竞赛,那么选择C ++,另一方面你应该选择另一个平台。我喜欢发展的技术,这不是缺陷。

答案 17 :(得分:0)

在我们的宇宙中,一切都在不断变化。

答案 18 :(得分:0)

Java的'问题',c#是你不仅要学习语言,还要学习它附带的库。现在拿C ++怎么样,如果我告诉你你还需要用它来学习ATL和MFC并记住所有这些......这是不可能的

答案 19 :(得分:0)

我的问题是“掌握”这个词。

我怀疑你是否研究了你的整个生活,你会理解任何一个主题的每一个细微差别。 我说英语已有33年了,但仍然发现自己有时会不知所措。

答案 20 :(得分:0)

我认为没有必要教自己一种你认为不会使用的语言。一些C / C ++知识在你的保留曲目中很好,如果你有兴趣和一些时间学习C ++,那么一定要先行。学习新东西永远不会伤害。我是开发人员的倡导者,他们都是通才,在特定领域有专业。

掌握一门语言是很难实现的......它建议从心里知道一大块图书馆。这需要花费大量时间从库中编写许多不同的包/命名空间的代码。作为一个已经完成一些C / C ++和Java / C#大约四年的人,我会说我需要知道库的基础知识。我经常遇到我需要学习/使用的库的新部分。对我来说,.NET编程的挑战是学习如何使用框架的新部分。编写代码包含了我多年来一直使用的相同的可传输编程技能。

我问你一个问题:

你自然会“思考”什么语言?我知道当我第一次遇到问题时,我似乎自然会在C中考虑简单/低级别的东西,而C ++则在处理一个适合面向对象的项目时。

答案 21 :(得分:0)

使C ++稳定的相同因素使其难以掌握:它庞大,复杂且相对完整。