C語言,我們要忘記你

來源:互聯網
上載者:User
       今天無聊去 CSDN 的 Blog 看了看,發現了一篇文章《C語言已死,忘記它的五個理由》。我下面會轉載它。我今年大三了,從上大一到現在我們的課程基本上都和C和C++放到一塊。C 程式設計,C++程式設計,VC++程式設計這些課程都要學,尤其是大一的時候我們學習的C語言,我相信它應該不是一個最好的入門的語言吧。它打擊了大部分同學學習編程的熱情。我這裡說的還不是C語言文法和特性方面的複雜打擊了同學的積極性,而是文法學習完了不知道如何用它去寫一個簡單的圖形介面的 Hello world 程式。當然這不是C語言的錯誤,怪只怪當前大學教育的特性和同學的學習能力。我看了下面的文章有些同感,我個人感覺大學的入門應該用 VB 或者 Java 之類的程式來作為入門。呵呵,不說太多了,看看下面的文章吧。

      我用C語言編程已經超過20年了。我寫過C語言的編譯器、C語言的調試器、用C開發的其他語言、遊戲、用戶端程式和伺服器程式,你說吧!還有什麼是我沒寫過的。還有我的書架上充斥著折了角的K&R和Steele的書。我太瞭解C語言了,但是,我討厭他。十分討厭!

 當我讀到一篇部落格,題目是“為什麼每個程式員都應該學習C語言?”時,我真是雞皮疙瘩滿地。如果你真的是個專業的程式員的話,你肯定覺得這是個天大的笑話,儘管作者的本意也許不是這樣的。這篇反駁的文章有點意思,但是還是沒有抓住本質。所以我展開了說一下。有以下5個原因來說明,為什麼那些會C語言,並且使用C語言的程式員,現在不但應該去用別的語言,而且應該忘記他們學習C語言過程中的那些煩人的東西。  1 、記憶體配置 僅僅關於這一點我就能寫整整一篇文章了,也許能寫一本書,甚至還有可能寫出能夠塞滿圖書館技術書籍那塊,那麼多的內容。記憶體配置和儲存單元分配的存在確確實實是個大麻煩。你要不就是分配太少的記憶體不夠用,要不就是分配了太多記憶體浪費掉。這裡的問題就是:怎麼把它初始化為零呢?還是乾脆就不初始化它。但最撓頭的步驟還是釋放記憶體。所有已有的工具包都會協助你確認,你是否已經釋放了之前分配的每一位的記憶體,在釋放完之後是否永遠不使用它,並且會阻止你,永遠不要釋放它第兩次。更嚴重的是,分配記憶體和釋放記憶體在C語言中都是很慢的,非常慢。使用記憶體配置時,要考慮的各種特殊情況,我真是連想都不願意去想,只要問題(對象)的大小合適,我更願意使用棧空間或者事先分配的結構空間。如果這麼做的話,我就有更值得煩惱的事了。話說回來,發明垃圾處理器那人真應該得諾貝爾獎。  2 、多線程 我過去是喜歡C語言的,真的。直到我開始用C開發並維護多線程的伺服器。在為串連相衝突的線程保護資料方面,C語言沒有為程式員提供那怕一點點的協助。你在使用單線程的日子裡獲得的每一個直覺、經驗,用在多線程的時候都是錯誤的。至少JAVA有表示同步的關鍵字和備有證明檔案(但是是個很奇怪的檔案)的記憶體,但即使是這樣,除非你使用新的javax.concurrent,否則也只能在那些巨大的平行擺放的機器們面前崩潰。回到C語言上:在類比生產的環境下,堅持一個星期在資料中心調試一個死結(這事真的發生過)。而JAVA卻只需要Ctrl+Break!天哪!!!  3 、指標 指標太難以控制了,太陰險了;我甚至沒有委婉一點的方式去形容它。我生命中每年都有幾個月被用來調試那些奇怪的指標問題。我過去常常努力擷取所有的訣竅,比方說難以理解的構成符、聯合體和位移量,以及重用最後兩位做標記,還有所有其他的訣竅。但我發現這麼做根本不值得。其他語言的靜態引用就可以解決了。  4 、過早的最佳化  說到訣竅,你是否曾經浪費腦細胞去研究究竟*p++是不是比p[i]快?你是否曾經花時間去試著做點變化來代替乘法,或者去嘗試使迴圈中的倒置運行更快的方法?還在為傳遞一個參數的速度和反對添加結構,並且傳遞它的速度一樣而苦惱不已?停吧!演算法是速度的關鍵,程式員的水平決定了他會使用那些演算法。知道這一點能讓你的程式更好,更快一點並且讓你的腦袋少扭幾個筋。好吧,有一些例子也許可以這樣做的……不,你就別那麼做就行了!  5 、測試  你最喜歡的 C 的單元測試的工具是哪個?嗯 一個也想不到?單元測試一定是一點也不重要,是吧?或者是太麻煩了,很難跟上進度,浪費時間。你可以把這個時間用到更加有用的事情上,讓它只佔用工作時間的 1% ,那還比較合適。或者在資料中心,通過最佳化的沒有標記的圖形來調試這個僅僅由100個同時線上使用者引起的問題。  我本來應該繼續再說一些原因的,但是 5 個現在就足夠了;說完這些,現在感覺好點了。 C 以前是非常棒的 那是在 1984 年的時候。直到今天,那些用 C 寫的新代碼都讓我感到驚喜 如果你讓我比較的話,我覺得C++只是比C稍微好點。如果你想要學些老一點的語言,不妨嘗試Forth,Lis,或者APL。這些老式的語言起碼能教會你,用不同的而且優雅的方式去思考你的程式。  作者簡介 

Ed Burnette是一位有著豐富編程經驗的程式員。他現在致力於使用JAVA和C來開發OLAP用戶端和伺服器。他業餘時間喜歡研究Java、Eclipse和開源軟體。他寫了很多關於Eclipse的文章和書籍,另外他還是EclipseZone.com的主編。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.