我应该拒绝C ++,因为它正在成为一个巨人吗?

时间:2009-04-19 12:00:07

标签: c++ programming-languages c++11

我试图跟上C ++,因为他们引入了1998 ANSI / ISO C ++。我吸收了新的概念并试图理解它们。我了解了异常处理,模板和命名空间。我已经阅读了有关新的强制转换机制并使用了STL库。

所有这些概念都需要很多精力。但是现在看一下新的C++0x标准时,我有点担心C ++的未来。

事情变得越来越复杂。这种语言正在成为一种怪物。

我不确定我是否想要继续使用该语言,因为我无论如何都不会在C ++中进行日常的黑客攻击。我主要使用解释语言或字节码语言。

那么我为什么要费心去学习这种难以实现的功能呢?我可以用Python等人做95%的业务。剩下的5%,我可以毫不费力地处理普通的旧C ++或C.

你怎么看?

11 个答案:

答案 0 :(得分:21)

每个人 都使用C ++的子集。对于C ++中的几乎所有应用程序编程,无论是服务器端还是客户端,该子集都是可管理的。在我看来,唯一需要完全掌握语言的每一个细微差别的人都是图书馆作家 - 实施Boost,STL,Loki等的人。

但我绝对会使用适合任务的语言。如果Python对于你的工作来说比C ++更具可读性和可维护性,并且你不需要C ++提供的东西,那么肯定会坚持使用Python。

答案 1 :(得分:20)

几周前听听Bruce Eckel {两位所谓的<{strong>最佳C++ books} commented on C++的作者:

  

那就是说,我几乎不用C ++   了。当我这样做时,它也是   检查遗留代码或写入   性能关键部分,   通常尽可能小   从其他代码调用(我的首选   方法是快速编写应用程序   Python,然后分析它,如果   必要的提高性能   使用调用C ++的一小部分   Python的ctypes库)。

     

因为我使用的是C ++标准   委员会,我看到了这些决定   制作。他们都非常   仔细考虑,远远超过   许多用Java做出的决定。

     

然而,正如人们所说的那样   指出,由此产生的语言   使用起来既麻烦又痛苦   充满了我忘记的怪异规则   我很快就离开了它   而 - 我想出了那些规则   从我写的第一原则开始   书籍,不仅仅是记住它们。

此外,您应该阅读this threadDanny Kalev's predictions on C++

然而,日益复杂的C ++将给将语言分裂为准官方方言带来压力。我们今天已经看到了这种趋势;它可能会在未来加剧。

修改

你也应该看一下这个讨论:

C++ - Anyone else feel like C++ is getting too complicated?

答案 2 :(得分:10)

首先,C ++ 0x的许多功能都是为了使语言更易于使用。更易读的模板编译错误,更一致的初始化语法,支持线程,否则必须依赖于特定于平台的库等。

因此,如果您使用C ++,我觉得学习C ++ 0x的重要部分应该是一个可管理的任务。请记住,您不需要学习使用该语言的所有新功能。一些功能主要是作为库实现者的辅助工具添加的,例如允许更有效地实现STL,但这不应该真正影响最终用户对语言的使用。有些只是在极少数情况下才真正需要的。忽略语言的那些部分。

他们使用C ++ 0x的目标之一是避免它变得更难使用。

但除此之外,你需要C ++吗?如果你用其他语言编写代码,为什么还要花时间跟上C ++?

答案 3 :(得分:8)

您不必使用语言提供的每个功能。我不在C中使用setjmp / longjmp,尽管它在那里。我也没有使用Java集合的每个方面。

如果您认为新功能可以使您的代码更好(更快或更高质量或两者兼而有之),那么请使用它们。否则忽略它们。

从高层次了解它们的全部内容是有用的,如果只是为了让你通过求职面试,但我认为他们添加到语言中的一半是不必要的。

在切换到Java之前,我从未使用过C ++模板,但我知道它们的用途。

并不总是关于学习最新和最伟大的。软件(至少在您的工作中)是关于产品的交付。如果你足够熟练,可以在COBOL或FORTRAN中完成。

答案 4 :(得分:5)

除了Bjarne和Herb Sutter之外,没有人知道所有的C ++。正如你所说,这是一种非常庞大的语言。期望能够采用整个标准+特定编译器或编译器的具体实现细节是不切实际的。

但是为了使用C ++,你不需要了解所有内容。相反,只学习对您和您的项目有价值的C ++子集。继续扩展您的知识并没有什么坏处,但除非您正在编写C ++编译器,否则没有理由知道整个事情。即使你完成了它,你所有与之合作的人也不会。

答案 5 :(得分:5)

  

那我为什么要费心去学习呢   困难,但异常强大,   语言?我可以做95%的业务   与python等。剩下的   5%,我可以处理普通的旧C ++或C.   没有麻烦。

嗯,在大多数情况下,你回答自己的问题。你现在没有必要跟上C ++的前沿。

然而,语言将继续前进。几年后,您认为今天浪费时间浪费的一些概念将被普遍使用。有一天,你可能会发现在使用“普通C ++”的5%中,你正在合作的一些示例代码或代码使用了一个你不熟悉的构造。那时,你需要上网并刷新新的“当前”C ++。

这会成为一个问题吗?当然不是。你是一名程序员。您可以在95%语言环境中随时了解最新的编程概念,这些概念也会随着时间的推移而发生变化。您可能已经非常熟悉这些概念,并且只有在您必须使用它们时才需要熟悉它的C ++语法。

我个人希望继续跟上C ++,即使我的职业生涯更倾向于Java或其他下一代语言。为什么?我想说,因为它最让我感兴趣,因为我喜欢这一切的复杂性和表现力。但更可能的原因只是因为它是我的第一个专业语言;我认为这是我的“母语”。

如果您不感兴趣,并且不关心您的工作或未来的工作,请不要打扰。这有什么问题?什么都没有。

答案 6 :(得分:3)

我很难找到一个单独的实例,其中C ++ 0x比C ++ 98更复杂。 真正有两件事是复杂的:

  1. 概念。
  2. 记忆模型
  3. 但是第一个已经被删除了(幸运的是,标准化未实现的功能在C ++,见证抛出规范,extern模板,auto_ptr,...)中没有实现,而第二个并不是真正的现代编程语言可以逃脱。这是由英特尔和英特尔公司外部诱导的。 Co有助于破坏你的程序,使它们运行得更快。

    其余的只是解决每个C ++程序员在过去几十年中经常遇到的烦恼。

    作为旁注:我觉得......很有趣......看看C#这样的语言是如何用数据库查询语言(LINQ)填充的,C ++被视为臃肿。

答案 7 :(得分:2)

好的答案。

计算机制造商争夺买家,软件竞争磁盘空间,语言竞争用户。他们试图阻止彼此的功能。

我想知道Fortran出现lambda表达多久之前: - )

答案 8 :(得分:1)

你不需要了解心中出现的每一个标准。尽管如此,它确实有助于了解大局。你编码的5%可能让你重新发明偶尔的轮子。根据5%的重要性(想想帕累托)你需要接听电话的时间长短。

此外,任何特殊原因(如遗留代码依赖)为什么你不能将5%移动到python?

答案 9 :(得分:1)

首先尝试参加关于c ++ 0x的课程并让你的公司为此付出代价:) 我们的大脑可以适应大量的垃圾知识。我们应该首先向程序用户学习并倾听别人的意见/知识,而不是诅咒和拥有程序员-wtf时刻。知识传播速度要快得多。

答案 10 :(得分:0)

我的建议是学习c ++ 0x(&amp;&amp; FTW)的新关键字,但不要费心去学习整个lib。使用python你想要的,可能是C#for apps,然后当你需要做一些强大的东西时使用C ++(0x)。并询问stackoverflow&amp;在进行原型设计时谷歌关于新容器。

您不需要使用少数语言,