2006年3月12日

          制定計(jì)劃是一件困難的事情(在軟件開發(fā)中哪一件事情不難呢?),不只是新手,就是有好幾年工作經(jīng)驗(yàn)的人,對(duì)制定計(jì)劃也頗感為難,往往隨便給出個(gè)時(shí)間了事。我曾親歷過不少場(chǎng)面,大家對(duì)任務(wù)計(jì)劃的態(tài)度很隨意,對(duì)時(shí)間的估計(jì)都是隨口而出的。大多數(shù)時(shí)候,管理者都會(huì)對(duì)勇士們夸幾句,對(duì)謹(jǐn)慎者報(bào)以輕視。

           

          實(shí)踐證明這些計(jì)劃都是紙上談兵,有的嚴(yán)重超期,有的質(zhì)量不過關(guān),有的功能遺漏,很少按預(yù)期完成的。這也難怪,就是精心制定的計(jì)劃都有偏差,何況是隨便給出的呢。

           

          這里總結(jié)一些個(gè)人經(jīng)驗(yàn),這是對(duì)簡(jiǎn)單任務(wù)而言的。所謂簡(jiǎn)單任務(wù)指的是能分到某個(gè)人頭上的任務(wù),不包括需要一個(gè)小組協(xié)同完成的任務(wù)(當(dāng)然部分也適用于小組任務(wù)的)。

           

          1.         對(duì)任務(wù)盡可能的細(xì)劃。任務(wù)分得越細(xì),考慮得越周到,遺漏的可能越少。同時(shí)我們對(duì)細(xì)小任務(wù)的估計(jì)更準(zhǔn)確,我想這也是大家鐘愛WBS的緣故吧。

           

          2.         建立任務(wù)的風(fēng)險(xiǎn)列表。外在環(huán)境、技術(shù)難點(diǎn)、甚至近一段時(shí)間工作狀態(tài),都會(huì)影響任務(wù)的進(jìn)度。風(fēng)險(xiǎn)很多,列出我們能處理的風(fēng)險(xiǎn)就差不多了,至于第三次世界大戰(zhàn)之類的風(fēng)險(xiǎn)完全可以拋開。根據(jù)風(fēng)險(xiǎn)列表,在理想的計(jì)劃上,加上一定的風(fēng)險(xiǎn)儲(chǔ)備。

           

          3.         征求做過類似任務(wù)的同事的意見。我們不是神仙,對(duì)從未有類似經(jīng)驗(yàn)的任務(wù),很難估計(jì)準(zhǔn)確,征求做過類似任務(wù)的同事的意見是明智的做法,至少我們能從中了解一些潛在的風(fēng)險(xiǎn)。

           

          4.         不斷調(diào)整計(jì)劃。計(jì)劃不是不變的,早期的估計(jì)或多或少的有些偏差。隨著任務(wù)的進(jìn)展,一些風(fēng)險(xiǎn)的消除,以及這期間的經(jīng)驗(yàn)積累,我們可以更準(zhǔn)確的估計(jì)時(shí)間了。一般來說在任務(wù)預(yù)定時(shí)間過去30%左右時(shí),重新評(píng)估一下任務(wù)計(jì)劃是比較好的習(xí)慣。

           

          5.         及時(shí)反饋任務(wù)的執(zhí)行情況。特別是研究性任務(wù),出現(xiàn)計(jì)劃與實(shí)際較大差異的情況是很常見的。讓你的上司清楚任務(wù)的執(zhí)行情況,很有必要,一旦出現(xiàn)較大偏差,他可以對(duì)你提供幫助,或者對(duì)整體計(jì)劃進(jìn)行調(diào)整。切記不要在時(shí)間快完了,才報(bào)告出了大問題。

           

          6.         計(jì)劃要實(shí)事求是,不是估計(jì)時(shí)間越短越好。不要因?yàn)槊孀由系膯栴},把時(shí)間估計(jì)得過短。否則你的任務(wù)太重,不但會(huì)影響你的正常休息和工作情緒,最終無法完成時(shí),面子丟了是小,影響整體計(jì)劃是大。

           

          7.         采用PSP中一些方法,評(píng)估自己的效率。記錄在執(zhí)行任務(wù)過程,你的時(shí)間分配情況,估計(jì)你在做某類事情時(shí)的效率,為以后類似的任務(wù)提供經(jīng)驗(yàn)數(shù)據(jù)。

          posted @ 2006-03-12 21:34 成長(zhǎng)記錄 閱讀(1570) | 評(píng)論 (1)編輯 收藏

          2005年12月8日

               摘要: prototype.js開發(fā)筆記 覆蓋版本 1.3.1 1. Prototype是什么? 或許你還沒有用過它, prototype.js 是一個(gè)由Sam Stephenson寫的JavaScript包。這個(gè)構(gòu)思奇妙編寫良好的一段兼容標(biāo)準(zhǔn)的一段代碼將承擔(dān)創(chuàng)造胖客戶端, 高交互性WEB應(yīng)用程序的重?fù)?dān)。輕松加入Web 2.0特性。 如果你最近體驗(yàn)了這個(gè)程序...  閱讀全文
          posted @ 2005-12-08 21:25 成長(zhǎng)記錄 閱讀(297) | 評(píng)論 (0)編輯 收藏

          2005年10月30日

          日志(Log)是什么?字典對(duì)其的解釋是"對(duì)某種機(jī)器工作情況或某項(xiàng)任務(wù)進(jìn)展情況的記載"。對(duì)于應(yīng)用系統(tǒng)來說,日志就應(yīng)該記錄應(yīng)用系統(tǒng)的運(yùn)行狀況了。

          是否需要記錄日志?這個(gè)問題無需回答,這是毋庸置疑的--當(dāng)然要記了。
          剩下的問題就是應(yīng)該如何記錄日志才能確保日志具有高可用性和低耗性了。日志信息過于簡(jiǎn)化,乃至于沒有日志,則用戶無法找到解決問題所需的信息,進(jìn)而妨礙問題的解決;然而日志信息過于詳細(xì)不僅會(huì)降低系統(tǒng)的性能而且會(huì)使真正有用的信息淹沒在文字的海洋中。

          為此JDK給出了建議的日志分級(jí)標(biāo)準(zhǔn)。將不同的信息根據(jù)其重要性分級(jí)。與此同時(shí)可以根據(jù)實(shí)際需要在JRE中設(shè)置需要記錄的日志級(jí)別--級(jí)別高于此值的日志才被記錄。依照J(rèn)DK提供的標(biāo)準(zhǔn)(java.util.logging.Level)將日志劃分為OFF、SEVERE、WARNING、INFO、CONFIG、FINE、FINER、FINEST、ALL等從高到低九個(gè)級(jí)別。他們都分別對(duì)應(yīng)著唯一的整數(shù)值,即OFF=Integer.MAX_VALUE、SEVERE=1000、WARNING=900、INFO=800、CONFIG=700、FINE=500、FINER=400、FINEST=300、ALL=Integer.MIN_VALUE。通過對(duì)java.util.logging.Level的泛化(擴(kuò)展),開發(fā)人員可以在JDK提供的標(biāo)準(zhǔn)基礎(chǔ)之上定義自己的日志分級(jí)標(biāo)準(zhǔn)。

          在這九個(gè)級(jí)別中OFF、SEVERE、WARNING、INFO、CONFIG、ALL比較容易理解。

          OFF級(jí)別主要用于JRE日志輸出控制,表示不輸出任何信息。

          SEVERE(嚴(yán)重)級(jí)別描述組織程序正常運(yùn)行的重大事件。這些事件的表述必須能夠讓最終用戶和系統(tǒng)管理員清晰地了解到底發(fā)生了什么事情。

          WARNING(警告)級(jí)別描述了最終用戶或系統(tǒng)管理員維護(hù)時(shí)比較感興趣的事件,或指示系統(tǒng)存在潛在問題的事件。這些事件都需要特別提醒最終用戶或系統(tǒng)管理員注意。

          INFO(信息)級(jí)別主要用于描述輸出到控制臺(tái)或其替代品的,具有相當(dāng)程度重大意義的事件。譬如系統(tǒng)的心跳信息,以及其他系統(tǒng)希望告知最終用戶或系統(tǒng)管理員的信息等。

          CONFIG(配置)級(jí)別主要用于描述可以輔助調(diào)試解決問題的靜態(tài)配置信息。譬如CPU類型、操作系統(tǒng)類型、內(nèi)存容量、系統(tǒng)語言等等。

          ALL級(jí)別也是主要用于JRE日志輸出控制,表示輸出所有日志信息。

          FINE、FINER、FINEST等三個(gè)級(jí)別被用于描述不同程度的跟蹤信息。這三個(gè)級(jí)別被sun分別翻譯為"良好","較好"和"最好",但是筆者認(rèn)為翻譯為"略細(xì)","較細(xì)","最細(xì)"更合適。這三個(gè)級(jí)別比較容易使人難于區(qū)分。到底什么樣的信息應(yīng)該以哪個(gè)級(jí)別輸出呢?

          一般說來,F(xiàn)INE級(jí)別用于輸出開發(fā)人員廣泛關(guān)注的信息。包括小的可恢復(fù)的故障,潛在的性能問題、數(shù)據(jù)源連接不足、服務(wù)超時(shí)等。

          FINER級(jí)別描述比FINE級(jí)別更詳細(xì)的信息。包括進(jìn)入/返回方法調(diào)用,拋出了一個(gè)異常等信息。

          FINEST級(jí)別描述更詳細(xì)的調(diào)試信息。包括開發(fā)人員在方法內(nèi)為了調(diào)試方便而輸出的調(diào)試信息,即某些日志分級(jí)系統(tǒng)中定義的DEBUG級(jí)別信息。

          將方法調(diào)用/返回信息作為一個(gè)單獨(dú)的級(jí)別處理是一個(gè)明智的選擇。在解決系統(tǒng)運(yùn)行問題時(shí),通常根據(jù)方法調(diào)用/返回過程就能大致確定問題所在。

          此日志分級(jí)標(biāo)準(zhǔn)被廣泛地應(yīng)用于中小型系統(tǒng)中。更詳細(xì)的信息可以參考JDK
          API文檔的java.util.logging部分。

          posted @ 2005-10-30 22:40 成長(zhǎng)記錄 閱讀(528) | 評(píng)論 (0)編輯 收藏
           

          只有懶惰的程序員才會(huì)去編寫那些可以最終代替自己工作的自動(dòng)化工具,才不會(huì)成天為了實(shí)現(xiàn)相似的功能去編寫大段大段冗余重復(fù)的代碼 - 這種代碼往往是軟件后期維護(hù)和重構(gòu)的天敵。通常來說,由于惰性的驅(qū)使所產(chǎn)生出來的工具和程序?qū)⒆罱K極大的提高生產(chǎn)開發(fā)的速度。

          當(dāng)然,對(duì)于一個(gè)程序員來說,光光具備懶惰這個(gè)要素還是不夠的。在享受懶惰之前,他必須以最大的熱情和最高的效率去研究解放自己的途徑,比如:找到最有助于開發(fā)的工具,最能體現(xiàn)“一次編寫,多次復(fù)用”精神的代碼架構(gòu)的設(shè)計(jì)。只有在這些必要的工作之后,才可能真正享受輕松編程的樂趣。

          所以“懶”的精髓用一句老話來描述,那就是磨刀不誤砍柴功。如果你不想辦法磨亮手中的柴刀,就算一天二十四小時(shí)都在砍柴,效果也不如拿把鋒利的斧頭一天只砍一小時(shí)。

          從這個(gè)角度來說,Google給員工的20%自由時(shí)間是完全發(fā)揮了“懶”的能動(dòng)力。為了更好的享受偷懶的樂趣,員工會(huì)更加具有創(chuàng)造力的去高效完成自己的任務(wù)。

          夸張一點(diǎn)來說,懶惰才是人類進(jìn)步的原動(dòng)力。

          這一點(diǎn)似乎比懶更讓人不能接受。在解釋這里所說的笨的具體含義之前,我們先看看一個(gè)聰明人(或者說認(rèn)為自己足夠聰明)會(huì)做什么:

          1) 停止學(xué)習(xí)新的東西

          2) 不愿意用批判的眼光去審視自己的工作

          第1點(diǎn)將使我們很難去接受或者主動(dòng)的去研究一項(xiàng)新的技術(shù) - 即使新技術(shù)能帶給他更多工作上的便利。第2點(diǎn)會(huì)使我們無法清晰的分析自身工作的問題所在,要對(duì)其進(jìn)行改進(jìn)或者重構(gòu)就更加困難。

          從這兩點(diǎn)來考慮,作為一個(gè)程序員太自以為是不見得是件好事情。由于對(duì)自身的過于自信,往往無法客觀的看待自己和自己的工作。相反的,笨一點(diǎn)(確切的說,謙遜一點(diǎn))有時(shí)候倒有助于開發(fā)的順利進(jìn)行。舉例來說,當(dāng)程序出現(xiàn)bug的時(shí)候,最好盡早承認(rèn)問題是出在自己編寫的代碼上面而不是在于編譯器(當(dāng)然除非是字節(jié)高低位編碼方式之類的問題,這種問題編譯器會(huì)是錯(cuò)誤的根源之一)。如果你太自負(fù)的認(rèn)為自己的程序沒有問題而去猜測(cè)可能是編譯器或者其他的什么外部因素出問題的話,那么十有八九你會(huì)在調(diào)試過程中走上一長(zhǎng)段的彎路。

          程序員應(yīng)該笨一些的更為關(guān)鍵的原因在于,當(dāng)需要思考問題的最佳解決方案的時(shí)候,往往要求我們首先要跳出思維定式。你對(duì)系統(tǒng)了解的越多,積累了越多的經(jīng)驗(yàn),就越難走出已有的局限,可以嘗試的范圍就越小。相反的,對(duì)于一個(gè)什么也不懂的門外漢來說,因?yàn)闆]有任何失敗的記憶和潛規(guī)則的約束,也就沒有什么是“不可能”的,這樣的大腦所能迸發(fā)出來的在專業(yè)人士看起來愚不可及的想法往往正是解決問題所需要的關(guān)鍵點(diǎn)所在。

          可能很多程序員都會(huì)有類似的經(jīng)歷,在面對(duì)別人(尤其是其他部門)對(duì)于一個(gè)bug的描述的時(shí)候,必須把自己擺在一個(gè)普通用戶而不是程序開發(fā)者的角度來分析問題,否則的話可能你永遠(yuǎn)都想象不到這種錯(cuò)誤也會(huì)發(fā)生。越能讓自己變得“笨”起來,越能很快的定位到問題所在。我們先看看這么一段關(guān)于web開發(fā)問題的程序員和客服人員的對(duì)話:

          “從昨天開始我們的用戶就看不到我們站點(diǎn)上的Logo了。”

          “他試過重啟瀏覽器么?”

          “是的。”

          “他試過重啟電腦么?”

          “是的。”

          “他清空過瀏覽器Cache么?”

          “是的。”

          “他的瀏覽器版本是IE6么?”

          “是的。”

          “他確信是真的看不到Logo了么?”

          “是的。”

          “他是在電腦顯示器屏幕上看我們的站點(diǎn)么?”

          “什么?”

          “比如說,它可能是打印出來看不到?”

          “不。他是在顯示器上看的。”

          “除了站點(diǎn)Logo之外,他是不是其他的圖片都看不到?”

          “什么?哦。我再問問他。”

          從這段對(duì)話來說,估計(jì)用戶實(shí)際上是禁止了瀏覽器顯示圖片的功能(或者他兒子干的)。不管怎么樣,如果你不是用這種傻瓜式的思維方式去尋找答案的話,可能怎么也找不到問題的根源。

          很多時(shí)候,問題發(fā)現(xiàn)者對(duì)于問題的描述往往是非常片面的,并且加上了主觀推測(cè)的成分在里面。如果你不能透過這些主觀的描述去發(fā)現(xiàn)問題的實(shí)際表象,或者說根本就是你自己根據(jù)程序員的經(jīng)驗(yàn)邏輯來判斷問題所在的話,十有八九會(huì)在歧途上越走越遠(yuǎn)。

          對(duì)于白癡級(jí)的問題,只有用白癡的行為方式才能得到答案。

          即便同樣是程序員,但對(duì)于你的程序并不熟悉,也會(huì)經(jīng)常有這樣的疑問:“為什么我調(diào)用你的代碼出錯(cuò)了?”這種問題的答案,很多時(shí)候是因?yàn)樗麄兊恼{(diào)用方式不對(duì),或者調(diào)用了錯(cuò)誤的庫(kù)文件,或者庫(kù)文件的版本使用不當(dāng),或者根本就沒有聯(lián)接到庫(kù)文件上。當(dāng)你想讓同事幫你檢查一下程序中的一個(gè)莫名其妙的bug的時(shí)候,一般來說希望他對(duì)你的系統(tǒng)了解的越少越好,只有這樣他才會(huì)問一些你自己認(rèn)為絕對(duì)不可能出問題的“笨”問題。

          所以“笨”的精髓在于你如何去思考問題:不要假設(shè)些什么,把自己假設(shè)的太完美或者把別人假設(shè)的很聰明都會(huì)使你忽視一些很淺顯的事實(shí)。思考的前提必須是完整的事實(shí)表象,思考的過程必須是拋棄成見的問題跟蹤。在發(fā)現(xiàn)事實(shí)之前作太多的主觀思考和臆斷,倒不如把自己當(dāng)作白癡一樣來行動(dòng)更好。

          當(dāng)然,不思考的一個(gè)極端是不分情況都直接去做,另一個(gè)極端是完全脫離事實(shí),用思想辦事。一個(gè)優(yōu)秀的程序員應(yīng)該做好權(quán)衡。10次決定里面的1次錯(cuò)誤決定不是致命的;只做5次正確的決定而另外5次沒有任何決定才更糟糕。

          最后是一個(gè)蜈蚣的故事。蜈蚣本來用自己的幾百只腳走路走的很快很好,但他從來沒有花時(shí)間去想過為什么。直到有一天,一只臭蟲問他:“你是怎么管理好你的幾百只腳的?你不覺得這是件很困難的事情嗎?”臭蟲問完之后就走了。只剩下蜈蚣坐在地上,不停的思考這個(gè)問題,卻一直想不出個(gè)究竟。從此以后,這只蜈蚣再也沒辦法好好的走路了

          posted @ 2005-10-30 22:33 成長(zhǎng)記錄 閱讀(478) | 評(píng)論 (1)編輯 收藏
           
          什么是XML數(shù)據(jù)島? 
          數(shù)據(jù)島是指存在于HTML頁(yè)面中的XML代碼。數(shù)據(jù)島允許你在HTML頁(yè)面中集成XML,對(duì)XML編 
          寫腳本,而不需要通過腳本或<OBJECT>標(biāo)簽讀取XML。幾乎所有能夠存在于一個(gè)結(jié)構(gòu)完整 
          的XML文檔中的東西都能存在于一個(gè)數(shù)據(jù)島中。包括處理指示、DOCTYPE聲明和內(nèi)部子集 
          。(注意,編碼串不能放在數(shù)據(jù)島中。) 
          <XML>元素標(biāo)記數(shù)據(jù)島的開始,它的ID屬性提供了一個(gè)可以用來引用數(shù)據(jù)島的名稱。 
          數(shù)據(jù)島的XML可以是內(nèi)嵌的: 
          <XML ID="XMLID"> 
             <customer> 
                <name>Herbert Hanley</name> 
                <custID>81422</custID> 
             </customer> 

          </XML> 
          或者在XML標(biāo)簽中通過SRC屬性引用: 
          <XML ID="XMLID" SRC="customer.xml"></XML> 
          也可以使用<SCRIPT>標(biāo)簽來創(chuàng)建一個(gè)數(shù)據(jù)島: 
          <SCRIPT LANGUAGE="xml" ID="XMLID"> 
            <customer> 
              <name>Mark Hanson</name> 
              <custID>81422</custID> 
            </customer> 
          </SCRIPT>

          posted @ 2005-10-30 22:26 成長(zhǎng)記錄 閱讀(360) | 評(píng)論 (0)編輯 收藏
          僅列出標(biāo)題  
           
          主站蜘蛛池模板: 巴楚县| 桃江县| 闻喜县| 仁化县| 左云县| 海南省| 磴口县| 新泰市| 师宗县| 池州市| 宁海县| 柞水县| 莎车县| 夏河县| 满城县| 隆尧县| 吴桥县| 鄂尔多斯市| 商南县| 黄龙县| 介休市| 乐山市| 偃师市| 南皮县| 城口县| 政和县| 吉木萨尔县| 海原县| 威远县| 前郭尔| 南康市| 洛南县| 星子县| 乡城县| 巴马| 富裕县| 津市市| 衡阳市| 永兴县| 布拖县| 云阳县|