《JeolOnSoftware》
joel on software大家應(yīng)該比較熟悉了:
http://www.joelonsoftware.com/index.html
關(guān)于jeol,可以看下他的背景,耶魯大學(xué),91年進(jìn)入微軟,在excel組作為programmer manager,而且是在一線編程的,后來又經(jīng)歷的一些公司,最后單干,他們的trello.com非常棒,幾個(gè)同事和我在用。
簡而言之,這哥們很hardcore,說的很多東西很不錯(cuò)。
我讀的這個(gè)紙版的書《jeolOnSoftware》(http://book.douban.com/subject/1426838/)其實(shí)比較早了,中文翻譯版是05年出的。
這個(gè)書里的確有含金量高的地方,但是也有很多地方比較基礎(chǔ),筆記加一些個(gè)人評論:
14 不要被太空架構(gòu)師嚇到
jeol描述了這樣一群人,他們喜歡做很多抽象,以至于脫離了現(xiàn)實(shí),作為理論很好,但是對于現(xiàn)實(shí)卻沒有意義,jeol稱之為太空架構(gòu)師。
他們傾向于在大公司里面任職,只有這樣的公司才能供養(yǎng)這樣的身份巨高,卻對基本業(yè)務(wù)沒什么貢獻(xiàn)的人,喜歡為了創(chuàng)新而創(chuàng)新,喜歡搞革命,弄個(gè)大體系。。。。
這些東西的確是牛的,但需要踏踏實(shí)實(shí)的積累和卓越的能力。
這篇文章里,jeol更多的是吐槽,的確是,這樣的人本身常常在公司里面浪費(fèi)公司的資源(高薪+引來的抱怨),如果跳出來指導(dǎo)項(xiàng)目開發(fā),很可能把一個(gè)團(tuán)隊(duì)的青春年華毀掉,遠(yuǎn)離這些不腳踏實(shí)地的人吧。
吐槽之外,也不能一概而論的說抽象和革命性的東西都是不好的,畢竟我們還是時(shí)不時(shí)看見有革命性的東西發(fā)生,但是個(gè)人覺得一個(gè)是要尊重客觀事實(shí)和規(guī)律,腳踏實(shí)地,不要強(qiáng)求,更不要忽悠,做一個(gè)真正讓人尊敬的開發(fā)者。
15 fire and motion
這是一個(gè)軍事廣泛運(yùn)用的基本策略,就是向敵人開火,敵人肯定要低頭,然后你可以趁著這個(gè)機(jī)會(huì)(在敵人不知道的情況下)搶占更有利的地方,但是你一定要移動(dòng),否則敵人知道你的地方,在你換彈夾的時(shí)候,就會(huì)反擊你。
這的確是一個(gè)很好的策略,在軟件競爭中常常用到,大公司會(huì)做這樣的火力覆蓋:你不用買我的產(chǎn)品,從更便宜的小公司買也可以,但是務(wù)必要保證支持xml/soap/j2ee否則你可要掛。于是小公司在談的時(shí)候就不得不調(diào)整自己的開發(fā),支持本來不需要的這些特性,這樣自己的成本和速度的優(yōu)勢就被削弱,而大公司則繼續(xù)前進(jìn)。
或者大公司迫使你來跟隨,然后它自己來向有利的地方前進(jìn)。
yeah, fire and motion.
18 二元文化
這個(gè)概括我很喜歡:unix是想讓程序員爽的系統(tǒng),windows是想讓人民群眾爽的系統(tǒng)。
因此兩個(gè)系統(tǒng)有著很大的不同,應(yīng)用場所也很不同。
反言之,你如果想做一個(gè)賣給大眾的東西,你就不能不顧大眾的需求,按著自己覺得酷的方式來做。
21 激勵(lì)
原來的題目是“重金獎(jiǎng)勵(lì)害多利少”,我不是很認(rèn)同,但是里面說的內(nèi)容還是很有同感的。
講的是微軟excel團(tuán)隊(duì)的愣頭青hr認(rèn)為這些行業(yè)內(nèi)最頂級的人才僅僅需要錢就可以驅(qū)動(dòng),他們設(shè)定各種獎(jiǎng)項(xiàng),然后向調(diào)戲幼兒園小孩(我覺得也很像耍猴)一樣去設(shè)立一個(gè)獎(jiǎng)項(xiàng),期望這些開發(fā)者能夠玩命,誰做的好就給誰。
微軟和jeol需要的人才肯定是vision驅(qū)動(dòng)的,就像《魔鬼代言人》里面撒旦和羅麥斯首先談的是要干什么(統(tǒng)治世界xxx),然后大家達(dá)成共識了,沒什么好談了,羅麥斯才開玩笑的說我們談?wù)刴oney吧,撒旦哈哈一笑,說“that's the easy part”,這才是吸引頂級人才的方式。
對頂級人才用耍猴的策略,這樣那樣的原因,總是找一些不懂開發(fā)者的人來“激勵(lì)”開發(fā)者,而且這些manager們非常難有
22 不配備測試人員的5個(gè)原因
這個(gè)部分后面工作中還真有遇到對測試的重要性認(rèn)識很外行的情況,不過這個(gè)也不是很大的問題,知道就好了,而且沒有發(fā)現(xiàn)這一點(diǎn)也不意外,尤其是在google宣稱程序員自己測試巨牛無比之后。
首先這是一個(gè)在實(shí)際生產(chǎn)中的客觀事實(shí):
在微軟(我上一家游戲公司也如此)有著非常大規(guī)模很正規(guī)的測試團(tuán)隊(duì),以至于所有的問題都會(huì)被抓出來,然后干掉。
我在上一家公司驚奇的發(fā)現(xiàn),最后游戲發(fā)售的時(shí)候如此的穩(wěn)定,沒有bug,根本就不是程序員寫的那么完美,幾乎可以說就是測試團(tuán)隊(duì)的功勞,龐大的測試團(tuán)隊(duì)幾乎和開發(fā)團(tuán)隊(duì)一樣大,從項(xiàng)目早期就開始有,一天天不間斷的測試,然后通過正規(guī)的bug數(shù)據(jù)庫,反饋給開發(fā)組,開發(fā)組再作為task分配給各個(gè)人。
測試團(tuán)隊(duì)如同定海神針一樣,作為開發(fā)團(tuán)隊(duì)的后盾存在,記得一次我做了一個(gè)巨大的改動(dòng),一次提交了狂加班一個(gè)月的很具顛覆性的改動(dòng),心里頗為不安(盡管我一再檢查了代碼,確認(rèn)都o(jì)k,但是規(guī)模太大了,有過一定開發(fā)經(jīng)驗(yàn)的人都會(huì)知道,這里幾乎就一定會(huì)有問題,不太可能一次性通過),然后測試團(tuán)隊(duì)針對這樣的改動(dòng),分配了較多的人,連續(xù)測了幾天,都o(jì)k,然后我就可以把心放下,回家睡個(gè)安穩(wěn)覺了----定海神針。
測試團(tuán)隊(duì)至關(guān)重要基于這樣的事實(shí):
- 地球上不存在寫程序沒bug的程序員,而且一般我們所在的公司里面充滿了水平很一般的程序員,測試團(tuán)隊(duì)是必須要有的,當(dāng)然這個(gè)測試團(tuán)隊(duì)可以是程序員自己,也可以是一個(gè)專門的測試團(tuán)隊(duì),但是必須要有。
- 測試并不是一個(gè)巨簡單的工作,好的測試人員的抓錯(cuò)能力和差的相差很大,軟件越是復(fù)雜,這個(gè)越是大,作為最復(fù)雜的軟件之一:游戲,程序員的測試能力只能用很差來形容,簡言之,程序員自己的測試能力是不夠的。
- 客觀地說,程序的人力成本畢竟是要高于測試人員的,出于成本的考慮,也需要有專門的測試團(tuán)隊(duì)。
- 實(shí)際上,比較好的公司會(huì)做很多這樣的成本計(jì)算和控制,比如給程序員最好的機(jī)器配置,辦公室搬家的時(shí)候有專門的人來搬
23 任務(wù)切換的代價(jià) 原標(biāo)題是”任務(wù)換人有害無益“。 jeol談到同時(shí)做多個(gè)任務(wù)的代價(jià)要高于一個(gè)個(gè)做,這個(gè)論點(diǎn)在有一年的gdc上也有一個(gè)producer說過,因?yàn)槲覀兊拇竽X就是這么設(shè)計(jì)的:單任務(wù)執(zhí)行能力強(qiáng),多任務(wù)執(zhí)行能力差。 盡管有人有著很好的多任務(wù)處理能力,但是對于絕大多數(shù)來說,同樣的能力下,一個(gè)個(gè)任務(wù)完成是最高效的。 至于任務(wù)換人。。。那是最低效的事情之一了,除非必須如此,否則最好不要這樣。這里的飛機(jī)就多多了,說到這里,我覺得程序員最強(qiáng)者的一個(gè)重要元素就是能淡泊程序員典型的自我欲望,比如說在另外一個(gè)人接手的時(shí)候,會(huì)有一個(gè)傾向就是,如果按照前人的做法,就顯不出我牛了,然后潛意識里就要自己搞一套,在這樣的潛意識下,所以符合這個(gè)方向的東西就會(huì)被夸大,給項(xiàng)目組x個(gè)理由要重搞,或者自己直接重搞。 在《浪潮之巔》里面講到蓋茨對dos的支持,可以說是能夠超越程序員自我欲望的一個(gè)典型,不是很理想化的直接拋棄一個(gè)落后的東西,而是更加理智的去采取最合適的策略。
另外一個(gè)切膚之痛就是我現(xiàn)在經(jīng)歷的引擎和游戲一同開發(fā),美術(shù)團(tuán)隊(duì)等待引擎工具的功能來產(chǎn)出,項(xiàng)目自己也有milestone的壓力,那么很多feature都是做到一個(gè)80分即提交,然后轉(zhuǎn)向下一個(gè),有問題和改進(jìn)的需要再回頭做。
這個(gè)是在”引擎和游戲需要一同開發(fā)“的大前提下的最優(yōu)策略,但是相比引擎先行1年這樣的情況就有質(zhì)的不同,這種情況下,完全可以更加深遠(yuǎn)的設(shè)計(jì),更加少的任務(wù)切換,和專注的實(shí)現(xiàn)。
24 重寫代碼
原標(biāo)題是”絕不去做的事情,第一部“
里面寫了網(wǎng)景公司花了3年時(shí)間,重寫了他們認(rèn)為很爛的代碼,結(jié)果導(dǎo)致錯(cuò)過了大好的競爭機(jī)會(huì),市場占有率直線下降(從%90到%4)。
嗯,對于這種案例我覺得也沒有太大意思,這么多年來,你可以找到通過重寫把自己弄死的,也可以找到重寫進(jìn)而脫胎換骨的,這不是一個(gè)簡單的一概而論的”應(yīng)該還是不應(yīng)該“的問題。
比如我郵件的簽名檔就是carmack給abrash作序的一句話:
“Much heroic programming ensued. Several hundred thousand lines of code were written. And rewritten. And rewritten. And rewritten”.
在做網(wǎng)景這樣的公司戰(zhàn)略級重寫決定權(quán)衡的時(shí)候,起碼要有商業(yè)產(chǎn)品端的大局觀和技術(shù)方面的縱深思考兩方面的權(quán)衡,還是那句話,程序員需要超越自己作為程序員來思考問題才會(huì)得到一個(gè)正確的結(jié)果。
那么為什么程序員愛重寫呢,jeol提的兩點(diǎn)我很贊同:
- 程序員有一種做完美建筑師的傾向,其實(shí)這個(gè)傾向是程序員技術(shù)快速持續(xù)提升的重要價(jià)值觀,在作為純粹技術(shù)來說,非常好的一個(gè)特點(diǎn),但是實(shí)際做產(chǎn)品的時(shí)候,就需要產(chǎn)品端的視野來平衡
- 閱讀代碼比寫代碼要困難的多,尤其是經(jīng)過產(chǎn)品化的代碼,常常會(huì)很是”很丑陋“以至于閱讀和搞懂這樣的代碼非常的痛苦,重寫則爽多了
- 丑陋的代碼或許是必須如此
- 它就是有那么多奇怪詭異的情況要處理,也就是你再寫一遍也差不多,同時(shí)你浪費(fèi)了那么多時(shí)間
- 那些詭異情況,常常是在一開始寫的時(shí)候想不到的,然后實(shí)際測試或者上市的時(shí)候才發(fā)現(xiàn)的,然后才添加了,原始代碼的丑陋中蘊(yùn)含了大量的通過測試(測試團(tuán)隊(duì)或者用戶使用)才獲得特殊需求,而這種在一開始很理想化的設(shè)計(jì)的時(shí)候幾乎都是考慮不到,這部分極有可能要再走一遍。
- 如果和原始團(tuán)隊(duì)水平大抵相當(dāng)?shù)脑?#xff0c;那么重寫之后大抵也是類似的水準(zhǔn)
26&27 了解內(nèi)部機(jī)制
這一部分的道理很簡單,但是我們極易因?yàn)閼卸瓒高@樣的錯(cuò)誤。 就是現(xiàn)在東西越來越大越來越復(fù)雜,越來越多的東西被抽象,但是要把東西用對用好(而不是隨便用用),你必須還是要懂的其內(nèi)部的機(jī)制(這也隨著規(guī)模越來越大,變得越來越難了),而內(nèi)部機(jī)制的比例規(guī)模就像冰山未露出的部分那么大。 比如STL,了解了其中的內(nèi)存分配機(jī)制之后,你就很容易寫出不僅對,而且高效的實(shí)現(xiàn)出來。 游戲引擎也是如此。 最后jeol給了這樣的建議,如果你沒法找到一位你將要依賴的語言和平臺方面有幾年扎扎實(shí)實(shí)的實(shí)踐經(jīng)驗(yàn)的專家之前(套用引擎也適用),不要貿(mào)然啟動(dòng)一個(gè)項(xiàng)目。
29 全能型管理團(tuán)隊(duì) jeol在這里列舉了大量事實(shí),說明商業(yè)上很棒的人,但是對技術(shù)不懂的人,根本無法領(lǐng)導(dǎo)一個(gè)軟件公司。 同時(shí)如同網(wǎng)景公司(同時(shí)也讓我想起了idsoftware)這種,對技術(shù)很在行,但是商業(yè)方面很有欠缺的人也很難領(lǐng)導(dǎo)好一個(gè)公司。 盡管很難,但是這就是一個(gè)事實(shí),要想讓公司發(fā)展的好,管理團(tuán)隊(duì)就需要能夠很好理解并且喜愛技術(shù)和商業(yè)。
31 作為哼哈二將,只管去做事
這一章頗有意義,項(xiàng)目管理不只是項(xiàng)目負(fù)責(zé)人才能做的事情,做為底層的開發(fā)者一樣可以做很多,方法就是:只管去做就好了。
項(xiàng)目組里有這樣那樣的問題,但是你可以用你做事的正能量來影響項(xiàng)目組,先保證自己的事情完成,然后去做一些幫助項(xiàng)目組的事情(設(shè)置sourcecontrol,bug數(shù)據(jù)庫,寫一些文檔。。。)。
32 放權(quán)問題
如果下屬足夠強(qiáng)力可以信任,那么就交給他去做,否則要干預(yù),單純說信任或者說控制都是不對的。
33,要好好設(shè)計(jì)
極限編程里面提倡的是不要過度設(shè)計(jì),但是很多人歪曲成不要設(shè)計(jì),上來搞起,不行再改。。。然后就倒霉了
要好好設(shè)計(jì),就這么簡單
35,提防非自主開發(fā)綜合癥
這一章我覺得是這本書里最棒的一章,很精辟的談?wù)摿宋覀兊某3?huì)遇到的,而且是戰(zhàn)略級的問題:是自己來做還是使用別人的。
jeol給出的答案是(我也非常贊同):
如果這個(gè)是你的核心業(yè)務(wù),如果程序開發(fā)團(tuán)隊(duì)能做好,或者不會(huì)明顯差,那么即便會(huì)耗費(fèi)很大的精力,還是要保證自己來做。
這就是ue和ce里面的stl部分都自己來實(shí)現(xiàn)的原因,因?yàn)樾阅苁莈ngine的核心業(yè)務(wù),而stl在性能和一些feature上的支持并不好,所以一些容器類要自己來實(shí)現(xiàn)。
而tree什么的對于ue并不是核心業(yè)務(wù),那么使用第三方的speedtree未嘗不可。
究其原因就是,核心業(yè)務(wù)方面不只是要求能夠完成,而且有著非常高的要求,比如engine里面就要盡可能的快,效果好,開發(fā)效率高,這是真正定義你的價(jià)值的部分。
而重用一些第三方的東西,一般來說不會(huì)出現(xiàn)能夠完全滿足你的需求和質(zhì)量要求的東西(否則你就沒有必要存在了),而你需要保持一個(gè)在漫長開發(fā)周期中,對核心業(yè)務(wù)的控制力和持續(xù)提升的能力,這只有你自己做才能實(shí)現(xiàn)。
當(dāng)然如果自己搞不定,那還是多快好省的重用第三方的為好。
36 ben&jerry與amazon
這里談及了一個(gè)比較有意思的商業(yè)策略:
- 如果市場比較空,那么amazon這種使用大資金大投入去搶占市場的方式是比較好的
- 市場比較空的時(shí)候,搶占市場最重要,投入的資源幾乎一定會(huì)有產(chǎn)出,時(shí)間才是最重要的因素,如果能用錢來換時(shí)間,那么就去做,比如核心技術(shù)人員要搬家,那么公司就應(yīng)該雇人幫他搬,然后讓他把搬家的時(shí)間拿來工作
- 如果市場比較飽和,那么就要走ben&jerry公司的方式,一步一個(gè)腳印的去積累,先保證不死,然后去一點(diǎn)點(diǎn)擴(kuò)大自己的生存空間
里面一個(gè)示例讓我印象很深刻,win95的內(nèi)存機(jī)制更準(zhǔn)確,但是當(dāng)時(shí)流行的軟件simcity有一個(gè)bug,既是釋放了一個(gè)內(nèi)存,然后又立即使用它,在原先的pre win95的系統(tǒng)的內(nèi)存機(jī)制下可以,但是win95不行,于是ms就反匯編了simcity,然后專門提供了一個(gè)simcity的模式,這樣simcity愛好者在win95下也能很好的玩到simcity。 純技術(shù)上看,這簡直太下賤了,但是在商業(yè)行為上,意義重大。
40 公開源代碼的經(jīng)濟(jì)因素 這里是一個(gè)微觀經(jīng)濟(jì)學(xué)的一個(gè)定律:對產(chǎn)品的需求在其配屬品價(jià)格降低的時(shí)候提高了。 比如去海南的機(jī)票便宜了,那么去海南旅游的人就會(huì)變多,頂飯店的人也會(huì)變多一樣。 這就是為什么大公司會(huì)開發(fā)如此多的免費(fèi)產(chǎn)品,ibm會(huì)大力開發(fā)eclipse,sony和微軟都會(huì)給游戲機(jī)提供免費(fèi)的(當(dāng)然還是比較粗糙)的游戲引擎雛形。
超越時(shí)代的技術(shù) 在讀這本書的時(shí)候,里面不停地提到為數(shù)不少的很超前的技術(shù),但是都因?yàn)椴贿m合當(dāng)下結(jié)果終結(jié)了。 這就好像自然界的淘汰法則一樣,如果原始人突然有一群人變異,變成智力很發(fā)達(dá)但是體力不行,或者抵抗力不行,那么這種在幾十萬年后會(huì)成為寵兒的人就會(huì)被自然界因?yàn)榈钟涣诉@樣那樣的危險(xiǎn)而淘汰。 適者生存,就這么簡單!
總結(jié)
以上是生活随笔為你收集整理的《JeolOnSoftware》的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 指纹拍照,一加2评测:增
- 下一篇: TencentOS-Tiny之GCC