成為一個優秀的程序員,一定要精通C/C++嗎?

我能夠用熟練的用Java ,C# 等語言寫Android或者WP的程序,或者要求不高的伺服器程序,也能夠較好的設計程序的架構,但是總覺得停留在膚淺的層面.最近也學習了Go語言,很快也能夠上手寫程序並開發一些工具,但是我感覺如果我就這麼寫下去,會把自己給寫廢了.是否需要停下來,用心去學習C/C++,去了解更深的東西.但是因為工作完全用不上,所以學習進度也比較慢,有什麼好的建議嗎.用C寫什麼東西,可以比較全面的學習這們語言和了解操作系統原理性的東西,比如說,寫編譯器什麼的.


答案當然是否定的。(我非常相信一個優秀的。net,andriod,java 程序員,他有可能對 c++ 一無所知。)。。。除非,你是一個c,c++程序員。而且,在c++界,精通這個詞是個「忌諱」或者說大家都默許的潛規則。作為一種建議(而非強求你遵守的規定),所以如果你是c++程序員,你可以使用的級別最高的定語是「熟練」。而永遠不要用「精通」。(這不是裝比,我想原因是,一種謙遜,以及c++程序員對個人的無知性的了解和認知程度,可能要超過其他語言的程序員。這句話反過來說,就是其他語言程序員更有可能產生一種自大情緒。這句話不太好聽,但是想必國人同行都很了解國人的情況。) 所謂精通,就是沒有人能考倒你,即便他故意以難倒你為目的。。。而c++程序員應該知道這個難度。


蟹妖。我想答案是不需要。

剛好這幾天在用C++寫代碼,以前寫過工程項目的語言有 Java(J2EEAndroid)/ObjC/JS/ASP/Groovy/Python/Basic 可能還有一些自己寫過小程序做著玩的比如PHP/Ruby/Scheme/Pascal/ASM等。

首先我想說,語言不過是指示計算機做事的方式,這個世界上本就沒有「這門語言要比另外一門語言牛逼」的說法,就像你覺得說英語的人比說中文的人強?還是說法語的人比說英語的人強?其實強大的是他們當年的國力和文化傳染力,語言本身並不能帶給你什麼。

只是程序員總是覺得越是艱深晦澀難學難懂的東西就越牛逼,因此才會有那麼多ASM嘲笑C,C++嘲笑Java,Java嘲笑Ruby,Ruby嘲笑JS,結果每個時代都是被嘲笑的那個崛起。

再看關於底層。程序員想了解底層的心情非常能夠理解,很多程序員都覺得越是做底層的東西就越厲害,雖然我並不完全認同這點。我覺得成為哪種優秀的程序員取決於你的性格:你想成為某個技術的研究者,還是做出一個代碼上的藝術品?你喜歡在黑底綠字的01之間徜徉,還是熱衷於創造能改變人類生活的代碼?——黑客與畫家

再來談談C/C++的問題。的確,C/C++中越是深入就越是必須了解系統級的東西,例如對象是在棧上還是堆上,何時銷毀如何保留等等,這些是學習很多其他現代語言所不必須的。但是,注意邏輯「學習C/C++需要懂系統底層」和「只有學習C/C++才能懂系統底層」不是一回事。

難道你不學習C/C++就無法知道變數內存分配了嗎?況且每個語言都有自己的底層,Java也有棧有堆,GC里有內存分代和RC行為,前兩年也有人用JS寫了段程序讓瀏覽器上跑Linux(Javascript PC Emulator),CoffeeScript 則是基於JS寫的一門語言……

所以還是那句話,語言只是指示計算機做事的方式,永遠不會是學習基礎和底層的通道,自然更不是成為一個優秀程序員的唯一通道。


顯然不是。KR/*C和UNIX的締造者*/在沒發明C的時候已經是優秀的程序員了。


當然是不一定。這個問題等同於:成為一個優秀的作家,一定要精通英語嗎?

程序員最重要的不在於對編程語言本身的掌握,而在於培養一種系統化思維的能力。而優秀程序員和普通程序員的差異更多源於如何思考,而不僅僅是如何敲代碼出來。


C++和java還是熟悉一點好吧!有很多著名的項目都是用它們來做的,項目做大了就需要接觸到這些


推薦學,學了你不會後悔的。


語言本身無高下。學習的目的是把事情給幹了,而且干好了。 當然每一個優秀的程序員都應該有一顆渴望探索的心,也就是知其然,知其所以然。如果你想深入的了解操作系統, 那至少要能讀懂C,知道指針,地址是怎麼一回事。C其實是一門非常簡單,直白的語言。C++則沒有太多的必要為了學習而學習


沒什麼一定不一定的。但是,最好,了解一下 C,不要求會寫,至少會讀。

  1. C 的語法元素是最乾淨、最純粹的,沒有任何的冗餘。你所接觸的大多新語言(除 LISP 之外),基本的語法要素幾乎都可以在 C 中找到影子。甚或可以說它們都直接或間接地脫胎於 C。因此,可以說 C 在新語言學習的方面能夠扮演一個很好的過渡性理解的角色。
  2. 在數據結構和演算法的領域裡,絕大多數的示例都是以 C 或類 C 偽碼實現的。顯然,會讀 C 有助於幫你理解這些東西,並最終實現準確的移植。
  3. 可以說 C 編譯器擁有最多的平台實現,這意味著用 C 實現的流程或演算法代碼將具有最大的復用價值。
  4. 想深入 LNMP?Python?Lua?或者給它們寫擴展?那麼你一定需要學習 C。


可能優秀的程序員不一定精通C,但是頂尖的程序員一定精通C


這句話我先偷了:可能優秀的程序員不一定精通C++,但是頂尖的程序員一定精通C++。為什麼是C++,其實從你的問題中提到的操作系統、編譯原理就知道你的答案希望是C++而不是Java!C++一門綜合性最強的語言,可以說下不如彙編,上不如腳本,但是身為人和機器最後的橋樑是C/C++,對還有C這就是C++標準委員會一致認定要兼容C。不言而喻!你的上司跟你說不用C++,第一你一定在中小公司,第二你上司時薪多少?工作項目當然不用C++,所以不用你去學。但是如你認為自己是一名計算機科學人員,這是很理想且範疇很廣的詞語,比如你可能喜歡研究編譯器的實現原理和設計、操作系統實現和運行的優化、軟體系統架構的設計(當然這個java等都有,大型實時的系統只能選C/C++這類型)等等,C++是邁不過的坎。講到最後,如果都了解剛才的那些知識的具體細節,月薪10萬不在話下,必要時可用換成美金作計量單位。有一種人會為了自己的利益而去編織謊言或給予不正確的指導,之後會導致產生惡劣且不可磨滅的影響作於他人而不是說謊者。而我的態度則是:我不會和剛才提到的那種人結交。為了避免做這種人,我補多一句,不一定是C++,只是C++的學習資料比較多且容易閱讀。我覺得你的目標是計算機大學科的核心幾塊領域:硬體、OS、編譯系統、架構師、DBA等等,而不是廉價勞工。

再偷一句話:在c++界,精通這個詞是個「忌諱」或者說大家都默許的潛規則。這是真的。熟練的意思是能用此工具解決大部分的問題。要知道性能、可維護性往往得取捨,可曾想過在C++的函數中嵌入各種特殊常量和彙編代碼。大家都不知道精通C++是否意味從底層操作到高層邏輯實現都得熟悉,如果是,那估計需要大半個計算機領域的知識量,這種量變是很多人無法積累的。而精通java等單層次知識確實可是可能的。

因為某些核心問題傾向於使用C++這種綜合性語言,看我介紹,單這個方向數學、物理學、計算機相關就夠一個人玩幾生了,還去談什麼精通。因為我想解決某些問題,我選擇了C++,從而選擇了職位方向——先說了,我是剛入門引擎,目前僅僅限於寫shader,C++混合腳本;遊戲邏輯方向則是C++混lua。

Android開發則是C++混C、Java。

從這點看,反而可以認定C++是基礎入門語言。而它的高級特性使用場景也是有限(不用它寫操作系統內核或驅動,其他軟體面向C端用戶的界面邏輯也不基本不使用編譯性語言),估計就剩遊戲引擎、或者某些第三方構件用它


之前一直在學Java,最近在學C/C++。

從一個學生的角度來說,學Java的時候,時常聽到一句話:「Java程序員不需要去理會內存管理,因為jvm已經幫我們做了」,但在實際應用中不得不說理解內存管理,會讓你對Java學習得更好,對它的一些特性了解得更深。

而C/C++由於自身一大特點就是內存管理,對它們的學習,勢必會加強自身對內存管理的理解,這對Java的學習,至少對我來說,我對它的特性有了更好的理解和記憶。

另外,我不反對這麼一種觀點「炒飯的人,沒必要知道米是怎麼種出來的」,因為知道米是怎麼種跟會不會炒飯沒什麼必然聯繫,但是一個知道會炒飯同時又知道米是怎麼來的人,會在炒飯的時候適當地根據米的特性做出一些新花樣,不是嗎?

簡單來說,沒有說一定要學,只是,你學了,對其他語言的學習和理解會更深一點。


C語言必須的,C++看心情


沒有優秀的語言,只有特別優秀的程序員。


C++可以不學,但是C是要會的。。。


不必。但是得理解你用的硬體平台。


只能說精通C++的人一定是優秀的程序員,但卻並不能反著說


己之所欲亦勿施於人

僅供參考,不強求,拒絕口水。

如果想了解計算機系統,C作為計算機文化歷程中不可迴避的一部分,你說需不需要學習

如果,只是想成為某一領域的專家,而這個領域有適用的程序設計語言(非C系),可以不用學習C/C++


如果要走編程之路,10年的話,現在開始當作興趣來學,也沒什麼不好吧


實在想了解底層的話,學學c,c++就算了


一句話學好c語言走遍計算機世界都不怕


很有必要,對於特別是C語言,作為存在了40餘年的經典,也是絕大數操作系統的基礎,我想並不是廚師和糕點的關係,而更像是廚師會不會自己炒菜的問題。類似的還有其他的理論課比如計算機組成原理,操作系統原理等,也許不能馬上運用在工作上,但是卻能幫助我們對整個計算機體系有更深層次的理解,也能為解決問題提供更多的思路。最後一個問題,就推薦一本書吧,《程序員的自我修養—鏈接、裝載與庫》,與諸君共勉!


我覺著你練級的道路有點偏門。 培訓學校出來的嗎?(沒鄙視的意思)

因為C的確是基礎。。


那些自嘲碼農的,估計大部分是因為寫java或者C#寫得有點想吐了。因為在這種面向產品的語言里你真有一種生產代碼的農民的感覺。

但是,寫C的時候,你有可能會感覺自己是個手藝人。

C++不一定,C++有很多種寫法,C++也有可能會讓你產生「碼農」的感覺。

另外我覺得python其實可以當做手藝活。你可以對一個任務琢磨很久,嘗試N種寫法;這些寫法裡面有的快一些,有的很好閱讀和修改,有的非常美,很多時候完全是你自己決定怎樣取一個平衡點(「設計的真諦,就是在一些互相衝突的需求和約束條件之間尋找平衡點」---KR);就好像玩C一樣你也可以仔細玩python。

作為企業或者管理者你肯定愛死java了,因為你的團隊各種人都有。但是個人如果有手藝精進的追求,練練C和Python蠻好,都可以當做「手藝」來「精進」。


推薦閱讀:

如今存在用機器語言編寫出的程序么?
你工作中最推薦的 C/C++ 程序庫有哪些,為什麼?
ACM 怎麼樣零基礎到入門?
現在 C 語言可以設計 FPGA 么?
pthread_cond_wait 為什麼需要傳遞 mutex 參數?

TAG:程序員 | C編程語言 | C |