2009年1月23日 星期五

如何為你的軟體開發團隊評分?

Joel 之前是在微軟Excel Team擔任PM,負責將Excel的巨集語言轉成VB,當時我在VB Team擔任測試工程師,他離開之後換了幾個工作,從2000年之後他自己跟朋友合夥開了一家軟體公司,他企圖創造一個程式設計師(programmers)跟軟體開發者(software developer)為主體的理想工作環境,公司的一切都是為讓開發人員能快樂(所以產能自然會高),至於開發怎麼樣的軟體,他認為不必擔心會水到渠成。說實在的那樣的環境就是10幾年前我剛加入Microsoft時候的樣子,大家真的都捨不得回家,他在2000年發表的這篇文章基本上就是從Microsoft軟體團隊取出的重點。

The Joel Test: 12 Steps to Better Code

如果你想要讓你的開發團隊寫出好的程式,這12條是基本功夫,每個問題的答案都是 yes/no,所以你不用回答but,有就有沒有就沒有,沒有什麼"但是",回答yes給一分,大多數的微軟開發團隊都是滿分12分,Joel的標準是11分還可以接受,10分以下就表示你有嚴重的問題:

1.Do you use source control?
2.Can you make a build in one step?
3.Do you make daily builds?
4.Do you have a bug database?
5.Do you fix bugs before writing new code?
6.Do you have an up-to-date schedule?
7.Do you have a spec?
8.Do programmers have quiet working conditions?
9.Do you use the best tools money can buy?
10.Do you have testers?
11.Do new candidates write code during their interview?
12.Do you do hallway usability testing?

我不在此一一翻譯,有幾項可能字面上不太容易了解的我解釋一下:

8.你的程式設計師有沒有安靜的工作環境?
一般寫程式的人都知道進入一種"忘我境界"的時候產能最高,什麼意思呢?當你埋頭苦幹在解決問題,一下子5小時過去,你才發現自己忘了吃飯,忘了上厠所,就是那樣的狀態(英文用In the Zone一詞),可惜這樣的狀態很容易被打斷,例如:你老闆來找你要報告,或找大家一起開個會,隔壁新手小白看不懂程式不自己去查,喜歡一直來問你,老婆打電話來問別忘了回家的時候順道去買醬油...每個干擾你至少要花15分鐘左右才能再回來。如果你身在一個軟體團隊中,大家沒有這樣的概念,而產能會高的話一定是加班到深夜的時候才能進入狀況。

9.工欲善其事必先利其器
如果寫程式的人用老舊的機器,改幾行程式要花超過15秒才能編譯完成,那大多數的人會等到無聊,結果把時間花在上網或上MSN找朋友;硬碟不夠大的時候你要花多少時間搬東西?除錯的時候,尤其是有UI的程式,沒有雙螢幕怎麼辦?好的軟體團隊絶對不會虐待寫程式的人,如果預算許可,好的工具一定要有,千萬別省小錢花大錢。

11.面試的時候有沒有考寫程式
找個不會寫程式的人來寫程式,就等於請個不會變魔術的魔術師,在美國因為有嚴格法律的規模,請人容易送人走比較難,所以請人的時候要特別小心,台灣可能上班第一天發現不會寫程式就叫人明天不用來了。以後有機會我會跟大家分享怎麼樣從幾分鐘裡找到會寫程式的人。

12.程式好不好用不必問很多人
如果程式送到客戶那裡才被嫌不好用,那事情就嚴重了,其實如果你寫的程式感覺用起來不順,寫的時候你一測就會覺得怪怪的,這時找路過(有空)的同事來試一下,大約5個人就可以發現95%的問題,所以很多時候並不需要大費周章去找專家或不相干的人來批評你的軟體,沒用又花冤枉錢。

你的團隊是幾分呢?如果你有不了解的項目歡迎加入討論。

2009年1月18日 星期日

大兒子的生日

上個星期是我大兒子12歳的生日,每年這個時候除了幫兒子慶生之外,當然也不會忘了媽媽的辛勞,我覺得做老公的要體貼太太的最好禮物是每年關心一下婦科檢查排好時間了沒(這是給其他人的建議,我不必擔心),所以依照往例今年老婆大人的乳癌與子宮頸癌的檢查也在上個禮拜完成了,與往常不同的是今年聽到幾個新知識。

你這輩子別想去大陸了

這是我太太從婦產科檢查出來以後,用手機跟我講的第一句話
"為什麼?",我莫名其妙的問
"因為鄭醫師說她的客人裡老公去大陸的,10個有8個隔年來驗出有病毒",她氣沖沖的說
"什麼病毒?",我接著問
"反正就是在外面亂來惹回來的髒東西,把家裡的太太弄到會得子宮頸癌"
"所以醫生說只要有換性伴侶的話,就要來驗"
"你不要給我在外面亂來,我如果驗出來你就死定了" ... 老婆一直說,我則在網路上找起資料來

原來子宮頸抺片檢查可以驗出HPV人類乳突病毒,這種病毒是經由性行為傳染的,當檢查結果呈HPV陽性時,表示有病毒潛伏在子宮頸,此時婦女成為子宮頸癌的高危險群,必需要定期追蹤。

結論是,凡"做"過必留下痕跡,想偷吃的人別再以為只有天知地知。

我們要開始吃維他命D了

醫生說華盛頓州是全美國癌症比率最高的州,因為這裡的冬天日照不足,所以大部份人普遍缺乏維他命D,而容易造成神經系統病變或免疫系統功能降低,也因此而導致癌症,所以從今天開始每天要吃一顆維他命D。在台灣可能比較容易吧,去參加像台灣步道志工的活動,可以曬曬太陽吸收多一些維他命D,有意義又可以防癌,真是一舉數得呢。

女人一定要善待自己注意健康
太太叫我用這兩則新知來告訴大家,尤其是婦女的朋友們,一定要好好的照顧自己的身體,要聽醫生的話,該做的檢查不要拖延快去做,有發現問題要馬上去治療還來得及,她有個朋友兩年前乳癌過世了,她老公50幾歲,沒幾個月就帶著新女友出雙入對,一年不到就又結婚了,一個女人辛苦了20幾年好不容易小孩跟老公的事業都穩定了,還沒享到福就把成果送給別人,真是不值,所以她發誓她一定會善待自己注意健康,叫我別做"老牛吃嫩草"的夢,我常跟著一起鬧她說:"是啊,現在的年輕女生對我們這些事業有成的老男人,真的很不計較年齡呢!" 她氣得半死,我在旁邊偷笑。

2009年1月11日 星期日

帶員工上健身房的老闆

今天外面下著雨,老婆跟小孩們決定去健身房消耗一下假日以來累積在身上的熱量,在跑步機上走著走著,不知什麼時候我旁邊多了一個人,又過了幾分鐘另外兩個人跟我身旁的那個人說抱歉他們遲到了,然後從他們的言談之間我了解到先來的那個是他們的老闆,這兩個晚到的員工不知道怎麼去用跑步機,結果這老闆很細心的跟他們解釋怎麼去設定才可以達到運動效果又不會造成傷害...

我覺得這個老闆很聰明,會關心員工的健康,鼓勵他們從事有益身心的事。常常我們會認為,大家都知道的事不用多說,說多了會讓人覺得很囉嗦,比如說:抽煙喝酒很傷身體、熬夜很不好、過胖會引發很多問題、保持運動的習慣很好... 可是知道歸知道,老闆們卻經常做些傷害員工的事:比如說要員工超時工作、拉客戶去應酬、去聚餐、搞到員工没有力氣去也沒有錢去運動。如果有一天,老闆帶員工去運動,老闆出錢,如果可以的話拉客戶也去健身,公司出錢,談生意在健身房談... 大家都變得更健康,不知道有多好。

開車回家的途中,一路上我一直在講台東健和社區的事,結果快到家經過一個加油站的時候,我太太淡淡的說了一句:"最近油價又漲了",我愣了一下,然後她接著說:"我真想賞你兩個巴掌,身邊的事不管去管十萬八千里以外的",然後她一一的清點我該做的家裡的事,有時候我覺得夫妻是~不是冤家不聚頭,可是仔細想想為什麼車上有油門有煞車是一對呢?癈話不多說,我該去收拾聖誕樹、聖誕燈、倒垃圾...啦。

2009年1月8日 星期四

軟體創新的一些思維

今天老闆一時興起大談"想當年",可見軟體業的後浪推前浪實在很快,不到40歲就已經有很多少年老成的感慨了,先講一下我這個老闆:他官當得很大,從他到我們CEO之間只有兩個人;然後他會一直強調他只想做大事,從沒想到要做大官;他是目前我這輩子共事過的人當中最聰明的;有嚴重的潔癖;喜歡用精深的英語詞彙,精通數種歐語以及日文;深愛哲史、藝術與電影;沒事還經常愛聊量子物理、老子道德經、孫子兵法,有時候他用英文講中國的古諺語,我還愣一下才想得出來他說的是什麼;這樣你們大概可以想像得到我的工作環境,廢話少說,我想跟大家分享他今天提到一些重要的觀念。

客戶永遠是對的

聽起來容易,可是有多少人沒有在跟客戶談案子的時候覺得他們很白痴呢?他提到他的第一份工作,那年他22歲,第一份工作是幫僱用他的顧問公司接下一個百萬美金的大案子,其他競爭對手千方百計的要賣給客戶昂貴的大型電腦主機系統,他卻用最簡單的設計幫客戶解決他們頭痛的問題,不但後來得到客戶的信任,也幫公司爭取到大筆的後續訂單。以顧問的思維切入來做軟體是一個很精明的做法,你可以幫你的客戶解決什麼問題?問題的關鍵出在那裡?傳統系統分析的方式,從一個個訪談中找到需求的做法是很值得商榷的,因為公司的員工每個人都只關心自己手邊的幾張報表,所以到後來電腦系統都變成只把一個個報表弄到昂貴的設備裡罷了,不只沒有解決問題反而製造更多問題,尊重客戶的觀點、深入了解客戶的問題、提出有效與經濟的解決方案是軟體人員可以而且應該創造的價值。

客戶反對的是事不是人

問問你自己:有多少次你辛苦寫好的程式,到客戶那裡他當場給你吐糟,說這不是他要的?你怎麼反應?跟他吵說你當初講的是這樣的啊?有經驗的軟體人應該先吸一口氣,然後默念"讓我們對事不對人",客戶反對的是你做出來的東西,不是你這個人,所以讓我們聽聽看客戶的想法是什麼,再找到解決問題的辦法。很理想化對不對?其實回到第一條規則"客戶永遠是對的",如果你這樣想,你就會經常把做好的軟體拿來給客戶用用看,不會每次都等到快結案的時候才第一次讓客戶看到結果對吧?

創新不能等老闆的許可

如果你去問老闆"我可不可以用新的技術來解決這個問題?"省略所有中間的對話,結果一定是否定的,差別只是在有些老闆會比較客氣的跟你說:"很好我們下次可以試試看",然後丟給你一個會讓你三個月暗無天日的案子去處理。當員工最大的好處是拿老闆的錢來投資在自己身上,如果有一天你自己當了老闆,我保證你一定對創新慷慨不起來,所以好好的利用這個特權吧!要怎麼做呢?先把自己本份的事情做好,這很簡單,別人寫多少程式你就寫多少,別人寫多快你就多快,要是你做得比別人好又快,下場我想不用我多說你自己知道,然後私底下偷偷做你自己的東西,學你自己想學的技術,當然你不能白痴到在用DotNet的公司裡大剌剌的裝上Java跟OpenSource的工具然後假裝在工作,等到你玩到某個程度,覺得老闆會口張開說"哇!"然後不知該駡你還是稱讚你的時候,再秀給他看,你要說:"我是用空閒時間做的"。

好東西先藏起來沒有關係

如果你的創新沒有順利的得到老闆的青睞,不要太失志而怨天尤人,很多名畫家不也是死後才成名的嗎?不過以軟體業進步的速度,你可以一點都不用擔心死後才出頭的問題,你做的東西只要你認為是對的、是有用的,把它備份保留起來,然後再想下一個好玩的東西,當然這時候你可能要先換個新老闆才能故技重施,而你的能力會因為這樣而一直提昇,有一天你會找到好的人好的團隊做你夢想中的軟體,像我們現在做的這個東西,被公司砍了不只3次,經過了10年才在去年11月出貨了,這證明了堅持是創新唯一的路,下次別怪別人、別怪環境、你自己怎麼看最重要。

跟著自己的感覺走

當你一直長期處在不滿或壓抑的情況下,你不會快樂,你就很難有創意,你就會陷入惡性循環,最後就只能在黑暗中渡過了,問你自己:"我的恐懼從何而來?我為什麼會有這樣的感覺?為什麼別人不同意我的觀點?"透過與自己對話的當中,很多時候答案會自然的浮現,然後你就可以開始改變現狀的計劃,一天一步,不輕易放棄,經年累月以後你會發現自己會處在一個你永遠沒想到過的境界,然後驕傲的跟年輕人說:"想當年..."