昨天進燕山大學編程愛好者 QQ 群,看到有很多同學在學 C++ ,我當然是不喜歡了,因為我是做 Web 開發的嘛。所以懷着猥瑣的心情,今天寫篇傻傻的文章,來黑一下 C++ 。 Peter 你有資格聊這個嗎?我是研一(2006)那年開始全職用 C 語言開發嵌入式系統,(我的一個 C 語言項目,click here )研二開始就接觸 C++ 了,用 Qt(一套 C++ 編程框架) 來寫。09年畢業后第一份工作就是 “Qt Developer” 在中關村一家公司,叫做紅旗 Linux 。全職做 C++ 一共9個月,項目代碼在這里。我不是 C++ 大牛,今天我也不從很深的技術角度來黑 C++ ,而是給你舉出很多實際的例子,論證一下,從大學生職業發展的角度來說,C++ 是不適合的。
你真的要遠離互聯網?
傳統 IT 公司,通信公司,IT 咨詢公司,新興互聯網公司,這些公司類型是有差異的。前幾天我在北京跟 ThoughtWorks (他們是高端咨詢公司)的朋友聊天,他說我們這里的薪水比傳統 IT 公司要高,但是跟互聯網公司真是沒法比。什么是互聯網公司?國內的 BAT ,國外的 facebook,twitter,google 。Twitter 最早用 ruby ,facebook 用 php,google 主推 python。同時當然大家都會用大量的 Javascript 了。有誰是主要用 C++ 的嗎? C++ 在傳統 IT 公司用的比較多,主要應該是微軟帶的,但是看看微軟惠普這些老恐龍們現在在干什么?一邊在裁員,一邊在做互聯網轉型。
C++ 極度不適合初學者學習
我自己入門面向對象編程是從 C++ 語言這里,現在看來是一個巨大的錯誤。Why? 因為 C++ 很復雜,C++ 是我自己了解的語言中細節最為龐雜的一種。如果我用 ruby 或是 python 入門編程,學起來會容易的多。為啥 C++ 那么復雜? 在早年需要考慮硬件資源利用率的時候,可以說它很強大。現在只能說弱智。說說我自己做 C++ 的經歷,簡單來講兩面受氣。一方面你要去實現業務邏輯,要讓客戶滿意,這個是應該的;但是同時還要哄好手里的硬件,不然的各種編譯錯誤運行時錯誤搞死你。如果用 ruby/python 這樣的高級語言,程序員只需要關心業務邏輯,討好機器的工作在底層完成,所以給程序員的是更加接近於人話的語言接口。
中國很多學校是用 C/C++ 來教編程入門,這個是錯誤的,晦澀的語法直接把大家的興趣干掉。 MIT 用 python ,UCB 用 ruby 編程,大家可以 google 一下,看看他們的視頻課程,非常的簡單,精力都用在實現自己的想法了。好像開車,你首先應該學習的時如何使用方向盤,而不是直接就研究如何修車。做事情應該由粗到細,而不是先不管方向往深處鑽,如果你方向錯了呢?那回頭損失豈不很大。
幾個我朋友的故事
我的 C++ 水平有限了,現在我來說說我的幾個朋友的故事。
A 君,清華大學碩士,對 C++ 情有獨鍾,真正的技術大牛,我很敬重的人,寫過一本 C++ 的書。2010 年我們都在一家公司工作,他當技術總監,公司是互聯網性質,有 php 有 python 但是就是沒有 C++ 。他在那家公司任職兩年,離職后興趣就轉了 nodejs 。后來去國外工作,做 C++ ,很沒意思,但是那次他回來我在北京請他吃烤串, 問他未來搞什么?他還是堅持說是 C++ 。前幾天,他又來秦皇島找我玩,跟我說:”靠,我這個出國出錯了,把我的方向都搞亂了“。現在他是一個3D打印機公司的聯合創始人和技術負責人,但是也很少用 C++ 。 他說:”迷茫啊.. 我還是要去國外讀一個計算機的學位“,話說他比我還大一歲呢!
B 君,我曾經的同事,也曾經是國內排名第一的計算機系的老師,十幾年 C 語言經驗。2011 年我跟他在一起工作的時候,我就逗他:”別搞 C 了,跟我學 Ruby On Rails 吧,互聯網意味着開放和自由“,當時他沒反應,我猜他的想法是:” Web 的那些東西都太膚淺,C 語言才有嚴肅的學術性“。后來2013年他家搬到了硅谷,受那里氛圍的影響,他先學 RubyOnRails 一年多,現在又搞 meteorjs(這兩個都是 web 的) 。C 方面的研究和寫書方面的事情,據我所知,他都慢慢放下了。順便把 C 語言也給黑了吧,盡管 Linus Torvalds 到現在依然是我的偶像。
結語
總的意思就是讓大家別學 C++/C 這些底層語言,而去擁抱互聯網,一個既有錢又有夢想的領域。開發 iphone 應用原來用 OC 這個是很類似於 C++ 的一個東西,不過這是歷史遺毒了,貌似蘋果公司正在用 swift 來糾正這個錯誤。最后說一下,我叫 Peter ,github 賬戶是 https://github.com/happypeter 上面有我的郵箱,歡迎大家來信跟我交流。
http://qqpeter.github.io/cpp.html