談?wù)劶夹g(shù)原則,技術(shù)學(xué)習(xí)方法個(gè)人總結(jié)第1/2頁(yè)
更新時(shí)間:2008年06月23日 19:37:43 作者:
談?wù)劶夹g(shù)原則,技術(shù)學(xué)習(xí)方法,代碼閱讀及其它個(gè)人總結(jié)這篇文章是前一陣在水木BBS上和別人討論中偶自己發(fā)言的摘編,是偶這幾年開(kāi)發(fā)過(guò)程完全經(jīng)驗(yàn)式的總結(jié)。完全個(gè)人經(jīng)驗(yàn),供批判。
一、選用技術(shù)的原則
比較規(guī)范的軟件開(kāi)發(fā)過(guò)程要到有限的幾個(gè)公司才能學(xué)到。偶現(xiàn)在所采用的方法都是圡方法,主程序員,測(cè)試驅(qū)動(dòng),文檔和代碼寫(xiě)在一起,原型。但基本上堅(jiān)持幾個(gè)原則:
在工作上以實(shí)用為主導(dǎo),哪個(gè)實(shí)用學(xué)哪個(gè),要以最小的努力獲取最大的成效。
偶寫(xiě)過(guò)的第一個(gè)實(shí)用程序是把一個(gè)法律光盤(pán)導(dǎo)入到數(shù)據(jù)庫(kù)中,光盤(pán)源文件格式需要分析。數(shù)據(jù)大概幾萬(wàn)條。一種方法是寫(xiě)程序直接導(dǎo)入,另一種方法是寫(xiě)一個(gè)界面,手工導(dǎo)入。偶選擇的是后者。程序界面如下:有一個(gè)文本框,有一個(gè)大按鈕,按鈕有一本書(shū)那么大,這樣設(shè)計(jì)的原則是讓閉著眼睛就能夠點(diǎn)中。讓一個(gè)會(huì)灌水的哥們,ctrl + c, ctrl + v,不停的灌。文本貼過(guò)去,自動(dòng)解析,放入數(shù)據(jù)庫(kù)。左手alt + tab ctrl + c/v, 右手點(diǎn)鼠標(biāo),這樣有節(jié)奏的運(yùn)動(dòng)。很快,幾個(gè)小時(shí)就把數(shù)據(jù)弄完了。最初設(shè)計(jì)的一個(gè)文本框,一個(gè)按鈕,很pp,但是老點(diǎn)不中。隨即偶才把那個(gè)按鈕做成老大的,就這一個(gè)改變,生產(chǎn)力提高了1倍以上。
工作,就要堅(jiān)持這樣的原則。要能夠分辨出價(jià)值,找能夠提高價(jià)值的去做。即使這樣違背一般規(guī)律,違背技術(shù)教條。
學(xué)習(xí)上以簡(jiǎn)單,核心的東東為主??蓪W(xué)可不學(xué)的不要學(xué)。復(fù)雜的東西除非你想要成為這方面的專家,就不要學(xué)。偶還是舉自己的一個(gè)例子,前一陣做GIS有需求,具體實(shí)現(xiàn)偶負(fù)責(zé)。預(yù)算很少。偶就定了開(kāi)源GIS軟件這條路,本來(lái)想用C#的,但沒(méi)有好用的開(kāi)源GIS軟件,偶決定用java寫(xiě)。偶手下還沒(méi)會(huì)java的。偶選擇了一個(gè)開(kāi)源lib,讓一個(gè)哥們運(yùn)行一個(gè)Demo,然后讓他從那個(gè)Demo的main函數(shù)畫(huà)函數(shù)調(diào)用圖一直畫(huà)到數(shù)據(jù)庫(kù)調(diào)用。偶呢,跑去看GIS規(guī)范,然后他的圖,結(jié)合偶的規(guī)范知識(shí),很快就知道這個(gè)軟件中間分了多少層,每個(gè)層每個(gè)接口是干什么用的,怎么調(diào)用。這個(gè)軟件的優(yōu)點(diǎn)缺點(diǎn)。然后體系結(jié)構(gòu),設(shè)計(jì)就出來(lái)了,然后2個(gè)java程序員,很快就做出來(lái)了。
二、技術(shù)學(xué)習(xí)的技巧
借著上面例子說(shuō)說(shuō)學(xué)習(xí)軟件的技巧
要學(xué)一個(gè)東西,要學(xué)習(xí)該東西的兩類(lèi)知識(shí):結(jié)構(gòu)和細(xì)節(jié)。
結(jié)構(gòu)性的東東非常重要.學(xué)習(xí)結(jié)構(gòu),就可以開(kāi)始干事了,學(xué)習(xí)細(xì)節(jié),能夠把這件事情干好。結(jié)構(gòu)不清楚,細(xì)節(jié)再好都不算了解。結(jié)構(gòu)很簡(jiǎn)單,就是縱,橫兩條線??v的來(lái)說(shuō),就是一個(gè)程序的執(zhí)行,你得知道哪一步在做什么。以ASP.Net來(lái)說(shuō),就是從收到Request到返回一個(gè)頁(yè)面,中間的調(diào)用過(guò)程,這是主線,再進(jìn)一步,程序的加載->接收Request(->緩存,Session機(jī)制)->返回一個(gè)Page,這個(gè)過(guò)程清楚,Asp.Net也就差不多了??v向一般是通過(guò)接口調(diào)用的,看源代碼很快就可以搞定。
橫向就是看看重要的接口,重要的抽象類(lèi)有哪些實(shí)現(xiàn),知道哪個(gè)實(shí)現(xiàn)用于什么地方,有什么優(yōu)缺點(diǎn)。那么就算在結(jié)構(gòu)上學(xué)好了。剩下的就是細(xì)節(jié)問(wèn)題了。細(xì)節(jié)問(wèn)題熟練自然很好,不熟練google都能google到,只是要花很多時(shí)間。這樣學(xué)習(xí)我覺(jué)得是最有效的學(xué)習(xí),不必去跟蹤技術(shù)前沿,當(dāng)一個(gè)技術(shù)在你眼前你很快就可以看出它的骨架,優(yōu)點(diǎn)缺點(diǎn),性能,至少能估計(jì)到大致的范圍。這樣慢慢培養(yǎng)對(duì)一個(gè)技術(shù)的悟性,做到舉重若輕,知道什么地方可能有陷阱,什么地方可能有創(chuàng)新。把握住重點(diǎn)和脈絡(luò)。
細(xì)節(jié)上就是不斷實(shí)踐,不斷重構(gòu)。一個(gè)有用的軟件,不斷提出更高的要求,不斷重構(gòu),用不了幾遍,幾種重要的設(shè)計(jì)模式就了熟于心了。單為學(xué)習(xí)模式而去學(xué)習(xí)模式是不可取的。每個(gè)模式都針對(duì)一定的問(wèn)題。深入理解這些問(wèn)題才是學(xué)習(xí)的關(guān)鍵!技術(shù)是多種多樣的,是變化非??斓模羌夹g(shù)所要解決的問(wèn)題卻并不多。
從架構(gòu)級(jí)別來(lái)說(shuō),所面臨的問(wèn)題主要有:(1)解決復(fù)雜性--如何把復(fù)雜變得簡(jiǎn)單?這里的觀點(diǎn)就是封裝,OO是一種封裝,還有別的封裝方式?!吨貥?gòu)》書(shū)中講了很關(guān)鍵的一點(diǎn),就是要使你的類(lèi)名,方法名能清晰表明它的身份和功能。(2)解決程序演化與擴(kuò)展的問(wèn)題--組合優(yōu)先繼承,怎么暴露API,怎么寫(xiě)文檔,總之,讓程序演化與擴(kuò)展越簡(jiǎn)單越好;(3)性能問(wèn)題--80/20原則,性能測(cè)試怎么測(cè)試,怎么評(píng)估,不同使用場(chǎng)景中的性能,緩存機(jī)制;(4)功能問(wèn)題--主要功能總得實(shí)現(xiàn)吧,這個(gè)和業(yè)務(wù)有關(guān);(5)易用性;(6)縱向擴(kuò)展,橫向擴(kuò)展,并發(fā)......(7)自己開(kāi)發(fā)還是采用第三方插件還是外包以及選擇問(wèn)題。
具體的學(xué)習(xí),偶推薦問(wèn)題導(dǎo)向,案例為基礎(chǔ)的學(xué)習(xí),不要拘泥于語(yǔ)言,要學(xué)習(xí)能學(xué)習(xí)到的最好的東東。比如,性能的關(guān)鍵在調(diào)度,這時(shí)候可以看看資源調(diào)度模式,hibernate算是把資源調(diào)度玩到了極致?;谑录恼{(diào)度(如.net中的web cache),進(jìn)程調(diào)度,線程調(diào)度,工作流,這些都算是行為調(diào)度,要是把這些東東融會(huì)貫通,掌握每一種實(shí)現(xiàn)的優(yōu)點(diǎn)缺點(diǎn)。那么軟件設(shè)計(jì)中所有和時(shí)間、并發(fā)、資源相關(guān)的東東都不在話下了。行為調(diào)度可以看看.net 中的cache實(shí)現(xiàn),找一個(gè)工作流軟件看看,找找?guī)讉€(gè)線程框架看看,看看幾個(gè)典型操作系統(tǒng)的進(jìn)程調(diào)度機(jī)制。
具體到實(shí)現(xiàn)上,所面臨的問(wèn)題無(wú)非是:
(1)對(duì)象的創(chuàng)建及銷(xiāo)毀;(2)對(duì)象的封裝和繼承體系;(3)對(duì)象的粒度和語(yǔ)義劃分;(4)對(duì)象的復(fù)用;(5)對(duì)象的測(cè)試;(6)對(duì)象的持久化;(7)具體的API暴露;(8)常用Collections;(9)算法問(wèn)題;(10)性能問(wèn)題;(11)回調(diào);(12)消滅語(yǔ)義溝;(13)我想要和你一起變懶......;(14)我能采用哪些API(15)對(duì)象的管理;(16)異步調(diào)用;(17)遠(yuǎn)程調(diào)用
比較規(guī)范的軟件開(kāi)發(fā)過(guò)程要到有限的幾個(gè)公司才能學(xué)到。偶現(xiàn)在所采用的方法都是圡方法,主程序員,測(cè)試驅(qū)動(dòng),文檔和代碼寫(xiě)在一起,原型。但基本上堅(jiān)持幾個(gè)原則:
在工作上以實(shí)用為主導(dǎo),哪個(gè)實(shí)用學(xué)哪個(gè),要以最小的努力獲取最大的成效。
偶寫(xiě)過(guò)的第一個(gè)實(shí)用程序是把一個(gè)法律光盤(pán)導(dǎo)入到數(shù)據(jù)庫(kù)中,光盤(pán)源文件格式需要分析。數(shù)據(jù)大概幾萬(wàn)條。一種方法是寫(xiě)程序直接導(dǎo)入,另一種方法是寫(xiě)一個(gè)界面,手工導(dǎo)入。偶選擇的是后者。程序界面如下:有一個(gè)文本框,有一個(gè)大按鈕,按鈕有一本書(shū)那么大,這樣設(shè)計(jì)的原則是讓閉著眼睛就能夠點(diǎn)中。讓一個(gè)會(huì)灌水的哥們,ctrl + c, ctrl + v,不停的灌。文本貼過(guò)去,自動(dòng)解析,放入數(shù)據(jù)庫(kù)。左手alt + tab ctrl + c/v, 右手點(diǎn)鼠標(biāo),這樣有節(jié)奏的運(yùn)動(dòng)。很快,幾個(gè)小時(shí)就把數(shù)據(jù)弄完了。最初設(shè)計(jì)的一個(gè)文本框,一個(gè)按鈕,很pp,但是老點(diǎn)不中。隨即偶才把那個(gè)按鈕做成老大的,就這一個(gè)改變,生產(chǎn)力提高了1倍以上。
工作,就要堅(jiān)持這樣的原則。要能夠分辨出價(jià)值,找能夠提高價(jià)值的去做。即使這樣違背一般規(guī)律,違背技術(shù)教條。
學(xué)習(xí)上以簡(jiǎn)單,核心的東東為主??蓪W(xué)可不學(xué)的不要學(xué)。復(fù)雜的東西除非你想要成為這方面的專家,就不要學(xué)。偶還是舉自己的一個(gè)例子,前一陣做GIS有需求,具體實(shí)現(xiàn)偶負(fù)責(zé)。預(yù)算很少。偶就定了開(kāi)源GIS軟件這條路,本來(lái)想用C#的,但沒(méi)有好用的開(kāi)源GIS軟件,偶決定用java寫(xiě)。偶手下還沒(méi)會(huì)java的。偶選擇了一個(gè)開(kāi)源lib,讓一個(gè)哥們運(yùn)行一個(gè)Demo,然后讓他從那個(gè)Demo的main函數(shù)畫(huà)函數(shù)調(diào)用圖一直畫(huà)到數(shù)據(jù)庫(kù)調(diào)用。偶呢,跑去看GIS規(guī)范,然后他的圖,結(jié)合偶的規(guī)范知識(shí),很快就知道這個(gè)軟件中間分了多少層,每個(gè)層每個(gè)接口是干什么用的,怎么調(diào)用。這個(gè)軟件的優(yōu)點(diǎn)缺點(diǎn)。然后體系結(jié)構(gòu),設(shè)計(jì)就出來(lái)了,然后2個(gè)java程序員,很快就做出來(lái)了。
二、技術(shù)學(xué)習(xí)的技巧
借著上面例子說(shuō)說(shuō)學(xué)習(xí)軟件的技巧
要學(xué)一個(gè)東西,要學(xué)習(xí)該東西的兩類(lèi)知識(shí):結(jié)構(gòu)和細(xì)節(jié)。
結(jié)構(gòu)性的東東非常重要.學(xué)習(xí)結(jié)構(gòu),就可以開(kāi)始干事了,學(xué)習(xí)細(xì)節(jié),能夠把這件事情干好。結(jié)構(gòu)不清楚,細(xì)節(jié)再好都不算了解。結(jié)構(gòu)很簡(jiǎn)單,就是縱,橫兩條線??v的來(lái)說(shuō),就是一個(gè)程序的執(zhí)行,你得知道哪一步在做什么。以ASP.Net來(lái)說(shuō),就是從收到Request到返回一個(gè)頁(yè)面,中間的調(diào)用過(guò)程,這是主線,再進(jìn)一步,程序的加載->接收Request(->緩存,Session機(jī)制)->返回一個(gè)Page,這個(gè)過(guò)程清楚,Asp.Net也就差不多了??v向一般是通過(guò)接口調(diào)用的,看源代碼很快就可以搞定。
橫向就是看看重要的接口,重要的抽象類(lèi)有哪些實(shí)現(xiàn),知道哪個(gè)實(shí)現(xiàn)用于什么地方,有什么優(yōu)缺點(diǎn)。那么就算在結(jié)構(gòu)上學(xué)好了。剩下的就是細(xì)節(jié)問(wèn)題了。細(xì)節(jié)問(wèn)題熟練自然很好,不熟練google都能google到,只是要花很多時(shí)間。這樣學(xué)習(xí)我覺(jué)得是最有效的學(xué)習(xí),不必去跟蹤技術(shù)前沿,當(dāng)一個(gè)技術(shù)在你眼前你很快就可以看出它的骨架,優(yōu)點(diǎn)缺點(diǎn),性能,至少能估計(jì)到大致的范圍。這樣慢慢培養(yǎng)對(duì)一個(gè)技術(shù)的悟性,做到舉重若輕,知道什么地方可能有陷阱,什么地方可能有創(chuàng)新。把握住重點(diǎn)和脈絡(luò)。
細(xì)節(jié)上就是不斷實(shí)踐,不斷重構(gòu)。一個(gè)有用的軟件,不斷提出更高的要求,不斷重構(gòu),用不了幾遍,幾種重要的設(shè)計(jì)模式就了熟于心了。單為學(xué)習(xí)模式而去學(xué)習(xí)模式是不可取的。每個(gè)模式都針對(duì)一定的問(wèn)題。深入理解這些問(wèn)題才是學(xué)習(xí)的關(guān)鍵!技術(shù)是多種多樣的,是變化非??斓模羌夹g(shù)所要解決的問(wèn)題卻并不多。
從架構(gòu)級(jí)別來(lái)說(shuō),所面臨的問(wèn)題主要有:(1)解決復(fù)雜性--如何把復(fù)雜變得簡(jiǎn)單?這里的觀點(diǎn)就是封裝,OO是一種封裝,還有別的封裝方式?!吨貥?gòu)》書(shū)中講了很關(guān)鍵的一點(diǎn),就是要使你的類(lèi)名,方法名能清晰表明它的身份和功能。(2)解決程序演化與擴(kuò)展的問(wèn)題--組合優(yōu)先繼承,怎么暴露API,怎么寫(xiě)文檔,總之,讓程序演化與擴(kuò)展越簡(jiǎn)單越好;(3)性能問(wèn)題--80/20原則,性能測(cè)試怎么測(cè)試,怎么評(píng)估,不同使用場(chǎng)景中的性能,緩存機(jī)制;(4)功能問(wèn)題--主要功能總得實(shí)現(xiàn)吧,這個(gè)和業(yè)務(wù)有關(guān);(5)易用性;(6)縱向擴(kuò)展,橫向擴(kuò)展,并發(fā)......(7)自己開(kāi)發(fā)還是采用第三方插件還是外包以及選擇問(wèn)題。
具體的學(xué)習(xí),偶推薦問(wèn)題導(dǎo)向,案例為基礎(chǔ)的學(xué)習(xí),不要拘泥于語(yǔ)言,要學(xué)習(xí)能學(xué)習(xí)到的最好的東東。比如,性能的關(guān)鍵在調(diào)度,這時(shí)候可以看看資源調(diào)度模式,hibernate算是把資源調(diào)度玩到了極致?;谑录恼{(diào)度(如.net中的web cache),進(jìn)程調(diào)度,線程調(diào)度,工作流,這些都算是行為調(diào)度,要是把這些東東融會(huì)貫通,掌握每一種實(shí)現(xiàn)的優(yōu)點(diǎn)缺點(diǎn)。那么軟件設(shè)計(jì)中所有和時(shí)間、并發(fā)、資源相關(guān)的東東都不在話下了。行為調(diào)度可以看看.net 中的cache實(shí)現(xiàn),找一個(gè)工作流軟件看看,找找?guī)讉€(gè)線程框架看看,看看幾個(gè)典型操作系統(tǒng)的進(jìn)程調(diào)度機(jī)制。
具體到實(shí)現(xiàn)上,所面臨的問(wèn)題無(wú)非是:
(1)對(duì)象的創(chuàng)建及銷(xiāo)毀;(2)對(duì)象的封裝和繼承體系;(3)對(duì)象的粒度和語(yǔ)義劃分;(4)對(duì)象的復(fù)用;(5)對(duì)象的測(cè)試;(6)對(duì)象的持久化;(7)具體的API暴露;(8)常用Collections;(9)算法問(wèn)題;(10)性能問(wèn)題;(11)回調(diào);(12)消滅語(yǔ)義溝;(13)我想要和你一起變懶......;(14)我能采用哪些API(15)對(duì)象的管理;(16)異步調(diào)用;(17)遠(yuǎn)程調(diào)用
相關(guān)文章
Visual Style中的shellstyle.dll文件修改方法
Visual Style中的shellstyle.dll文件修改方法...2007-05-05徐州電信關(guān)于您本次上網(wǎng)未使用“星空極速”撥號(hào)軟件的投訴
星空極速"撥號(hào)軟件是中國(guó)電信自主研發(fā)正板軟件,便于用戶上網(wǎng)查詢各項(xiàng)電信業(yè)務(wù)信息及反饋.目前有這個(gè)業(yè)務(wù)要求,請(qǐng)理解.2007-12-12怎樣按照個(gè)人愛(ài)好設(shè)置默認(rèn)瀏覽器
怎樣按照個(gè)人愛(ài)好設(shè)置默認(rèn)瀏覽器...2007-02-02- 做WEB好幾年了,各種語(yǔ)言和技術(shù)都稍有涉獵。今天心血來(lái)潮,突然想總結(jié)一下。其實(shí)不論什么技術(shù),什么需求,通常WEB開(kāi)發(fā)就是通過(guò)WEB前端管理一個(gè)或大或小或獨(dú)立或分布式的關(guān)系型數(shù)據(jù)庫(kù),很多東西都是相通的。這里說(shuō)的WEB架構(gòu),是指WEB應(yīng)用開(kāi)發(fā)中每種技術(shù)獨(dú)有的資源組織形式(包括文件,數(shù)據(jù)庫(kù),HTTP請(qǐng)求處理等。注意并非OO的開(kāi)發(fā)方式才有架構(gòu)一說(shuō)),也許說(shuō)開(kāi)發(fā)方式更容易讓人理解一些。2008-04-04