C++到底還能做什麼

肖舸:C++到底還能做什麼?


嗯,這是一位朋友發到我郵箱裏面的,很奇怪,發到了gmail郵箱,而不是我常用的hotma
il郵箱哈。

我呢,試着回答一下,如果回答得不好,叫做肖某人學藝不精,回去重新學習再來過哈。
呵呵。

一家之言哈,歡迎拍裝。

原文如下:

肖老師您好:
我現在是一名在校大學生,在學校期間自學C++有兩年的時間了,看過C++Primer,stl,ins
ide C++ model(侯捷翻譯的那本),com本質論等...
在學習C++的過程中感覺C++語言本身的確很強大,而且隨着學習的深入,我逐漸感到要想
在短時間瞭解這門語言的本質幾乎是不可能的.因爲我也學習過javaSE的一些東西,感覺就
java和C#來說,語言本身不難,不過在底層調用方面有時候就會顯得有點費力了.
不過對於C++我一直有很多疑問,所以想請教您,向您學習一下:
1)關於C++的應用:
曾經我以爲C++的應用比較多的就是用MFC來編寫各種應用軟件,但是,我現在感覺編寫軟
件這方面,用一些其他語言和開發平臺,要比C++方便和快捷的多,而且也聽人說,現在幾乎不
用MFC或是C++做軟件了.至於網絡應用和跨平臺方面,現在應該是C#和java在這方面的應用
比較有優勢吧.至於一些其他有關硬件方面比如嵌入式,單片機控制系統等方面,用C語言就
可以滿足大多是的應用了.所以,現在哪方面的工作是用C++來做的?
2)關於找工作的事:
現在學C++到底能做什麼樣的工作?就像我前面說的,因爲不大瞭解C++主要的應用在哪,所
以,也不清楚到,能用C++來做哪方面的工作.
3)關於com:
我之前聽人說,C++做到最後就是做com組件開發.情況是這樣的嗎?如果是的話,是不是用
com來做有關遠程調用對象和接口或是分佈式系統等方面的應用.如果想做com開發的話,現
在有哪些工作是需要用com組件編程的?
4)最後:
雖然我學習c++兩年了,不過感覺,沒做過什麼像樣的應用,因爲我在我們學校的一個網站
的技術部裏做過網站前臺開發的工作,就是html,css這些,感覺這些語言雖然在學習的時候
感到有很多東西不理解,但是通過做一些簡單的網頁,逐漸的基本掌握瞭如何編寫網頁代碼
.所以,也做過一些專題網站什麼的.不過,就是c++這門我學的時間比較長的語言,我沒有做
過什像樣的應用,想練習可是又找不到合適的方向.
所以,想讓您給我提點建議,我現在應該學習或者是做哪方面的東西來提高自己的C++水平
,還有就是在學習這門語言時,如何能夠通過實踐來更好的掌握C++.

P.S:
我的表達能力有限,可能有些問題我描述的不清楚,不過,還是希望老師能辛苦一下,儘量
幫我解答這些問題.
謝謝了.

我的回答:

嗯,這位同學你好,我看了你的問題,也有點頭大,說實話,你這個問題我不是沒想過,
我想得比較“野”,說白了,雖然我也用C++,但是,想這個問題的時候,我確實儘量站在
一個客觀的立場上在想,想出來的結論,說實話對C++不是很有利,我也怕說出來被人拍磚
,所以一直沒說,呵呵。

不過,你既然問得這麼細,我想我還是說說吧,說得不好聽,大家就擔待一下吧。

嗯,惡意拍磚,我拍回去!

這第一個問題,其實裏面就很不好回答了。

你說的“我以爲C++的應用比較多的就是用MFC來編寫各種應用軟件”其實話沒說完整,在
Windows下,這個大前提不能少,大家開發Windows的應用程序,如果使用VC++的話,建議
使用MFC來開發,因爲它是微軟提供的一套C++擴充類庫,專門針對WindowsAPI封裝,開發
Windows程序最方便。

這個話,倒退10年,是絕對正確的,因爲那會兒,Linux沒怎麼起來,100個程序員,估計
有99個都在爲Windows開發程序,應用軟件想當然跑在Windows下,這是對的,不過現在,
使用Linux開發的人越來越多,Windows即使在桌面平臺上,也一般只佔據Client市場而已
,Server中早就是Linux一家獨大了,沒辦法,老外版權意識強,但老外也想省錢,Linux
不花錢,WindowsServer花錢,就這一點,就夠了。國外大量部署的商用服務器,其實是L
inux平臺。

嗯,國內貌似也差不多。

所以,我在年初的演講《明日世界--雲端計算下的程序員需求分析》中強調,MFC可能會衰
落。起碼,沒有上世紀90年代那樣,一家獨大的感覺了。

這其實也正是我爲什麼一直強調大學生儘量打好基礎,不要太早涉足商業應用開發的原因
,因爲商用類庫,有生命期,今天最火,你學了,明天等你畢業出來,人家被淘汰了,你
不是做了無用功?甚至,工作都不好找。不信,有誰是專門研究TurboC的graphics開發的
,就是BGI,現在出來找得到工作不?

其實,MFC最大的問題,不是它自己的問題,是業界發展的一個普遍結果。

現在的社會,請問大家一句話,純正單機版程序的應用還有多少?大家打開自己的Window
s系統看看,有哪些應用是純粹單機版,一點不帶網絡訪問的?

恐怕不多了吧?

現在隨着互聯網的發展,網絡化應用越來越多,在Server端不好說,因爲要求高吞吐量,
高性能和高安全性,C/C++開發還佔有一席之地,但是,客戶端,恐怕未必了。

客戶端應用,一般都很貼合應用客戶的需求,更多的以數據庫服務爲主,目前,我這裏再
提個看法,純粹功能性應用越來越少,像暴風影音,像光陰魔術手,這類純功能應用其實
是越來越少,目前應用開發的主流,是利用強大的中心服務器的處理能力,爲用戶帶來越
來越多的數據密集型應用體驗。

QQ,它的用戶羣有多少?MSD和gtalk什麼的不說了吧?大用戶量,就是大數據量,帶來了
全新的溝通體驗。

SNS社區,包括我們這個網站,大家是不是在享受大數據量的應用體驗?

即便是強調終端用戶體驗效果的遊戲,目前大家可以比較一下,網遊和單機遊戲的比例,
就知道了,人們到底喜歡什麼樣的應用了。

這就帶來了一個問題,以後的社會發展,對於程序員來說,越來越偏重強中心,弱客戶端
的這麼一種開發模式,這其實就是雲計算的由來啦。

大家是不是發現,自己用IE的時候越來越多了?

但是,這就帶來一個問題,開發弱客戶端,還用得着C++這種大型的語言嗎?

我不說,大家自己想,學C#和Java容易,還是學C++容易?

大家別耍酷啊,呵呵,其實我當初就是爲了耍酷,非要學C++的,不過,要是站在商用立場
,站在老闆的立場,早出人才,快出人才,出便宜人才,嗯,Java和C#,PHP也算,就是不
能算C和C++,爲啥,學起來費勁,程序員學習成本高,自然價格也高,同樣的功能,用Ja
va實現,程序員滿地跑,用C++實現,老闆抱着程序員大腿哭,恐怕程序員都未必肯應聘,
太少啦,也太貴啦。

這不是肖某人危言聳聽啊,我也聲明一句,我一點歧視Java和C#這些程序員的意思都沒有
,僅僅是請大家比較一下,Java、C#程序員多,還是C++程序員多。

不過,這並不說明C++程序員的優勢啊,這反過來證明另外一個問題,大多數中小型企業,
在研發上投入不會很大的企業,急於做出成績,快速獲得市場表現的企業,在同等條件下
,即Java和C++都能滿足需求的時候,會選擇Java、C#、PHP等語言作爲公司的主流開發語
言,而不會選C++。

這對Java等語言來說,其實是最利好的消息,當越來越多的公司需要這方面程序員時,程
序員的市場越來越大,價格越來越高,而C++呢,雖然擺出一副曲高而和寡的樣子,端着架
子,但是,由於沒有太多公司選擇C++作爲開發語言,因此,反而市場越來越小,找不到工
作,即使找到,也得降價銷售,這就是市場規律。

這裏我要說一句,其實C++程序員,我個人認爲,前景並不好,從我個人經歷,和很多朋友
的感覺,發現有問題。主要就是不好找工作,工作機會太少,沒有太多的選擇空間,而Ja
va的朋友們,由於選擇空間大,其實很好談價,我好幾個Java朋友,薪水比我高的。呵呵


因此,我的建議,如果以後定位在應用程序員,主要做Client業務,建議不要選擇C++,更
多選擇Java和C#什麼的吧,工作更好找,還有,我的經驗,薪水與語言無關,大家千萬不
要以爲C和C++程序員薪水就一定高。高的有,肯定有,但是,不是所有人,也不一定就是
你。

嗯,說到這裏,順便說說第二個問題,C++找什麼工作,我的經驗,遊戲,無論是客戶端還
是服務器,需要C++程序員的,不過,由於目前引擎公司越來越強勁,很多遊戲公司自己不
開發引擎,而是用買的,因此,客戶端這邊,恐怕需求會越來越少,主要恐怕以後還是做
服務器需要。

但是也很難講,C++比Java主要就是速度,但是,硬件越來越快,多核開發越來越多,很多
網頁遊戲其實用PHP已經夠了,這個,C++程序員的工作空間也受到擠壓。

C不一樣,C呢,在很多時候,做驅動,做嵌入式小規模應用,滿夠用的,而老闆爲了節約
硬件成本,往往會挑選比較弱的平臺,Java等腳本語言目前跑不下來,只能用C,嗯,稍微
大點,用點C++也可以的。

在嵌入式平臺上,C++貌似還有一點市場。

不過很難講,目前的arm9已經接近當年P2的計算能力,隨着嵌入式CPU的發展,嵌入式系統
最終走向腳本化,也不是什麼難事。

其實,Java等腳本語言,針對C++最主要的優勢就是沒有指針,沒有很多費解的東東,學習
曲線低,程序員容易學出來,還有就是底層已經處理了很多細節,上層更多地專心與用戶
的業務,這樣,用戶業務貼合度好,更容易受到用戶的青睞,還有就是,不處理複雜數據
結構,大家都調用基本庫,程序成功率高,bug率低,開發成本低,公司容易賺到錢。

說白了,Java相對C++,不是技術在推動,而是錢在推動,所以,C++必敗。

com就不說了吧,com本質上是跨進程遠端調用,dcom甚至允許跨機器。但是,大家想想,
其實正是因爲com的存在,進一步擠佔了C++的生存空間,越來越多的基本C++功能,被以c
om形式提供出來,最終被Java、C#等其他語言所調用,擴充了其他語言的功能和性能,使
原來僅有C和C++能做的事情,現在Java、C#等做起來也很好,很快。

其實,我私人認爲,com更像是C++程序員自己爲自己挖的墓坑。

當把基本功能支持完善,Java、C#等語言獲得了更好的性能和功能支持,可以通過com調用
很多C和C++的基本庫,獲得更好的開發能力的時候,純UI,純數據應用,其實已經被Java
和C#牢牢佔據了,C++沒什麼事了。

嗯,針對你最後一個問題,學習方向問題,我的建議是,基礎的要學,但是,出於好找工
作的目的呢,我建議你應該學點html相關,css相關。

如果不是立志,這輩子就要做一個C++程序員,(我總覺得純正的C++程序員有點曲高而和
寡,不好找工作),而是很務實的,希望畢業後在程序界迅速找到一份工作,我建議多學
點Java和C#這類腳本語言,對於各種數據庫的訪問做到滾瓜爛熟,嗯,基本的數據結構和
算法這不說了,要熟悉的。

這樣起碼幫助你在畢業後,能找到飯碗。

不過,這並不是說你這輩子不能做C++,當找到飯碗,工作穩定了,在有空的時候,是可以
繼續學習C和C++的,學好了,有合適的工作機會,跳一下也不是不行,說不定,收入更高


嗯,還是那句話,程序員就是程序員,寫得出程序就是程序員。程序員不要在自己腦門上
加太多修飾,什麼C++程序員,什麼Java程序員,什麼Windows程序員,什麼Linux程序員,
這些加了修飾的程序員,其實不容易存活的。

要能掌握程序設計的通理,什麼語言,什麼平臺,掌握了基本的程序設計道理的時候,其
實都一樣。

大學生,打好基礎,畢業先抓飯碗,總不好意思工作了還要父母養活。

在飯碗穩定的時候,隨時注意學習,特別是注意利用自己的基礎功底,跟蹤主流語言技術
,不斷與時俱進,方能立於不敗之地。

C++不是永恆的,C不是,Java也不是,C#更不是,沒有永恆的語言,沒有永恆的平臺,只
有永恆的程序設計技術。

這就是我的看法。

嗯,本文寫到這裏,還是要補充一點:

雖然上面本人寫了很多關於C++前景堪憂的言論,不過呢,我本人確實還是在從事C/C++的
開發工作。我想我並不是對C++有什麼偏見,僅僅是想盡量客觀一點,不帶個人感情色彩,
討論一下C++程序員的就業前景問題。

其實C++我認爲還是一門非常優秀的開發語言,它與C配合,可以實現很多底層的調用,這
是Java等語言無法企及的。

比如我最近完成的一個高精度計時器(http://blog.csdn.net/tonyxiaohome/archive/2010/04/29/5541805.aspx
),實現了差不多0.0031ms的計時精度,就我個人的能力而言,恐怕只能C/C++來完成,其
他語言也許能做到,但至少我不會。

我也希望各位C++er能正確看待本文的論點,起碼,我們現在還是一起的。呵呵。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章