C++的就業,和發展方向
C++初學者一般可以按照下列的順序進行學習:
剛開始接觸C++時,如果是學校開了C++課程的話那就更好了,可以跟著老師的進度學習,在課餘時間可以多做一些習題或上機練習。如果你是完全自學,你可以找一本面向大學生的教材(譚浩強的教材比較適合入門)。掌握了一些基本的C++概念了,那就開始學習面向物件的部分了,這部分內容比較多,初學者理解起來也會感覺比較吃力,建議多上機練習。在基本瞭解了C++的面向物件之後,可以開始學習模板庫,比如STL,因為STL在我們的軟體開發中非常重要,甚至有些招聘都要求會STL,(STL:標準模板庫),這裡麵包含了大量的資料結構和演算法的實現,有些可以直接拿來用,但是如果你對資料結構有特殊需求,那麼你就要自己去實現這些資料結構。
如果你已經進入了C++的世界,那麼你就可以進階學習了,學習了這些你或許感覺有疑惑,為什麼我不能開發出一個帶介面的程式呢,呵呵,如果你又這樣的需求,那麼你可以學習一些介面庫,比如QT,MF等,這兩個是比較常用的,QT入門稍微容易些,但是往後深入會比較困難,MFC入門起來會麻煩一點,有很多人也就是因此而放棄,但是甜頭在後面,只要入門了後面的路將會是一馬平川,障礙比較少。
庫,在c++的世界裡具有很高的位置,你如果對某一領域感興趣,你就需要去了解和學習相關的庫,比如三維圖形庫OPENGL,網路通訊庫ACE等等,這些庫基本是都是標準C++寫成的,一般都是跨平臺的。也許有很多會有疑問,我學習了C++以後能做什麼樣的軟體開發工作?目前C++軟體開發主要集中在以下領域:
1、伺服器端開發:很多遊戲或者網際網路公司的後臺伺服器程式都是基於C++開發的,而且大部分是linux,unix等類似作業系統,所以說,你如果想做這樣的工作,你需要熟悉linux作業系統及其在上面的開發,熟悉資料庫開發,精通網路程式設計。
2、遊戲:目前很多遊戲客戶端都是基於C++開發的,除了一些網頁遊戲可能不是,這個領域需要學習的東西就比較多,個人不太瞭解就不多說。
3 、虛擬現實模擬:這個也是發展很快的計算機領域,目前各種數字地球,數字城市,虛擬地理環境什麼的,出現了這方面的大量應用,不過也不限於這些方面,比如科學計算視覺化也是其中一個方向。這個方向重點需要學習的是圖形學。
4 、數字影象處理:現在市面上有很多VC++影象處理的書籍,可見在這個領域的應用軟體開發也是佔了很大比重,需要深入學習數字影象處理和模式識別等課程。
呵呵,說到這裡都感覺好像跑題了,都沒看到具體什麼學習路線啊,就當是自己的學習感言吧,有什麼不對的,也歡迎大家討論。
C++ 學習路線和看法
C++大體分為C++的基本知識,template C++, Object-Oriented C++, STL四部分。
1.譚浩強的《C++的程式設計》是入門的首選,講的易懂,對那些初學者來說是非常不錯的選擇。雖然這本書沒有概括到C++的全部內容,但足可以把你引進C++的殿堂門口感受感受。
2.上一本書的缺少了模板,面向物件和STL部分,這時候可以看看THINKING IN C++,你會有種登堂入室的感覺,體會到C++的奇妙和大智慧。
4.C++當然不會缺少經典的書,還有很多好書,自己有空看看哪本和自己的胃口 就買來看看吧。
5.在學習過程中切勿求快,心浮氣躁。一定要多多練習,把模擬兩可的東西自己程式設計來驗證下。
當你學習C++後,你會急著想去編寫帶華麗介面的程式,展示展示自己。
選擇MFC和QT,你可以選擇一個:(以下是我的個人觀點)
1.很多公司都需要MFC的開發人員。
2.MFC的書籍肯定會遠遠多於QT,並且網上的資源也是這樣的。
3.學習MFC的人很多,你在不懂得時候可以隨時請教他們。
1.QT是完全的面向物件,MFC並不是。
2.諾基亞在官方網站宣佈,將採用Qt作為未來Symbian和MeeGo平臺的唯一開發架構。可見QT的嵌入式份額正在擴大。
3.MFC編寫的程式沒有QT那麼好的跨平臺性,所以QT常用在手機(meego和symbian),linux,window平臺等等平臺上。
學習MFC的路徑:
1.孫鑫老師有一本 vc++的書和配套視訊,可以幫助你快速的對MFC有一個基本的認識。
2.《Windows程式設計(第2版)》講的非常的細緻,會非常有耐心地為你講解每一個細節。對本質剖析得非常好。講原理,讓你知其實還知其所以然。
3.學習侯捷的<<深入淺出>>,你就開始瞭解MFC的內部機制,讓你對MFC的執行來龍去脈理解。
4.Visual C++技術內幕,又是一部帶你深入瞭解MFC的經典書。
學習QT:
1.C++ GUI Qt 4程式設計(第二版)經典之作,內容緊扣,詳實清楚,QT必備書。如果你發現這本書有點難,可以先看看零起點的書籍。
2.QT的文件和強大的線上支援。
C++到底還能做什麼?
C++到底還能做什麼?肖舸
嗯,這是一位朋友發到我郵箱裡面的,很奇怪,發到了gmail郵箱,而不是我常用的hotmail郵箱哈。
我呢,試著回答一下,如果回答得不好,叫做肖某人學藝不精,回去重新學習再來過哈。呵呵。
一家之言哈,歡迎拍裝。
原文如下:
我呢,試著回答一下,如果回答得不好,叫做肖某人學藝不精,回去重新學習再來過哈。呵呵。
一家之言哈,歡迎拍裝。
原文如下:
肖老師您好:
我現在是一名在校大學生,在學校期間自學C++有兩年的時間了,看過C++Primer,stl,inside 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花錢,就這一點,就夠了。國外大量部署的商用伺服器,其實是Linux平臺。
嗯,國內貌似也差不多。
所以,我在年初的演講《明日世界--雲端計算下的程式設計師需求分析》中強調,MFC可能會衰落。起碼,沒有上世紀90年代那樣,一家獨大的感覺了。
這其實也正是我為什麼一直強調大學生儘量打好基礎,不要太早涉足商業應用開發的原因,因為商用類庫,有生命期,今天最火,你學了,明天等你畢業出來,人家被淘汰了,你不是做了無用功?甚至,工作都不好找。不信,有誰是專門研究TurboC的graphics開發的,就是BGI,現在出來找得到工作不?
其實,MFC最大的問題,不是它自己的問題,是業界發展的一個普遍結果。
現在的社會,請問大家一句話,純正單機版程式的應用還有多少?大家開啟自己的Windows系統看看,有哪些應用是純粹單機版,一點不帶網路訪問的?
恐怕不多了吧?
現在隨著網際網路的發展,網路化應用越來越多,在Server端不好說,因為要求高吞吐量,高效能和高安全性,C/C++開發還佔有一席之地,但是,客戶端,恐怕未必了。
客戶端應用,一般都很貼合應用客戶的需求,更多的以資料庫服務為主,目前,我這裡再提個看法,純粹功能性應用越來越少,像暴風影音,像光陰魔術手,這類純功能應用其實是越來越少,目前應用開發的主流,是利用強大的中心伺服器的處理能力,為使用者帶來越來越多的資料密集型應用體驗。
QQ,它的使用者群有多少?MSD和gtalk什麼的不說了吧?大使用者量,就是大資料量,帶來了全新的溝通體驗。
SNS社群,包括我們這個網站,大家是不是在享受大資料量的應用體驗?
即便是強調終端使用者體驗效果的遊戲,目前大家可以比較一下,網遊和單機遊戲的比例,就知道了,人們到底喜歡什麼樣的應用了。
這就帶來了一個問題,以後的社會發展,對於程式設計師來說,越來越偏重強中心,弱客戶端的這麼一種開發模式,這其實就是雲端計算的由來啦。
大家是不是發現,自己用IE的時候越來越多了?
但是,這就帶來一個問題,開發弱客戶端,還用得著C++這種大型的語言嗎?
我不說,大家自己想,學C#和Java容易,還是學C++容易?
大家別耍酷啊,呵呵,其實我當初就是為了耍酷,非要學C++的,不過,要是站在商用立場,站在老闆的立場,早出人才,快出人才,出便宜人才,嗯,Java和C#,PHP也算,就是不能算C和C++,為啥,學起來費勁,程式設計師學習成本高,自然價格也高,同樣的功能,用Java實現,程式設計師滿地跑,用C++實現,老闆抱著程式設計師大腿哭,恐怕程式設計師都未必肯應聘,太少啦,也太貴啦。
這不是肖某人危言聳聽啊,我也宣告一句,我一點歧視Java和C#這些程式設計師的意思都沒有,僅僅是請大家比較一下,Java、C#程式設計師多,還是C++程式設計師多。
不過,這並不說明C++程式設計師的優勢啊,這反過來證明另外一個問題,大多數中小型企業,在研發上投入不會很大的企業,急於做出成績,快速獲得市場表現的企業,在同等條件下,即Java和C++都能滿足需求的時候,會選擇Java、C#、PHP等語言作為公司的主流開發語言,而不會選C++。
這對Java等語言來說,其實是最利好的訊息,當越來越多的公司需要這方面程式設計師時,程式設計師的市場越來越大,價格越來越高,而C++呢,雖然擺出一副曲高而和寡的樣子,端著架子,但是,由於沒有太多公司選擇C++作為開發語言,因此,反而市場越來越小,找不到工作,即使找到,也得降價銷售,這就是市場規律。
這裡我要說一句,其實C++程式設計師,我個人認為,前景並不好,從我個人經歷,和很多朋友的感覺,發現有問題。主要就是不好找工作,工作機會太少,沒有太多的選擇空間,而Java的朋友們,由於選擇空間大,其實很好談價,我好幾個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++功能,被以com形式提供出來,最終被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能正確看待本文的論點,起碼,我們現在還是一起的。呵呵。
老兄這個說得有點好向與我感覺不同喲。我是從C#,JAVA轉C++的。感覺很好找工作啊,而且現在講究使用者體驗,UI以及操作方面,客戶端天然佔優勢。。而且現在桌面方面,windows下仍然90%的軟體是C++的,其餘的也大多被DELPHI,VB一類佔據,C#,JAVA極少。。linux下C++半壁江山,mac仍然是C的天下。。(object-c也是C嘛)。。開發效率方面,qt,c++ builder等IDE工具,幾乎與c#一樣塊.