天天看點

C++的就業,和發展方向C++到底還能做什麼?

C/C++的就業,發展方向 (2012-11-27 17:02:25)     原文 :C/C++的就業,發展方向_LoongChang_新浪部落格

http://blog.sina.com.cn/s/blog_78b2ae1c0101d4o9.html C++學習路線

從學習C++到現在已經有四個年頭了,但是從來沒有很深入學習,有人說C++是面向對象的程式設計語言,但是我在這裡想說的是,C++是一個多泛型的程式設計語言,它既可以面向過程,比如我們完全可以用C++寫C的代碼,這是沒問題的,它也是一個面向對象的語言,它具有面向對象的特征,可以模拟現實世界中的各種事物;它也是一個泛型程式設計語言,裡面包含大量的模闆特性,比如C++的标準庫STL就是基于模闆的一個庫,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++的奇妙和大智慧。

3.這時候推薦你看C++ Primer中文版(第4版),你可以自己去當當網看看大家給它的評價http://product.dangdang.com/product.aspx?product_id=9157098&ref=search-0-mix  一本久負盛名的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#一樣塊.

繼續閱讀