精通 C++ 是一種怎樣的體驗?
注意:不是問的 「怎麼樣才算是精通 C++?」,是體驗,體驗啊各位!
-----------------------------------------------------------------Never trust a programmer who says he knows C++實習生要求精通是怎麼個意思?
看到好玩的了,不邀自來。
看到前面一大票回答,不是質疑「精通」的老調重彈,再次表述,就是說什麼性能啊,靈活性啊,內存神馬的。於是沒興趣,匆匆瀏覽略過。
我不精通,畢竟連元編程什麼的都搞不定的還談什麼精通。但好歹也用了15、16年了。於是說說自己搞過的好玩的幾件事情。(畢竟我是那麼的懷疑這個題目是釣魚文(願者上鉤嘛^_^b ))
1. 為了偷懶,寫了模板的模板,類似於
template & class Container, typename Element, class Alloc = std::allocator&
這樣的。自此以後 list、vector、stack、queue 等不同容器的類似操作無需再各寫一遍。然後讓公司其他的同事看得那叫一個頭痛。紛紛質疑,說,這麼複雜的模板怎麼維護?我說,這需要維護嗎?(這是基礎設施庫中的一個內部基礎模版,因為在頭文件中,還是被其他那些自以為很牛逼,想挑戰別人的工程師看到了。但我是基礎架構的架構師,這塊我說了算,哈哈哈哈)
2. 08年(C++11誕生前),聽那些老同事大談C++的局限,聽得耳朵都膩了,於是在自己的開源項目中單獨帶了一個 Crazy C++ 的demo目錄,裡面做了3個比較詭異的事情:
a. 函數內部定義函數;b. 改寫內存,動態生成源代碼里沒有定義過的類(成員變數和成員函數的組合);c. 返回「匿名」函數。(註:即使在C++11里,也沒有真正的匿名函數,只是函數的名字你不知道而已)
於是專職打臉,專打「偽牛」的臉。3. 設計分散式系統做數據聚合的時候,使用析構函數和shared_ptr自動進行多路並發(100+)聚合併返回聚合結果。讓專註強調「狀態機」,一步一步用狀態成員控制流程的同事大跌眼鏡。
回想起來,這些都是挺好玩的事情。
其實就是充分利用了語言的特點和靈活性,和靜不精通,沒有太大關係。最後,有些跑偏了,當年有個朋友自己的共享軟體比較火,出來不到一個月就被破解,於是找到我,我除了個餿主意,做了一個主進程和動態庫的雙向冗餘互校驗,然後簡單改了一下內存布局。然後,至少一年內再也沒被破解過。。。。最後,再跑偏一些,有一件一直想做,但一直沒之間去做完的事情,不知道有哪些同學有興趣,能自己繼續下去?就是不改變二進位可執行程序的長度的情況下,嵌入機器碼水印。水印為可執行的機器碼(嗯,這是安全領域相關)。關於Java 位元組碼嵌入水印的,網上論文應該一對,但機器碼的,08年前就2片。效率還比較低下。有興趣的同學可以研究研究。當然,這和題主的問題已經完全無關了。只是高興,順道寫在這裡了~~~「嗯,最近你真的進步了,終於可以看懂我寫的合法語法,沒有誤報,並生成我想要的最優機器碼。下次給你更難的試試。」@vczh 滿意地說。(設計對白)
過來反對一下 @李四保 的答案。
到目前為止,任何時候當你需要開發一個希望充分利用機器內存、同時邏輯又比較複雜的系統, C++ 往往都是最合適的語言,沒有之一。 @李四保 同學說新開的大型項目不敢用 C++,隨便舉個反例:Google 新的分散式資料庫系統 Spanner,2012 年發布,主幹部分用的都是 C++。運算符重載,當你需要定義一個 uint128 四處使用的時候有用到爆;面向對象,當你的程序需要做成庫或者服務讓別的團隊實現自己的邏輯的時候,一層薄薄的間接可以省很多事。
===== 回到題主問題的分割線 =====
從用 C++ 寫 Hello world 到現在快 20 年了,一度比較迷戀各種語言特性的奇技淫巧,喜歡讀語言標準當 Language Lawyer,不過後來漸漸淡了,也越來越覺得 C++ 日見老邁到了該有一門更好的語言取代它的時候。但是 C++ 目前還是我每天工作的主力語言,也沒有看到哪門語言已經真得可以取代 C++。體會么,我覺得 @vczh 說得很好,就是一種地圖熟到可以腦內尋路的感覺,而且知道每個岔道左拐還是右拐大致會有什麼權衡上的區別,比如左拐能省點內存,但要增加一點程序員自己的簿記負擔這樣。
===== 回復一下 @李四保 的回復 =====
1、你說的充分利用機器內存,邏輯又比較複雜,C++最適合。我不知道操作系統算不算,linus把C++罵的很慘。
你提的這個問題完全可以用架構解決。把項目規划到只能用C++,這個項目負責人是很2B的,除非這個團隊大部分成員是C++。
操作系統不算。操作系統講求的是貼近硬體,穩定可靠,然後盡量減小系統資源的消耗 —— 和我所說的「充分利用機器內存」恰好相反。而且這也不是什麼架構能解決的,根本原因是 Java 依賴的 GC 是一種需要內存上有一定餘地才能玩得轉的技術,當你需要用滿你機器上的 32G 內存的時候,很容易出問題。
舉個例子,考慮一個包含多台機器的分散式查詢系統,為了保證最低延時,你需要把儘可能多的數據載入到內存里,與此同時這些數據又在實時地更新,你需要時不常地從硬碟讀取大塊數據進來,ra把內存里過期的數據塊釋放掉,另外各台機器之間的數據還有一些一致性要求,需要在釋放數據塊的時候執行一些邏輯並且互相通信來保證 —— 這樣一個系統,Java 或者別的依賴 GC 的語言就不太合適,因為同配置的機器,你能有效利用的內存空間會變小,每台機器能載入的數據塊會變少,你不得不更經常地換出數據塊,而且因此需要更經常地讓機器互相通信來保證換出數據塊不造成一致性的問題,最後結果就是要實現同樣的 QPS,你的機器數量和網路帶寬需求就要增加很多 —— 當然理論上,你可以通過小心地實現 Java 程序 + 仔細調優 JVM 參數來解決這個問題,但這種情況下,Java 在開發效率上所擁有的優勢就蕩然無存了,甚至可能要兩倍三倍地倒貼回去。
2、Spanner我不了解,我只知道更多的資料庫用的是C,甚至go(我用過幾個資料庫,都有go的代碼實現).這種系統級模塊你去網上找,用C寫的要比C++多的多。所有html5瀏覽器里都用到的兩個資料庫(一個sql,一個nosql)都是C寫的。C代碼的通用性要比C++的通用性好很多。大部分高級語言都保持對C代碼的兼容,但C++未必,支持了也支持的不是太好。
Spanner 發過論文了,有興趣你可以了解一下,看看它是不是一個足夠大足夠新的項目。更廣範圍內有多少人用 C++,不妨參考 TOIBE 的排名,C++ 這些年排名基本穩定在第三第四,雖然比不過 C 和 Java,但你要說沒人用 C++ 開新項目,很難令人信服啊。
你拿Google舉例子不太適合,他內部有的是C++程序員。另外,python在google為什麼那麼火,因為它就是用來解決C++的問題的,把C++的代碼規模及問題壓在小範圍內。
說的過頭一點,他們這做的原因是:C++不配(沒資格,沒能力)管複雜邏輯!
這段話屬於你隨口瞎扯了。我是 Google 員工,Python 在 Google 內部的接受程度遠低於 C++ 和 Java,除了當年 YouTube 帶進來的 Code Base,絕大多數複雜邏輯都是用 C++ 和 Java 實現而非 Python。Python 的角色基本上就是拿來實現各種腳本和小工具,主力用 Python 的大項目很少,而且其中幾個代碼可維護性評價不高。
運算符重載可以幫助我們提高代碼可讀性:3、除了眩以外,真看不出你的重載比直接用函數好多少。
這也說明了我之前說的那個問題:C++把程序都帶到了炫技這條路上了,而忘記了為什麼出發。
你願意讀這個?
int128 normalized = (value - base) / range + 1;
還是這個?
int128 normalized = Add(Div(Sub(value, base), range), 1);
管這叫炫技,太不客觀了吧?
4、你提的面象對象,明明只是一個介面的工作,C++把它搞的太複雜了。
C++ 的面向對象搞太複雜我同意,趟坑的先行者之一么。但完全扔掉面向對象的特性的話,你也就沒有介面(我理解你指的是 Java 的 interface 那樣的東西,不是請說明)了不是么?
===== 再次回復 @李四保 的回復 =====
如果你是google的程序員,google相關的內容以你為準。
這位同學,之前信口開河說「python在google為什麼那麼火,因為它就是用來解決C++的問題的 ……」的是你吧?可否請你為這種不實發言先道個歉?
你說的C++排名高,先不說排名適不適合,以當前最新的排名,在對C語言的改進語言中C++排名並不高,低於java,objc. 這兩個都比c++晚的多。c++設計的時候目標是針對大型項目的,java是硬體設備,後來是瀏覽器,誤打誤撞進入互聯網和企業等大型項目,objc更直接就是對C++的否定。一個後起的業餘選手;一個是歷史很短(和C++比是嬰兒到童年階段)。兩個各自都在C++的地盤內發展的比c++好;除了C++自身有問題以外,還有別的解釋嗎?
TOIBE 的排名,反映的就是一門語言的流行程度。我舉 TOIBE 排名的目的,就在於反駁你的這個說法:「現在沒什麼人用 C++ 開新的大型項目」。一門常年在流行榜上排第三第四的語言,即使它的排名低於 C/Java/ObjC,但要說沒什麼人用 C++ 開新項目,能讓人信服么?
我不否認 C++ 自身有很多問題,相比 C++ ,Java 和 ObjC 各自有它們獨到的優勢,所以現在流行程度都更勝一籌。但這不代表 C++ 就一無是處,在某些領域它仍然是很好的、甚至是最好的選擇(請參見我最初的發言)。
你的問題1我回復一下。有GC不一定沒有更細緻的內存管理,我可以舉兩個方法一個是使用C完成相關部分,給其它語言調用。另外一種如Go里的pool,都是可以自己控制內存的。如果僅僅因為某一兩個特性,在項目中引入一個很複雜的體系是得不償失的。不管是內存優化還是性能優化都只佔代碼很少的一部分。我以前寫壓縮演算法,都是先用C寫好了,然後把核心的幾十行代碼轉成彙編嵌入,如果按你的邏輯,直接整個項目引入彙編,這個項目目前也完工不了。
請你回頭看看我舉的例子,一個需要在內存中維持大量數據的分散式查詢系統。你的兩個方法:
1. 用 C 來完成內存數據的載入和管理,然後用其他語言來實現其他部分。
這是個糟糕的主意。請注意我們維持在內存中的數據塊是被查詢的數據,這些數據有自己的結構,查詢邏輯需要在這些結構上進行大量複雜的訪問。你這麼設計,就意味著所有這些訪問都要經過複雜臃腫而且經常是低效的跨語言訪問的介面。2. Go 里的 pool
這個 …… 你恐怕對 golang 的 sync/pool 缺乏清楚的認識。那個東西是個池,著眼點在於通過復用對象來避免反覆地創建同樣的臨時性對象然後又很快變成垃圾。sync/pool 自己文檔里舉得例子是 fmt.printf 模塊使用的輸出緩衝區,沒有 pool,就是每次調用的時候創建一個,調用結束就變成垃圾;加上 pool,就可以把上次調用時創建的緩衝區先放起來,下次調用的時候再復用。這玩意對減輕 GC 的壓力有幫助,但是和我描述的場景根本不相關:在我的例子里,重點是要能在內存容量為 N 個塊的情況下,我可以在內存里維持 N-1 個塊,然後當我需要載入 M 個塊的時候,可以載入一個釋放一個的辦法來避免換頁或者 GC,所以重點是確定性的管理內存的能力,明白了嗎?問題2我回復一下,特殊項目,特殊環境不能當成通用邏輯來講的。google,微軟這樣的公司財大氣粗,有大量的優質的螺絲釘,有些項目是戰略性的,根本不考慮成本的。沒辦法給業內作為普遍參考的。
這個說法太過狡辯了吧?你說沒人用 C++ 開新項目,我給你舉了例子,結果一句「特例」就不算啦?憑啥業界頂尖公司的選擇不能當做業內參考?「這樣的公司財大氣粗,有大量的優質的螺絲釘,有些項目是戰略性的,根本不考慮成本的」,既然不考慮成本 + 人力資源管夠,那自然可以用最合適的語言,為啥不用別的用 C++?是說明 C++ 是最優選擇么?
退一萬步,就算 Google 微軟的例子不行,那 MongoDB 呢?算不算?
3、你又舉出特殊個例了,事實上這種場景微乎其微,另外從長期來看,第二種並沒有太多的負作用,都是可控的,最多是加行註解。第一種隱含的細節風險需要很小心的排除。
引入一個不常用的特徵會帶來成本,例如編譯過慢、被濫用引發的問題。
這兩種對開發效率的影響都是很大自黑一下,我當年吃過不少操作符濫用的苦頭。
某個應用場景是不是「微乎其微」,取決於具體的領域。你的視野里沒有,不代表別人開發里用不到。具體到這個 int128 的例子,你倒說說給它加一套運算符重載有啥細節風險?為啥會導致編譯過慢?這話要是套在模板上也就算了 ……
順便,允許使用一個語言特徵不代表它一定會被濫用,code review 是幹嘛的?這個邏輯如果成立的話,Go 幹嘛要有 unsafe、panic 這些可能帶來麻煩的設施?
另外,如果int128被用的很多,這應該是語言設計者的工作內容,如go里的int64,根本不需要程序員操什麼心;如果這種場景不多,這是程序員的本職工作,也根本不需要語言設計者去操什麼心。各安其位,不要越界,越界就會出亂子。
你這段話完全是個人喜好的表述,抱歉我完全無法認同,而且也沒啥討論的意義。
4、如果C++最重要的特徵「類」被公認是失敗的。那它的意義就會大打折扣。
剛好很巧合的是,C/C++ 語言中的++運算符因為編譯器的進步,已經沒什麼用了。大量程序員每天背涌的++ -- += -= 除了作為一種習慣和文化,如同C++自身一樣,沒有太多意義了。
這段話看的我莫名其妙 —— 之前不是在討論面向對象么?你不是在說 C++ 的類是個公認的失敗么?(然後 Java 實現了個類似的今天成了最流行的語言,XD)怎麼跑去 ++ / -- 了?
順便,想批評 ++ / -- / += / -= 這些設施請找 KR,那是 C 的發明。順便你可以試試看問問 Rob Pike 是不是願意把這些從 Go 語言裡面去掉,XD這個回答我只能從觀測者角度來回答。
公司里精通c++的人真的好多,所以我們公司內網裡面會討論問題,而且討論的時候都很直接,在一些尖銳的問題上面可以吵半天的。
而我上內網,問的東西,提出的觀點基本上人家也都想過了,非常有挫敗感。包括有一次我抱怨C++的一個功能簡直是瘋了(std::vector::emplace_back 調用copy constructor),大神們居然給我完整的解釋了為什麼這個是合理的(因為我的object不符合std::move_if_noexcept),我。。。無話可說。。。
所以在我等草民看來,精通C++是一個可以讓你可以開始吵架的體驗,不精通的話連吵架的機會都沒有,只能坐等大神給你解釋各種歷史,edge case來證明你理精通C++還有10年的距離。
插個話,C++ 18年,可能有200萬行代碼的經驗。別的語言用過C#, Pas,Java script, 甚至Flash AS3...總之呢,干嚴肅的活還是C++。不過能理解不用C++的,這玩意要玩好,沒做個幾十個項目,上百萬行經驗還真不行。
搭建大型項目完全沒有問題,結構清晰,維護容易。有人覺得不好用,確實真是水平不夠的緣故。
C++可以靈活到什麼程度?我一個軟體想提供一個Web訪問的功能,要求實現動態網頁,計算在伺服器上進行。開始想正規靠IIS+一套亂七八糟的網頁開發然後和C++底層結合這麼做,後來覺得學習這些太麻煩,還容易出錯,於是乾脆就自己用C++ 自己寫了一個HTTP服務,把IIS的必要功能和所需要的一切放在一起實現了,編譯出來不到2M搞定。
另一個項目需要跨平台,QT學了1天沒興趣。最後自己C++寫了一套界面庫,用的挺好。
為避免被人說炫耀技術,匿了。
/////////////////// 第二天 ////////////////////////////
有幾個事情要說明一下1,我是真喜歡寫程序,算上BASIC(差點把這個忘了),都24年猿了。所以有時候折騰也是為了好玩,不純粹為了項目。2,年輕時候一天可以4000行代碼+調試通過。現在不行了。2百萬行不算多的,這已經刨除了分支代碼,copy重用的代碼了。當然精確統計還是很難,當學生寫的學習代碼,給導師做項目,打零工作的項目,工作做的,自己做的....加一起還是相當不少的。你如果經驗豐富,出錯率會降低不少,效率會高很多,高手都有體會的。3,我們那時候是沒選擇被逼的,C++基本代表當時的最高生產力。等日後選擇多了的時候,已經不願意換了。所以不代表現在的情況。因為題主說的是體驗,所以單說體驗,不和其他教派撕逼。4,圖就不貼了,一貼就暴露了。也不用關注我,我一般都不討論寫程序的事情。5,界面庫什麼的沒有你們想像的複雜,只做架構加自己需要那部分,花不了多少時間的。http伺服器用其他語言也能寫,只是我這服務裡面要涉及整合一部分效率相關代碼(手寫彙編之類),和做一些特殊的動態頁面...我實在不知道其他方案該怎麼做,也懶得學。要麼你對精通有誤解,要麼你對C++有誤解
直接編譯成本地代碼「插入」操作系統,比其他在虛擬機上擼的,體驗就是沒戴套。沒帶套當然不安全,沒保障,有時磨合不好還會疼。
反過來是男人都知道有啥好處。
逃同意上邊的」你看什麼過程式語言都覺得是一種C++的子集「
如果你有一把瑞士軍刀,那你切菜的時候會因此不用菜刀么?但因此,瑞士軍刀就沒用嗎?Video Game High School (VGHS) - Ep. 3
單純地「精通C++」之後的體驗是:「聽過了很多道理,卻依然過不好這一生。」
由於很多程序員上來接觸的就是編程語言,所以以為編程語言就是計算機全部。其實不是的,就好比對於作家最重要的不是辭彙量和語法知識,對於律師來說,了解法律條文也只是基本要求,對於計算機科學來說,編程語言不過是一個來和計算機溝通的工具。你精通C++,所以這個工具用起來很順手,指揮起計算機來得心應手,然後呢?背得過新華字典,就能寫得出美麗的詩篇?錯。計算機科學的知識不是一門編程語言能概括的,任何一門編程語言都不行。
個人覺得具體來講:精通C++之後,根據學習目的的不同,可能有如下幾種體驗:
1:為了從事C++相關開發的。剛開始信心滿滿,但最後通常會悲慘地發現:」填不完老人挖的坑,扶不正新人砌的牆「。畢意精通C++的還是少數,而優美的代碼只是一個現代童話。所以開始大聲疾呼:大家要守規矩呀,不能用裸指針,不要重複造輪子,要遵從開閉原則,要有設計模式,要遵從查詢命令分離原則,要注意可讀性,要有單元測試,要充分利用類型系統,要儘可能地在編譯期發現錯誤……結果是你成功地保證了公司代碼的長治久安,或者你已被氣死在半路上……根據統計數據顯示,呵呵……2:工作中用不上的。首先祝賀你。(咳咳,我真不是C++黑……)由於C++是一個多範式語言(C++11後連函數式都全了,bravo),所以我相信精通C++的人再看別的語言,那幾乎都是C++的子集呀……但是所謂入鄉隨俗,你也一樣要了解其它語言中通用的風俗,才能成為一個優秀的程序員,而且C++的好處是它就像一個有著透明外殼的精密儀器,你總是可以看到它最深處的秘密。但別的語言通常沒有這麼透明,會隱藏很多實現細節,要習慣一會兒。3:有志於研究編程語言的。幹嘛學C++?有研讀C++標準文檔的時間,還不如看看《範疇論》。C++不過是C上面打了一大坨補丁。精通C++之後的感受最可能是:我艹,這肯定不是先進生產力的發展方向,肯定不是最廣大程序員的最根本利益……我還是瞅瞅Lisp之流是不是靠譜吧……4:有志於研究計算機科學某個領域的。不錯,又會了一門外語,以後可以看C++寫的代碼了,而且如有需要,也能寫寫C++代碼了……但是時間花得真是不少呀,罪過罪過,趕緊繼續我的本職研究去吧……5:搞培訓的。哈哈哈哈,媽媽再也不用擔心我的飯碗了……《Effective C++》的作者在D語言大會上的一個講座非常好,其中的一句話是:我最希望D語言社區將來不需要像我這樣的人……我沒有保存那個鏈接,但是這個講座真的很不錯,大家可以搜搜看看……精通C++真不算多大點兒事兒,而且回報也不大,所以才沒那麼多人「精通」。如果單純只精通C++的話,體驗就是:「聽過了很多道理,卻依然過不好這一生。」 C++雖然已經包含了無數的細節,無數的規則,無數的奇技淫巧,但現實世界卻有更多的細節,更多的規則,更多的奇技淫巧……體驗就是從ISO Office訂購紙質珍藏版C++99、0x、1y所有版本,然後成為一個語言律師,用節號和縮寫詞回答他人提問,指出他人使用的deprecated feature和experiemental feature。
嗯,我看了下沒人邀請我。
這是對的。我不懂C++。不過這個題目的答案里我可以對90%的人說你們也不懂Cpp。所以還是Shut up and write your fucking email比較好。我來綜合一下前幾名的答案:
你的體驗主要不是取決於你自己有多精通C++,而取決於你所在的團隊有多精通C++……C++的好處是什麼都能做,什麼都能照顧到,缺點是如果跟你合作的人腦子不清楚,你就會面對一坨根本沒法搞的問題。
隨便拿一個Java來對比一下,C++主要的好處是「我們支持……,我們支持……,讓你在各種場景都能……」,而Java最吸引人的地方是「我們不支持……,我們不支持……,讓你避免傻逼隊友……」。嗯,大概就是這樣。
這也是為什麼這裡說C++好用的幾個答主來自於Google,微軟,而說C++不好用的答主舉的例子是Amazon,同花順的原因。
呃,我自己的立場見話題經驗。敢說自己精通C++的有三種人
一種說自己精通C++,但是熟悉他的人不那麼認為
一種說自己精通C++,熟悉他的人也那麼認為,但這些人對C++不太懂
一種說自己精通C++,熟悉他的人也那麼認為,而且這些人很熟悉C++
第三種人就比較少了,而似乎只有他們的「精通C++的體驗」才有價值前面一票回答無視題主問題了。想了想還是把這個問題作為我在知乎上第一個正經回答的問題好了。首先自我簡介,大學相關專業4年,就幹了兩件事兒:從C/C++入手學編程and玩星際爭霸.工作12年,當過程序員,項目經理,事業部經理,自己開公司創業折騰過3年,現在在一家小公司做CTO。基本上沒脫離過開發,所用開發語言90%是C/C++。我假定自己算「精通」C++。好的體驗有這些:
- 相比較其它語言容易建立起完整的知識體系.因為C++幾乎涵蓋了編程語言的大部分特性,支持各種範式,使用C-C++系的項目從最底層到最高層統統都有.所以接觸的項目多了,會逼迫你了解方方面面的知識,逐步建立相對完備的知識體系,這對一個搞應用的開發人員來說是最能增加自己內力.這方面可以參考網易還是哪兒出的一個程序員需要掌握的知識體系,看看那張圖,不是搞C++一般人還真沒什麼機會都接觸到.
- 會養成看到新東西去下意識分析背後成因的習慣,而不會滿足僅僅享受它帶來的好處.這樣的習慣會逐漸拉開和別人的差距.關於這一點我保留意見,到底是長期使用這門語言養成的,還是和人的特質有關,我不敢確定,但更傾向於兩者皆有影響.
- 建立起自信.會自信無論什麼開發語言和工具自己都能比別人快的多的掌握.因為大部分的東西在你的知識庫中都已經存在,無非是換了一種表達方式實現出來.例如我從來沒有正經用C#做過東西,但手底下人做C#項目,無論是系統設計還是遇到具體困難,都能坐一起和他們聊,從我的角度給出看法,往往還真能解決問題.
- 會懂得取捨.就因為C++龐雜,坑多(這一點最高票的幾位已經反覆指出了),在不同的項目會明確的定義出能夠使用的子集,裁剪掉不合適的特性.比如介面使用純C定義,內部實現使用各種STL容器庫提高開發效率,這算是用c還是c++?
- 不會去糾結語言之爭.C++從來沒少人噴,其中不乏Linus這樣的神級人物,看多了反而無所謂了.如果不是太偏激還能了解到這門武器的不足,從而對各種工具報有一種更實用的態度.比如最近在做的一套分散式實時系統,在設計中,最核心的也是對時效最敏感的核心系統用C++開發,日誌系統會選用java實現的flume,管理平台會使用BS架構,等等.
壞的體驗:
- 發現自己不懂的東西越來越多,搞了10多年到個非專業網站上還不敢理直氣壯的說自己"精通".
- 容易感覺只會用某些"高級語言"的人是個傻x,這可能對溝通合作有壞處.
你會成為半個哲學家。
曾經看過一個視頻,對C++有一個很有意思的評論。斯坦福大學公開課:抽象編程看看吧。我冒昧作個推論一個程序員能夠達到「精通 C++」這個我不敢望其項背的境界別的不說肯定是用 C++ 作了不少萬行以至十萬行單位的項目了開頭那十萬行代碼恐怕也不太可能是精巧細膩的那麼好奇的想問問後來都是誰接手維護這些 Code 呢???這中間有多少曲折!血淚!坑坑重坑坑!?嗯於是我個人的答案會是這樣子的:關於「精通 C++ 語言」這種事情
善哉善哉「憑君莫話封侯事,一將功成萬骨枯。」
看見一群學C++都學不會的人在這兒大談精通C++的體驗我也是醉了。
世界上沒有精通C++的人,即使是其創始人
不敢說自己精通C++
但看到前面別人的回答,也想到自己98年寫過一個GUI圖形庫borland c++寫的在DOS下的支持滑鼠、漢字、菜單、按鈕、checkbox、inputbox,textarea,以及一個類似於掃雷的面板(我也不知道它能幹啥,反正和一堆按鈕差不多。。。)為了製造輸入框游標的閃動還用到了DOS中斷可惜當年那張3寸小軟盤找不到了否則的話,一定貢獻在github上補充一下,現在基本上是靠虐java和scala來找快感了推薦閱讀:
※在惠特曼學院 (Whitman College) 上學是怎樣一種體驗?
※在阿伯丁大學 (University of Aberdeen) 就讀是怎樣的體驗?
※得了地中海式貧血是一種怎樣的體驗?
※搭訕健身房裡的女生/男生,是種怎樣的體驗?
※「君子之交淡如水」是一種什麼樣的體驗?