佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 3712|回复: 19

一篇很有意思的文章, 关于c++的

  [复制链接]
发表于 12-2-2012 08:04 PM | 显示全部楼层 |阅读模式
本帖最后由 喷了一地 于 12-2-2012 08:08 PM 编辑

c++ 精英化趨勢

C++是一門引起無數爭議的語言。

眼下最常聽到的聲音則是C++將趨於沒落,會被某某語言取代。

我很懷疑這種論調的起點是商業宣傳,C++的真實趨勢應該是越來越傾向於精英化。

精英化是指在可用可不用C++的領域中,C++將逐漸退出,

而所有剩下必須用C++的領域通常都是附加值比較高,難度較高的領域,比如:操作系統,數據庫,大型網站後端等。

這一過程造成的現象就是在TIOBE上,C++的份額逐步下降。

但就像經濟上擠泡沫一樣,這倒不是C++衰落了,而是原本人們對C++的期望過高了。

早在1995年,美國的調查機構就曾經預測:“終端用戶”編程從從業人員比率上將佔94%,而“基礎結構”編程從業人員只佔1.5%不到。

(參見《軟件成本估算:COCOMOII模型方法》)

C++本來就不適合“終端用戶”這種涉眾很多的項目,比如物流程序,而適合對性能要求較高的基礎結構項目,比如OS,大型數據庫等。

(根據Google的測試,C++的performance遠高於其他語言)

只是當年OO很火的時候,大家又沒有什麼別的選擇,就一窩蜂的用,實際上很多程序確實不適合用一個沒有垃圾收集的程序來寫。

這裡有一份統計列表,大家可以自己看看,當前C++的主戰場是那裡。

The Programming Languages Beacon(這個表告訴我們:IT行業的骨頭是C/C++做的)

這導致的結果就是修煉C++的程序員必須往高端走,你要麼找不到工作,要麼就找到很好的工作。

而不像其他語言,大差不差還能混口飯吃。


這個趨勢不好絕對化,但估計在未來會被強化。TIOBE上C++的份額跌得越多,這個趨勢強化的越厲害。



短時間完全看不到C++退出歷史舞台的可能性,只要硬件還是軟件的基礎:

例1:網站A和網站B類似,用C++可以讓速度提升30%,你感覺這個網站會選擇語言的易用性,還是會選擇速度?

例2:公司A要開發一個新的軟硬結合的產品,你感覺他會先開發一個虛擬機,再開發產品,還是會直接基於硬件上封裝驅動後開發程序?



兩個關鍵缺陷

這兩個關鍵缺陷分別是語言的過度複雜和標準庫的過度蒼白。



C++語言過於複雜在業界是共識。

一個指針就使C++比關鍵字數目相同的語言複雜許多,導入模板後各種應用精巧的應用使這門語言進一步複雜化,個人感覺C++0x使這複雜性又昇華了。

Google在公佈的C++ Coding Rule開篇就說:

As every C++ programmer knows, the language has many powerful features, but this power brings with it complexity, which in turn can make code more bug-prone and harder to read and maintain.

這裡也就不多說了,但貼幾個好玩的句子:

"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off." -- Bjarne Stroustrup
(Stroustrup還是挺搞的,意譯下:C語言讓人很容易開槍走火打到自己的腳,C++讓走火發生的可能性降低,但一旦走火,你的腿就沒了。)
"IMO, good C++ code is better than good C code, but bad C++ can be much, much worse than bad C code." -- John Carmack.

C++標準庫的蒼白倒值得多說一點
不知道沒用過C++的人是否能想象,這個世界上還有一門語言的標準庫里甚至不覆蓋正則表達式和XML。
C++就這樣,並且還將持續這樣。我專門查了一下,C++0x里好像終於有正則了,但還沒有XML的庫。
(不用提醒,我也知道boost里有,但boost不是標準庫。)

C++本身不缺庫,並且還都是大佬級的,如:OpenCV,OpenMP,ACE,MPICH2等。
隨便那一個都是一方諸侯,如果你沒用過OpenCV和OpenMP這些東西,第一次用一定會有點震撼,但關鍵是標準庫不太行。
從這個角度看C++0x方向走錯了:錦上添花的事做了不少,雪中送炭的事上不太給力。

感想
C++語言已經無法簡化,如果編譯器能夠提供可定製編譯也許對這個語言會有幫助。
比如:設定某個選項後,C++就變成了有對象的C。設置某個選項後,多重繼承就不支持了。
也許有編譯器可以這樣,但我確實還不知道。
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 12-2-2012 08:08 PM | 显示全部楼层
TIOBE 2012年2月编程语言排行榜出炉了:C#第一次超过C++, 占第3名.  
c++曾被VB和php 超过, 但这两个语言都未成气候,排名很快又下跌了
这一次情况有点不样, c#的份额提升一直都非常稳固
回复

使用道具 举报

发表于 13-2-2012 05:01 PM | 显示全部楼层
c++不是霸王,现在百花齐放
回复

使用道具 举报

发表于 13-2-2012 05:22 PM | 显示全部楼层
楼主, 我是菜鸟想问一个一直弄不明白的问题。 我常用java, 用里面的api 来program. 我在想 那些api 是怎样写出来的? 我一直觉得熟用工具固然重要, 可是如果不懂工具是如何做出来的 或如何把工具做出来,程度上还是有差。 我想知道那些low-level proramming 如c or c ++ 是如何绕过api来实现程式编程的? 请高手们赐教。 小的感激不尽!
回复

使用道具 举报

发表于 13-2-2012 05:37 PM | 显示全部楼层
我们新一代的programmer 就只能停留在使用api 的境界
回复

使用道具 举报

 楼主| 发表于 13-2-2012 05:57 PM | 显示全部楼层
本帖最后由 喷了一地 于 14-2-2012 12:39 PM 编辑

回复 4# fire-fly3

    我个人理解是这样, 有错请指正

    就拿市场上最热门的两大操作系统 (windows, linux )做例子,  这两个系统的内核(kernel)主要用编汇跟C语言写成.  linux是纯C

     而windows 混合了c++.     因为 windows是Micro kernel( c++比C容易扩展 ).   如果你学过纯API的win32开发, 就会发现它的原生代码是C写成的.  

java 多了一个虚拟机( jvm)帮你处理掉所有烦琐的API. 可以追根究底,jvm仍旧 必须跟原生的API打交道,   所以sun 的jvm 是用C++ (因为C++兼容C语言) 编写的.    你用的那些API , 其实就是C++.  (他们封装了C++,  因此你看不到C++代码)

low level 的programmer 并没有绕过API, 他们直接使用API.   MFC 就是多了一层c++的class, 方便你使用
回复

使用道具 举报

Follow Us
发表于 14-2-2012 07:37 AM | 显示全部楼层
你所谓的low level有多low?

通常api 不一定是属于low level的 而low level,无可避免地都必须使用C/C++/Assembly来写

若你说那些native api...由kernel/OS提供的 - 这些都不算是low level...low level都泛指那些语言程序直接跟硬体沟通……比如说,access I/O register... CPU里面的stack register..etc

基本上,那种level的程序……已经算是不同领域了……根本不是IT的范畴,你们大可biong担心 。

我不懂你们如何去看待所谓的"API"...其实,对我来说只是为了方便重新使用那些code罢了……就是routine..function那类,只不过,api比较“整齐”,相关的功能都归类在同一个library里面。而所谓low level的api...其实是有的……原因无它,就是为了方便code reuse...不过,难看多了,debug到你哭。

不要把api看到如此神化……其实,你应该感谢有这些api的存在,工作也容易许多

有兴趣的话……自己去download整个java的source code来看咯 那你就知道api如何写出来的……嗯,说到java的low-level...就不能离开java native interface了。自己慢慢研究
回复

使用道具 举报

 楼主| 发表于 14-2-2012 09:49 AM | 显示全部楼层
本帖最后由 喷了一地 于 14-2-2012 12:43 PM 编辑

回复 7# faiko


所有的语言,到最后都要转换成1跟0 , 难到使用二进制编码才叫low??  表笑死人啦

windows跟linux不一样, 它并没有开放源码给大众.  我们只能使用microsoft 给的API.  读它提供的文件自己摸索。 所以做windows低层的开发一点都不简单,又缺乏资源,有时候比linux还难,   要知道在源代码面前,  没有秘密!!!    可是windows 却把一切都弄到很神秘
回复

使用道具 举报


ADVERTISEMENT

发表于 14-2-2012 12:00 PM | 显示全部楼层
谢谢分享,学到一点。。。
回复

使用道具 举报

发表于 14-2-2012 04:07 PM | 显示全部楼层
很久前在CSDN看过这篇转载了
C++是很有潜能的一项工具,但要学习周期长,发挥出功效需要一定的功底。
人员增长也很难跟上近几年的爆炸式资讯发展步伐,变相的阻止了大规模的普及。
回复

使用道具 举报

发表于 14-2-2012 09:41 PM | 显示全部楼层
回复  faiko


所有的语言,到最后都要转换成1跟0 , 难到使用二进制编码才叫low??  表笑死人啦

wi ...
喷了一地 发表于 14-2-2012 09:49 AM


呵呵……不说了 如果你是engineering background的话,就不会这样说。

还有,你根本不熟悉Open-Source vs.  Close-Souce的开发环境……跟你说,大企业都是用Microsoft的用具来开发的。没有support? 因为你没钱买microsoft的support MSDN很多很好的info...如果你是他们的大客户,遇到什么API的问题,他们直接帮你solve...你认为open source有这样的康头?没门!好的open source project...那些佛心developer还会提供整齐的documentation...不然,若要开发/extend functionality...烂documentation简直是噩梦。给我的话,我宁愿给多点钱,少点烦恼。反正都是charge在顾客的身上。

Linux始终只能在server entreprise独占鳌头……原因无它:成本低,毕竟server hosting根本就是cut throat的生意——service不够好:死、price不够吸引:死。然而,其它方面依然是microsoft为首……不然,visual studio可以一出再出?不怕没有人支持啊?

再看sun java...要死不死,最后不是给oracle买掉?
回复

使用道具 举报

 楼主| 发表于 14-2-2012 10:52 PM | 显示全部楼层
本帖最后由 喷了一地 于 14-2-2012 11:17 PM 编辑

回复 11# faiko

这个我就不知道了.  如果msdn 帮不到我, 我一般都是到Forum和Newsgroup求解.  以windows 跟 linux在网上资源的 比例来看, 同样一道项目, linux 占了9成

而且,向linux公司寻求技术支持也不是免费的吧?  他们也要收费的
回复

使用道具 举报

 楼主| 发表于 14-2-2012 11:43 PM | 显示全部楼层
本帖最后由 喷了一地 于 14-2-2012 11:45 PM 编辑
我寧願給多點錢,少點煩惱。反正都是charge在顧客的身上。
faiko 发表于 14-2-2012 09:41 PM


我很好奇,阁下究竟是从事哪一行的engineering?  产品的不是已经价格已经谈好了吗?  却因为自己做开发遇到苦难就可以多charge 顾客?
回复

使用道具 举报

发表于 14-2-2012 11:45 PM | 显示全部楼层
回复 12# 喷了一地

网路资源都是linux为主,是因为linux本身没有提供support...大家都是靠developers & community去维持它。Microsoft的生态环境跟Linux不一样。MSDN有付费版的……如果API发现有bug,还是documentation不清楚……file一个report...马上有人帮你handle。你去Linux Community Forum看……有些issue都是很慢才reply...甚至有些noob question,根本没人理会。这个就是付费和免费的分别……

所以,看到你之前的言论我真的觉得可笑。也不想跟你争论什么。你自己有爽到就好。你根本不懂Low-level programming是什么。

还有,linux的确有enterprise support... 但是,多人付吗?还有,open source的technical support都是非常贵。因此,大部分都选择去community求助。
回复

使用道具 举报

 楼主| 发表于 15-2-2012 12:10 AM | 显示全部楼层
本帖最后由 喷了一地 于 15-2-2012 07:37 AM 编辑
回复  喷了一地

所以,看到你之前的言論我真的覺得可笑。也不想跟你爭論什麼。你自己有爽到就好。你根本不懂Low-level programming是什麼。
faiko 发表于 14-2-2012 11:45 PM


对不起,令你发笑了。 我不是做hardware的, 不够low。 现在做windows 的ddk 开发。 在你眼中当然算是high level programming
回复

使用道具 举报

发表于 15-2-2012 10:01 AM | 显示全部楼层
本帖最后由 yeenfei 于 15-2-2012 10:03 AM 编辑
我很好奇,阁下究竟是从事哪一行的engineering?  产品的不是已经价格已经谈好了吗?  却因为自己做开发遇 ...
喷了一地 发表于 14-2-2012 11:43 PM


如果是NPI项目可以用NRE报销(工程界的术语)
回复

使用道具 举报


ADVERTISEMENT

发表于 24-2-2012 12:50 AM | 显示全部楼层
谢谢LZ的分享!
我是Pascal -> Assembly -> C -> C++ -> C#。
现在的工作语言是C/C++。
下一份的工作是C#。
我个人喜欢C/C++,它是一个很好、很灵活与很有效率的工具。
尤其是pointer,功能很大。
当然还有其他的。。。

我也学过java与C#。
不过还是喜欢C#。
它像C/C++/java。
它保留与强化了C/C++/java的一些功能,
也提供了java没有的一些功能。
(这些是什么呢?不好意思,没时间整理,有机会再说。
有兴趣可以上网或wiki找找它们的异同。)


至于open source vs close source之争呢,
个人觉得close source 与 open source 是势不两立的,
呵。。。

在工作上我是用close source,
不过我个人是倾向与支持open source的。
除了windows外,任何我需要用的软件都尽量找open source的,
如:LibreOffice, Gimp, SharpDevelop, codeblock/wxWidgets, OpenCV, AForge.Net, Python etc.
我也不用iPhone, 手机是Android。
上网用Firefox, Chrome。
个人觉得,Microsoft是个A钱的机构。
有时想想,如果我是Bill Gate就好了!
呵。。。
回复

使用道具 举报

发表于 2-3-2012 05:00 PM | 显示全部楼层
M$ 还真会赚钱。。。
VS2010我才用了不久。。。
又来个VS 11 Beta...
回复

使用道具 举报

发表于 2-3-2012 08:44 PM | 显示全部楼层
回复 18# javabean


   前几天才launch了SQL Server 2012
回复

使用道具 举报

发表于 2-3-2012 08:51 PM | 显示全部楼层
回复  javabean


   前几天才launch了SQL Server 2012
littlepenguin 发表于 2-3-2012 08:44 PM


visual studio应该很少人换
发现我的msdn里面又有一个windows server 8 beta
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 2-11-2025 02:59 PM , Processed in 0.318266 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表