第一篇:老程序員10年技術(shù)生涯的思考 從C++到Java
老程序員10年技術(shù)生涯的思考 從C++到Java 2011-04-20 08:17 蔡暉 蔡暉的博客 我要評論(20)字號:T | T
不知不覺,做程序工作已經(jīng)10年了,從最初學(xué)習(xí)C++到Java,從困惑到清晰,感覺真的有不少東西可寫,不過總覺得不成體系,大概看了太多八股文章的緣故,被憋得實在難受。所以不管了,想到什么寫什么吧。AD:
1、從C++到Java
C++和Java誰快?從算法上講我認(rèn)為毫無疑問是匯編〉C++〉Java,不要迷信某些個別評測,單純的回圈測試什么的,比如JNode的官方網(wǎng)站上有Java寫的JVM的性能和SUN的JVM 進行性能比較的結(jié)果,JNode中用Java寫的JVM竟然能比SUN公司用C++寫的JVM還快!編譯器完全可以作針對性優(yōu)化影響測試結(jié)果,毫無意義的東西。而且,評測結(jié)果不會具備多少實際意義,真正的應(yīng)用系統(tǒng)的效率是80%取決于整體的設(shè)計架構(gòu),而非你使用哪種語言。所以討論匯編、C++、Java誰更快這個問題的人恐怕更多是為了自己的面子考慮,雖然Java當(dāng)前如日中天,但其總是針對C++的批判性態(tài)度卻再明顯不過,所以Bruce才會有“C++不垃圾,只是Java很傲慢”之說。
C++和Java根本的區(qū)別是什么?我認(rèn)為毫無疑問是內(nèi)存分配。編程思想和設(shè)計模式是活的東西,和語言沒有直接關(guān)系。Java沒有指針,C++寫程序也可以只用引用。JVM是Java在
內(nèi)存管理上真正有別于C++的地方。JVM的好處是顯而易見的,跨平臺、更智能的內(nèi)存管理,但能解決所有問題嗎,答案是否定的。
Java沒有內(nèi)存泄露嗎?當(dāng)然不是,我認(rèn)為java的內(nèi)存泄露往往比C++更加難以排查,因為JVM的緣故,程序員沒法直接對內(nèi)存進行操控,隱患往往藏的更深。我曾經(jīng)花了大量時間研究JVM的內(nèi)存機制,雖然也有了不少心得,但直到現(xiàn)在仍然處于迷惑期。循環(huán)引用,緩存機制不合理,Spring等常態(tài)Bean的屬性重復(fù)加載都是可能吃內(nèi)存的元兇。
對于一個單一的,低用戶低并發(fā)的系統(tǒng),使用Java是很舒服的,程序員不用去考慮太多事情,照著業(yè)務(wù)邏輯做設(shè)計編代碼就行,不用管內(nèi)存分配,不用管并發(fā)和互斥(其實還是要管的),就算萬一有內(nèi)存泄露的隱患,大不了每天重啟JVM一下就能解決了。但對于一個可能在多個應(yīng)用環(huán)境中部署的軟件產(chǎn)品而言,內(nèi)存泄露這種問題卻絕不能放過。我曾經(jīng)遇到過在一個環(huán)境中運行非常良好,但在另一個環(huán)境中卻天天出問題的情況,即使每天重啟JVM也無濟于事。當(dāng)時懷疑過很多方面,網(wǎng)絡(luò)、數(shù)據(jù)庫、容器等等。那時還不是很有概念,現(xiàn)在想起來還是后來好好看程序,優(yōu)化了不少代碼,解決了幾個內(nèi)存泄露,這樣才最終解決了不穩(wěn)定的問題。舉例來講,在應(yīng)用環(huán)境A中,服務(wù)器性能較好,JVM有2G內(nèi)存,某個應(yīng)用存在內(nèi)存泄露的隱患,每次大約造成2M的內(nèi)存消耗,這樣1000次左右就沒有內(nèi)存可用了,就會造成JVM性能大幅降低。但在應(yīng)用環(huán)境B中,服務(wù)器就沒那么好的性能了,JVM僅有256M,那么100多次操作就足以導(dǎo)致問題出現(xiàn)。而且,每個應(yīng)用環(huán)境的應(yīng)用使用率是不一樣的,在A中如果每天僅出現(xiàn)10次隱患應(yīng)用操作,2-3個月都不會暴露問題,而且即使使用內(nèi)存分析工具,開始階段也很難查出有無問題,但在B中,如果每天有100次隱患應(yīng)用操作,只需一天問題就出現(xiàn)了。但實際應(yīng)用過程中,應(yīng)用的使用率往往很難精確統(tǒng)計的到,也無法預(yù)判,這也是造成問題排查困難的關(guān)鍵因素之一。應(yīng)用環(huán)境的不確定性不單體現(xiàn)在地域上,也體現(xiàn)在時間上,不同時間的相同應(yīng)用環(huán)境也不盡相同。挑選一個應(yīng)用環(huán)境,常態(tài)性監(jiān)測JVM的內(nèi)存情況是避免這類問題發(fā)生的好辦法。
結(jié)論就是,對于中高端的產(chǎn)品化,多用戶,高并發(fā)應(yīng)用,Java和C++一樣,不考慮內(nèi)存是不可能的,畢竟語言最終操縱的還是計算機。
那Java的優(yōu)勢在哪里?我認(rèn)為其在中低端應(yīng)用上的門檻更低。對大多數(shù)小型信息管理類系統(tǒng)而言,并不需要很嚴(yán)謹(jǐn)并且考慮周到的設(shè)計和編碼,學(xué)習(xí)java可以讓一個新手很快
上路,而C++卻沒有這種優(yōu)勢,動不動就越界是新手常犯的錯誤。在一個通常的軟件團隊里面,水平一定會有高低,而且也不是每個人都能通過學(xué)習(xí)進入深層次,這是C++難以解決的問題,Java在由于規(guī)范性方面的優(yōu)勢更加適合新手使用。
C++就像手動檔汽車,Java更像自動檔,盡管越來越多人愿意開自動檔,可是要想真正跑得快,賽車還得手動擋的。
問題出現(xiàn)總會讓人頭疼,追根溯源常常也會非常艱苦和漫長,但只要還有辦法,就不能放棄,規(guī)避問題可以解決陣痛,但永遠(yuǎn)無法治根。
2、關(guān)于云計算想到的
毫無疑問云計算的概念被擴大化了,云服務(wù)、云存貯,SAAS、IAAS、PAAS,理論和概念早已滿天飛。但當(dāng)我仔細(xì)讀來,卻發(fā)現(xiàn)大多還是新瓶裝舊酒。雖然說還是有不少實質(zhì)性內(nèi)容,但與真正的分布式計算概念還是想去甚遠(yuǎn)。在網(wǎng)絡(luò)越來越發(fā)達的時代背景下,存貯、軟件、外設(shè)甚至內(nèi)存都網(wǎng)絡(luò)化了,唯一缺少的就是CPU,依靠網(wǎng)絡(luò)使大量CPU協(xié)同工作真的是個很誘人的想法,但也是困難而遙遠(yuǎn)的事情。也有人認(rèn)為Cloud Computing是個過度炒作的東西,我覺得有一定道理,如果要我選擇,我也會希望把自己的東西放到自己的電腦上,我會更希望在任何地方使用便攜設(shè)備隨時操縱我的電腦,卻絕對不是放到一個看不見摸不到的“云端”上頭,天天被“云端”盤剝和控制。因此,如果云端僅僅是服務(wù)或存貯的集中式管理,它是不值得如此進行炒作的。
其實我覺得我不是一個重組概念進行炒作的反對者,炒作對于技術(shù)和社會進步是有一定作用的,但水可載舟、亦可覆舟,將一些本無關(guān)系的東西牽強附會的聯(lián)系在一起進行炒作,只會攪亂理論和學(xué)術(shù)體系,而理論體系的混亂一定會導(dǎo)致交流上的障礙-----雖然交流變得更多(必然變得更多)更方便了,可是交流的障礙卻大幅度增加了,同樣的一個名詞可以被一百個人給出一百個解釋,本來一句話可以說清楚的事情,現(xiàn)在變成了幾十句才能說明白。
藥廠可以把10幾塊錢的藥重新包裝賣200-300塊,利潤當(dāng)然是驚人的,可是賺到了錢的老板們卻天天打算著轉(zhuǎn)移資產(chǎn)到國外,認(rèn)為國內(nèi)沒有可持續(xù)的發(fā)展。這樣的人到底是高素質(zhì)還是低素質(zhì)呢? 我上大學(xué)的時候曾經(jīng)在醫(yī)院實習(xí),見過一個食物中毒的病人家屬連夜趕了幾十里山路,把一堆借來的硬幣交給醫(yī)院做透析;后來工作了,搞圖書館的項目也知道很多地方的人連100塊錢的借書證押金都捉襟見肘。那些天天生活在優(yōu)越環(huán)境下的概念重組專家們會為這些人群考慮多少呢?“云端”的概念炒作顯現(xiàn)了他們的壟斷思想,現(xiàn)在中國的貧富差距基本還是在財產(chǎn)方面,信息方面基本還是對等的,這也是一個農(nóng)村的孩子經(jīng)過十幾年苦干可以成為大企業(yè)家的前提所在??墒恰霸贫恕币粊恚愕囊慌e一動都在我掌控和監(jiān)視之下,沒錯,你是方便了,也少花錢了,可是卻失去了信息方面的平等地位,于是,屁民將永遠(yuǎn)是屁民,永遠(yuǎn)沒有咸魚翻身的機會。
3、關(guān)于信息爆炸
10年來我也做了很多技術(shù)方面的工作了,最初幾年看到一項新技術(shù)、新概念,腎上腺激素濃度就會大幅度增加,要是不用一下晚上恐怕覺都睡不著。可是后來慢慢地就變得理性多了,技術(shù)的選擇一定要根據(jù)需求來,絕不能為用技術(shù)而用技術(shù)。很多的新技術(shù)、新概念,看幾眼就差不多知道來源,也知道優(yōu)點和缺點了。以前總以為環(huán)境得適應(yīng)程序,后來明白了程序得適應(yīng)環(huán)境。
大型的應(yīng)用系統(tǒng),越簡單越好,如果做不到簡單,寧可拆分為多個系統(tǒng)單獨設(shè)計。否則,當(dāng)我面對一大堆連自己都難以看懂的概念和代碼,真會有抓狂的感覺。
一些社區(qū)雖然是不錯的技術(shù)社區(qū),但是依然缺乏體系組織和管理。論壇、知識庫,Q&A,這些東西的模式差不多,雖然方便了信息交流,但缺乏信息的組織和管理。比如我希望做一個信息系統(tǒng),那應(yīng)該選擇什么樣的技術(shù)?這個問題目前只能靠自己去摸索,慢慢體會,找到真正適合自己的技術(shù)方案。Wiki可能是更好的平臺,但普及度不夠。
其實每一個Questioner或者Answerer都在極力尋求相互之間的共同語言,共同語言和語義的理論體系形成之后,交流才能順暢。翻翻帖子,不乏問東答西的案例。一個交流平臺如果能形成一套語言和思維方式,那就是非常成功的了。而這也使得技術(shù)選型的模型成為可能,當(dāng)你想采用一套新技術(shù)時,Google一下,各說各話,對的有,錯的也有,搜索引擎為何判斷不出已定論的東西誰對誰錯呢,就是源于語義的復(fù)雜性。信息的膨脹速度遠(yuǎn)沒有我們想象中那樣快,其中相當(dāng)一部分是語言語義產(chǎn)生的泡沫,擠掉這些泡沫呢?信息真的有統(tǒng)計數(shù)據(jù)顯示的那么“海量”嗎? 統(tǒng)計數(shù)據(jù)經(jīng)常是面子工程強有力的支撐者,可扔掉這些浮華,細(xì)細(xì)究一下統(tǒng)計數(shù)據(jù)是怎么做出來的?常常就會讓人哭笑不得,而且大多是7分真,3分假,或偷換概念,總之目的就是把一棵小草說成一座森林。信息是有欺騙性的,商業(yè)運作會大量運用這種特性,換來的除了腎上腺素之外還有人和人之間不信任的感覺。信息爆炸的時代,交流的作用變成空前重要,但在交流越來越方便的同時,效率也越來越低了。也許幾十年后,人類會不堪信息的重負(fù),那時信息規(guī)范化和有序化才會真正站上歷史的舞臺。
第二篇:程序員-從C到Java,10年技術(shù)生涯的幾點思考(精)
不知不覺,做程序工作已經(jīng)10年了,從最初學(xué)習(xí)C++到Java,從困惑到清晰,感覺真的有不少東西可寫,不過總覺得不成體系,大概看了太多八股文章的緣故,被憋得實在難受。所以不管了,想到什么寫什么吧。
1、從C++到Java
C++和Java誰快?從算法上講我認(rèn)為毫無疑問是匯編〉C++〉Java,不要迷信某些個別評測,單純的回圈測試什么的,比如JNode的官方網(wǎng)站上有Java寫的JVM的性能和SUN的JVM
進行性能比較的結(jié)果,JNode中用Java寫的JVM竟然能比SUN公司用C++寫的JVM還快!編譯器完全可以作針對性優(yōu)化影響測試結(jié)果,毫無意義的東西。而且,評測結(jié)果不會具備多少實際意義,真正的應(yīng)用系統(tǒng)的效率是80%取決于整體的設(shè)計架構(gòu),而非你使用哪種語言。所以討論匯編、C++、Java誰更快這個問題的人恐怕更多是為了自己的面子考慮,雖然Java當(dāng)前如日中天,但其總是針對C++的批判性態(tài)度卻再明顯不過,所以Bruce才會有“C++不垃圾,只是Java很傲慢”之說。
C++和Java根本的區(qū)別是什么?我認(rèn)為毫無疑問是內(nèi)存分配。編程思想和設(shè)計模式是活的東西,和語言沒有直接關(guān)系。Java沒有指針,C++寫程序也可以只用引用。JVM是Java在 內(nèi)存管理上真正有別于C++的地方。JVM的好處是顯而易見的,跨平臺、更智能的內(nèi)存管理,但能解決所有問題嗎,答案是否定的。
Java沒有內(nèi)存泄露嗎?當(dāng)然不是,我認(rèn)為java的內(nèi)存泄露往往比C++更加難以排查,因為JVM的緣故,程序員沒法直接對內(nèi)存進行操控,隱患往往藏的更深。我曾經(jīng)花了大量時間研究JVM的內(nèi)存機制,雖然也有了不少心得,但直到現(xiàn)在仍然處于迷惑期。循環(huán)引用,緩存機制不合理,Spring等常態(tài)Bean的屬性重復(fù)加載都是可能吃內(nèi)存的元兇。
對于一個單一的,低用戶低并發(fā)的系統(tǒng),使用Java是很舒服的,程序員不用去考慮太多事情,照著業(yè)務(wù)邏輯做設(shè)計編代碼就行,不用管內(nèi)存分配,不用管并發(fā)和互斥(其實還是要管的,就算萬一有內(nèi)存泄露的隱患,大不了每天重啟JVM一下就能解決了。但對于一個可能在多個應(yīng)用環(huán)境中部署的軟件產(chǎn)品而言,內(nèi)存泄露這種問題卻絕不能放過。我曾經(jīng)遇到過在一個環(huán)境中運行非常良好,但在另一個環(huán)境中卻天天出問題的情況,即使每天重啟JVM也無濟于事。當(dāng)時懷疑過很多方面,網(wǎng)絡(luò)、數(shù)據(jù)庫、容器等等。那時還不是很有概念,現(xiàn)在想起來還是后來好好看程序,優(yōu)化了不少代碼,解決了幾個內(nèi)存泄露,這樣才最終解決了不穩(wěn)定的問題。舉例來講,在應(yīng)用環(huán)境A中,服務(wù)
器性能較好,JVM有2G內(nèi)存,某個應(yīng)用存在內(nèi)存泄露的隱患,每次大約造成2M的內(nèi)存消耗,這樣1000次左右就沒
有內(nèi)存可用了,就會造成JVM性能大幅降低。但在應(yīng)用環(huán)境B中,服務(wù)器就沒那么好的性能了,JVM僅有256M,那么100多次操作就足以導(dǎo)致問題出現(xiàn)。而且,每個應(yīng)用環(huán)境的應(yīng)用使用率是不一樣的,在A中如果每天僅出現(xiàn)10次隱患應(yīng)用操作,2-3個月都不會暴露問題,而且即使使用內(nèi)存分析工具,開始階段也很難查出有無問題,但在B中,如果每天有100次隱患應(yīng)用操作,只需一天問題就出現(xiàn)了。但實際應(yīng)用過程中,應(yīng)用的使用率往往很難精確統(tǒng)計的到,也無法預(yù)判,這也是造成問題排查困難的關(guān)鍵因素之一。應(yīng)用環(huán)境的不確定性不單體現(xiàn)在地域上,也體現(xiàn)在時間上,不同時間的相同應(yīng)用環(huán)境也不盡相同。挑選一個應(yīng)用環(huán)境,常態(tài)性監(jiān)測JVM的內(nèi)存情況是避免這類問題發(fā)生的好辦法。
結(jié)論就是,對于中高端的產(chǎn)品化,多用戶,高并發(fā)應(yīng)用,Java和C++一樣,不考慮內(nèi)存是不可能的,畢竟語言最終操縱的還是計算機。
那Java的優(yōu)勢在哪里?我認(rèn)為其在中低端應(yīng)用上的門檻更低。對大多數(shù)小型信息管理類系統(tǒng)而言,并不需要很嚴(yán)謹(jǐn)并且考慮周到的設(shè)計和編碼,學(xué)習(xí)java可以讓一個新手很快
上路,而C++卻沒有這種優(yōu)勢,動不動就越界是新手常犯的錯誤。在一個通常的軟件團隊里面,水平一定會有高低,而且也不是每個人都能通過學(xué)習(xí)進入深層次,這是C++難以解決的問題,Java在由于規(guī)范性方面的優(yōu)勢更加適合新手使用。
C++就像手動檔汽車,Java更像自動檔,盡管越來越多人愿意開自動檔,可是要想真正跑得快,賽車還得手動擋的。
問題出現(xiàn)總會讓人頭疼,追根溯源常常也會非常艱苦和漫長,但只要還有辦法,就不能放棄,規(guī)避問題可以解決陣痛,但永遠(yuǎn)無法治根。
2、關(guān)于云計算想到的 毫無疑問云計算的概念被擴大化了,云服務(wù)、云存貯,SAAS、IAAS、PAAS,理論和概念早已滿天飛。但當(dāng)我仔細(xì)讀來,卻發(fā)現(xiàn)大多還是新瓶裝舊酒。雖然說還是有不少實質(zhì)性內(nèi)容,但與真正的分布式計算概念還是想去甚遠(yuǎn)。在網(wǎng)絡(luò)越來越發(fā)達的時代背景下,存貯、軟件、外設(shè)甚至內(nèi)存都網(wǎng)絡(luò)化了,唯一缺少的就是CPU,依靠網(wǎng)絡(luò)使大量CPU協(xié)同工作真的是個很誘人的想法,但也是困難而遙遠(yuǎn)的事情。也有人認(rèn)為Cloud Computing是個過度炒作的東西,我覺得有一定道理,如果要我選擇,我也會希望把自己的東西放到自己的電腦上,我會更希望
在任何地方使用便攜設(shè)備隨時操縱我的電腦,卻絕對不是放到一個看不見摸不到的“云端”上頭,天天被“云端”盤剝和控制。因此,如果云端僅僅是服務(wù)或存貯的集中式管理,它是不值得如此進行炒作的。
其實
我覺得我不是一個重組概念進行炒作的反對者,炒作對于技術(shù)和社會進步是有一定作用的,但水可載舟、亦可覆舟,將一些本無關(guān)系的東西牽強附會的聯(lián)系在一起進行炒作,只會攪亂理論和學(xué)術(shù)體系,而理論體系的混亂一定會導(dǎo)致交流上的障礙-----雖然交流變得更多(必然變得更多)更方便了,可是交流的障礙卻大幅度增加了,同樣的一個名詞可以被一百個人給出一百個解釋,本來一句話可以說清楚的事情,現(xiàn)在變成了幾十句才能說明白。
藥廠可以把10幾塊錢的藥重新包裝賣200-300塊,利潤當(dāng)然是驚人的,可是賺到了錢的老板們卻天天打算著轉(zhuǎn)移資產(chǎn)到國外,認(rèn)為國內(nèi)沒有可持續(xù)的發(fā)展。這樣的人到底是高素質(zhì)還是低素質(zhì)呢?
我上大學(xué)的時候曾經(jīng)在醫(yī)院實習(xí),見過一個食物中毒的病人家屬連夜趕了幾十里山路,把一堆借來的硬幣交給醫(yī)院做透析;后來工作了,搞圖書館的項目也知道很多地方的人連100塊錢的借書證押金都捉襟見肘。那些天天生活在優(yōu)越環(huán)境下的概念重組專家們會為這些人群考慮多少呢?“云端”的概念炒作顯現(xiàn)了他們的壟斷思想,現(xiàn)在中國的貧富差距基本還是在財產(chǎn)方面,信息方面基本還是對等的,這也是一個農(nóng)村的孩子經(jīng)過十幾年苦干可以成為大企業(yè)家的前提所在。可是“云端”一來,你的一舉一動都在我掌控和監(jiān)視之下,沒錯,你是方便了,也少花錢了,可是卻失去了信息方面的平等地位,于是,屁民將永遠(yuǎn)是屁民,永遠(yuǎn)沒有咸魚翻身的機會。
3、關(guān)于信息爆炸
10年來我也做了很多技術(shù)方面的工作了,最初幾年看到一項新技術(shù)、新概念,腎上腺激素濃度就會大幅度增加,要是不用一下晚上恐怕覺都睡不著。可是后來慢慢地就變得理性多了,技術(shù)的選擇一定要根據(jù)需求來,絕不能為用技術(shù)而用技術(shù)。很多的新技術(shù)、新概念,看幾眼就差不多知道來源,也知道優(yōu)點和缺點了。以前總以為環(huán)境得適應(yīng)程序,后來明白了程序得適應(yīng)環(huán)境。
大型的應(yīng)用系統(tǒng),越簡單越好,如果做不到簡單,寧可拆分為多個系統(tǒng)單獨設(shè)計。否則,當(dāng)我面對一大堆連自己都難以看懂的概念和代碼,真會有抓狂的感覺。
CSDN是不錯的技術(shù)社區(qū)了,但是依然缺乏體系組織和管理。論壇、知識庫,Q&A,這些東西的模式差不多,雖然方便了信息交流,但缺乏信息的組織和管
理。比如我希望做一個信息系統(tǒng),那應(yīng)該選擇什么樣的技術(shù)?這個問題目前只能靠自己去摸索,慢慢體會,找到真正適合自己的技術(shù)方案。Wiki可能是更好的平臺,但普及度不夠。
其實每一個Questioner或者Answerer都在極力尋求相互之間的共同
語言,共同語言和語義的理論體系形成之后,交流才能順暢。翻翻CSDN的帖子,不乏問東答西的案例。一個交流平臺如果能形成一套語言和思維方式,那就是非常成功的了。而這也使得技術(shù)選型的模型成為可能,當(dāng)你想采用一套新技術(shù)時,Google一下,各說各話,對的有,錯的也有,搜索引擎為何判斷不出已定論的東西誰對誰錯呢,就是源于語義的復(fù)雜性。信息的膨脹速度遠(yuǎn)沒有我們想象中那樣快,其中相當(dāng)一部分是語言語義產(chǎn)生的泡沫,擠掉這些泡沫呢?信息真的有統(tǒng)計數(shù)據(jù)顯示的那么“海量”嗎?
統(tǒng)計數(shù)據(jù)經(jīng)常是面子工程強有力的支撐者,可扔掉這些浮華,細(xì)細(xì)究一下統(tǒng)計數(shù)據(jù)是怎么做出來的?常常就會讓人哭笑不得,而且大多是7分真,3分假,或偷換概念,總之目的就是把一棵小草說成一座森林。信息是有欺騙性的,商業(yè)運作會大量運用這種特性,換來的除了腎上腺素之外還有人和人之間不信任的感覺。
信息爆炸的時代,交流的作用變成空前重要,但在交流越來越方便的同時,效率也越來越低了。也許幾十年后,人類會不堪信息的重負(fù),那時信息規(guī)范化和有序化才會真正站上歷史的舞臺。
第三篇:Java從入門到精通讀書筆記—c++程序員學(xué)java
Java從入門到精通讀書筆記—c++程序員學(xué)java
第一章:
2分鐘看完,老生常談,即使沒怎么用過java也知道這些。
第二章:
1.instanceof應(yīng)該是c++中沒有的,c++使用RTTI解決這個問題的,很難用。
2.super這種引用父類的方法也是比較簡單的,C++中是用父類名::父類方法()解決的,有點難看。
3.自動類型轉(zhuǎn)換和C++一樣,精度變高的隨便轉(zhuǎn),精度變低的會丟失。
4.強制類型轉(zhuǎn)換只有(type)這一種,不像c++有static_cast、dynamic_cast、reinterpret_cast、和const_cast。
5.運算符什么的和c++幾乎一模一樣。
半小時看完。
第三章:
1.break可以跳出語句塊,c++中沒有語句塊。語句塊的定義就是在一段語句前加上花括號和冒號;
其他基本上和c++一樣,5分鐘看完。
第四章:
1.java數(shù)組越界會在運行時拋異常,c++不會,聲明數(shù)組的方法也有些不一致。
java 聲明數(shù)組的所有辦法
int[] a = new int[4];
int a[] = new int[4];
int[] a = {1, 15, 26};
int a[] = {1, 15, 26};
2.java的數(shù)組是一個對象,自帶length屬性,使用簡單。c++的數(shù)組不自帶方法和屬性,要知道數(shù)組長度只能sizeof(arrayObject)/sizeof(int)。當(dāng)然如果使用STL中的vector之類的也和java一樣簡單。
3.java的所謂數(shù)組賦值(或者叫數(shù)組拷貝)其實就是c++中的兩個數(shù)組指針的賦值,java沒有指針,所以作者費了一大堆口水。好在java有垃圾回收,要不然一個指針的內(nèi)存就算泄露了。至于真正的數(shù)組內(nèi)容賦值,是使用System.arraycopy(ir, srcPos, ir, destPos, length);而C++一般使用memcpy等函數(shù)。若使用STL中的vector,那么就看vector的拷貝構(gòu)造函數(shù)怎么寫的,應(yīng)該是vector的對象賦值過去而不是指針指過去。
4.重溫了冒泡排序(時間復(fù)雜度O(n2)),和快速排序(最壞情況的時間復(fù)雜度為O(n2),最好情況時間復(fù)雜度為O(nlog2n))。
5.For-Each語法被引入java了,在很多地方用起來真是簡單。Python和c#早就支持了,c++中雖然STL的algorithm包中引入了for_each,但是由于需要使用函數(shù)指針還是略顯繁瑣。
這章挺多,看了一個多小時?。?/p>
第五章:類和對象
1.Java中方法的重載和c++的一樣,都是通過參數(shù)的不同來區(qū)別。但是c++中可以設(shè)置默認(rèn)參數(shù),而java不可以。
2.java中的對象大部分只能new出來,或者clone出來,或者反射出來,而不能直接在棧上定義出來。而c++的對象在棧上和堆上創(chuàng)建的都很多。
3.基本類型的參數(shù)傳遞,java和c++都是傳值。對象的參數(shù)傳遞,java是傳引用,c++是拷貝,也就是傳值。其實c++中大部分時候也是傳引用或者傳指針,但java沒有指針,也沒有選擇耗時耗空間的拷貝,只能傳引用了。
這章對于c++程序員來說太簡單,幾分鐘過一遍就可以了。
第六章:繼承
1.方法被覆寫后,如果要調(diào)用父類的方法,c++必須用父類名::方法名,而java用super.方法名即可。
2.多態(tài)和動態(tài)綁定,java和c++幾乎一樣,都很簡單。
3.final關(guān)鍵字:java中的final關(guān)鍵字可以將一個類限制為無法繼承的,同樣的還有C#中的sealed關(guān)鍵字。而c++是沒有這個玩意的。
4.java的抽象類和c++幾乎一樣。
5.java是獨根語言,引入了Object類,它的clone方法就好像c++中的拷貝構(gòu)造函數(shù),它的equals方法是用來比較內(nèi)容的,而toString方法是將對象作為字符串輸出的。
這章對于c++程序員來說同樣簡單,幾分鐘過一遍就可以了。
第七章:接口
1.java中有接口。C++沒有,唯一類似的是含有純虛函數(shù)的虛類(沒有純虛基類這個說法)。但是COM、CORBA等中間件中都有IDL語言(接口定義語言),使用這些中間件的c++程序員也沒有少寫接口。
2.接口實現(xiàn)的一些規(guī)定:
1)如果實現(xiàn)接口的不是抽象類,則必須實現(xiàn)其接口的所有方法才能被實例化;
2)接口中所有的方法默認(rèn)為public;
3.接口可以用來實現(xiàn)多態(tài);
4.java的內(nèi)部類和c++差不多,都沒人關(guān)心,最多懶得想名字的時候用用那個匿名內(nèi)部類(例如什么UI的響應(yīng)函數(shù))。
5.java的對象克隆,吹了一堆就是個c++中的拷貝構(gòu)造函數(shù)。所謂什么“淺克隆、深克隆”問題,就是c++中拷貝構(gòu)造是遇上類中定義了指針的問題。C++程序員一望即知。
接口是為了維護單繼承機制弄出來的,花半小時看看還是值得的。
第八章:面向?qū)ο缶幊?/p>
C++程序員不用看。
第九章:異常處理
1.java的異常處理中有finally語句塊,而c++中沒有,所以程序員要自己想辦法來處理異常發(fā)生后諸如“資源釋放”之類的問題;
第十章:線程
1.java語言自帶線程機制,c++目前還是不帶線程機制的。雖然boost::thread庫也被眾多c++程序員廣泛使用。但是windows下用得最多的還是windows SDK自帶的線程函數(shù);而linux下用得最多的還是pthread。另外還有一些號稱同時支持多個平臺的多線程庫。
2.java多線程有兩種方法實現(xiàn),第一是派生Thread類,第二種是實現(xiàn)Runnable接口。
3.java線程分為4種狀態(tài):new、runnable、non runnable和done,這和其他線程庫大同小異;
4.run、start、stop、sleep、suspend、resume、yield、wait、notify和notifyall等方法的含義也和其他線程庫一致。但suspend、resume和stop等方法是不建議使用的,因為可能會導(dǎo)致死鎖。
5.java可使用join方法來等待線程結(jié)束,而在某些線程庫中join方法經(jīng)常是不可用的。
6.java的互斥使用synchonized關(guān)鍵字實現(xiàn),它很類似于boost.thread中的lock(mutex),只不過它是對線程對象隱含的鎖加鎖。其實這很不利于新手理解。另外還介紹了synchonized的一些亂七八糟的用法,相信對于新手這只有反作用。
這一章對于線程,介紹得比較淺顯,實現(xiàn)簡單的多線程應(yīng)該沒問題,但是稍微復(fù)雜一點的也許就需要其他的開發(fā)包了。Java線程連個Mutex類都沒有,這是最讓我吃驚的,僅僅使用synchonized來實現(xiàn)同步、互斥、信號量該多麻煩啊,也許是我還沒弄懂java多線程吧。
第十一章:圖形編程
1.IDE的年代,GUI還是畫出來吧。Java中也就Layout類需要看看,其他大部分Layout類也是湊數(shù)的,根本不會有人用。
第十二章:事件處理
隨便看看了解即可,新手可以試著寫寫代碼,老手直接IDE中添加事件即可。
第十三章:Swing用戶界面設(shè)計
同第十一章,隨便看看即可。界面一般有專人搞,普通程序員能看懂就行了。
總結(jié):《java從入門到精通》這本書整體質(zhì)量尚可,c++熟手大概一到兩天可以看完,掌握程度在80%左右??赐旰竽軌蛴幸恍┗靖拍?,可以寫一些基本程序??赐旰箅x入門還早,更談不上精通了。
說說我看完后的兩個迷惑之處吧,第一是從來沒有提到j(luò)ava中的對象、常量、代碼所在的堆、棧等內(nèi)存分布情況,對于c++程序員來說是很難適應(yīng)的,可能是篇幅的原因吧;第二沒有介紹垃圾回收機制,這可能是c++程序員更感興趣的吧。
第四篇:從程序員到技術(shù)總監(jiān),分享10年開發(fā)經(jīng)驗
在中國有很多人都認(rèn)為IT行為是吃青春飯的,如果過了30歲就很難有機會再發(fā)展下去!其實現(xiàn)實并不是這樣子的,在下從事.NET及JAVA方面的開發(fā)的也有10年的時間了,在這里在下想憑借自己的親身經(jīng)歷,與大家一起探討一下。
明確入行的目的
很多人干IT這一行都沖著“收入高”這一點的,因為只要學(xué)會一點HTML, DIV+CSS,要做一個頁面開發(fā)人員并不是一件難事,而且做一個頁面開發(fā)人員更容易找到工作,收入比普通的工作還要高一些,所以成為了很多高校畢業(yè)生的選擇。如果您只是抱著這樣一個心態(tài)來入行的話,那閣下可真的要小心了。因為干IT這一行競爭本來就比較激烈,特別是頁面設(shè)計這方面,能夠開發(fā)的人很多,所以為了節(jié)省成本,大部分公司都會在需要的時候才招聘這類人員;在沒有訂單的時候,一些小公司還可能找各類的借口或者以降薪的手段去開除這類員工。而在招聘信息上常常會看到“招聘頁面設(shè)計師,條件:30歲以下??歡迎應(yīng)屆畢業(yè)生前來應(yīng)聘”這樣一條,因為這一類工員對技術(shù)上的要求并不高,找應(yīng)屆生可以節(jié)約成本。所以在下覺得“IT行業(yè)是吃青春飯的”這句話只是對著以上這類人所說的,如果閣下缺乏“進取之心”,而只抱著“收入高,容易找工作”這樣的態(tài)度而入行,那“IT行業(yè)是吃青春飯”將會應(yīng)驗了。
選擇合適的工具
JAVA、C#、PHP、C++、VB??10多種熱門的開發(fā)語言,哪一種最有發(fā)展?jié)摿δ?其實開發(fā)語言只不過是一個工具,“與其分散進攻,不如全力一擊”,無論是哪一種開發(fā)語言,只要您全力地去學(xué)習(xí),到有了一定的熟悉程度的時候,要學(xué)習(xí)另一種的語言也是輕而易舉的事情。開發(fā)語言主要分為三大類:
1.網(wǎng)絡(luò)開發(fā)
現(xiàn)在網(wǎng)絡(luò)已經(jīng)成為世界通訊的一座橋梁,好像Javascript、PHP、Ruby這幾類開發(fā)語言大部分是用作網(wǎng)絡(luò)開發(fā)方面。
2.企業(yè)軟件開發(fā)
JAVA、C#、VB這幾類開發(fā)語言都實現(xiàn)了面向?qū)ο箝_發(fā)的目標(biāo),更多時候用于企業(yè)系統(tǒng)的開發(fā)。
3.系統(tǒng)軟件
C語言、C++、Objective-C這些軟件更多是用在系統(tǒng)軟件開發(fā),嵌入式開發(fā)的方面。
當(dāng)然,這分類不是絕對,像JAVA、C#、VB很多時候也用于動態(tài)網(wǎng)站的開發(fā)。在很開發(fā)項目都會使用集成開發(fā)的方式,同一個項目里面使用多種開發(fā)語言,各展所長,同步開發(fā)。但所以在剛?cè)腴T的時候,建議您先為自己選擇一種合適的開發(fā)工具,“專注地投入學(xué)習(xí),全力一擊”。
明確發(fā)展方向
當(dāng)您對某種開發(fā)語言已經(jīng)有了一定的了解,開始覺得自己如同“行尸走肉”,成為一個開發(fā)工具的時候,那您就應(yīng)該要明確一下自己的發(fā)展方向了。
平常在公司,您可以看到做UI層的開發(fā)人員大多數(shù)都有20多歲,他們充滿干勁,而且沒有家庭負(fù)擔(dān),在兩年前ASP.NET MVC、Silverlight等剛出現(xiàn)的時候,他們可以在晚上回家的時候買幾本書或者直接上網(wǎng)看看,研究三五個星期以后,對需要用到的技術(shù)就已經(jīng)有一定的了解了。而年過30的人多數(shù)是已經(jīng)成家了,他們每天9:00點上班唯一的希望就是快些到6:00點,能回家吃飯。吃完飯只想陪孩子玩一下,看看孩子的功課,對新增的技術(shù)缺乏了學(xué)習(xí)的欲望。所以很多接近30歲的程序員都有著一種逼迫感(包括30歲時候的我自己),再過幾年應(yīng)該怎么辦?這時候,您就更應(yīng)該明確一下目標(biāo),努力向自己的發(fā)展方向前進了。歸納一下,可從下面幾項里選擇適合自己的一條道路:
1.從技術(shù)向業(yè)務(wù)過渡
在國外,很多發(fā)達國家都很重視人才,一個高級的程序員與一個Project Manager收入相差一般不超過15%。但中國是世界上人口最多的國家,國內(nèi)人才眾多,所以人才濫用的情況經(jīng)??梢钥吹?。一個小公司的開發(fā)部里面經(jīng)常會見到新面孔,但PM卻不會常換。因為做老板的對技術(shù)是一竅不通,依他們看來只到拉住PM的心,那技術(shù)方面方面就能搞得定,至于技術(shù)部要換人,他們根本不需要費力氣去管。所以從一個技術(shù)員過渡到一個PM是向前發(fā)展的一個選擇,但開發(fā)人員也需要知道,要成為一個PM不單單是使用技術(shù),而更重要的是對管理方面的認(rèn)識。一個PM主要的工作是組織團隊,控制成本,管理業(yè)務(wù),控制項目進度,與客戶進行溝通,協(xié)調(diào)工作,定期進行工作報告等。所以要成為一個成功的PM更要重視組織能力,PM必須能提高團隊的積極性,發(fā)揮團隊所長,在有限的開發(fā)資源前提下為公司得到最大程度上的利潤。成為一個PM后,通常不需要直接接觸技術(shù)開發(fā),而著重管理的是業(yè)務(wù)發(fā)展,但PM對技術(shù)也需要有一定的了解(在下曾經(jīng)為PM對技術(shù)了解的必要性寫過一篇文章,得到很多支持但也惹來不少的爭議)。在這里我還是要強調(diào)自己的觀點:要成為一個成功的PM最重視的是管理能力,但對技術(shù)也應(yīng)該有足夠的了解,因為這是與團隊成員溝通的橋梁,只有這樣才能與整個團隊的成員有著緊密的結(jié)合,讓團隊成員感覺到他們自己存在的意義,從而調(diào)動團隊的積極性,而不是漠視技術(shù)人員的存在。技術(shù)并非成為一個成功PM的充分條件但卻是必要條件!
2.從程序員向技術(shù)管理發(fā)展
其實一個Team Leader的職責(zé)與Project Manager相像,但Team Leader更著重于技術(shù)開發(fā)方面,通常一個大型項目都會有一兩個開發(fā)團隊由Team Leader帶領(lǐng),負(fù)責(zé)開發(fā)核心部分,而其它部分分派給不同開發(fā)小組或者分派給外包公司。在網(wǎng)上??吹綆拙湓?,貼切地形容了PM與TL的區(qū)別:“技術(shù)人員樂于被領(lǐng)導(dǎo);但他們不喜歡被管理,不喜歡像牛一樣被驅(qū)趕或指揮。管理者強迫人們服從他們的命令,而領(lǐng)導(dǎo)者則會帶領(lǐng)他們一起工作。管理是客觀的,沒有個人感情因素,它假定被管理者沒有思想和感受,被告知要做什么和該如何做。領(lǐng)導(dǎo)是引領(lǐng)、引導(dǎo),它激勵人們達成目標(biāo)。領(lǐng)導(dǎo)力是帶有強烈個人感情色彩的,它不是你能命令的,也不是你能測量評估和測試的?!?/p>
無論是PM與TL,對業(yè)務(wù)與技術(shù)都要有深入的了解,只是PM更側(cè)重于業(yè)務(wù)的管理,盈利的多少,風(fēng)險的大小等等,而TL則側(cè)重于項目的成本,開發(fā)的難度,軟件的架構(gòu)等技術(shù)方面的問題。在某些人眼中,技術(shù)與管理就像魚與熊掌,不可兼得,但依在下看來,兩者卻是秤不離砣,密不可分。只要及時提升自己對技術(shù)與管理的認(rèn)識,不斷地向深一層發(fā)展,要從程序員提升到技術(shù)管理人員只是時間的問題。打個比方,一個普通的.NET程序員,開始可能限制于ASP.NET的頁面開發(fā),但一旦他有了發(fā)展之心,他自然會對ASP.NET MVC、Silverlight、WinForm、WPF這些UI的開發(fā)手法感到興趣,學(xué)習(xí)不需要多少時間,他可能就會認(rèn)識這些UI開發(fā)只不過是一些工具,其實在開發(fā)原理上沒什么區(qū)別。接著他就會向深一層的通訊模式進行了解,認(rèn)識TCP/IP、Web Service、WCF、Remoting這些常用到的通訊方式,這時候他可能已經(jīng)感覺到自己對開發(fā)技術(shù)有了進一步的了解。進而向工作流、設(shè)計模式、面向?qū)ο笤O(shè)計、領(lǐng)域驅(qū)動設(shè)計、面向服務(wù)開發(fā)等高層次進發(fā),最后成為技術(shù)的領(lǐng)導(dǎo)者。上面只是一個比喻,但要注意的是,在學(xué)習(xí)的時期必須注意的是與同事之間溝通,很多的開發(fā)人員喜歡獨來獨往,開發(fā)的項目總想一個人搞定,不受外界的干擾。但要明白,就算你有天大的本事,一項大型的項目也不可能由你一個人全扛著。所以團隊的合作性與同事間的溝通是必要的,這也是成功一個TL的必要條件。
3.單方面向技術(shù)發(fā)展
能成功進行技術(shù)開發(fā)的尖端人才,這是在下最向往的工作,卻也沒本事登上這個位置。很多從事開發(fā)的人都會認(rèn)為,業(yè)務(wù)總會帶著“金錢的味道”,老板從來不管開發(fā)是否合符開發(fā)原則,是否經(jīng)過必要測試,他們只會在客戶面前無盡地吹噓,項目到期能成功交貨,只要不出什么大問題那這個項目就算成功了。其實我們也要明白:開發(fā)項目最終目標(biāo)是為了賺錢,在開發(fā)過程中對項目成本的限制和效率的控制這也是必須,所以這才需要管理人員對項目進行管理。但開發(fā)人員也很想避開這“金錢的塵囂”,全心投入到技術(shù)的世界當(dāng)中。所以對技術(shù)有著濃厚興趣的人,往往會深入地研究某一項技術(shù),成為技術(shù)上的精英。但在這里說一句令人心淡的話:中國已經(jīng)屬于是世界上第二大經(jīng)濟體同盟國,但國民生產(chǎn)總值主要來源于第三方加工產(chǎn)業(yè)方面。中國可以說是人才濟濟,但卻在高新產(chǎn)業(yè)上卻比發(fā)達國家落后。這幾年的確看到我們國家在高新科技上有著質(zhì)的飛躍,但跟歐美發(fā)達國家還有著一段距離。所以想在中國成為尖端技術(shù)的人才,無可否定比在國外要難。依在下看來,要想成為尖端的開發(fā)者,必須對C、C++、匯編語言、嵌入式開發(fā)、Windows API、Linux API這些底層技術(shù)有著深入的了解。要知道解JAVA、.NET??等這些之所以稱為高級開發(fā)語言,并不是指它們比C、C++、匯編語言更高級,而是指它們封裝了C、C++等等的功能,更適合用于企業(yè)軟件的開發(fā),使開發(fā)變得簡單。但如果要開發(fā)一些底層的軟件,大型的系統(tǒng)的時候,就必須用到C、C++、匯編等開發(fā)語言,這是成功尖端人才的一個條件。
確定未來的目標(biāo)
人是從歷練中成長的,古人云:三十而立,形容的不是一個人的社會地位,經(jīng)濟來源,而是形容一個人對未來的目標(biāo),對人生的意向。要成為一個成功人,就應(yīng)該早日為自己定下長期的發(fā)展目標(biāo),作為一個開發(fā)者也當(dāng)如此。隨著人的性格,取向各有不同,大家為自己所選擇的路也有不同:
1.自立門戶,勇敢創(chuàng)業(yè)
快30歲了,很多人會認(rèn)為要想真正賺得了錢,就應(yīng)該自立門戶,為自己創(chuàng)業(yè)建立一個基礎(chǔ)。像北京、上海、廣州這些一級城市,要買房子,一手樓基本要在2萬~4萬元/平方米左右,而在一家普通的IT公司當(dāng)上一個項目經(jīng)理,基本收入一般都在1.5萬~3萬之間(除非在大型的跨國企業(yè)內(nèi)工作,那另當(dāng)別論),要買一間100平方米左右的房子,就算不吃不喝也幾乎要10年的年薪,所以選擇自主創(chuàng)業(yè),是很多IT開發(fā)人員的一個未來目標(biāo),想要達到這個目標(biāo),就應(yīng)該更多地把業(yè)務(wù)作為重點。不可否認(rèn)的一件事,在中國社會里很多時候講的是“關(guān)系”,即使這30年的改革開放使中國的經(jīng)濟蓬勃地發(fā)展起來,但幾千年來留下的歪風(fēng)還是不能完全的磨滅。所以想要創(chuàng)業(yè)的人事建議你要多跟客戶打好關(guān)系,與合作伙伴保持互利互動的模式,這將有利于日后事業(yè)的發(fā)展。
2.急流勇退,退居二線
這也是不少人的選擇。很多人在有了家庭以后,感覺到壓力太大,人的一生并非只有事業(yè),他們想把更多時間用于對親人的照顧,對孩子的關(guān)心上。所以很多人會選擇一份像系統(tǒng)分析、系統(tǒng)維護、高校教師、專業(yè)學(xué)院講師這一類的工作。收入穩(wěn)定,而且往往沒有一線開發(fā)人員那么大的壓力。
3.不懈努力,更進一步
無論你是一個Project Manager或者是Team Leader,如果你想繼續(xù)晉升一級,那還是會兩極分化的。從一個PM到一間公司的管理層,那所面對的事件會有很多變化。一個公司的總經(jīng)理,要管理的不再是一到兩個項目的成本,而是整個部門的運作,整間公司的業(yè)務(wù)流程,所以要肩負(fù)的任務(wù)會更重。在下曾經(jīng)有一位上司彭博士,他是企業(yè)的最高領(lǐng)導(dǎo)人,年薪超過三百萬,而且在報紙雜志上也曾經(jīng)亮過相。平常只會在某些會議上輕輕地亮下相,說兩句講詞,平常的公司運作與業(yè)務(wù)管理都不需要他直接執(zhí)行。這并不是說一個作為管理層很清閑,因為他們要面對的是更多的社會關(guān)系,與公司合作企業(yè)的聯(lián)系上。這跟一個PM的工作有很大的區(qū)別,所以要從一個PM晉升到管理層,那可是要付出更多的努力與汗水。
如果要從Team Leader上升為一個技術(shù)總監(jiān),那工作的方向也有所改變。像之前所說:一個TL可能更重視的是技術(shù)層面,講求與團隊之間的互動合作性,更注重的是開發(fā)的完善。而一個技術(shù)總監(jiān)就無需要直接參加某個項目的開發(fā),而注意的是開發(fā)的效率與成果,如何合理使用有限的開發(fā)資源,控制開發(fā)的風(fēng)險和可能帶來的效果。
發(fā)展感受
經(jīng)歷了8年多時間,在下從一個程序員到一個項目經(jīng)理,之間經(jīng)過很多的曲折,但因為每一個人的際遇都有所不同,所走的路也有不同,正所謂條條大路通羅馬,成功的路不止一條,在下也不想令各位誤解,而只想為大家說一下我的發(fā)展方向。如果您是一位開發(fā)人員,“程序員->架構(gòu)師->Team Leader(Project Manager)->技術(shù)總監(jiān)”是一條不錯路,這也是在下選擇的路。在我國,想要進一步提升自己,無論你想是以技術(shù)為重點還是以業(yè)務(wù)為重點,都離不開管理二字。在一些大型的企業(yè),一個團隊往往會配備一個PM與一個架構(gòu)師,盡管兩個人負(fù)責(zé)的任務(wù)各有不同,但你會看到一個架構(gòu)師的收入往往不如一個PM,PM往往是這個團隊的核心領(lǐng)導(dǎo)者,是關(guān)鍵人物。因為公司能否賺錢,PM有著重要的作用。PM與TL并沒有絕對的區(qū)別,而且在一些中小型企業(yè),一個開發(fā)團隊只有3~5人,一個TL往往會兼?zhèn)錁I(yè)務(wù)處理、成本控件、架構(gòu)設(shè)計、開發(fā)管理等多項任務(wù)。所以在下會把Team Leader與Project Manager定于同一層次,一個公司的老板往往不會知道團隊的架構(gòu)師、程序員是何人,而只會向PM詢問項目的進度,所以只有晉升到這個層次,才有機會進一步提升管理能力,讓自己有上升的空間。至于要成為一個技術(shù)總監(jiān),那要求就不再單單是對單個項目的管理,而應(yīng)該更則重于新興技術(shù)的引用,開發(fā)資源的合理利用,對開發(fā)項目敏捷性的處理等等,對此在下也在試探當(dāng)中,未敢多言。
與編程牽手 和代碼共眠 從程序員到技術(shù)總監(jiān)
從業(yè)IT十年,從程序員成為技術(shù)總監(jiān),現(xiàn)在回頭看一看,這條路也伴隨國內(nèi)的IT一起風(fēng)雨兼程10年,對IT技術(shù)由其是IT的純軟件開發(fā)這一塊,向即將要從事軟件技術(shù)研發(fā)的朋友談一談我的看法:
一.認(rèn)清當(dāng)前IT形勢,選擇合適的技術(shù)方向和技術(shù)起點
估計大家都多多少少知道,這個IT行業(yè)知識的更新很快,競爭很急烈.如果你對自己以后發(fā)展的方向在從業(yè)前有一個清析的計劃或認(rèn)識,相信你會比別人走得更好,走得更遠(yuǎn),賺的錢也更多...呵呵
IT軟件從業(yè)的方向,一般都會有這些機會:產(chǎn)品售前(市場,業(yè)務(wù)),產(chǎn)品開發(fā)(編碼,設(shè)計,測試),產(chǎn)品售后(支持,實施),產(chǎn)品管理(項目管理等)
A.產(chǎn)品售前(市場,業(yè)務(wù))
要從事這一塊的工作,主要是在軟件開發(fā)的前期(無產(chǎn)品),或者合同簽訂前期(有產(chǎn)品).一般要求對相關(guān)的業(yè)務(wù)和技術(shù)都要求很高,這可不僅僅是要求人際關(guān)系,交際能力.要想別人買你的產(chǎn)品,你得以專業(yè)的產(chǎn)品品質(zhì)為后臺,以專業(yè)的談吐,專業(yè)的技術(shù)和專業(yè)的業(yè)務(wù)理解能力來取勝.從業(yè)者要求:
要求從業(yè)者要有一定的社會經(jīng)驗,技術(shù)經(jīng)驗或業(yè)務(wù)經(jīng)歷,或一定的社會圈子和交際能力.建議:
剛剛從學(xué)校畢業(yè)的朋友或不符合上面條件的朋友最好要考慮清楚了.當(dāng)然這世上沒有什么絕對的東西,就看你自己了.現(xiàn)實情況:
據(jù)我所了解的,作這一塊的都會是公司一些高層(有關(guān)系,有經(jīng)驗)和業(yè)務(wù)專家或特殊背景的人員等.B.產(chǎn)品開發(fā)(編碼,設(shè)計,測試)
這一塊的工作,當(dāng)然是IT從業(yè)大軍的主力了,但也得要考慮清楚.如果你要作設(shè)計師,或測試,最好先作一段時間的編碼, 一個好的設(shè)計師是不可能不精通相關(guān)技術(shù)平臺的!
國外好的測試人員也幾乎是從開發(fā)人員中選出來的,基至是軟件開發(fā)高手.a.代碼編寫
在這一個職業(yè)選擇范圍內(nèi)最好是從代碼編寫開始.當(dāng)然你也可以先作測試,看看人家是怎么寫代碼的是如何來作這個軟件的,借用人家的測試經(jīng)驗也可以,以后有機會再來編一段時間的代碼也行.有時自己去寫一個軟件也可以,所以作編碼和測試都是一個雙向交互的.而不是編碼在前測試在后的.作代碼的編寫最好自己先看看別人的軟件,或由一些高手帶著指導(dǎo)一下,現(xiàn)在技術(shù)的學(xué)習(xí)都不成問題,關(guān)健是要連成一條線來學(xué)習(xí)和思考就會有一定的局限了.所以要熟悉整個的項目流程或業(yè)務(wù)流程不是靠個人編碼或在培訓(xùn)班學(xué)一下就能解決的,個人的技術(shù)學(xué)習(xí)和培訓(xùn)班大部分只能解決技術(shù)的學(xué)習(xí)問題,但作軟件不僅是要技術(shù)呀
三分技術(shù)七分業(yè)務(wù)說得不為過,業(yè)務(wù)的學(xué)習(xí)也是一個開發(fā)人員所要必備的,如果你在不熟悉業(yè)務(wù)細(xì)節(jié)之前建議你不要急著去寫代碼,那樣肯定會是對以后軟件的影響很大.先要熟悉一下業(yè)務(wù).所以軟件開發(fā)人員掌握一門技術(shù)平臺和語言是必備條件但同時也必須要有一定的業(yè)務(wù)知識,這樣才是一個合格的軟件開發(fā)人員.當(dāng)然精通軟件編碼,懂設(shè)計,熟悉業(yè)務(wù),熟悉軟件項目開發(fā)流程的軟件開發(fā)人員是優(yōu)秀的,那是高級研發(fā)人員的必備條件.如果你才入門或轉(zhuǎn)行或剛畢業(yè),建議從基礎(chǔ)的代碼編寫開始,跟著高手或找一些成熟的項目多學(xué)習(xí), b.軟件設(shè)計
當(dāng)然這個職業(yè)要求行業(yè)的經(jīng)驗,技術(shù)經(jīng)驗都要有一定的基礎(chǔ),薪水一般也會高很多,所以也是一些開發(fā)人員熱烈追逐的目標(biāo).但一個好的設(shè)計師不是一二年所能練就的,精通編碼,熟練設(shè)計模式和公司所采用的技術(shù)平臺,熟練一些設(shè)計理論并實際多運用,熟練公司業(yè)務(wù),其實這個層面的壓力也最大,一個好的軟件在設(shè)計上的比重幾乎要占到七成.建議剛畢業(yè)的朋友或軟件初學(xué)者不要在這一塊來湊熱鬧,即使你作成了設(shè)計師,但在我眼中看來你也不是一個合格的設(shè)計師...當(dāng)然你有這個能力來作設(shè)計師就要恭喜你了.c.軟件測試
熟練軟件測試的各種理論或?qū)嶋H運用,也要熟悉編碼技術(shù)及相關(guān)的技術(shù)平臺,熟練掌握業(yè)務(wù).軟件測試中一般都會有:
單元測試,要求你熟練開發(fā)技術(shù)進行跟蹤調(diào)試,也就是白盒測試了
集成測試,對整個項目流程的測試,要求掌握業(yè)務(wù)知識,對設(shè)計的軟件能作功能上的測試或壓力測試等 ,屬黑盒測試
確認(rèn)測試,對業(yè)務(wù)要很熟悉,測試軟件是否完全滿足了客戶的業(yè)務(wù)需求.總體建議:
1.熟練一種技術(shù)平臺,熟悉一種業(yè)務(wù)
剛?cè)腴T的朋友很容易犯的一個毛病是,熟練:VB,VC,.NET,JAVA,C++,C,Dephi,PB,幾乎市場上要用的他全部會,唉,如果我看到他的簡歷上有這么一句話,這個人肯定不會在我考慮的范圍了.現(xiàn)在全球用得最廣最多的技術(shù)平臺體系也就三大體系:
sun的J2EE技術(shù)體系(JAVA):在高安全性,高性能上更勝一步,中高端市場上用得多
微軟件的技術(shù)體系(C++,.NET,c#,VB):在中,低端市場占絕對優(yōu)勢,也是全球個人電腦操作平臺用戶最多的.CORBA技術(shù)體系統(tǒng)(一種分布式技術(shù)體系和標(biāo)準(zhǔn)),全稱:Common Object Request Broker Architecture:公共對象請求代理結(jié)構(gòu),可以用不同的編程語言寫成,運行在不同的操作系統(tǒng)上,存在于不同的機器上。
一般介于底層和上層管理軟件之間,其他的還會包括底層開發(fā):C,匯編,屬純底層的開發(fā),當(dāng)然要求技術(shù)的起點和業(yè)務(wù)背景更強,最好是學(xué)的專業(yè):電子電氣,嵌入式行業(yè),機械制造,數(shù)據(jù)采集等...看中你想要從事的技術(shù)體系,選好一門語言工具,好好上路吧...:)
永遠(yuǎn)要記住:你什么都想學(xué),你什么都學(xué)不精
2.從基礎(chǔ)入手,不要好高鶩遠(yuǎn),眼高手低,要與實際結(jié)合 B.產(chǎn)品售后(支持,實施)
這一塊對于開發(fā)技術(shù)的要求來講不是那么明顯,主要工作會在軟件開發(fā)后的工作,跟客戶打交道多,但更多要求體現(xiàn)在對業(yè)務(wù)的把握和客戶的交際上.有些軟件產(chǎn)品業(yè)務(wù)比較成熟,如果參與這一階段的工作,可以快速學(xué)習(xí)很多的業(yè)務(wù)知識,積累客戶交往的經(jīng)驗
建議:剛?cè)腴T或剛畢業(yè)的朋友,可以在這個工作上多選擇,等待時機成熟,立馬殺入軟件的開發(fā)或設(shè)計階段,當(dāng)然,這一塊的工作作得好也不容易,如果適合你作, 工作環(huán)境或工資都不錯你就大可不必多想了...C.產(chǎn)品管理(項目管理等)
這一塊的工作主要體現(xiàn)在管理上,當(dāng)然適合有一定經(jīng)驗或管理能力的人員來擔(dān)當(dāng), 最后的技術(shù)從業(yè)方向總結(jié):
技術(shù)型:先選擇好一種技術(shù)平臺,熟練一種開發(fā)語言和數(shù)據(jù)庫...專業(yè)專注的搞幾年再說
技術(shù)+管理型:如果你有一定的技術(shù)經(jīng)驗了,并且人際交往,管理能力不錯,你就可以向這個方向發(fā)展
技術(shù)+業(yè)務(wù)型:精通一種技術(shù)平臺,精通一種業(yè)務(wù),好好搞,這種人才最受歡迎...管理型: 如果你有一定的社會經(jīng)驗,從業(yè)經(jīng)驗,如果人際交往,管理能力還可以,老板也喜歡,就搞這個
業(yè)務(wù)型(市場):如果你對業(yè)務(wù)很感興趣,跟客戶的交往等也不錯,你可以選擇了,有適合的專業(yè)技術(shù)就更能錦上添花了
技術(shù)+市場+管理:老大的位置....:)
第五篇:2016年終總結(jié)—從技術(shù)助理(采購)到 程序員
2016年終總結(jié)
從2015年的7月份,…給了我一個以應(yīng)屆生的身份感受社會的機會。在…的第一份工作是…。經(jīng)過2015年的對崗位職責(zé)的了解,2016年我已經(jīng)能夠獨立負(fù)責(zé)一些部門業(yè)務(wù)。我的工作主要是以下幾個部分,線上線下的采購、ERP系統(tǒng)的操作(主要包括bom搭建、采購、生產(chǎn)、銷售)、臺賬統(tǒng)計、部門報銷以及部門小庫房的出入庫管理。
采購應(yīng)該是一個公司節(jié)約成本的開始,電子元器件這個市場本身就是質(zhì)量魚目混珠,價格參差不齊,一件物品輾轉(zhuǎn)幾手可能就成為了高價。質(zhì)量放在首位,貨比三家,保證價格的合理性,是我們采購時的最好的追求。線上平臺主要用于一些量小、不太常見的且不在硬件中起到主導(dǎo)地位的電子元器件以及一些部門研發(fā)需要的附屬物品等。線下平臺一般是合作過多次并且有良好的信譽的供應(yīng)商,建立了一些商業(yè)上的信任,可以大批量的采購一些硬件所需的主要器件,這樣能保證質(zhì)量的同時,價格也是相對低的。當(dāng)然平時也要注意供應(yīng)商的擴展,以免采購處于被動狀態(tài)。
ERP操作,是記錄生產(chǎn)流程,財務(wù)流向的直接有效的工具。從一開始的采購到后來的生產(chǎn),銷售,能夠保證每一項工作有理可依,有據(jù)可循。也是部門與部門之間的無聲交流。一條貫穿公司業(yè)務(wù)流程的主線。我在2016年1月到6月,完成了IDTT、故障指示器、總保、核心板等上千個設(shè)備的ERP生產(chǎn)操作,主要包括搭建BOM、采購、生產(chǎn)、委外、銷售一系列的流程。雖然實際的采購、生產(chǎn)、銷售等是很重要的一環(huán),但其實對于公司來講記錄這些也是不可或缺的一步。臺賬的記錄,如果說ERP是部門與部門的溝通,那么臺賬就是自我記錄的很好的例子。采購中合同的簽署,付款的規(guī)則,合同執(zhí)行的進度等等,在臺賬中可以很直觀的看到。自我總結(jié)是必不可少的,2016年上半年幾十甚至上百個合同的記錄和執(zhí)行都很詳細(xì)的記錄在了我們的臺賬中,并且實時檢查,每個月通過臺賬制定下個月付款計劃等。
2016年7月,公司又給了我另一個機會,崗位從技術(shù)助理調(diào)整成軟件工程師。工科畢業(yè)的我本就對編程有著濃厚的興趣,得知本部門有軟件崗位的需求,便提出了轉(zhuǎn)崗的要求。
我接觸的第一個項目是…,我負(fù)責(zé)此項目的客戶端部分,初遇C#我,是措手不及的,C#的面向?qū)ο髮τ谖襾碚f是一個新的思維模式,所以學(xué)習(xí)新的知識成為必經(jīng)之路,轉(zhuǎn)崗之前自學(xué)了C# Primer Plus,涵蓋了計算機語言的基礎(chǔ)知識和面向?qū)ο笳Z言的獨特之處。但這本書是以入門為主,看完這本書之后直接接觸了…項目的部分程序,經(jīng)過兩個星期的熟悉,基本上能了解之前程序的思路,此時我主要負(fù)責(zé)的是winform搭建界面部分。
這部分還需要實現(xiàn)的是…這些功能。2016年7月到8月,基本完成了上述幾項任務(wù),也學(xué)到了很多,此時才是我感覺自己真正入門的時候。通過這兩個月的學(xué)習(xí)和工作,我對面向?qū)ο蟮睦斫庖哺由羁?,在修改或者添加程序時,也會去學(xué)習(xí)功能的具體實現(xiàn)方法,思考邏輯上合理性。尤其是在修改的時候,必須兼顧上下運行的邏輯,避免錯誤的出現(xiàn),慢慢的感覺到其實語言真的是互通的,不管是C還是C#我的邏輯是一樣的,只是在面對不同語言時,就像是在使用不同的工具,但是殊途同歸,順著自己的思路不管用哪種語言總是能實現(xiàn)相同的功能,體會到這一點后,我感覺自己對C#的學(xué)習(xí)又多了幾分信心。因為對這個程序的了解,在功能實現(xiàn)階段之后,客戶端程序都交由我負(fù)責(zé)。在上個階段時,為求快速實現(xiàn)功能會有很多邏輯簡單但是代碼冗余的情況出現(xiàn),比如…功能、…功能、…功能。自此我便走上了簡化代碼的道路。統(tǒng)計分析和分辨率自適應(yīng)都是因為多用了列舉的方法,各種不同情況出現(xiàn)都要重復(fù)幾乎相同的代碼,所以摒棄了這些方法,做到讓程序自己判斷不同情況做出不同處理。設(shè)備配置是關(guān)乎用戶體驗的一項功能,之前的操作較為繁瑣,不能只是簡化方法那么簡單。而此時軟件正在強調(diào)設(shè)計文檔重要性,本著試試的態(tài)度,開始了就設(shè)備配置而言的程序設(shè)計文檔的編寫。
從界面設(shè)計到每個方法的實現(xiàn)都寫了下來,發(fā)現(xiàn)寫文檔是一個很好的拓寬思路并記錄思路的過程。其實之所以決定寫文檔更大的原因在于寫這個程序之前,雖然有一定的思路和想法,但是無從下手,從何寫起是一個大問題。這次文檔編寫,規(guī)范思路,找到程序入手點,拓寬思路,有條不紊的實現(xiàn)過程其實是有一種成就感的,沒有緊張混亂的情緒使這次開發(fā)感覺很輕松。之后也寫完了這個功能程序并封裝成了類庫放進了原來的項目中。9月到10月期間對此項目的完善也讓我對winform的運用更加熟練,也有了一些自己對于程序的思路和 想法。
應(yīng)項目需求,需要把…的實物展示改造為線路模擬形式的展示,并實現(xiàn)原來界面上的所有功能,包括…功能、…功能、…功能、…功能、…功能等。這次改動的特別之處在于…,之前…項目的的總保最高上限是6個,所以把每個都作為一個單獨的對象處理。現(xiàn)在數(shù)量是20到30個,之前的方法在此顯得不太合理了。在11月完成了這個任務(wù),這個解決方法應(yīng)該再用回到…項目中(正在實施)。
12月份參與了…的編寫,初步了解了Window系統(tǒng)的API函數(shù)和Winform的GDI+畫圖技術(shù),當(dāng)然這兩項技術(shù)需要今后在學(xué)習(xí)中鞏固。但是因為故…持續(xù)時間應(yīng)該準(zhǔn)確到毫秒級別,但受Windows系統(tǒng)的限制,精確度并沒有達到。對于這次開發(fā),我也認(rèn)識到了自己的不足,知識面狹窄,利用新的技術(shù)的手段有很大的局限性。學(xué)會一項技術(shù)很重要,在開發(fā)項目面前最有效的方法是使用技術(shù)。
2016年對我來說是很特別的一年,感謝所有給過我機會的人和事。我在2017年一定會更加努力的去學(xué)習(xí)更好更多的技術(shù),從網(wǎng)絡(luò)、書籍等不同的途徑獲取更多的知識,拓寬我的知識面,為之后的工作打下堅實的基礎(chǔ),也希望我的知識能夠為公司創(chuàng)造更多的利益。