隨著互聯網的崛起,還有必要學習 C++ 嗎?貌似 C++ 越來越難找工作了...

用c++的互聯網公司越來越少了,c++的範圍越來越窄了,好公司要求又太高,小型創業公司給不起工資又太挑剔,還有必要一直做c++嗎?不知道將來又是個什麼情況......

------------------------------------------------------------------------------------

這幾天看到各路大神的回復,首先謝謝你們的回答,也告訴你們一個好消息,題主實際上已經找到滿意的工作了,只是想想看看各位大神是怎麼回復的。至於題主接下來要走什麼樣的道路題主自己很清楚。

其實思考任何問題和回答任何問題,從不同的角度有不同的答案,做it行業,最重要的你喜歡做什麼不喜歡做什麼,你想研究什麼你不想研究什麼,或者你帶著什麼目的從事什麼樣角色,我想在座的各位大多數其實是為了工作而去學習,不工作去學習去it知識除非這個人腦子有毛病。所以不管你從什麼樣的角度出發,做任何事情首先要沉下心來好好乾,去學習知識(這裡不談學習方法或者怎麼學,比如你想學習c++,我想下面各路大神的回答也許能幫到你),不管是c++也好還是其他語言也好,只要選擇了就好好的去學,學的時候也要學習業務知識,如何把你學到的知識應用到業務中去,這樣提升速度也快。

至於什麼學哪一門語言比較好,其實題主也不好回答,這個問題自上古時代至今是個爭論不休的話題,個人認為,覺得什麼好就去學好了,什麼給你帶來最大的好處就去學什麼好了,你要用到什麼就去學什麼好了,學的時候認認真真去學,想方設法的去學,貴在堅持,這樣就夠了,學好了,機會自然而然的會找到你的。

至於工作,努力工作,努力學習工作中所用到的每一個知識,記得多總結(這樣成長更快)。用了哪些知識,為什麼要這樣用,有哪些技巧和要注意的地方。

每一個大牛都是從點點滴滴的積累成長起來,耐心,需要的耐心,靜下心來對付一切.不要急躁,切記切記...............

ps:題主有太多太多的話要說,可是寫著寫著就只能寫出上面這麼多了。


汽車剛剛進入民用市場的時候,會開車的人很多都會修車,後來汽車普及,技術進步,現在不要說會修車,會開手動檔會搭電線的人都不多了,修車也成為一個專而精職業。

編程技術也一樣,像BAT這種企業會大規模自建基礎設施的時代已經過去,下一代互聯網巨頭,即使如滴滴、美團這般體量的,留給基礎設施工程師的職位也不會很多。以後業務系統開發的門檻還會持續降低,而C/C++這樣的系統語言,更擅長基礎設施方向,這個方向的職位會越來越少,而且只有大型企業才玩得起,職位對人的要求也會越來越高,這個方向的成長之路也會比較艱難,但是相對於做業務系統開發的,C/C++資深工程師的經濟回報還是會更高一些。


去年辦PERM,提交材料的時候我選了一大堆,精通C++,熟悉各種shader語言,強烈地推進了GPGPU,圖形論文和產品一大把, etc。

律師問,「你TMD都是在說些什麼。這樣吧,你會C#嗎?」

「會。」

「那就行了。」

最後,用精通C#的名義辦的PERM,秒過。

唉。。。


我在上大學的時候幾乎就只學習C++,後來實習的時候去了微軟,結果到了那裡才知道,那個組是不用C++的,怎麼辦?憑藉著C++帶給我的殷實的功底,我按時完成了老闆給我的「兩個星期內學會C#和WCF基礎知識」的工作,順利的開始工作。


要加個定語,是低水平的C++越來越難找工作了。

基本上是這樣的:

A:你C++掌握的怎麼樣?

B:精通。

A:滾。

C:我覺得還可以

A:好,我們來看看這個問題怎麼寫,balabala

C:balabalabala……

A:1、嗯,還不錯,留

2、水平不行,下一個

2016-07-24———————————————————————————

好吧,我說得不夠具體,沒有清楚闡述出我的感受,有人覺得我是C++優越感,我還是補充一點內容好了。

先說結論,為什麼是低水平的C++越來越難找工作了呢?因為C++的使用範圍少了。

以前什麼東西都拿C++開發,從底層到各種App都大量使用C++,其他語言都顯得小眾。

但是現在呢?主流的操作系統內核有C搭配彙編,上層App有各種更加人類友好的語言。C++的應用普遍集中在介於操作系統和上層應用之間的基礎設施建設,以及高性能計算的場合。

對IT行業比較了解的都應該清楚,這些場合對代碼的質量要求普遍較高,對從業人員的水平要求必然較高。畢竟一坑坑一群隊友,上面一堆東西指著你運行呢。

這就是為何我說低水平的C++難找工作,因為用C++的崗位要求高啊。誰招剛入門C++的去做基礎設施和高性能核心崗位呢?

下面那個就只是我隨便編的段子了。基本上現在大家公認隨口說自己精通C++的一般都是經驗尚淺,總算把C++各種語法學成歸來自信滿滿,覺得自己挺行,還沒意識到未來有很多坑等著自己。一般有這樣認識的年輕人工作中要吃癟好多次之後才會學乖。

我雖然主要靠C/C++吃飯,但是說實話,我是不太喜歡C++這個語言的。C++這語言的坑還是挺多的,基本上能說是我用過的語言中最複雜的。一門工具語言,為什麼這麼複雜?而且隨著標準的更新,特性越來越多,也變得越來越複雜。相比之下,我覺得C的標準更新更偏向於保守,堅守自己的特長,更加符合其定位。C++的定位似乎就是萬能語言,但是真的不是那麼人類友好。

現在C++作為一個中層語言,很多時候是因為歷史慣性,繼續使用C++,並不是不可取代的。

我覺得只要有一個語言能夠跨平台,高效且相對人類友好,能與C二進位介面兼容,慢慢取代C++的中層語言地位不是不可能。

但是,這個過程應該還挺長,畢竟現在整個計算機體系都架構在C++之上,所以學好C++並不是沒有前途,再說,這麼複雜的語言你都會了,換啥不行?

我看到知乎上有些人有C++優越感,有些人還總是琢磨一些奇技淫巧,大有把C++語言本身當作一門研究對象的趨勢。我覺得吧,你水平十分高,時間十分充裕,自己玩玩就好了,不要老是帶壞新入行的。

在我看來,計算機語言畢竟是我們發明出來的一種工具,最終我們要解決的是實際業務問題,整天玩弄茴香豆的茴字有四種寫法毫無意義。

自己把工具硬是當做行為藝術來玩完全沒有問題。就像有些轉筆玩得很牛逼的人,我們還是很尊敬和崇拜的嘛。但是,藉此存在優越感嘲弄別人就是不可取的。你不能說你們只會用筆寫字不會轉都是渣渣,你信不信我們一起打你?你過來,我們保證不打死你。


如果說你學 C++ 的時候,沒有學到 C++ 那部分「無論什麼語言都會很有幫助」的那部分,那算是白學了:

1. 資源所有權(shared_ptr/unique_ptr/observer_ptr),RAII(finally/using/defer)

2. 泛型(你會發現很多語言所謂的「泛型」都是 C++ 模板的閹割版本)

3. 優化往往要求對編譯器優化、對象模型、操作系統與組成原理有很多了解

4. 內存管理(內存池之類)

5. 數據結構 演算法(STL)(沒用過 C++ 刷 OJ?)

6. 你想學明白 C++ 必然要用它寫過各種不同領域的玩意吧,不寫東西怎麼算會?包括但不限於伺服器、圖形、編譯器、GUI 程序、基本庫等。

所以說,學明白 C++ 根本就不可能只學到那點破爛語法。我就不相信我說的這些你都熟悉找不到工作。最重要的,學 C++ 還能學到語言設計的反面典型,多好(笑


開完手動檔再開自動擋不是跟玩一樣


有必要,因為你的C++還不夠好。


有段時間沒在知乎答題了,今日病床前來一發。

我覺得題主真的是啥都沒弄懂就來IT業了,然後現在無論是問題還是看完各種回答以後的思考都沒看出有多少到位的地方。

你們C艹程序員咋就那麼難伺候呢。(逃。。。

============

好的認真一點。

其實無論你是做啥的,手頭上的活要熟,更得有一套原則性的東西作為指導,另外就是要有一個高屋建瓴的視角能夠認識到你的職業和你的行業。

每個搬磚的其實都想當個包工頭。或者至少不再做一個搬磚的下工。

但是畢竟反覆搬磚提升不了你的砌牆水平啊。

。。。。。。。。。。。。。

至於題主說得IT行業學這些是浪費這種話,真的是要拉出去槍斃一百分鐘了。

喬布斯爺爺說了啊,每個人都應該學編程!!!每!個!人!

視野呢!你以為別人學了搬磚砌牆就一定得上工地啊,搞金融的高富帥們用VBA和Python就能把你這輩子的錢分分鐘掙上來啊。

另外關於學。

我不知道題主的定義是什麼,但是對於業務邏輯這種理應文檔化並且在團隊內無縫共享的東西,題主是如何冠以學的名義的。換句話說這特么其實是個團隊的問題,為啥又要扯到學C艹這種東西上來。一個客戶花八十塊買了一年的扶老人險第二天被他前岳父訛了要理賠你說這用Java或者PHP應該怎麼寫?用C++呢?

手上的活,其實就是你要用和你準備轉向的技術,如果不紮實,基本上沒人覺得你靠譜。另外這些技術其實能提供的並不能算多,所以需要一些東西能夠給你掌握和熟悉一些原則。

綜合來說C++能夠很好的滿足後者,也就是為啥一般我推薦人入門都是它的原因。

至於剩下的東西,真的就靠你自己的悟性了。

比如為啥保險還特么要一個自助索賠系統。

以上。


看了 @vczh 的回答有感,我當初去MSRA實習的時候,當時也是不會C#的,組裡的code是一部分C++一部分C#的,C++用的是C++11標準,然而無論是C++11還是C#當時我都不太會。然後,我憑藉著C++的功底,只用了幾天時間,就讀完了組內已有的代碼,又過了幾天,不僅僅這些都會寫了,而且還能寫出來我mentor和組內的RSDE看完之後一點毛病挑不出來的code。所以我覺得C++作為基礎還是很重要的


還算熟悉?

理解auto和模板參數決議的規則么?

std::copy和std::find的迭代器類型

迭代器失效的場景?

幾種常見標準庫容器的迭代器類型?

std::push_back的時間複雜度?為什麼是這樣?

你說的能在Linux下工作具體是怎樣?(可以參考陳碩那本書上最後一個章節,如果他上面寫的那幾個命令大部分你都用過,就可以說在Linux下工作沒問題)

C++現在在遊戲引擎和對性能要求比較高的實時交易系統之類的地方用的比較多。C++程序員的門檻高,學習周期長,招聘C++程序員的公司要求自然不低。

至於該不該學,你自己做決定。

其實我覺得工作三年後,不應該說自己會什麼語言,應該說自己在哪個方向比較擅長or熟悉。


針對 @郁白 答案中的這個比喻(我估計很有市場)作另一個角度的理解:

「汽車剛剛進入民用市場的時候,會開車的人很多都會修車,後來汽車普及,技術進步,現在不要說會修車,會開手動檔會搭電線的人都不多了,修車也成為一個專而精職業。編程技術也一樣……」

事實上如果用開車(駕駛)比喻編程技術,那麼編程語言也許只是不同的車,任何一門編程語言在學習和使用上,都會有"我僅僅需要開車,我不想也不需要學習修車。"或者,"這車還真棒,我有興趣打開引擎蓋看看…",再或者,「我cao,在這進藏的天路上,我車拋錨了,我要怎麼搞它?在線急等網友幫助。」的選擇(主動或被動)。

任何一門語言及其所寫的程序,都需要一個運行環境。不過有的車跑在省道,有的車跑在鄉間,有的車更適合跑高速,有的車從來認為自己是民間的坦克……有時出於興趣,有時出於受迫,駕駛員需要更加主動一點,在語言之外了解自己某段行程的路況(運行環境),語言之內需要了解車的某些原理(語言實現)。

筆者剛畢業的那兩年主要工作是參與單片機編程,天天對著C和彙編混和的上位機代碼,然而搞硬體的同事還是相當不客氣地鄙視我這個吃"軟飯" 的,儘管每次看他們不用打草稿,直接用debug(一個命令行)寫彙編我都要獻上我的膝蓋。今天才知道,原來他們不過是個修車的?

所以我想,簡單說某一語言需要懂修車,這是對其它語言和其它語言的程序撰寫者最大的傷害。沒有人阻攔任何PHPer去深入這門語言的內部原理或外部運行環境,php語言決沒有為它的程序員設置這麼一個低的天花板:「對不起,你的對PHP的技術學習已經到頂。」。Java或C# 在我看來更是如此。你可以學習不同的車,然後去匹配方程式賽車場,匹配進藏的環境(油箱太小的車就放棄吧),匹配穿越沙漠,匹配水陸兩用。但你不能說「我是為了學習修車,所以才訂了這款車。」


隨著各種「雲平台」的出現,越來越模塊化,有些之前花很多時間做的功能,現在只要集成各種第三方的開發模塊。

就拿我現在的項目來說:IM,視頻伺服器,簡訊伺服器等,都是集成了各個平台上的功能,只要下載個SDK,調用介面就行了,BUG少,省時省力。

這就導致大量的職位被這些雲平台所代替,門檻也就越來越高,工作就越來越難找了。

當年工業革命,大量的手工作業被高效率的機器所代替,現在也輪到IT業。

加油吧,大兄弟!


掌握c++的公司基本上是大公司!


1.反對部分人的答案,很多人的答案里都透著,C++是墜吼的,學不好是你SB。這種政治正確只是在秀優越,不解決樓主問題的。

2.根據樓主的情況,C++熟悉,Linux熟悉,會點go和php,這樣的人轉其他語言也是分分鐘的事,不要怕,當然,當然前提是樓主C++熟悉,C++熟悉和其他語言熟悉不是一回事。

3.不要選語言,應該選行業或者方向,前端?後端?DBA?

4.建議樓主去招聘網站上調查一下,選個自己適合的方向,選方向的時候不要抱任何包袱,不要因為要和之前的技能兼容就不敢進入跨度大的領域,現在互聯網發展這麼快,很多領域的人也是從別的領域轉過來的,當然前提也是他們具備基礎。

5.一萬小時定律,樓主可能已經完成九千小時了,剩下針對性的補一下利於求職的編程技能,如果全日制投入學習大概需要三個月?具體時間樓主自己把握,我是建議抽這麼一段時間來高強度的學一段時間,補足這最後一千小時,這個得根據樓主實際情況。


你說不好找?胡扯!


答案是肯定的,PHP絕對高性價比。簡單易上手,工資漲幅最高。


題主既然限定了互聯網公司,那確實沒必要學習C++。因為互聯網領域對開發效率要求很高,程序性能要求又比較低,這恰好跟C++特點是反過來的。

但是在其他領域,比如這兩年很火的計算機視覺、深度學習領域,C++則是主流開發語言。這是因為對於計算密集型的任務來說,C++幾乎是唯一的選擇。可以參考Caffe的開發者賈揚青大神的回答Caffe 和 Torch 誰比較厲害?為什麼谷歌、臉譜等公司不用開源的基於C++的 Caffe 呢? - 知乎用戶的回答

所以,如果題主決定了以後投身互聯網開發,那麼就果斷不要在C++上浪費時間了,趕緊學習javascript、php之類。至於上面答主說的學了C++之後學習其他語言更快,對操作系統理解更深,觀點我都贊同,但是沒有必要為了深入理解javascript再去學習C++,這太浪費時間了,人生苦短啊。


我們公司,戰略性的從C++轉到java了


首先,碼農收入高不高,第一得看業務,其次才是個人水平。別光盯著個人奮鬥忘了歷史行程。同等水平的碼農,在騰訊Teg的收入和在互娛,微信,廣點通和金融部門的收入肯定不一樣。早期進入有大量股份可拿的和現在進去沒股票拿的,財務狀況也不一樣。

其次,劉雨培的答案寫的很好,他列出的那幾條,尤其是數據結構和演算法計算機網路操作系統計算機原理,不僅是C++碼農基本功,更是所有CS科班出身碼農的基本功。搞笑的是題主居然還敢笑他還沒工作,我說不客氣一點,你工作三年了水平還不如一大三學生。不然為啥騰訊要他而你進不了大公司?基本功不過關,換了方向也是渣。

騰訊,百度的後台,大部分是C++,遊戲公司的後台也是。很多重視性能的交易系統軟體也是。從答主在各個評論區的回復來看,答主水平不行還聽不得他人意見,趁早轉方向吧。


我司長期招收優秀c++程序員!


推薦閱讀:

為什麼出現了ruby on rails 而沒有出現python on pyres?
如何看待李毅吧出征 Facebook 在各網站的直播被屢次封鎖?
第一份Data Scientist(PhD)工作,FG vs. E輪startup怎麼選?
Negar Kordi的關注者多次重複出現,能否證明她的刷粉問題?
關於互聯網思維的書籍?

TAG:互聯網 | PHP | Java | C | Java程序員 |