|
查看: 3712|回复: 19
|
一篇很有意思的文章, 关于c++的
[复制链接]
|
|
|
本帖最后由 喷了一地 于 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。設置某個選項後,多重繼承就不支持了。
也許有編譯器可以這樣,但我確實還不知道。 |
|
|
|
|
|
|
|
|
|
|

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

楼主 |
发表于 14-2-2012 09:49 AM
|
显示全部楼层
本帖最后由 喷了一地 于 14-2-2012 12:43 PM 编辑
回复 7# faiko
所有的语言,到最后都要转换成1跟0 , 难到使用二进制编码才叫low?? 表笑死人啦
windows跟linux不一样, 它并没有开放源码给大众. 我们只能使用microsoft 给的API. 读它提供的文件自己摸索。 所以做windows低层的开发一点都不简单,又缺乏资源,有时候比linux还难, 要知道在源代码面前, 没有秘密!!! 可是windows 却把一切都弄到很神秘 |
|
|
|
|
|
|
|
|
|
|
发表于 14-2-2012 12:00 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 14-2-2012 04:07 PM
|
显示全部楼层
很久前在CSDN看过这篇转载了
C++是很有潜能的一项工具,但要学习周期长,发挥出功效需要一定的功底。
人员增长也很难跟上近几年的爆炸式资讯发展步伐,变相的阻止了大规模的普及。 |
|
|
|
|
|
|
|
|
|
|
发表于 14-2-2012 09:41 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 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报销(工程界的术语 ) |
|
|
|
|
|
|
|
|
|
|
发表于 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
|
显示全部楼层
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|