章淼老師在軟件工程能力方面,積累了多年的經(jīng)驗(yàn),這個(gè)話題他之前也分享過多次,整體上內(nèi)容有修改調(diào)整。
章老師博士畢業(yè)后在清華待了 12 年,主要是做網(wǎng)絡(luò)方面的研究,到 2006 年的時(shí)候離開清華,進(jìn)入到工業(yè)界,首先做了六年的用戶產(chǎn)品研發(fā),之后在 2012 年加入百度,一直做網(wǎng)絡(luò)基礎(chǔ)架構(gòu)相關(guān)的開發(fā)工作,主要是對(duì)內(nèi)服務(wù),在運(yùn)維部和系統(tǒng)部,做 BFE 平臺(tái)研發(fā)。2020 年 6 月份轉(zhuǎn)入對(duì)外服務(wù),現(xiàn)在在做 BFE 商業(yè)化推廣。2018 年 1 月到 2021 年 10 月份,兼任百度公司代碼規(guī)范委員會(huì)主席。
接下來的內(nèi)容主要分為三個(gè)部分,都是在圍繞工程能力。第一,說明清楚為什么要重視工程能力;第二,闡述什么是工程能力;第三,說一下怎么來提高工程能力。
為什么要提升工程能力
這個(gè)話題這兩年受到很大的關(guān)注,和現(xiàn)在形勢(shì)變化有很大關(guān)系,第一個(gè)很重要的形勢(shì)是業(yè)界競(jìng)爭(zhēng)加劇了,很多所謂藍(lán)?;蛘叻浅?瞻椎念I(lǐng)域已經(jīng)不存在了,大家都在同一個(gè)領(lǐng)域競(jìng)爭(zhēng),競(jìng)爭(zhēng)非常激烈;成本已經(jīng)發(fā)生了巨大的上漲,現(xiàn)在中國軟件工程師成本與美國相比,差距沒有那么大,據(jù)之前的交流,中國軟件工程師的成本已經(jīng)超過英國,跟美國已經(jīng)沒有太大的差距了;產(chǎn)業(yè)升級(jí),之前互聯(lián)網(wǎng)公司大部分做的是 ToC 互聯(lián)網(wǎng),現(xiàn)在很多公司都轉(zhuǎn)向 ToB,轉(zhuǎn)向 ToB 對(duì)軟件研發(fā)或者工程能力的要求,已經(jīng)有了非常大的變化。
另外也發(fā)現(xiàn)一些現(xiàn)象,現(xiàn)在很多互聯(lián)網(wǎng)公司加班加點(diǎn)。在去年還出現(xiàn)了 996.ICU,圈外人不知道什么意思,圈內(nèi)人都知道,每天 9 點(diǎn)上班,9 點(diǎn)下班,一周工作 6 天,最后累到進(jìn)入 ICU 重癥監(jiān)護(hù)室。今年我們也發(fā)現(xiàn)有一些變化,很多公司開始響應(yīng)國家號(hào)召,減少工作時(shí)間,盡量避免 6 天工作制。但是減少時(shí)間之后,我們?cè)撛趺礃颖WC工作產(chǎn)出?這其實(shí)要依賴我們的工程能力。
我還觀察到的現(xiàn)象,很多的從業(yè)者寫了很長(zhǎng)時(shí)間的代碼,甚至 8-10 年以上,但是很多的方法都是錯(cuò)的,換句話說,軟件工程師是一個(gè)所謂的青春飯,為什么?其實(shí)跟從業(yè)者的素質(zhì)是有關(guān)系的。所以以上的形式,要求我們中國的軟件工程師,也需要更新迭代。
《經(jīng)濟(jì)新動(dòng)能》一書討論的是中國經(jīng)濟(jì)如何進(jìn)行轉(zhuǎn)型升級(jí)。在這種大潮流下,IT 從業(yè)者或者中國軟件工程師也要考慮這個(gè)問題,就是這四個(gè)字“轉(zhuǎn)型升級(jí)”。
什么是工程能力
很多人認(rèn)識(shí)到要提升工程能力,但是提升什么能力呢?如果沒有正確的認(rèn)識(shí),可能也無從下手。有些人會(huì)認(rèn)為工程能力就是寫好代碼。確實(shí)我們很多軟件工程師每天關(guān)注的或者平時(shí)學(xué)習(xí)的東西,僅僅是寫代碼。
但是我今天重點(diǎn)想表達(dá)的觀念是,工程能力不僅僅是寫好代碼這么簡(jiǎn)單,也不是某一個(gè)人寫好代碼這么簡(jiǎn)單,它反映的是團(tuán)隊(duì)的綜合素質(zhì)。軟件工程師大多是理工科畢業(yè),感覺人文學(xué)科對(duì)軟件工作似乎是沒有太大的幫助,但我經(jīng)過這 20 多年軟件研發(fā)之后,深刻體會(huì)到做工程不僅僅是自然科學(xué),也是人文社會(huì)科學(xué)。所以對(duì)于從業(yè)者來說是需要關(guān)注那些非技術(shù)的方方面面,而且你會(huì)發(fā)現(xiàn)在你工作的大量時(shí)間中,并不是用在琢磨技術(shù)上,很多時(shí)間可能是涉及到溝通等非技術(shù)因素,對(duì)我們影響非常非常大,還有包括項(xiàng)目管理,這些看上去和技術(shù)并沒有直接關(guān)系,但是對(duì)研發(fā)項(xiàng)目,或者工程能力影響是巨大的。
工程能力的定義來自《百度軟件工程能力定義》,這是百度內(nèi)部的文件,寫于 2019 年底,當(dāng)時(shí)要提升工程能力,需要有文件闡述到底什么是工程能力。最后我們寫了這樣的一句話:使用系統(tǒng)化的方法,在保證質(zhì)量的前提下,更高效率為客戶和用戶持續(xù)交付有價(jià)值的軟件或服務(wù)的能力。這句話可以拆解為以下五個(gè)要點(diǎn),第一是研發(fā)的目的是要提供價(jià)值,第二是質(zhì)量第一,第三是要實(shí)現(xiàn)價(jià)值持續(xù)交付,第四要使用系統(tǒng)化和科學(xué)的方法,第五是持續(xù)提升研發(fā)效率。
軟件研發(fā)的目的是要提供價(jià)值
業(yè)界中的現(xiàn)象是,很多從事軟件研發(fā)的同學(xué),比較習(xí)慣從技術(shù)角度來考慮問題,比較喜歡研究復(fù)雜的技術(shù),技術(shù)簡(jiǎn)單覺得沒有意思,沒有興趣去搞。這就造成我們花了大量的精力搞了很復(fù)雜的技術(shù),但是做出來對(duì)社會(huì)沒有價(jià)值。所以這里面也寫了一下我的觀點(diǎn),我們?cè)诠ぷ髦兴褂玫氖侄危夹g(shù)設(shè)計(jì)、編寫代碼等技術(shù)只是手段,而不是目的。所以我們不要因?yàn)樵谧龅倪^程當(dāng)中,使用太多的手段,而忘記我們的目的。
在軟件項(xiàng)目規(guī)劃階段,需要從客戶需求或商業(yè)價(jià)值角度考慮,而不是你寫完整后再考慮這個(gè)問題。另外,要建立成本意識(shí),我們要考慮投入產(chǎn)出比,要做一個(gè)項(xiàng)目應(yīng)該是有收益,而不是最后獲得收益比成本還要小,那就虧本了。這是剛才說的第一點(diǎn),軟件要能夠提供價(jià)值。
質(zhì)量第一
這一點(diǎn)也經(jīng)常被忽視,在項(xiàng)目緊急的時(shí)候,就在時(shí)間和質(zhì)量之間進(jìn)行權(quán)衡和取舍,犧牲質(zhì)量,降低對(duì)質(zhì)量的要求。那么在《軟件開發(fā)的 201 個(gè)原則》里面對(duì)質(zhì)量也有所討論,第一條講到質(zhì)量第一。作者是這樣說的,無論如何定義質(zhì)量,客戶都不會(huì)容忍低質(zhì)量的產(chǎn)品。即使質(zhì)量差,也按時(shí)交付產(chǎn)品,這似乎是政治正確的行為,但這是短視的。從中長(zhǎng)期來看,這樣做是自殺。質(zhì)量必須放在首位,沒有可權(quán)衡的余地,說的非常明確。我們拿這條來衡量我們現(xiàn)實(shí)當(dāng)中工作,會(huì)發(fā)現(xiàn)很多團(tuán)隊(duì)其實(shí)都是在做這樣的事情。
那我們?cè)撛趺醋瞿??第一,?duì)所有的項(xiàng)目,首先需要明確定義質(zhì)量的要求,質(zhì)量并不是絕對(duì)的,在各個(gè)場(chǎng)景下可能質(zhì)量要求有所不同。所以我們到底做到什么樣的質(zhì)量,這是需要在項(xiàng)目初期定義清楚。第二,在質(zhì)量方面不能妥協(xié)。前面提到我們的軟件要交付提供價(jià)值,如果是低質(zhì)量的軟件無法提供價(jià)值,整個(gè)研發(fā)活動(dòng)就變得沒有意義了。第三點(diǎn),我們也需要平衡質(zhì)量和交付時(shí)間的關(guān)系,不是降低質(zhì)量,要提高技術(shù)水平,通過技術(shù)手段更高效率、更低成本的保障質(zhì)量,比如說我們可以用自動(dòng)回歸方法,甚至用 AI 方法,用這些高技術(shù)來保證質(zhì)量。第四,高質(zhì)量的軟件一定是設(shè)計(jì)出來的,而不是靠后邊測(cè)試、運(yùn)維保證的,這些都已經(jīng)很晚了。所以我們?cè)谠O(shè)計(jì)階段,就應(yīng)該保證軟件設(shè)計(jì)的質(zhì)量,這是非常關(guān)鍵的。
實(shí)現(xiàn)軟件價(jià)值的持續(xù)交付
觀察到很多現(xiàn)象,即項(xiàng)目執(zhí)行過程當(dāng)中的前緊后松狀態(tài),前邊非常投入,花了很多資源,等軟件研發(fā)出來之后,后邊軟件沒有人關(guān)注了,會(huì)發(fā)現(xiàn)設(shè)計(jì)文檔腐爛、代碼沒有人維護(hù)。原因是我們沒有對(duì)軟件整個(gè)生命周期與價(jià)值輸出有清晰的認(rèn)識(shí),我們只做了短期準(zhǔn)備,我們覺得軟件開發(fā)完就結(jié)束了。所以第一點(diǎn)要提升認(rèn)識(shí),認(rèn)識(shí)到軟件開發(fā)與維護(hù)都是長(zhǎng)周期的,一個(gè)軟件甚至可以運(yùn)行 10、20 年。在這樣的認(rèn)識(shí)基礎(chǔ)上,需要綜合考慮全周期的研發(fā)成本問題,而不是只考慮開始的時(shí)候很快的,最后成本非常高。要做好長(zhǎng)期維護(hù)的準(zhǔn)備,而且要持續(xù)進(jìn)行改進(jìn),一個(gè)軟件是逐步通過長(zhǎng)期迭代、長(zhǎng)期優(yōu)化產(chǎn)生出來的。
這一點(diǎn)也非常非常重要。我們可以看到的現(xiàn)象是什么?在中國軟件很多從業(yè)者是缺乏對(duì)軟件開發(fā)方法的深入學(xué)習(xí)。我曾經(jīng)做過調(diào)研,很多從業(yè)者看過真正的軟件工程的書籍,不超過兩本,甚至有些人沒看過,比如說我看到一些列表,某個(gè)語言的用法,比如說某些網(wǎng)絡(luò)知識(shí),這些都不是專業(yè)的軟件工程的書籍,我們可以看到在中國軟件復(fù)用比例是非常之低的。所以這一點(diǎn)我們首先要認(rèn)識(shí)到,軟件工程本身是一個(gè)非常專業(yè)的方向,軟件誕生已經(jīng)超過半世紀(jì),這些方法甚至在上世紀(jì) 90 年代已經(jīng)出現(xiàn)很多成熟的方法,但是非常遺憾的是中國很多從業(yè)者,對(duì)這些方法都還沒有充分的掌握。另外,我們也要基于現(xiàn)在優(yōu)秀的基礎(chǔ)設(shè)施高速迭代,現(xiàn)在出現(xiàn)了像云原生思想,包括很多設(shè)施已經(jīng)云化,這些對(duì)我們是非常有幫助的。還有軟件復(fù)用能力,建立可復(fù)用的軟件。
使用系統(tǒng)化和科學(xué)的方法
是否使用科學(xué)的方法,效率差距是非常大的,可能差 10 倍、100 倍,甚至從零到一,你用這些正規(guī)方法,有些軟件就可以搞定,如果你沒有掌握系統(tǒng)科學(xué)的方法,這樣復(fù)雜度的軟件你可能根本搞不定。所以掌握科學(xué)方法,對(duì)我們駕馭大型軟件是非常重要的。
談到系統(tǒng)科學(xué)方法,我引申一下,我們需要堅(jiān)持軟件開發(fā)的原則,很多從業(yè)者在現(xiàn)實(shí)中,我發(fā)現(xiàn)很容易屈服于各種外部力量,比如說一個(gè)領(lǐng)導(dǎo)怎么怎么說,或者說他的需求方怎么怎么說,或者周圍人怎么怎么說,就很容易做出很扭曲的行為。這個(gè)原因是什么呢?我思考一下,因?yàn)楹芏鄰臉I(yè)者并不知道軟件研發(fā)的基本原則,一個(gè)人當(dāng)他心里沒有原則的時(shí)候很容易屈服于外界壓力,所以我們需要堅(jiān)持軟件開發(fā)的原則。
這里講到什么是原則,原則是工作的準(zhǔn)則,而且它代表了很多的集體智慧。在《軟件的 201 原則》里提到了很多重要的原則,我們這兒列了一下,比如說質(zhì)量第一,先確定問題,再寫需求,沒有文檔的設(shè)計(jì)不是設(shè)計(jì)。像這樣的原則都非常重要,但是你仔細(xì)想,在現(xiàn)實(shí)工作當(dāng)中很多團(tuán)隊(duì)、很多人在工作當(dāng)中,不斷的打破這些原則,這恰恰是造成我們工作非常低效重要的原因。這里面我寫了:沒有原則就會(huì)隨意妥協(xié),結(jié)果就是低效、低質(zhì)的工作。
這也是百度這些同學(xué)為什么在過去兩年很努力在推這本書《軟件開發(fā) 201 個(gè)原則》,這是 1995 年出版的非常經(jīng)典的軟件工程書籍,這里面提到很多重要的原則,這本書上個(gè)月已經(jīng)正式出版,我們發(fā)現(xiàn)很多開發(fā)者對(duì)這本書評(píng)價(jià)非常高。但是我也看到很多人對(duì)這些原則嗤之以鼻,甚至看不懂,有些人對(duì)這本書評(píng)價(jià)非常低,這一點(diǎn)是非常令人痛心,明明不知道這些原則,當(dāng)把這些原則告訴他的時(shí)候也沒有任何感覺,這一點(diǎn)我是非常遺憾的。
持續(xù)提升研發(fā)效率
研發(fā)效率絕對(duì)不是一天可以見成的,甚至永無止境。發(fā)現(xiàn)很多管理者對(duì)業(yè)務(wù)目標(biāo)非常關(guān)注,但是對(duì)軟件研發(fā)的能力并沒有持續(xù)關(guān)注。這是一個(gè)非常大的誤區(qū)。所以提升效率、提升人效,應(yīng)該是一個(gè)軟件研發(fā)團(tuán)隊(duì)一直需要追求的目標(biāo),應(yīng)該去想一想我們今天是怎么做軟件的,一年兩年之后,我們?cè)趺茨軌蚋玫淖鲕浖瑫?huì)有什么變化。
軟件工程能力提升,該怎么做?
在百度的軟件工程能力定義里,工程能力的素質(zhì)中的個(gè)人能力素質(zhì),包括團(tuán)隊(duì)的能力素質(zhì),以及公司的能力素質(zhì)。個(gè)人能力素質(zhì)包括需求的把握、系統(tǒng)設(shè)計(jì),這兩個(gè)主要是關(guān)于前面的設(shè)計(jì)階段。編碼能力、項(xiàng)目管理,還有運(yùn)維能力,這是軟件后期上線運(yùn)維,以及產(chǎn)品意識(shí)、客戶服務(wù)意識(shí)、安全意識(shí)、質(zhì)量意識(shí),還有溝通能力。對(duì)一個(gè)個(gè)體來說,這些是非常重要的工程能力。
這里想強(qiáng)調(diào)一點(diǎn),對(duì)于工程能力來說,人是根本。我認(rèn)為人的要素是最為關(guān)鍵的。這里面有一個(gè)說法,為什么使用同樣工具的人,為什么你的效率只有別人的 N 分之一。而且對(duì)一個(gè)優(yōu)秀的人來說,他只使用一般的工具,他工作的產(chǎn)出會(huì)遠(yuǎn)遠(yuǎn)超過一般的人使用優(yōu)秀的工具。還有一個(gè)很重要的趨勢(shì)是什么呢?小規(guī)模優(yōu)秀工程師團(tuán)隊(duì),要遠(yuǎn)遠(yuǎn)超過大規(guī)模一般工程師團(tuán)隊(duì)。這是為什么呢?因?yàn)閷?duì)一個(gè)大的團(tuán)隊(duì)來說,溝通成本是非常高的,團(tuán)隊(duì)內(nèi)溝通成本是隨著人的數(shù)量呈指數(shù)級(jí)上升。所以這方面由于現(xiàn)在軟件工具提升,包括各種云平臺(tái)的出現(xiàn),實(shí)際上把效能變的更大了,一個(gè)小的團(tuán)隊(duì)可以做非常非常多的事情。
對(duì)于一個(gè)優(yōu)秀產(chǎn)品,一定是來自于優(yōu)秀的人與團(tuán)隊(duì)的,一定不是來自一個(gè)一般的團(tuán)隊(duì)。我也曾經(jīng)講過,軟件是人類智慧的結(jié)晶,優(yōu)秀的智慧結(jié)晶一定是來自優(yōu)秀的人與團(tuán)隊(duì)。所以我的建議是軟件研發(fā)主管或者 Leader,多投一些精力培養(yǎng)團(tuán)隊(duì)成員。
從個(gè)人素質(zhì)來講,我經(jīng)常簡(jiǎn)化為三點(diǎn):代碼、文檔、項(xiàng)目管理。這三者當(dāng)中的排序,我個(gè)人認(rèn)為項(xiàng)目管理是高于文檔、高于代碼,這可能跟很多人的認(rèn)識(shí)會(huì)不一樣,很多工程師認(rèn)為代碼是最重要,90%甚至 95%以上的軟件工程師是忽視項(xiàng)目管理的,沒有掌握正規(guī)的方法。
首先從代碼說起,要求非常清楚,要能寫出讓別人很容易看懂的代碼,這個(gè)要求好像非常低,但是其實(shí)很多人是做不到的。這里面我引用的是 Python 的非常好的一句話,第一句話是優(yōu)美比丑陋好,你的顯示比隱示更好。其實(shí) Python 語言,很多人沒有關(guān)注到這里面講到的東西,所以我們代碼應(yīng)該是寫的要盡量簡(jiǎn)單、盡量?jī)?yōu)美,要盡量使用簡(jiǎn)單的方法。
所以寫好代碼方法也很簡(jiǎn)單,我這邊列了五點(diǎn):
第一,合理的模塊劃分。很多同學(xué)模塊劃分有很嚴(yán)重的問題,導(dǎo)致未來軟件維護(hù)非常困難,也非常難以復(fù)用。
第二,清晰的函數(shù)定義。別看函數(shù)這么簡(jiǎn)單,我發(fā)現(xiàn)很多同學(xué)對(duì)函數(shù)語義定義并不清楚。
第三,短小清晰的代碼段落。如果我們想想很多同學(xué)寫出的代碼幾百行沒有任何一行空行、注釋。
第四,準(zhǔn)確的命名,強(qiáng)調(diào)一下,漂亮代碼要具備一定的語文基礎(chǔ),寫代碼和寫文章一樣。
第五,清晰的注釋,確實(shí)應(yīng)該講很多人的代碼里面,幾乎看不到任何一行注釋。
此外,認(rèn)真的代碼評(píng)審,是提升代碼質(zhì)量最好的方法,同時(shí)也是傳播編程方法最好的方法。但是非常遺憾,在中國互聯(lián)網(wǎng)行業(yè)還有很多團(tuán)隊(duì)沒有真正執(zhí)行代碼評(píng)審。
真正的軟件工程師在軟件上的追求:差一個(gè)空格都不行。我們離這個(gè)目標(biāo)還很遠(yuǎn)。
工程能力提升的第二點(diǎn):文檔
我們需要大家重視文檔,文檔的忽視確實(shí)受到了所謂“敏捷”運(yùn)動(dòng)的影響,因?yàn)楹芏嗳藢?duì)敏捷有錯(cuò)誤的認(rèn)識(shí),似乎很多人的概念里,敏捷就是不寫文檔。但是我今年確實(shí)對(duì)敏捷做了一些研究,敏捷運(yùn)動(dòng)當(dāng)時(shí)的起源是應(yīng)對(duì)上世紀(jì) 80 年代或者是 90 年代非常重視文檔要求,做一個(gè)項(xiàng)目要寫非常非常多文檔,文檔已經(jīng)成為工作的負(fù)載。所以敏捷思想提出要少寫一點(diǎn)文檔,是說少寫一點(diǎn),而不是不寫,不知道在中國怎么傳成敏捷就是不寫項(xiàng)目文檔。
在《軟件開發(fā) 2.0》的書里面明確提出,沒有文檔的設(shè)計(jì),不是設(shè)計(jì)。所以現(xiàn)實(shí)當(dāng)中很多軟件工程師沒有做設(shè)計(jì),直接就是撲上去寫代碼,這件事情是非?;闹嚨?,在其他行業(yè)都會(huì)去寫設(shè)計(jì)文檔,再投入生產(chǎn),而在我們這個(gè)行業(yè),都沒有寫任何文檔,就做完了,開始編碼,所以這件事情非常荒謬。
另外一個(gè)角度大家要認(rèn)識(shí)到為什么要寫好項(xiàng)目文檔,因?yàn)樵谡麄€(gè)項(xiàng)目過程當(dāng)中我們有超過 50%的時(shí)間是用來溝通的,所以溝通效率會(huì)極大影響研發(fā)的效率。文檔的目的是什么呢?我認(rèn)為,第一點(diǎn)提升溝通的效率,通過一個(gè)清晰的文檔,可以極大提升溝通效率。第二是提升對(duì)思考過程的管理。你在整個(gè)設(shè)計(jì)過程當(dāng)中,我們把文檔作為一種設(shè)計(jì)工具,用來整理思想。
所以從這個(gè)角度出發(fā),我們很多人關(guān)于文檔是作為最后存檔方式的一種認(rèn)識(shí),是非常錯(cuò)誤的。這里面我寫了兩句話,第一,不會(huì)寫文檔就等于你不會(huì)做設(shè)計(jì)。第二,不會(huì)寫文檔就無法成為高級(jí)工程師。所以很多人的天花板是非常明確,可能寫了 8-10 年的代碼,但是你不會(huì)寫文檔,所以至今仍然無法躍升成為高級(jí)軟件工程師。
怎么才能寫好文檔?第一,用戶思維。比如說寫需求文檔,要從用戶角度想問題,而不是從內(nèi)部實(shí)踐角度。第二,準(zhǔn)確的概念定義。這跟剛才講代碼命名有一點(diǎn)類似,命名代表了概念,在文檔里面也同樣面臨著概念的問題。第三,要有清晰準(zhǔn)確的邏輯,這一點(diǎn)也非常重要。第四,可能大家一般沒有關(guān)注到,就是規(guī)范的表達(dá)方式。無論是用文字還是圖表,我確實(shí)在工作當(dāng)中會(huì)說,某某同學(xué)請(qǐng)你不要再使用你的方言。很多人確實(shí)沒有使用規(guī)范的方式,他用自己看懂的方式表達(dá),別人理解起來很困難。第五,一定要有研究和思考能力,我們?cè)诠ぷ鳟?dāng)中都在不知不覺做著研究,研究就是定義問題、分析問題、解決問題。第六,嚴(yán)謹(jǐn)科學(xué)態(tài)度,很多同學(xué)寫文檔有很多的問號(hào)、不清楚的地方都留下來,這樣的話保留之后進(jìn)入下一階段,這樣做的系統(tǒng)是經(jīng)不起歷史與時(shí)間的檢驗(yàn)。第七,要認(rèn)真和充分的設(shè)計(jì)評(píng)審,很多團(tuán)隊(duì)在代碼評(píng)審上做的不好,應(yīng)該在文檔評(píng)審上做的更差,很多文檔可能沒有人看,直接通過了。所以這里面現(xiàn)在是 7 點(diǎn),似乎好像很簡(jiǎn)單,如果能把這些做到,我們一定可以產(chǎn)出非常高質(zhì)量的項(xiàng)目文檔。
也推薦對(duì)大家提升文檔是有幫助的兩本書,第一《人人都是產(chǎn)品經(jīng)理 2.0》,如果想學(xué)怎么做需求分析,我建議看看這本書,即使你不是產(chǎn)品經(jīng)理。第二本是《金字塔原理——思考、理論和解決問題的邏輯》,也很不錯(cuò),大家可以看看這兩本書。
第三點(diǎn)要強(qiáng)調(diào)的,也是最高優(yōu)先級(jí)的重視項(xiàng)目管理。從我到工業(yè)界差不多 15 年時(shí)間,我認(rèn)為大量的團(tuán)隊(duì)忽視了項(xiàng)目管理,在《軟件開發(fā)的 2.0》里面提到一個(gè)觀點(diǎn),原則 127:好的管理比好的技術(shù)更重要。有再好的技術(shù),如果你管理的不好,這個(gè)項(xiàng)目也是要失敗的。這里面就會(huì)有一個(gè)大家經(jīng)常問到的問題,我不是管理者,也不是 Leader,為什么要做項(xiàng)目管理?從德魯克的觀點(diǎn)出發(fā),他提到我們現(xiàn)在這些人從事著這些行業(yè),其實(shí)都是知識(shí)工作者,每個(gè)知識(shí)工作者都是管理者,我們要站在這個(gè)角度上看問題。所以每個(gè)工程師其實(shí)都是管理者,要做好自己的管理。而且現(xiàn)實(shí)工作當(dāng)中你會(huì)發(fā)現(xiàn)很多項(xiàng)目是工程師在管理,他的經(jīng)理、Leader,這些細(xì)節(jié)都管不過來。而且從整個(gè)行業(yè)趨勢(shì)來看,高度自組織的小團(tuán)隊(duì)才是趨勢(shì)。大家可能記得我前面提到,由優(yōu)秀的人構(gòu)成小規(guī)模軟件工程團(tuán)隊(duì),遠(yuǎn)遠(yuǎn)高于大規(guī)模一般人構(gòu)成的團(tuán)隊(duì)。
好的項(xiàng)目管理來自:第一,了解項(xiàng)目管理的常識(shí)和原則;第二,實(shí)事求是的態(tài)度。我發(fā)現(xiàn)很多人在面臨項(xiàng)目問題的時(shí)候,采取回避,或者是隱瞞的態(tài)度,這不利于項(xiàng)目正常進(jìn)行。所以這里面非常強(qiáng)調(diào)我們要講真話,要敢于向外披露。
第三,需要對(duì)知識(shí)社會(huì)有正確的理解。知識(shí)社會(huì)的特征是什么,從權(quán)利為中心轉(zhuǎn)向以知識(shí)為中心,我們要尊重專業(yè)、自主管理,這些不是靠人能看住,即使可以看著人表面在工作,但沒有看住大腦。還有以人為中心,要摒棄大工業(yè)生產(chǎn)的思想,每個(gè)人都是螺絲釘,每個(gè)人都會(huì)被替代,這樣的思想是會(huì)被替代的。
這里面推薦兩本書,一個(gè)是德魯克《知識(shí)社會(huì)》,如果沒有知識(shí)社會(huì),我們不可能建立現(xiàn)在非常高效知識(shí)團(tuán)隊(duì)。第二本書是清華的《快速開發(fā)》,出版的非常早,但是非常好的一本書。
總結(jié)
我們的社會(huì)越來越被信息驅(qū)動(dòng),在信息社會(huì)里面軟件驅(qū)動(dòng)信息社會(huì),軟件研發(fā)是非常重要的。其次,軟件工程師的提升,對(duì)中國有巨大的意義,大家不要忽視自己的責(zé)任。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。