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等語言無法企及的。
比如我最近完成的一個高精度計時器(
我也希望各位C++er能正確看待本文的論點,起碼,我們現在還是一起的。呵呵。