這可不是我寫的,我只是看到覺得不錯(cuò),才貼的哦。
:
不要以為這個(gè)題目是聳人聽聞,但就目前的形勢(shì)來看c/c++是需要退出舞臺(tái)或者說的婉轉(zhuǎn)一點(diǎn)是需要更新?lián)Q代了.
我想在未來的一兩年里,作為程序員等級(jí)評(píng)判的標(biāo)準(zhǔn)之一c/c++(不管是mfc還是bcb)將會(huì)讓位給三種編程語言,1.sun的java2.windows平臺(tái)上的c#3.xml
為什么這么說呢,我認(rèn)為最大理由是目前的應(yīng)用程序正在從基于獨(dú)立的操作系統(tǒng),傳向基于internet平臺(tái).
我們以前開發(fā)應(yīng)用程序都是依賴于平臺(tái)的功能調(diào)用,mfc,bcb都是這樣.而現(xiàn)在日益火熱的internet編程卻最不想關(guān)心的就是某一個(gè)平臺(tái)的調(diào)用,譬如說要實(shí)現(xiàn)b2b的電子商務(wù)那么就需要做不同平臺(tái)的集成,如果我是程序員我最care的就是如何實(shí)現(xiàn)商務(wù)邏輯
而不是各種平臺(tái)之間的通信和管理.那么我們最迫切需要的就是一種與各種平臺(tái)調(diào)用無關(guān)的語言,這中語言只注重程序邏輯的設(shè)計(jì)而不涉及平臺(tái)的調(diào)用.而我們熟悉的c/c++卻恰恰不是為這個(gè)而設(shè)計(jì)的(赫赫這也不能怪c/c++在70年代誰能知道現(xiàn)在internet的情況呢).c/c++的最初設(shè)計(jì)目的是為了設(shè)計(jì)unix產(chǎn)生一種介于匯編和高級(jí)語言之間的一種開發(fā)高效而性能不低的語言.他要比其他任何高級(jí)語言都要關(guān)心系統(tǒng)的物理結(jié)構(gòu),譬如一直是毀譽(yù)攙半的指針.指針之所以強(qiáng)大就是應(yīng)為涉及了系統(tǒng)物理內(nèi)存的管理.他可以使得程序員和系統(tǒng)之間成為一種半透明狀態(tài).但是就是這種半透明的狀態(tài)讓指針帶來了更多的不穩(wěn)定性.
c/c++在面向internet的編程中卻無任何優(yōu)勢(shì)可言.跨平臺(tái)的電子商務(wù)軟件最害怕顧及各種平臺(tái)之間的天差地別的系統(tǒng)調(diào)用,最害怕時(shí)不時(shí)的由于內(nèi)存泄漏而crash.c/c++的優(yōu)勢(shì)在這里卻成為了劣勢(shì).即使在windows平臺(tái)上開發(fā)基于windows dna的solution
用的最多的還是vb做的dcom而不是vc的atl做的dcom,因?yàn)閏/c++雖然高效但是太容易
出錯(cuò),如果不是很小心的釋放內(nèi)存nt很快就會(huì)資源不足.
java就是最先看到這種情況,他用jvm實(shí)現(xiàn)了平臺(tái)無關(guān)用內(nèi)存回收實(shí)現(xiàn)了穩(wěn)定健壯.但是相當(dāng)多的c/c++程序員抱怨java太慢了.的確即使到j(luò)ava2速度仍然是一個(gè)大問題.我曾經(jīng)是一個(gè)c/c++堅(jiān)決擁護(hù)者在許多論壇里和java程序員打筆仗.但是我逐漸意識(shí)到面對(duì)與internet平臺(tái)而不是特定的操作系統(tǒng)的時(shí)候java的速度問題往往是一個(gè)小小的瑕疵.我們可以想象那一個(gè)電子商務(wù)網(wǎng)站會(huì)用我們手頭的pc做服務(wù)器,他們不是sun的e1000就是ibm的risc6000.在這種平臺(tái)上java這點(diǎn)速度問題只是a peice of cake.程序員只需要專注與商務(wù)邏輯的編程,而不必要關(guān)心數(shù)組是否越界,對(duì)象內(nèi)存是否釋放更不需要關(guān)心是不是unix和windows的系統(tǒng)調(diào)用不一樣.
微軟的c#可以說是一種java與c/c++的雜合體,他可以回收內(nèi)存,可以平臺(tái)無關(guān).但是
他又可以實(shí)現(xiàn)一些java沒有的功能譬如在標(biāo)記的程序段內(nèi)用指針自己管理內(nèi)存,可以實(shí)現(xiàn)操作符的重載等等.為什么要這樣做我想也許c#還肩負(fù)了一定的面向操作系統(tǒng)開發(fā)的任務(wù)例如winform.他基本上的思想和java類似,但是實(shí)現(xiàn)的方法又不一樣他不通過jvm解釋中間代碼,而是吧源代碼編譯成p代碼然后通過cls庫和jit在平臺(tái)上及時(shí)編譯為100%的本地代碼來執(zhí)行.他的pe代碼是獨(dú)立于平臺(tái)的,但是cls和jit卻根據(jù)不同的平臺(tái)而設(shè)計(jì).因此c#的平臺(tái)獨(dú)立有點(diǎn)類似于c/c++在不同平臺(tái)上的移植使得c#比java來的更快.而且微軟還許諾cls和jit不僅針對(duì)c#還可以針對(duì)任何語言譬如pascal,smaltalk,basic因此將來有可能所有的編程語言都是可以平臺(tái)無關(guān)的(ms真是毒,所有的語言都平臺(tái)無關(guān)java還有什么優(yōu)勢(shì)呢,據(jù)說ms正在開發(fā)基于pascal smaltalk的asp+).
xml很多人可能認(rèn)為與html相類似的語言和c/c++,java,c#完全不在一個(gè)檔次上的語言.其實(shí)不然.我們知道不管是c#還是java都是通過統(tǒng)一地層計(jì)算來實(shí)現(xiàn)平臺(tái)無關(guān).那就必須在性能上付出一點(diǎn)代價(jià).而xml卻能夠?qū)崿F(xiàn)不同的語言之間的調(diào)用.譬如說一個(gè)網(wǎng)占用java用bean實(shí)現(xiàn)一個(gè)出貨功能,另一個(gè)網(wǎng)站用dcom實(shí)現(xiàn)一個(gè)入庫功能 .如果這個(gè)網(wǎng)站需要實(shí)現(xiàn)b2b,用一般的方式就是在他們之間寫轉(zhuǎn)換程序.而xml通過標(biāo)記語言來描述各自的借口特性.兩端通過解析xml文本來實(shí)現(xiàn)互相的調(diào)用,無需任何中間轉(zhuǎn)換程序
只要一張xml文本就能實(shí)現(xiàn)bean和dcom之間的通訊(要說清楚其中的機(jī)理,需要很多xml概念如果有興趣可以到msdn.microsoft.com/xml或者www.s3c.org去看看).目前ms的.net中最核心的技術(shù)soap就是完全基于xml的遠(yuǎn)過程調(diào)用.
介紹了那么多可能有點(diǎn)跑題,其實(shí)我最想說的就是21世紀(jì)的程序員應(yīng)該從面向操作系統(tǒng)的傳統(tǒng)方法中走出來,學(xué)習(xí)一點(diǎn)如何面向internet平臺(tái)編程的技術(shù)和概念.不要在無畏的那種c/c++工具好之類的地方爭(zhēng)論.我想不出一兩年不管是bcb還是mfc都要淘汰,
到那個(gè)時(shí)候要爭(zhēng)論的不是bcb好還是mfc好而是c#好還是java好.至于xml那是不管sun和ms以至于世界任何大的it公司包括intel,hp都在奮力研究的技術(shù),不學(xué)習(xí)可能就要被淘汰.至于c/c++可能就會(huì)淪落到現(xiàn)在匯編的地位在某些系統(tǒng)效能敏感的地方還能見得到.
如果是編程語言的初學(xué)者那么我建議學(xué)習(xí)java同時(shí)關(guān)注c#,他們首先比c/c++簡(jiǎn)單沒有復(fù)雜的宏,指針,摸版等等讓人摸不招頭腦的概念.而且是完全面向?qū)ο?比c/c++的半調(diào)子面向?qū)ο笄宄亩嗪脤W(xué)的多.(我推薦目前學(xué)習(xí)java,畢竟c#還沒有發(fā)布而且剛發(fā)布的beta版的編譯器要求高的嚇人需要win2000 adv server沒有128m內(nèi)存的別想跑.話說回來c#和java一摸一樣沒有什么太大的區(qū)別學(xué)好了java將來的c#將會(huì)信手拈來)
對(duì)于目前的windows下的編程者來說學(xué)習(xí)mfc的價(jià)值還是有一點(diǎn)的但是不是太大.至少可以熟悉windows內(nèi)在機(jī)理.但是我還是推薦關(guān)注一下c#將來的windows.net都是基于c#而不是mfc.而且c#要比mfc簡(jiǎn)單的多實(shí)現(xiàn)一個(gè)同樣的windows桌面應(yīng)用c#的開發(fā)速度是mfc的兩到三倍而且?guī)缀蹩床灰娦阅艿膿p失. visual studio 7.0中 vc將是一個(gè)次要的開發(fā)工具最主要的開發(fā)工具就是c#和vb7.0.至于borland我想是不可能不跟著ms走至少windows平臺(tái)上是這樣說不定明年就有一個(gè)c# builder出來作為borland的主打產(chǎn)品而不是c++builder了.說一句玩笑話wenny說不定很快會(huì)把這里變成www.c#help.net了