为什么C++ 并没有"王者归来"?

Why C++ Is Not “Back”又引起了争论,主要观点是:
C++ is the wrong direction for the future, C++对于未来是一个错误方向,大意翻译如下:

最大问题是语言应该越来越简单,抽象层次越来越高,而不是减少。(banq注:领域驱动分层关系的疑惑)

当然总是会有需要低级别的代码,但我们今天写的代码的大部分是在一个更高的水平。

我是许多年前跳下C++这条船,我终于可以再也不用纠结C++比C快上面了

很长时间,我依然相信过去所有对C++的投入都没有白费,但是当C变得如此简单,让我觉得不再值得为C++额外那些费时费力的工作再次付出。

正当我写这篇博客时,我看到微软研究院一个叫 touchdevelop研究的newrevitalized项目,这才是我们应该去的方向,我们需要编程更加简单,而不是更加复杂。

....


[该贴被banq于2012-12-03 09:24修改过]

板桥先生,请教一下: 作为一个24岁、刚毕业工作半年的本科生,最初的愿想是做基于C、C++的嵌入式开发,现在的工作也是嵌入式Linux下NVR(录像存储设备)和IPCcam(网络摄像机)的对接工作,语言C++实现静态函数供系统调用,对计算机领域的选择有些迷茫,能力有自信但是感觉没有方向,请问是否可以花费点时间随便说两句给以参考?谢谢了~~

2012-12-03 10:50 "@root"的内容
对计算机领域的选择有些迷茫,能力有自信但是感觉没有方向 ...

以下纯属喷饭,据此入市,后果自负:
做嵌入式开发最大的挑战是硬件的限制,所幸的是现在ARM开始挑战Intel,苹果的IOS和Android已经屏蔽了硬件的影响,算是比较高级的抽象层,嵌入式开发一般以后就如同过去windows开发一样,用C开发一些驱动程序,大部分应用功能要基于操作系统来开发。


[该贴被banq于2012-12-03 11:25修改过]

这正是banq所说的软件应该养成向上的思维吧

2012-12-03 12:30 "@wanjch"的内容
正是banq所说的软件应该养成向上的思维 ...

是的,这是哲学逻辑上典型抽象分层论,战略方向是向上,战术上不是不可以研究底层,有些人哲学观点没有培养成,搞不清战略和战术之分,方向和具体实践之分,LMAX团队正是研究了底层结构发现CPU二级缓存特点而发明Disruptor,但是这样的盲点机会很少,如果你还抱着守株待兔的心态等在树下,是相当可笑的。

可惜,不是所有编程人甚至高手懂这个道理,我这几天看到国内一大电商公布的数据库连接池开源项目,号称最快,比tomcat7的tomcat-jdbc还快,我不确定这棵树下是否还会捡到撞死的兔子,但是在当今NoSQL横行,缓存为王的大架构思路下,这一点点性能提升有什么意义,作为一个国内著名的电商,高薪养了一帮高手,结果却出些螺丝壳摆道场的成果,这也是一种隐式的浪费。

面向对象编程的关键目标Object Oriented Programming: A Critical Approach一文从面向对象的诞生原因,以及始祖SmallTalk语言特点,阐述了OO的关键。

作者认为,C++语言比C复杂多,正如Object Pascal相当比Pascal也复杂得多。Ruby作为新语言总算争了口气,但是他们都有优缺点,他们给予了细心的程序员创建良好可重用的代码,但是另外一方面,他们也能让粗心的程序员写出无法维护调试的代码。

Smalltalk的一个关键点在其他语言中丢失了:状态处理。一些OO语言可以隐藏对象的内部状态,但是状态的访问不是通过方法,或者发消息,而是可以从外部直捅到内部状态(比如java中宣称public 变量名),语言应该让对象的状态独立于他们被使用的代码,这才是Smalltalk的关键所在。

正如Smalltalk原理架构师之一Dan Ingalls所说:No component in a complex system should depend on the internal details of any other component.
一个复杂系统的组件不应该依赖其他组件的内部细节(banq注:还是逻辑分层原理所致)

来自InfoQ的文章开发人员应该开始学习C++吗?Should Developers Start Learning C++?,继续了“为什么C++并没有王者归来 Why C++ Is Not ‘Back’”的讨论:

John Sonmez 认为有三种理由使用C++:
1.你愿意牺牲抽象象挤墨水一样挤出那么点性能。
2.你直接和硬件打交道,比如你写硬件驱动程序。
3.内存控制和计时绝对重要。实时嵌入式系统中控制机器每一步移动。

Herb Sutter, 严重赞同这篇文章,认为是:a thoughtful hype-free opinion。并加入下列观点:
当服务依赖运行时调试很难,你没有能力去测试整个应用了。

Richard Dunks认为:
我认为C++无助于在学生第一学期介绍编程类和数据结构之类的教学,你花了这么多时间实现,学生们经常忽视的他们正试图复制学习的结构。我很高兴我熟练掌握C++,但我不认为这是值得的代价,它绝对不是一个适合所有语言教学的通用语言。

......

在Herb Sutter 和 John Sonmez’s博客讨论中很多高品质的评论,对于初学者和计算机语言教学都有参考意义。