自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

老程序員10年技術(shù)生涯的思考 從C++到Java

開發(fā) 前端
不知不覺,做程序工作已經(jīng)10年了,從最初學(xué)習(xí)C++到Java,從困惑到清晰,感覺真的有不少東西可寫,不過總覺得不成體系,大概看了太多八股文章的緣故,被憋得實(shí)在難受。所以不管了,想到什么寫什么吧。

1、從C++到Java

C++和Java誰快?從算法上講我認(rèn)為毫無疑問是匯編〉C++〉Java,不要迷信某些個(gè)別評(píng)測(cè),單純的回圈測(cè)試什么的,比如JNode的官方網(wǎng)站上有Java寫的JVM的性能和SUN的JVM

進(jìn)行性能比較的結(jié)果,JNode中用Java寫的JVM竟然能比SUN公司用C++寫的JVM還快!編譯器完全可以作針對(duì)性優(yōu)化影響測(cè)試結(jié)果,毫無意義的東西。而且,評(píng)測(cè)結(jié)果不會(huì)具備多少實(shí)際意義,真正的應(yīng)用系統(tǒng)的效率是80%取決于整體的設(shè)計(jì)架構(gòu),而非你使用哪種語言。所以討論匯編、C++、Java誰更快這個(gè)問題的人恐怕更多是為了自己的面子考慮,雖然Java當(dāng)前如日中天,但其總是針對(duì)C++的批判性態(tài)度卻再明顯不過,所以Bruce才會(huì)有“C++不垃圾,只是Java很傲慢”之說。

C++和Java根本的區(qū)別是什么?我認(rèn)為毫無疑問是內(nèi)存分配。編程思想和設(shè)計(jì)模式是活的東西,和語言沒有直接關(guān)系。Java沒有指針,C++寫程序也可以只用引用。JVM是Java在

內(nèi)存管理上真正有別于C++的地方。JVM的好處是顯而易見的,跨平臺(tái)、更智能的內(nèi)存管理,但能解決所有問題嗎,答案是否定的。

Java沒有內(nèi)存泄露嗎?當(dāng)然不是,我認(rèn)為java的內(nèi)存泄露往往比C++更加難以排查,因?yàn)镴VM的緣故,程序員沒法直接對(duì)內(nèi)存進(jìn)行操控,隱患往往藏的更深。我曾經(jīng)花了大量時(shí)間研究JVM的內(nèi)存機(jī)制,雖然也有了不少心得,但直到現(xiàn)在仍然處于迷惑期。循環(huán)引用,緩存機(jī)制不合理,Spring等常態(tài)Bean的屬性重復(fù)加載都是可能吃內(nèi)存的元兇。

對(duì)于一個(gè)單一的,低用戶低并發(fā)的系統(tǒng),使用Java是很舒服的,程序員不用去考慮太多事情,照著業(yè)務(wù)邏輯做設(shè)計(jì)編代碼就行,不用管內(nèi)存分配,不用管并發(fā)和互斥(其實(shí)還是要管的),就算萬一有內(nèi)存泄露的隱患,大不了每天重啟JVM一下就能解決了。但對(duì)于一個(gè)可能在多個(gè)應(yīng)用環(huán)境中部署的軟件產(chǎn)品而言,內(nèi)存泄露這種問題卻絕不能放過。我曾經(jīng)遇到過在一個(gè)環(huán)境中運(yùn)行非常良好,但在另一個(gè)環(huán)境中卻天天出問題的情況,即使每天重啟JVM也無濟(jì)于事。當(dāng)時(shí)懷疑過很多方面,網(wǎng)絡(luò)、數(shù)據(jù)庫、容器等等。那時(shí)還不是很有概念,現(xiàn)在想起來還是后來好好看程序,優(yōu)化了不少代碼,解決了幾個(gè)內(nèi)存泄露,這樣才最終解決了不穩(wěn)定的問題。舉例來講,在應(yīng)用環(huán)境A中,服務(wù)器性能較好,JVM有2G內(nèi)存,某個(gè)應(yīng)用存在內(nèi)存泄露的隱患,每次大約造成2M的內(nèi)存消耗,這樣1000次左右就沒有內(nèi)存可用了,就會(huì)造成JVM性能大幅降低。但在應(yīng)用環(huán)境B中,服務(wù)器就沒那么好的性能了,JVM僅有256M,那么100多次操作就足以導(dǎo)致問題出現(xiàn)。而且,每個(gè)應(yīng)用環(huán)境的應(yīng)用使用率是不一樣的,在A中如果每天僅出現(xiàn)10次隱患應(yīng)用操作,2-3個(gè)月都不會(huì)暴露問題,而且即使使用內(nèi)存分析工具,開始階段也很難查出有無問題,但在B中,如果每天有100次隱患應(yīng)用操作,只需一天問題就出現(xiàn)了。但實(shí)際應(yīng)用過程中,應(yīng)用的使用率往往很難精確統(tǒng)計(jì)的到,也無法預(yù)判,這也是造成問題排查困難的關(guān)鍵因素之一。應(yīng)用環(huán)境的不確定性不單體現(xiàn)在地域上,也體現(xiàn)在時(shí)間上,不同時(shí)間的相同應(yīng)用環(huán)境也不盡相同。挑選一個(gè)應(yīng)用環(huán)境,常態(tài)性監(jiān)測(cè)JVM的內(nèi)存情況是避免這類問題發(fā)生的好辦法。

結(jié)論就是,對(duì)于中高端的產(chǎn)品化,多用戶,高并發(fā)應(yīng)用,Java和C++一樣,不考慮內(nèi)存是不可能的,畢竟語言最終操縱的還是計(jì)算機(jī)。

那Java的優(yōu)勢(shì)在哪里?我認(rèn)為其在中低端應(yīng)用上的門檻更低。對(duì)大多數(shù)小型信息管理類系統(tǒng)而言,并不需要很嚴(yán)謹(jǐn)并且考慮周到的設(shè)計(jì)和編碼,學(xué)習(xí)java可以讓一個(gè)新手很快

上路,而C++卻沒有這種優(yōu)勢(shì),動(dòng)不動(dòng)就越界是新手常犯的錯(cuò)誤。在一個(gè)通常的軟件團(tuán)隊(duì)里面,水平一定會(huì)有高低,而且也不是每個(gè)人都能通過學(xué)習(xí)進(jìn)入深層次,這是C++難以解決的問題,Java在由于規(guī)范性方面的優(yōu)勢(shì)更加適合新手使用。

C++就像手動(dòng)檔汽車,Java更像自動(dòng)檔,盡管越來越多人愿意開自動(dòng)檔,可是要想真正跑得快,賽車還得手動(dòng)擋的。

問題出現(xiàn)總會(huì)讓人頭疼,追根溯源常常也會(huì)非常艱苦和漫長(zhǎng),但只要還有辦法,就不能放棄,規(guī)避問題可以解決陣痛,但永遠(yuǎn)無法治根。

2、關(guān)于云計(jì)算想到的

毫無疑問云計(jì)算的概念被擴(kuò)大化了,云服務(wù)、云存貯,SAAS、IAAS、PAAS,理論和概念早已滿天飛。但當(dāng)我仔細(xì)讀來,卻發(fā)現(xiàn)大多還是新瓶裝舊酒。雖然說還是有不少實(shí)質(zhì)性內(nèi)容,但與真正的分布式計(jì)算概念還是想去甚遠(yuǎn)。在網(wǎng)絡(luò)越來越發(fā)達(dá)的時(shí)代背景下,存貯、軟件、外設(shè)甚至內(nèi)存都網(wǎng)絡(luò)化了,唯一缺少的就是CPU,依靠網(wǎng)絡(luò)使大量CPU協(xié)同工作真的是個(gè)很誘人的想法,但也是困難而遙遠(yuǎn)的事情。也有人認(rèn)為Cloud Computing是個(gè)過度炒作的東西,我覺得有一定道理,如果要我選擇,我也會(huì)希望把自己的東西放到自己的電腦上,我會(huì)更希望在任何地方使用便攜設(shè)備隨時(shí)操縱我的電腦,卻絕對(duì)不是放到一個(gè)看不見摸不到的“云端”上頭,天天被“云端”盤剝和控制。因此,如果云端僅僅是服務(wù)或存貯的集中式管理,它是不值得如此進(jìn)行炒作的。

其實(shí)我覺得我不是一個(gè)重組概念進(jìn)行炒作的反對(duì)者,炒作對(duì)于技術(shù)和社會(huì)進(jìn)步是有一定作用的,但水可載舟、亦可覆舟,將一些本無關(guān)系的東西牽強(qiáng)附會(huì)的聯(lián)系在一起進(jìn)行炒作,只會(huì)攪亂理論和學(xué)術(shù)體系,而理論體系的混亂一定會(huì)導(dǎo)致交流上的障礙-----雖然交流變得更多(必然變得更多)更方便了,可是交流的障礙卻大幅度增加了,同樣的一個(gè)名詞可以被一百個(gè)人給出一百個(gè)解釋,本來一句話可以說清楚的事情,現(xiàn)在變成了幾十句才能說明白。

藥廠可以把10幾塊錢的藥重新包裝賣200-300塊,利潤(rùn)當(dāng)然是驚人的,可是賺到了錢的老板們卻天天打算著轉(zhuǎn)移資產(chǎn)到國(guó)外,認(rèn)為國(guó)內(nèi)沒有可持續(xù)的發(fā)展。這樣的人到底是高素質(zhì)還是低素質(zhì)呢?

我上大學(xué)的時(shí)候曾經(jīng)在醫(yī)院實(shí)習(xí),見過一個(gè)食物中毒的病人家屬連夜趕了幾十里山路,把一堆借來的硬幣交給醫(yī)院做透析;后來工作了,搞圖書館的項(xiàng)目也知道很多地方的人連100塊錢的借書證押金都捉襟見肘。那些天天生活在優(yōu)越環(huán)境下的概念重組專家們會(huì)為這些人群考慮多少呢?“云端”的概念炒作顯現(xiàn)了他們的壟斷思想,現(xiàn)在中國(guó)的貧富差距基本還是在財(cái)產(chǎn)方面,信息方面基本還是對(duì)等的,這也是一個(gè)農(nóng)村的孩子經(jīng)過十幾年苦干可以成為大企業(yè)家的前提所在。可是“云端”一來,你的一舉一動(dòng)都在我掌控和監(jiān)視之下,沒錯(cuò),你是方便了,也少花錢了,可是卻失去了信息方面的平等地位,于是,屁民將永遠(yuǎn)是屁民,永遠(yuǎn)沒有咸魚翻身的機(jī)會(huì)。

3、關(guān)于信息爆炸

10年來我也做了很多技術(shù)方面的工作了,最初幾年看到一項(xiàng)新技術(shù)、新概念,腎上腺激素濃度就會(huì)大幅度增加,要是不用一下晚上恐怕覺都睡不著??墒呛髞砺鼐妥兊美硇远嗔?,技術(shù)的選擇一定要根據(jù)需求來,絕不能為用技術(shù)而用技術(shù)。很多的新技術(shù)、新概念,看幾眼就差不多知道來源,也知道優(yōu)點(diǎn)和缺點(diǎn)了。以前總以為環(huán)境得適應(yīng)程序,后來明白了程序得適應(yīng)環(huán)境。

大型的應(yīng)用系統(tǒng),越簡(jiǎn)單越好,如果做不到簡(jiǎn)單,寧可拆分為多個(gè)系統(tǒng)單獨(dú)設(shè)計(jì)。否則,當(dāng)我面對(duì)一大堆連自己都難以看懂的概念和代碼,真會(huì)有抓狂的感覺。

一些社區(qū)雖然是不錯(cuò)的技術(shù)社區(qū),但是依然缺乏體系組織和管理。論壇、知識(shí)庫,Q&A,這些東西的模式差不多,雖然方便了信息交流,但缺乏信息的組織和管理。比如我希望做一個(gè)信息系統(tǒng),那應(yīng)該選擇什么樣的技術(shù)?這個(gè)問題目前只能靠自己去摸索,慢慢體會(huì),找到真正適合自己的技術(shù)方案。Wiki可能是更好的平臺(tái),但普及度不夠。

其實(shí)每一個(gè)Questioner或者Answerer都在極力尋求相互之間的共同語言,共同語言和語義的理論體系形成之后,交流才能順暢。翻翻帖子,不乏問東答西的案例。一個(gè)交流平臺(tái)如果能形成一套語言和思維方式,那就是非常成功的了。而這也使得技術(shù)選型的模型成為可能,當(dāng)你想采用一套新技術(shù)時(shí),Google一下,各說各話,對(duì)的有,錯(cuò)的也有,搜索引擎為何判斷不出已定論的東西誰對(duì)誰錯(cuò)呢,就是源于語義的復(fù)雜性。信息的膨脹速度遠(yuǎn)沒有我們想象中那樣快,其中相當(dāng)一部分是語言語義產(chǎn)生的泡沫,擠掉這些泡沫呢?信息真的有統(tǒng)計(jì)數(shù)據(jù)顯示的那么“海量”嗎?

統(tǒng)計(jì)數(shù)據(jù)經(jīng)常是面子工程強(qiáng)有力的支撐者,可扔掉這些浮華,細(xì)細(xì)究一下統(tǒng)計(jì)數(shù)據(jù)是怎么做出來的?常常就會(huì)讓人哭笑不得,而且大多是7分真,3分假,或偷換概念,總之目的就是把一棵小草說成一座森林。信息是有欺騙性的,商業(yè)運(yùn)作會(huì)大量運(yùn)用這種特性,換來的除了腎上腺素之外還有人和人之間不信任的感覺。

信息爆炸的時(shí)代,交流的作用變成空前重要,但在交流越來越方便的同時(shí),效率也越來越低了。也許幾十年后,人類會(huì)不堪信息的重負(fù),那時(shí)信息規(guī)范化和有序化才會(huì)真正站上歷史的舞臺(tái)。
 

原文地址:http://blog.csdn.net/chui88/archive/2011/04/18/6330408.aspx

【編輯推薦】

  1. 程序員如何在"小公司成長(zhǎng)"和"大公司學(xué)習(xí)"
  2. 程序員工資禁忌 你可知道?
  3. 還有什么更偉大 患ALS程序員生前用腳寫完最后代碼補(bǔ)丁
  4. 一個(gè)10年程序員職業(yè)發(fā)展、總結(jié)和困境
  5. 走進(jìn)對(duì)日外包程序員的世界
責(zé)任編輯:陳貽新 來源: 蔡暉的博客
相關(guān)推薦

2012-11-08 09:49:30

C++Java程序員

2009-03-26 09:22:05

2019-12-19 15:08:09

程序員技能開發(fā)者

2013-05-30 09:56:42

程序員CTO

2011-04-15 10:02:06

程序員

2010-08-23 09:41:15

程序員

2020-04-06 12:31:25

編程程序員代碼

2012-06-15 09:54:58

程序員編程開發(fā)

2020-01-15 14:40:05

Java技術(shù)框架

2015-11-12 10:23:26

老程序員編程策略

2016-03-25 11:57:23

Java程序員C++

2021-02-26 10:41:59

C++程序員代碼

2015-10-29 13:13:39

.NET程序員開發(fā)工具

2018-01-03 10:28:02

程序員生涯雷軍

2017-05-23 16:36:06

程序程序員

2015-06-03 10:22:31

程序員代碼

2023-07-17 10:28:00

C/C++編程接口

2014-07-31 13:41:36

程序員

2016-11-21 11:54:34

程序員代碼

2010-01-12 10:40:22

C++程序員
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)