程序员是不是应该掌握 C++ [关闭]
Posted
技术标签:
【中文标题】程序员是不是应该掌握 C++ [关闭]【英文标题】:Should a programmer have mastery over C++ [closed]程序员是否应该掌握 C++ [关闭] 【发布时间】:2010-06-04 13:47:04 【问题描述】:我想知道程序员是否有必要至少具备一种编程语言的专业知识?
C#、java、VB.Net 等编程语言每年或两年都会发生变化。程序员是否应该掌握 C++,这是一种稳定的语言,很少发生变化?
我是一名 C# 开发人员,现在使用它大约 7 年,但我仍然没有掌握它。
编辑 我认为我的问题被误解了。我不反对改变或进化。我喜欢 C#、VB、Java 等语言提供的新特性和抽象。如果它使程序员的生活变得轻松,我会一直等待新功能。但这一事实也使这种语言很难掌握。它们在不断发展。像 C++ 这样的语言的进化周期很慢。那么在这种情况下,精通 C++ 有帮助吗?这就是我最初的问题的意思。 注意:-根据下面朋友的回答,我了解到语言和框架是表达概念的工具。此外,用不同的编程语言表达概念可能是个好主意。
【问题讨论】:
不确定你从哪里得到的想法 C++ 很少改变。你可能会惊讶quite soon。 等等,你不是说可以吗? 我原以为如果你没有“至少一门编程语言”的专业知识,那么你就不是程序员! ;-) 如果你不想工作,那就辞职去做点别的吧。 @Matthew:我不认为“明年的变化,7 年来的第一次,标准化后的第二次”与“很少变化”冲突 【参考方案1】:C#、java、VB.Net 等编程语言每年或两年都会发生变化。
它们不会“改变”而是进化。您的知识和经验不会丢失。
程序员是否应该掌握 C++,这是一种稳定的语言,很少发生变化?
编程是关于新的和变化的。如果你不喜欢,考虑换个职业吧。
我是一名 C# 开发人员,现在使用它大约 7 年,但我仍然没有掌握它。
如果你要达到精通,生活就会变得乏味,甚至可能毫无意义。也许重要的不是目标而是道路?
编辑:阅读您的 cmets 后,我觉得您将 .NET 类库的体积错误地归因于 C# 语言本身的复杂性。不要混合它们。 C#语言比较简单,很容易“掌握”。您提到的 char
数据类型的有用方法只是 .NET 库中的辅助方法。这是平台的资产之一。这就是 .NET 开发人员如此高效的原因,因为他们不必浪费时间挖掘第三方库来为他们进行基本操作:XML、成像、网络、数据库等等,所有这些都可以直接从 .NET 库中获得。自然地,它的庞大规模可能会吓到你,并给人一种它无穷无尽的印象。不是!只需使用您需要的东西,其余的不用管。
【讨论】:
今天的票用完了,否则我会立即 +1... 就像 Neil 在下面所说的那样,C++ 也在不断发展。对于我们这些深谙 C++ 的人来说,这些演变非常重要,即使更多的普通用户发现很难看到它们的价值。我已经使用 C++ 10 年了(专业地),我仍然可以在其中找到新的东西来学习。所以说真的,“稳定”并不意味着那么多。 @Yogendra:如果您必须搜索甚至是简单的语法解决方案,那么您真的是高级开发人员吗?另外,为什么你认为 C++ 编码器可以工作而不用担心未知的语法/概念?我什至不确定你在这里想说什么...... @Yogendra:了解 C++ 有其自身的好处,因为您将更好地了解 C# 等高级语言的幕后发生的事情。但是精通 C++ 并不会让你成为 C# 的高手。 @Yogendra:.NET 库非常庞大,它是平台的资产之一。我也一直在发现新事物,但我学会了不要担心。除非你努力成为 C# 的高手,而不是其他编程,否则你不会学到所有东西。专注于您的项目,并将语言及其库视为一种工具。任何一天你都能学到新东西——尽情享受吧!【参考方案2】:在我使用 C++ 的这段时间里,它发生了巨大的变化,随着 C++0x 标准的采用,它即将经历另一个巨大的变化。如果你不喜欢改变,那你就错了。
至于“精通”,我想说的是任何声称完全掌握 C++ 各个方面的人都可能是在说谎(如果 Stroustrup 曾经说过这样的话,那就包括像 Stroustrup 这样的人)。大多数有经验的 C++ 程序员都是该语言子集的专家,这对于解决他们感兴趣的特定问题很有用 - 将他们排除在子集之外,他们缺乏知识很快就会变得明显。当然,他们同样可以快速学习新东西。
【讨论】:
+1 是指出 C++0x 的唯一答案。 “可能在他们的牙齿上撒谎”或绝望的妄想:-) 感谢您指出 C++0x 我以为大多数 C++ 开发人员已经陷入绝望的妄想? “完全掌握每一个方面”——facet 双关语? ;-)【参考方案3】:我想知道程序员是否有必要至少具备一种编程语言的专业知识?
不止一个! ACM 杰出科学家 Kathleen Fisher 写了"We Need More Than One",解释了为什么理解多种编程语言如此重要。这篇文章范围很广,但它特别提到了 C++。
程序员是否应该掌握 C++,这是一种稳定的语言,很少发生变化?
不一定。两点:
C++ 之所以稳定只是因为它处于生命周期的后期,并且在其他语言变得越来越流行时保持相对稳定。如果您在 1990 年代工作,您会认为 C++ 非常不稳定。请参阅 Jim Waldo 的优秀书籍 The Evolution of C++。即使是现在,当 C++0x 标准最终被采用时,C++ 也将迎来另一场震荡。
对于任何程序员来说,深入理解一些具有显式内存管理的语言以及在机器级别使用位、字节和字进行编程的语言都是非常有价值的。 C 语言在这方面要好一些,但 C++ 是一种非常好的机器级编程语言。但是,至少在我看来,重要的是了解如何使用字节、单词和指针进行编程,而不是像模板或受保护的成员字段这样的暗角。
深入了解如何使用泛型进行编程对于任何程序员来说都是非常有价值的。 C++ 模板几乎不适合,因为(还)不可能独立地对 C++ 模板进行类型检查。更好的模型包括 Java 泛型、C# 泛型和 Haskell 和 ML 中的参数多态性
几乎不可能掌握像 C++ 这样复杂的东西,或者说 Haskell、Perl 或 Common Lisp。如果您想完全掌握某件事,则必须坚持使用非常简单的语言,例如 Lua。
【讨论】:
+1 来自我。这是一个很好的答案。 不错的答案,但 C++ 作为机器级语言?啊啊啊。用汇编程序编写一些东西,包括动态内存分配、通信和线程。然后你就会知道机器是如何工作的,以及程序是如何与操作系统交互的! @Cylon:我其实很喜欢C,但是我在这个论坛上被C++ 粉丝们折腾了太多次了。至于汇编程序,这里和那里的程序都很棒,但是我看不到在汇编程序中构建整个系统的价值。事实上,我们甚至都不清楚我们是否应该在汇编器中编写固件——英特尔已经发出了征集建议,以寻找构建需要更少汇编代码的固件的方法。 @Norman,我听到了;我对汇编程序半开玩笑。不过,我早在 1970 年代后期就在 IBM 370 上这样做,而该站点只有 Fortran 和 Assembler。所以它是汇编程序!很有趣,但不想再去那里。在计时器和进程间通信之间,我编写了自己的事件驱动模型,其中包含调度程序和消息队列。这让很多后来的编程工具和环境看起来都不那么可怕了。 嘿,Lua 并不简单,它只是没有那么大的语言! ;)【参考方案4】:我相信真正的“大师级”程序员拥有多种多样的工具集。她可能擅长一种或多种语言,但总体而言,她会确保涵盖更广泛的基础,而不是深入研究微小的细节。
一些我觉得有用的东西:
一种接近金属的语言。 C、C++、汇编语言,了解您的程序如何与硬件交互。 一种相对纯粹的 OO 语言(C#、Java),学习 OO 概念的同时意识到 OO 不是灵丹妙药。 一种函数式编程语言(Lisp、Haskell 等),可以跳出过程/命令框。 一种“脚本语言”- 一种 shell 脚本语言,或类似 Python 和 Ruby 的语言,因为迟早您会想要“拥有一切”的东西来快速拼凑一些实用程序。拥有这些将使您成为任何语言的更好程序员。
【讨论】:
【参考方案5】:我使用六种语言进行编程,但对“裸机”概念的透彻理解可能是您在多种语言之间帮助您的最佳拐杖。
对我来说,这意味着了解 c/c++。例如,一旦您可以欣赏 Linux 内核的面向对象设计(用 C 编写),就很容易欣赏其他语言提供的“捷径”(读取核心语言功能)以及何时以及如何评估那里的效率。
所以,是的,我认为对低级语言的良好理解对任何程序员来说都是一笔巨大的财富。 C/C++ 完全符合这个要求。
【讨论】:
【参考方案6】:如果您使用 C++,那么您应该了解语言特性。我曾经是一个非常高级的 C++,但现在我使用 C#,然后我必须刷新它。有时知识过多可能会造成干扰,所以我不在乎。
答案:每天编写 C++ = 是,编写 c# = 否
要清楚你无法掌握类似的东西,除非你正在做这一切,或者至少每天都在做,至少对我来说是这样。
【讨论】:
【参考方案7】:大多数编程语言都在不断变化和发展,C++ 也是如此。标准的每一次新修订都会带来语法变化,major one (C++0x) 即将出现。但即使相对于技术进步而言,标准的新版本可能相当少见,但对该技术的理解仍在不断发展。例如,当当前的 C++ 标准刚出现时,大多数人并没有使用模板或异常。随着人们获得了新功能的经验,他们不仅了解了机制本身的语法,还了解了使用这些工具的更大含义。如果您查看今天编写的应用程序,它可能与几年前编写的应用程序有很大不同,即使两者都是由“专家”编写的。
如果你想成为一名优秀的程序员,那么掌握的途径就是学习。尽你所能,在尽可能多的不同领域。我相信做到这一点的最好方法之一就是尽可能多地学习语言,即使只是为了获得对该语言的基本理解。学习所有“大”语言,如 C++、VB、Java、C# 等。但不要局限于它们。也学习小语言,以及更多的学术语言。您学习的每一种语言不仅教您该语言,还教您如何编程。
看看这本书,7 Languages in 7 Weeks
【讨论】:
我们不应该开始称它为 C++1x 吗? @JeremyP:Stroustrup 不这么认为。 :) “我将继续提及即将发布的 C++ 标准,这里定义的功能集为 C++0x。将 'x' 视为十六进制”来源:www2.research.att.com/~bs/C++0xFAQ.html @JeremyP “x”不再是占位符了。现在是 C++0x_。【参考方案8】:一个好的程序员应该知道尽可能多的语言。 C++ 在那里没有特殊地位。懂 C++ 的程序员比不懂 C++ 的程序员好,就像懂 Python 的程序员比不懂 Python 的程序员好。
如果您不需要编写 C++ 代码,那么不,您不需要成为 C++ 专家。这没有什么坏处,学习这门语言肯定会教给你一些你可以在其他语言中使用的东西。
但其他语言也是如此。
【讨论】:
【参考方案9】:程序员应该具备几乎所有概念的专业知识:)
【讨论】:
嗯? (我需要将此作为有效评论,但真的 - 嗯?) 我认为 mathk 的意思是;学习不同的语言主要是学习不同的语法。一旦你学会了像 OOP 这样的概念,你就可以将它应用到不同的语言中。在将函数式语言与其他函数式语言、命令式与命令式等进行比较时,这通常是正确的 其实如果你想的话。您需要了解概念以及何时使用它们以及何时不使用它们。理解一个概念并不是一件容易的事。就像学习一门语言一样,您需要最适合您目的的单词和句子,以完全清楚您在写什么。但这很困难,还取决于你知道多少 PL...【参考方案10】:您是否“精通”英语(或您说的任何语言)?我说英语已经 30 多年了,但仍然没有掌握它。在这方面,我认为英语和 C#(C++、VB、javascript ......)之间没有太大区别 语言不断发展,不断学习,这是您能做的最好的事情。
【讨论】:
【参考方案11】:我认为您正在混合使用语言和库。虽然您提到的语言确实发生了变化,但它们的变化通常会因类库的变化而黯然失色(并且通常与之配对)。
话虽如此,这些语言并没有什么“不稳定”的地方。它们通过生长而不是移动来“改变”。 C++(作为一种语言)在很大程度上保持静态这一事实既不是好事也不是坏事。
【讨论】:
【参考方案12】:要掌握某事实际上需要努力工作。 语言只是一种工具,而不是一种特权,就像文本编辑器和 xml 解析器一样。 程序员必须具有很强的语言独立知识,可以应用于每种工具和语言来解决问题。
有人说编程是一门艺术,无论使用什么工具和技术,艺术仍然是艺术。
【讨论】:
【参考方案13】:我也曾在这方面问过自己类似的问题。我的观点(从一个对 C# 来说一无所知的程序员)是你达到了语言成为达到目的的手段的阶段。只要您了解其中的基础知识,您就可以用任何语言做事(我必须在 C++、VB 和 Python 中做一些事情)。
它允许您进一步控制的语言的高级领域以及您认为将“Professional X”程序员与“Hobbyist/Occasional X”程序员区别开来的语言(我知道 C++,但我偶尔会使用它。我知道 C# 并且每天都在使用它。)。
不用担心不懂某种语言 - 最终,语言会继续发展 - 在你的职业生涯中,没有一种语言可以保证存在(尽管有些语言很可能哈哈)。
【讨论】:
【参考方案14】:我认为答案是,这取决于您需要做什么以及您是想专攻还是拥有更一般的经验/技能(即使后者并不总是那么时尚,也不要轻视后者)。这与大多数工程(甚至其他)学科相似,我认为没有正确或错误的方法。
将汽车行业作为一个简单的类比,在一个农村小镇开设沃尔沃专家不太可能是明智的商业举措,而更一般的汽车维修业务可能是更合适的企业(除非您住在瑞典当然...)。在一个大的富裕城市地区,情况可能正好相反。每个企业都需要不同级别的专家和“通才”技术技能(和工具)。
话虽如此,如果您确实有机会深入了解一种语言和/或环境,您可能会发现您在其他语言/环境中的经验也会对您有所帮助。
【讨论】:
【参考方案15】:我会说,程序员必须具备至少一种编程语言的专业知识,最好是两种。
这里的关键词是“专长”,而不是精通;我同意几位发帖人的观点,即真正掌握大多数通用编程语言是一种难以捉摸和模糊不清的卓越水平,可能超出了大多数软件专业人士的成就。问题不在于缺乏时间或能力,而是缺乏对非常广泛的编程问题的全面了解。您最终会受到您当前可以在组织内从事的项目类型等的限制。
对一种语言的专业知识的需求是显而易见的。至少两种语言的良好知识和经验水平有助于更好地理解任何给定语言的局限性,并为为给定项目选择合适的工具提供可行的选项。也可能需要两种以上语言的专业知识,但我发现在实践中很难达到任何程度的深度。一般来说,一个人在多种编程语言方面保持高度专业知识的能力在前 2-3 次之后会迅速下降。
归根结底,重要的是要建立和保持专业知识,掌握对当前正在从事和/或期望在不久的将来执行的工作类型最有用的任何语言。随时了解变化,尝试新工具,并准备好在需要时采用和拥抱全新的事物。
【讨论】:
【参考方案16】:我认为 C++ 是一个错误。与 C 的兼容性从一开始就扼杀了这门语言,缺乏好的模板库多年来一直困扰着程序员。
现在它相对稳定和成熟,它仍然是一个错误,有很多基础设施试图扼杀你,而一些基础设施确实可以帮助你。
我订阅了most of the questions raised in this "interview"。
语言设计者试图首先解决语言的问题,因为 Java 和 C# 的设计过于注重安全性。
Go 是一种较新的尝试,它在其设计中创建具有速度、速度、速度的类的 C。 Go 仍然不是主流,但它会,如果它取决于我的话。
总而言之,我认为 ANSI C 仍然是一门强大而有用的语言,是性能第一的第一工具(或第二,考虑到 Go)。
啊,几个月后你肯定可以掌握C,语言设计不是为了提出解决方案的结构问题。
我肯定会教给学生 C 和 Python 或 Java(或 Go)来展示 OO 实践和设计。
【讨论】:
【参考方案17】:我的问题在于“掌握”这个词。
我怀疑如果你研究了你的整个生活,你会理解任何一门学科的每一个细微差别。 我说英语已经 33 年了,但有时我仍然不知所措。
【讨论】:
【参考方案18】:Java 和 c# 的“问题”在于,您不仅需要学习该语言,还需要学习它附带的库。现在以 C++ 为例,如果我告诉你你还需要学习 ATL 和 MFC 并记住所有这些东西......这是不可能的
【讨论】:
【参考方案19】:在我们的宇宙中,一切都在不断变化。
【讨论】:
【参考方案20】:真正重要的不是花几分钟在谷歌上搜索写东西的最佳方法的答案,是编写好代码的能力或搜索它的能力和愿望,C#、java、VB.Net 是旨在成为使您的模型干净、安全且不易出错的抽象,并尽可能编写人类可读的代码。如果您想开发游戏、Windows 程序、Linux 程序、驱动程序或所有需要真正最佳性能的东西,或者可能赢得最模糊代码行的竞赛,请选择 C++,另一方面,您应该选择其他平台。我喜欢不断发展的技术,这是优点而不是缺陷。
【讨论】:
【参考方案21】:我认为没有必要自学一门你认为自己不会使用的语言。不过,如果你有一些 C/C++ 知识在你的曲目中是很好的,如果你对学习 C++ 有一些兴趣和一些时间,那么一定要继续前进。学习新东西永远不会有坏处。我提倡通才型开发人员,在特定领域具有专长。
掌握一门语言是很难达到的……这意味着要从心底了解图书馆的大部分内容。这需要花费大量时间使用库中的许多不同包/命名空间编写代码。作为一个已经做了大约四年 C/C++ 和 Java/C# 的人,我想说我对这个库有必要了解。我经常遇到我需要学习/使用的图书馆的新部分。对我来说,.NET 编程的挑战是学习如何使用框架的新部分。编写代码包含了我多年来一直使用的相同的可转移编程技能。
让我问你一个问题:
您自然会用什么语言“思考”?我知道,当我第一次处理问题时,我似乎很自然地会用 C 来思考简单/低级的东西,而当我处理一个适合面向对象的项目时,我会用 C++。
【讨论】:
【参考方案22】:使 C++ 稳定的同一因素使其难以掌握:它庞大、复杂且相对完整。
【讨论】:
以上是关于程序员是不是应该掌握 C++ [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
月入 5 万程序员分享:为什么每一名程序员都应该学习 C++?