C語言已經死了,5個需要忘卻它的理由

現在,有很多C/C++程序員總是自命不凡,看不起其他開發人員。其實,或許別人更看不起他呢!

學生時代,我也曾醉心于C/C++,但時至今日,始終無法寫出無懈可擊的C++代碼,所以我始終認爲我不會C/C++。這些年,我一直在尋找編寫C++代碼的最佳模式。但是,老實說,我還沒有見到過哪個稱得上高手的C++程序員,也沒有見到過寫得Very good的C/C++代碼。C/C++代碼總是醜陋不堪,BUG叢生!

我用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的主編。

 
淺薄與偏見 駁“C語言已經死了”
  現在,有很多C/C++程序員總是自命不凡,看不起其他開發人員。其實,或許別人更看不起他呢!  >> 有偏見的永遠只是個體,而不是群體。作者加了後面那句,無疑證實有偏見的不是C/C++程序員,而正是他自己。...查看完整版>>淺薄與偏見 駁“C語言已經死了”
 
並非偏見 也駁“駁‘C語言已經死了‘”
  >> 有偏見的永遠只是個體,而不是群體。作者加了後面那句,無疑證實有偏見的不是C/C++程序員,而正是他自己。  錯了,真理是站在少數人這邊的,當一種變革將發生的時候,帶有偏見往往是大衆是傳統力量。...查看完整版>>並非偏見 也駁“駁‘C語言已經死了‘”
 
6款床頭 給你賴上它的理由 裝飾_居家裝飾
6款床頭 給你賴上它的理由 裝飾_居家裝飾
  超柔軟超舒適  我們都希望床具能軟些再軟些。這款床的床架和床頭全部填充了羽絨,比沙發和靠包還柔軟,可以任你倚靠。而表面的包裹面料則挺括結實,保持了床的外表依舊美觀。柔軟的床體使得你可以無限與它親近...查看完整版>>6款床頭 給你賴上它的理由 裝飾_居家裝飾
 
愛 還需要理由嗎?(2) 時評_娛樂報道
...查看完整版>>愛 還需要理由嗎?(2) 時評_娛樂報道
 
愛 還需要理由嗎?(3) 時評_娛樂報道
...查看完整版>>愛 還需要理由嗎?(3) 時評_娛樂報道