c++和java(c#)之間的pk


個人認為本文較偏激,且年代較久遠,但可以一看。微笑


轉自 c++和java(c#)之間的pk


1、誰好誰壞?

  如同當初我沒有想到會進入java陣營一樣,這次闖入c++陣營也是意料之外的。多年前,受到微軟的影響,我幾乎是微軟的鐵桿,對從QB到c#都是深入學習過的。我一直以為微軟的軟件是做的最人性化的,最好的。2年前,不經意的走進了java的大門,雖然我學習過java,但是對於這個不能做漂亮界面的語言一直有抵觸的思想。這一次走入,讓我成了java的忠實支持者。支持java的開源社區,群眾的力量遠遠大於微軟的那幾個,和他們相比,微軟的東西(除了操作系統)就算是機械時代的產物了。

  再次轉移到c++陣營,迎面而來的是一陣擔憂的雲霧。無論是Linux創造者對c++的鄙視,還是c++應用范圍的嚴重萎縮,都不得不讓我擔驚害怕。經過1個多月的熟悉之后,我又慢慢的恢復了一點點感覺。我們承認,做應用c++不如c#(java)等沒有指針的語言,做底層c++不如c等速度快的語言。但,我們不能否認,在復雜度較高的算法級別,在使用了stl和boost等大量優秀庫后,c++絕對比c#(java)運行快,比c編碼快。要注意,這時的c++,擁有了c#(java)的內存處理的優點,也擁有c的速度的優點。

  如果你要編寫復雜的算法,那么c++是最好的選擇。如果你只是測試算法,你可以用java(c#);如果是要在單片機上面運行,你可以用c。但是,如果你要做一個在pc上運行的程序的算法底層,c++絕對是最好的選擇。

  2、java的編程特點

  java的成功完全得益於它在網絡應用上的推廣。廣大開源陣營的兄弟們也是java得以紅遍天的主要推動者。雖然js和java沒有什么本質聯系,但js標准也成了java語言的宣傳者。比較起來,java自己宣稱的跨平台特性反而並不受人關注。

  java語言目前最成功的地方至少有3個方面:1)jvm速度的不斷提高;2)大量優秀ide的出現;3)數也數不清的開源庫。簡單的說,可以用java的地方,一個審時度勢的人不會使用c/c++。

  java的最大優勢是它的不斷持續的發展。在java世界,早就是j2ee的分布式部署、rmi的遠程調用、spring的反轉控制、aop的切片控制等其他語言想都不敢想的技術的天下了。使用java的人,永遠都要走在技術的最前沿!

  使用java編程,你必須理解各種構架,你必須理解各種設計模式;使用其他語言,可能你就只需要知道怎么寫函數即可。舉例來說,有個用c/c++寫了10年代碼的人,猛然看到java的程序,他看的頭暈目眩,說到處是接口,跳來跳去都看不清楚怎么回事。他只理解到函數級別,當然看不明白基於對象級別設計的java程序。

  3、c++的編程特點

  c++最大的麻煩來自於ide編程環境。比較起來VS.net的編程環境已經算是這個方面的佼佼者了,可是,你必須要給它安裝許多插件才能夠達到Java的ide的那種程度。如果你沒有給你的vs.net安裝代碼自動提示和代碼格式化的插件,那就說明你還在浪費力氣的多敲空格(《代碼大全》上面說,程序員有30%的編寫代碼的時間花費在敲額外的空格上了)。

  使用c++編程的最大好處是,你能夠使用到最新的算法。一般研究算法的人都會用c/c++來構建他們的代碼庫,究其原因,恐怕是因為那些大學者們年紀比較大,沒有學過java(呵呵)。所以,你要找個基礎的數據結構,比如,kdb-tree的實現,找c++的要容易得多。集中一點,c++就是為算法而生的。你用它來做任何其他事情都不是很合適。

  使用c++的兄弟大部分都是被c++的古怪特性嚇怕了的。無論是到處會出現的const無法轉化為非const,還是常數無法轉化為引用,還是有的函數指針居然是8字節,還是namespace只具有象征意義等等,c++中的古怪行為實在難以枚舉。如果你還沒有遇到過,那恭喜你啦,你已經成為頂級高手了或者你還在十分低效的編程。這里要告誡那些以理解c++的一些奇特性質而沾沾自喜的兄弟們,不要學這些垃圾的東西,這些古怪的特征肯定會被拋棄的。這點如同你不要用java中標明為deprecated的方法一樣。

  在c++中,你一定要萬分注意命名規則(因為ide並不會告訴你某個名字的真正類型)。為了你自己也是為了別人好。

  4、相互學習

  學習c++,你最該看的書是:stl相關、boost相關、effective c++、c++ prime、代碼大全 等等。學習java,你最該看的書是:設計模式、軟件工程(如敏捷編程)、java3標准、算法設計。用c++的人一般把自己看成一個低級程序員,用java的人一般把自己看成一個設計師。雖然初級c++程序員比初級java程序員薪水高。但高級的c++程序員卻不比高級的java程序員薪水高。

  另外,讓人感覺到意外的一點是,使用java的人普遍比使用c++的對基本算法了解更加深入。我想可能是因為java里面的算法是開源庫,容易看明白;同時,java要想跑的快,算法是必須考慮的。當然了,用java寫一個算法比用c++寫一個要來得快很多。舉例來說,幾乎用java的人人人都知道動態數組(ArrayList)是怎么工作的,但是,使用c++的人卻只有少數知道動態數組怎么工作(vector)。

  c++和java程序員的自我感覺真的差好遠,居然會有c++團隊3個月都不交流一次!這點在java看來幾乎是不可能的,3個月之后構想肯定發生改變了。

  根據分析,c++程序員應該提高自己的構架能力,而java程序員應該提高自己對語言的理解和代碼編寫能力。只有相互學習才能夠讓我們編寫的軟件不成為垃圾。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM