事實證明,**與文字不可得兼。在悠悠閒閒地寫產品文件時,寫一點文字也是很正常的事情。但真正開始寫起**來時,即使有寫文字的想法,也絕對不會在敲了幾百行**後,還會有擺弄鍵盤的想法了。
我是乙個極其沒有時間概念的人,寫完系統分析後,我在悠閒中度過了幾周的時間,每週只是在週末寫一點程式,但也只是適可而止,我還要看看電視、聽聽**、玩玩遊戲……
到五月的最後乙個週末時,我才開始緊張起來,當時我對在6月12日前能否完成已經不報太大的希望了,按以前的進度,三周才寫了30%的功能,兩周的時間不但要寫完,還要完成簡單的測試、發布,這些活看起來很瑣碎,但實際上都是極耗費時間的。
不過事後我發現,按照功能點來估算專案進度也存在一些問題。儘管當時我只完成了30%左右的功能,但系統的架構和技術點的嘗試我都已經完成了。也就是說,在我以後70%的路途上,已經不存在技術難點了。而且隨著我對c#的掌握,開發進度也比以前要快了許多。所以,我認為在估計專案進度時,不應該忽略技術難點對進度的影響,還有程式設計師對技術的熟練程度是乙個動態的過程,我們不應該把乙個人的開發效率看成乙個定值,熟練程度、身體狀況,甚至心情對開發效率的影響都很大,甚至可以達到倍數關係。
接下來的兩周煉獄之旅還算是比較順利,由於公司裡的事情也比較多,我除了壓縮自己的睡眠時間外,已經沒有其他時間可以利用了。但睡眠時間與工作效率是有很大關係的。大腦疲勞的情況下,邏輯思維很容易混亂,而程式設計師邏輯思維的混亂、噢,或者說不清晰,給軟體帶來的可能就是致命的缺陷。所以我十分同意xp中的觀點,每週只工作40個小時,我甚至覺得程式設計師如果每週程式設計時間不應該超過30個小時,除非是最後一周。如果給大家樹立乙個伸手可及的目標,大家會想只是一周,一周之後我們就可以享受假期、給客戶演示程式、暫時告別枯燥的編碼生活了,所以大家會放下很多事情,將生產率提高到乙個很高的程度。但如果一周之後完不成,程式設計師受到的打擊是來自生理與心理兩方面的。
程式開發中deadline前的衝刺很像戰爭中的衝鋒,如果第一次衝鋒,所有的士兵都會發揮最好的狀態,一鼓作氣撕破對方的防線,但如果一次衝鋒失敗,那就會再而衰,三而竭了。所以,專案經理選擇衝鋒的時機很重要,有時候,乙個專案的成敗也許就在一念之差。
整個程式是讓我比較滿意的,因為我用了四周的時間進行了產品設計,很多邏輯問題都在那個時候考慮清楚了。整個架構在後來的開發過程中是堅固而且有彈性的,我相信如果再在上面新增或者修改某些功能,我們的改動會很小。邏輯**與介面的分開最大的好處是重複的**大量減少了,也便於理解了。唯一有些麻煩的是,由於我沒有採用單元測試,為了完成乙個功能,我可能要一起修改三個類——介面、邏輯、service呼叫或者資料庫操作。
讓我不滿意的是,對web service介面的定義並不好,由於對介面缺乏認識,我按照程式的需要定義了大量似是而非的介面,比如說,我要得到一組資料,有乙個介面返回dataset,而我需要得到其中乙個資料,那麼就需要另乙個介面了。這是讓我很不滿意的一點。
另外一點是安全性,我把密碼明碼直接存到了資料庫裡,這是極其危險的做法;還有就是使用者的驗證只是在登陸時起作用,而在呼叫web service的方法時,並不去驗證呼叫者的合法性,這在無線環境下也是極其危險的,任何乙個人都可以通過無線裝置呼叫你的web service,獲取一些資料,或者修改資料。對於安全性的考慮是下一階段的重點。
在力所能及的範圍內,我還是對一些已知的攻擊方式做了防範,比如sql注入,我用自己的方式做了防範,一旦察覺到可能的sql注入攻擊,web service會丟擲乙個異常。
說到值得誇耀的地方,我最欣賞的還是介面的風格,.net compact framework是不支援漸變背景色的,我用比較古老的方法實現了介面背景的漸變,但同時將對執行效率的影響降到了最低。還有多行顯示的listview控制項,是我很早就想實現的,這次終於借助第三方的**實現了。
這次開發的心得就這麼多了,這次是我乙個人從產品定義、設計、編碼實現、資料庫、測試、發布這樣一路走過來的。很多地方都按自己的想法做了,效果還不錯,有些地方也突現出自己的幼稚,不過咬牙一路走過來之後的幸福感卻是什麼都替代不了的。
無論如何,我要給自己放個心靈的假期了。剛才dearbook送來了《敏捷軟體開發》,呵呵,終於可以放鬆一下了。
饕餮元年開發日記(三)
我的設計差不多要完成了。其間我陷入了對web service介面定義的考慮,最後我還是把邏輯實現放在了client中,而一些類似於結構的類可以通過序列化傳遞給web service。當然這樣的說法有些不準確,web service的介面是按照業務邏輯定義的,它可以返回序列化的物件,也可以是datas...
饕餮元年開發日記(三)
我的設計差不多要完成了。其間我陷入了對web service介面定義的考慮,最後我還是把邏輯實現放在了client中,而一些類似於結構的類可以通過序列化傳遞給web service。當然這樣的說法有些不準確,web service的介面是按照業務邏輯定義的,它可以返回序列化的物件,也可以是datas...
饕餮元年開發日記(一)
饕餮元年是我自己開發的第乙個基於pocket pc的無線餐飲管理系統。饕餮是中國古代傳說中的怪獸,喜歡吃東西,所以 饕餮 也形容暴飲暴食的人。在這裡取這個名字,是希望大家有個好胃口,而不是得消化不良。而元年則是版本號,大家看1.0 2.0 2000什麼的太多了,既然名字這麼中國化,索性讓版本號也中國...