上個月 24 日應 MaoYang 兄之邀,分享我在敏捷開發的實戰經驗。這場分享會還找來了 David Ko 兄分享他在公司導入 scrum 開發管理方法的經驗,同人則負責分享我之前在專案中推行 extreme programming 工程實務的經驗。分享會在台北市電腦公會舉行,看到現場互動氣氛的熱絡,以及會後學員們給予不少正面的評價,感覺大家收穫都不少。其實包括我自己在分享會結束之後也產生了一些想法,倒是想藉由此文章分享我的分享會後心得。
同人很喜歡 David Ko 兄提到愛因斯坦為 Insanity 這個字所下的定義:「Doing the same thing over and over again and expecting different results」我認為這個定義很貼切地描寫許多人在軟體開發過程所展現的心態;過去做過行不通的做法,卻認為在今天可以行得通,結果讓人一直瘋狂或是不斷地精神錯亂。
但為什麼人們要盲目地做些行不通的事呢? Read the rest of this entry »
Posted by: jim yeh in CNet/ZDNet, 利害關係人, 問題解決, 寫作, 專案團隊, 專案風險, 新聞, 組織, 職場, 軟體審查, 開發流程, 閱讀
這篇文章是投稿 ZDNet Taiwan 的文章原稿,由 ZDNet Taiwan 以〈如何在系統異常前發現錯誤?〉、〈如何在系統異常前發現錯誤?(下)〉兩篇文章刊登。文章原稿未經 ZDNet Taiwan 編輯,內容可能與 ZDNet Taiwan 約略有所不同。
前一陣子有兩個與資訊系統失常有關,而且眾所矚目的新聞事件,也就是戴爾電腦網路購物系統與台北捷運內湖線的系統異常。相信很多人都認為這兩個系統會發生系統異常相當離譜,在系統上線之後才發現系統無法正常運作,造成系統使用者的困擾,同時也會讓人對系統可靠度與穩定度失去信心,而增加系統的失敗成本。
雖然平心而論,想要事前預料系統可能發生的問題,並加以預防或因應其實並不容易,因為開發系統,尤其是軟體開發常會碰到事先難以預料的問題。但如果能在錯誤造成危害之前,就能夠發現問題並採取適當的行動來解決它,應該就能減少系統的失敗成本。因此,看到戴爾與台北捷運內湖線的重大系統異常,讓筆者想探討如何在系統失敗前發現錯誤,以避免系統失敗的巨大損失。 Read the rest of this entry »
最近同人在開發資料剖析的程式時,碰到一個很奇怪的現象。我使用 map 容器來存放剖析資料的結果,然而卻發現以原先新增資料所用的相同鍵值,竟然會找不到該筆資料。但我的測試程式顯示容器中所存放的鍵值與資料,其內容是正確的,但為什麼用相同鍵值去找,結果竟然回傳查無資料呢?原來問題就出在以字元串列常數當索引鍵值。 Read the rest of this entry »
Posted by: jim yeh in 分析設計建模, 利害關係人, 問題解決, 寫作, 專案風險, 思考, 溝通, 生活感觸, 組織, 職場, 領導
Kenming Wang 在〈寫好使用案例 (Use Case) 有什麼好處?〉中提到寫好使用案例的好處。文章提到有位其中一位較為資深的程式開發人員在他在工研院授課時表示感覺不到寫好使用案例有什麼好處。這問題讓他思考許久後回答,他認為寫好使用案例最直接的關鍵是,影響整個專案開發流程的節奏。
這篇文章分享他對寫好使用案例對專案好處的看法,他總結使用案例的好處是族繁不及備載。並提到越大規模的專案,更能感受到開發節奏的順暢度。再加上 “漸進循環 (incremental and iteration)” 的開發模式,會越形容易謀和在系統開發期間,人與事的種種。
不過,Kenming Wang 在文章最後提到以上的論述不能說服那位程式開發人員,因為程式設計人員多半以局部或個別的角度來看系統開發,所以使用案例寫得好不好,對他們沒差。只有像專案經理或軟體架構師以專案整個全局來看時,才會有明顯的感受。
但他認為不需要去說服那位程式開發人員,並引述 Martin Fowler 在《UML Distilled》一書中曾經說過的:「你只能強迫新手們這麼做。過了幾年後,他們會突然恍然大悟,然後腦袋彷彿重生!」這句話來說明他對這位程式開發人員意見的看法。
同人看 Kenming Wang 這篇文章覺得怪怪的,倒不是不贊同他對寫好使用案例好處的觀點,而是覺得強迫新手去做我們認為有價值的東西是很危險的。 Read the rest of this entry »
本文於 2009/07/22 經 ZDNet Taiwan 部落格文章專區轉載。
在 facebook 看到舜平學長提到「求快求彈性忽略系統文件的後果,找了兩個小時的BUG」讓同人想寫一篇文章來談談系統開發的彈性。
舜平學長說求快求彈性,忽略系統文件重要性的後果就是使用者說沒空寫文件,如果這時我們也沒有將系統重要資訊記錄下來,那麼就算是自己也會因為時間一久而逐漸淡忘這些資訊,結果使得系統的維護變得更加困難。
雖然以上的現象在台灣是開發者經常碰到的問題,但那是否代表系統開發追求速度與彈性,就必然犧牲文件與流程呢?同人認為這樣看就太過簡化了,系統開發的彈性並不是忽略系統文件與流程,而是只重視有實質效益的一切事物,當然包括文件與流程。 Read the rest of this entry »
世界愈複雜,我們就更需要簡單。簡單讓我們看清楚事物的脈絡,掌握重點,以協助做出選擇,並在適當時機採取行動。然而,簡單其實是困難的,因為要做到簡單,意味著我們必須清楚事物的全貎,行動必須要更有原則。尤其是在複雜多變的環境當中,簡單不能只靠直覺,而是有紀律的思考與行動。
那麼,用有紀律的思考與行動,以做到簡單,我們該怎麼做呢?前一陣子,同人閱讀了《越簡單越有力量》,我覺得這本書的觀念與方法,剛好可以提供我們複雜世界簡單之道的思考方向與指引。 Read the rest of this entry »
朋友在 MSN 上問我用 vb.net 和 c++ 開發程式有沒有很大的不同,因為她的主管要她加入一個使用 vc++ 開發系統的專案。她很怕接下這個任務會很難上手,但主管告訴他用不同的程式語言,只是工具的差異而已,她只需要依主管給的程式範例照著做就沒有問題。朋友不大相信主管的說法,於是想聽聽我的意見。
同人直覺感到不妥,並非因為朋友並不諳 c/c++ 這種程式語言,加上它與 vb 之間,存在根本的程式語言差異。我認為比較嚴重的問題還是溝通過程出現不精確的語言,這代表她們公司的品質文化,對解決專案的問題是沒有效果的。
學習 c++ 當然並不輕鬆,尤其如果沒有 c 語言基礎的話,學起來更是會格外吃力。因為 c++ 語言特性與 vb 的差異很大。比如 c/c++ 特有的指標,就很容易讓初學者混淆,如果觀念不清楚,常會讓程式產生記憶體衝突甚至是當在不明所以的地方。但程式語言或是程式設計的技術,這些都還可以藉由學習成長,對於積極進取、追求自我成長的開發者而言,這些並非是大問題。
誠如我在 facebook 的好友,也是以前在點空間聚會有一面之緣的仁傑兄,看到我對這件事情的分享,他建議:
If you want to encourage her, you can said that. Let her have a confidence to do it.But you have to keep coaching, monitoring and reviewing her codes.
然而,這件事情我覺得讓人擔心的並不是朋友的能力夠不夠。我注意到的是她們公司的品質文化,品質文化的問題並不在技術,它多半不會是專案成敗的關鍵,而是專案管理者的態度。 Read the rest of this entry »
這篇文章是投稿 ZDNet Taiwan 的文章原稿,由 ZDNet Taiwan 以〈軟體開發的難處 SA該如何解決?〉、〈為何SA很難落實簡單設計〉兩篇文章刊登。文章原稿未經 ZDNet Taiwan 編輯,內容可能與 ZDNet Taiwan 約略有所不同。
今(09)年初,應中山大學資管系主任鄭炳強教授的邀請,到他們學校做了一場演講。由於筆者與鄭教授原先並不認識,是透過台科大資管系主任李國光教授聯絡到筆者,因此,鄭教授邀請我在演講前先與他碰面、共進午餐,並且藉這個機會交流彼此在軟體工程方面的心得。
在那次午餐約會中,我們聊到了系統分析專業這個議題。鄭教授表示欣賞筆者寫的〈展現系統分析專業的七種能力〉,還曾在課堂上向他的學生推薦這篇文章…與鄭教授交流互動的過程中,也讓筆者得到不少收穫,回到台北後,一直想找機會分享這些收穫。
由於我一直想找機會回應那篇文章的讀者意見,也就是ZDNet讀者對於那篇文章的前半段〈怎樣才是專業的 SA?〉的一些留言,筆者發現這次行程的收穫,正好可以讓這篇文章有一個很好的起點。 Read the rest of this entry »
程式碼的重覆性使程式不容易維護、以及增加系統出錯的機率,同時使得程式的再用性難以提昇。因此降低程式碼的重覆性對程式碼的品質與彈性有很大的助益。然而,在資料存取與與物件型別的無法分離的情況下,卻會使得開發者難以對治程式碼的重覆性;相同處理資料的邏輯,受限於處理資料的不同型態,使得開發者必須依據資料型態不同,而改寫同一段程式碼,使得程式碼很難共用。
就像一個比較常見的例子是資料永續存取的實作,常會因為存取資料型態的不同,而影響到資料存取的界面,因此對每一個需要持久化的商業領域物件,都必須重覆地實作它們的 CRUD 存取功能。
雖然透過永續層的概念,我們可以將這種重覆性隔離開來,加上有些 ORM 永續框架的協助,開發資料存取物件的負擔並不太大。然而即使如此,我們有沒有可能避免重覆開發資料存取的元件,不用針對每一種物件型別都要寫一支相對的資料存取物件呢?要達到這樣的目的,我們必須分離資料存取的處理程序與物件型別,但要如何才能做到呢? Read the rest of this entry »
本周一同人在新公司 on board,公司事先訂好餐廳為我舉行迎新聚餐。在這場聚餐當中的一道菜,讓大家開啟談論品質流程的話題。 Read the rest of this entry »