如何將生產(chǎn)力提高20倍?給新手程序員的入行建議
本文節(jié)選自《On Java 中文版 進(jìn)階卷》:https://weread.qq.com/web/reader/fe032450813ab69c2g012052

?
看來(lái)大家都已經(jīng)準(zhǔn)備好了,準(zhǔn)備好闖入這個(gè)真實(shí)的世界。這很像給一個(gè)人灌輸了關(guān)于英語(yǔ)的所有知識(shí),然后對(duì)他說(shuō)“出去寫(xiě)個(gè)好故事吧”,但學(xué)校能為你做的可能也就這么多了。更理論化的背景其實(shí)無(wú)濟(jì)于事。這并不是說(shuō)理論不好,你終究還是會(huì)需要一些的。我雖然很認(rèn)同諾門(mén)大學(xué)的教育理念,但仍然認(rèn)為在試圖理解事物背后的理論之前,知道如何去做會(huì)更有幫助——于我來(lái)說(shuō),理論需要更長(zhǎng)的時(shí)間才能掌握。在大腦慢慢理解它的時(shí)候,知道功能層面的信息會(huì)非常有用。
在學(xué)校能學(xué)到的東西就這么多,而且它們與你最終在工作中所做的事情也并不十分相關(guān)。因此,我打算給你提供點(diǎn)見(jiàn)解,來(lái)幫助你更好地進(jìn)入軟件開(kāi)發(fā)的真實(shí)世界,并緩解這種沖擊。
大學(xué)里的學(xué)習(xí)是非常結(jié)構(gòu)化的。我們甚至稱(chēng)其為一門(mén)科學(xué),它承諾世界上存在相同的結(jié)構(gòu)和活動(dòng)。更重要的是,你已經(jīng)開(kāi)始期待一定程度的成功了,就像你在課堂項(xiàng)目和任務(wù)中所經(jīng)歷的那樣。但真實(shí)世界并不會(huì)如你期望的那樣。
統(tǒng)計(jì)數(shù)據(jù)發(fā)人深?。?0%~80%的編程項(xiàng)目會(huì)失敗。這個(gè)范圍有些大,因?yàn)槿藗儾粫?huì)夸大自己的失敗,所以我們必須做些猜測(cè)。無(wú)論如何,這讓這個(gè)世界聽(tīng)起來(lái)很不可靠。工程項(xiàng)目的結(jié)果會(huì)好很多,主要是因?yàn)樗仨毷呛玫?。糟糕的軟件通常只?huì)惹惱人,但糟糕的工程會(huì)害死人。
一個(gè)更令人著迷的指標(biāo)是:5%程序員的生產(chǎn)力是其他95%程序員的20倍。如果這是一門(mén)科學(xué),就像它聲稱(chēng)的那樣,那么我們可以弄清楚如何讓每個(gè)人都達(dá)到相同的水平。
我們假設(shè)這遵循二八定律。大約80%的程序員不讀書(shū)、不參加會(huì)議、不繼續(xù)學(xué)習(xí),除了在大學(xué)學(xué)習(xí)的內(nèi)容之外,他們什么都不做。也許他們?cè)谝患掖蠊菊业搅艘环莨ぷ?,可以在那里一遍又一遍地做同樣的事情。另?0%的人在他們的職業(yè)生涯里掙扎:閱讀、嘗試學(xué)習(xí)、聽(tīng)播客、參加用戶組,有時(shí)還參加會(huì)議。這20%中的80%還不是很成功,他們還處于開(kāi)始階段,還在努力。這20%中的另外20%——大約5%程序員的生產(chǎn)力提高了20倍。
那么你如何能成為這神奇的5%中的一員呢?

?
這些人不是那些能記住所有動(dòng)作、手指在鍵盤(pán)上飛舞、發(fā)出系統(tǒng)命令的人。根據(jù)我的經(jīng)驗(yàn),這5%的人必須努力才能到達(dá)這個(gè)境界,必須努力才能留在這個(gè)境界,而關(guān)鍵就是不斷學(xué)習(xí)。
由于工作的性質(zhì),我遇到過(guò)非常多這樣的人。他們閱讀了很多書(shū),并且隨時(shí)準(zhǔn)備應(yīng)對(duì)看起來(lái)值得深入的新概念。我認(rèn)為,如果要參加會(huì)議,他們會(huì)非常挑剔。他們把大部分時(shí)間花在提高效率和解決問(wèn)題上。
這里最大的問(wèn)題是,要知道你正在追求將生產(chǎn)力提高20倍,這影響到你所做的一切。永遠(yuǎn)不要只是“暴力地實(shí)現(xiàn)某些東西”,而是使用可以得到的最好的工具、技術(shù)和想法。總是盡力而為。
更進(jìn)一步說(shuō),要明白突破點(diǎn)并不總是來(lái)自顯而易見(jiàn)的事情,或是我們被告知的內(nèi)容,或是關(guān)于怎么做才有效的普遍想法。能夠分析并理解情況,發(fā)現(xiàn)問(wèn)題的突破點(diǎn),才是必不可少的。為此,你需要清晰的頭腦和超然的視角。例如,選擇不同的編程語(yǔ)言有時(shí)會(huì)產(chǎn)生巨大的差異,但通常來(lái)說(shuō),這并不是很重要。盡管如此,比起可能產(chǎn)生更大實(shí)際影響的事情(例如架構(gòu)決策),人們還是會(huì)將所有時(shí)間都花在其他決定上。
因此,你必須不斷學(xué)習(xí)并自學(xué)新技術(shù),但這并不是那么簡(jiǎn)單。學(xué)習(xí)更多編程知識(shí)絕對(duì)是件好事,但你不能只學(xué)編程知識(shí)。例如,編程有兩個(gè)最大的痛點(diǎn)。
讀代碼的人比寫(xiě)代碼的人多。如果人們無(wú)法閱讀你的故事,他們就無(wú)法改進(jìn)或修復(fù)。不可讀的代碼會(huì)帶來(lái)真正的成本,我們稱(chēng)之為“技術(shù)債務(wù)”。
代碼審查是發(fā)現(xiàn)軟件缺陷最有效的方法,但我們通常“沒(méi)有時(shí)間”。
我們來(lái)自1和0的世界,愿意相信事物是確定的,相信對(duì)同一組輸入來(lái)說(shuō),每次都能獲得相同的輸出。我之所以知道這些,是因?yàn)樵诤荛L(zhǎng)一段時(shí)間內(nèi)自己也相信這一點(diǎn)。在還是一名物理本科生時(shí),我花了一些力氣才開(kāi)始——只是開(kāi)始——清醒過(guò)來(lái)。許多年后,在一個(gè)研討會(huì)上,一位與會(huì)者告訴了我這些年來(lái)我一直在學(xué)習(xí)的東西:
?
所有的模型都是錯(cuò)誤的。有些是有用的。
?
我們這個(gè)行業(yè)還很年輕,甚至可以說(shuō)很原始。真的,我們對(duì)什么有效知之甚少,總是覺(jué)得自己已經(jīng)找到了解決所有問(wèn)題的靈丹妙藥。結(jié)果就是,新想法出現(xiàn)、流行、對(duì)新問(wèn)題無(wú)能為力,然后不再受歡迎。我們不斷經(jīng)歷這個(gè)從繁榮到蕭條的輪回,每個(gè)輪回都會(huì)持續(xù)數(shù)年。不過(guò)有些想法似乎更具持久力。例如,敏捷方法中的許多想法似乎對(duì)生產(chǎn)力和質(zhì)量產(chǎn)生了一些真正的影響。這是因?yàn)樗鼈兏P(guān)注人們?cè)谝黄鸸ぷ鞯膯?wèn)題,而不是技術(shù)。

?
我從Gerald Weinberg那里學(xué)到了很多東西。他早期寫(xiě)過(guò)幾本關(guān)于編程技術(shù)的書(shū),后來(lái)轉(zhuǎn)行了,自己寫(xiě)過(guò)或與人合著了50多篇關(guān)于編程過(guò)程的文章。他最著名的一句話是“不管別人告訴你什么,這都是人的問(wèn)題”。
通常來(lái)說(shuō),決定項(xiàng)目成敗的是流程和人員:你日常是如何工作的,架構(gòu)師是誰(shuí),經(jīng)理是誰(shuí),你在編程團(tuán)隊(duì)中與誰(shuí)一起工作,你如何溝通,最重要的是你如何解決遇到的流程和人員問(wèn)題。如果你認(rèn)為這一切都與技術(shù)有關(guān),并相信其他方面的事情都是可以輕易克服的,那么很快就會(huì)陷入困境。那些“其他”方面的事情才是項(xiàng)目順利進(jìn)行的最大助力。
在第一份工作中,我看到很多經(jīng)理做出了愚蠢的決定,因此很自然地得出結(jié)論:經(jīng)理和管理層都是愚蠢的。這也是我們這個(gè)職業(yè)中普遍的觀點(diǎn):如果你沒(méi)有聰明到做技術(shù),那就做管理吧。隨著時(shí)間的推移,我慢慢了解到,管理工作并不愚蠢,只不過(guò)非常非常難,這就是我們?nèi)匀辉谧龀鲇薮罌Q定的原因。管理比技術(shù)困難得多,因?yàn)榍罢邘缀醪簧婕按_定性因素。管理全部要靠猜測(cè),所以如果沒(méi)有很好的直覺(jué),就可能會(huì)做出愚蠢的決定。
舉個(gè)例子,一些公司采取了這樣一種政策:在規(guī)定的一段時(shí)間結(jié)束后,每個(gè)團(tuán)隊(duì)都會(huì)得到評(píng)價(jià),最末的10%或20%的人會(huì)被解雇。作為對(duì)這一政策的回應(yīng),擁有優(yōu)秀團(tuán)隊(duì)的聰明經(jīng)理會(huì)額外雇用一些人,從而可以在不損害團(tuán)隊(duì)的情況下拋棄他們。這不是一種好政策。事實(shí)上,這個(gè)政策很侮辱人,會(huì)從內(nèi)部侵蝕公司的士氣。這是你在大學(xué)里沒(méi)有學(xué)到的東西之一,但也是你必須知道的,即使它似乎與編程沒(méi)有直接的關(guān)系。
還有一個(gè)例子:人們會(huì)問(wèn)你完成特定任務(wù)所需的最短時(shí)間。你會(huì)盡力猜測(cè),而他們則會(huì)假設(shè)你真的可以做到。對(duì)于這樣的估計(jì),你必須告訴他們:對(duì)于所有的估計(jì),你在這段時(shí)間內(nèi)實(shí)際完成的概率是0%,該猜測(cè)只是概率曲線的開(kāi)始。每個(gè)猜測(cè)都必然伴隨著這樣的概率曲線,因此所有概率的組合會(huì)產(chǎn)生一條真實(shí)的曲線,表明項(xiàng)目可能何時(shí)完成。你可以通過(guò)閱讀一本名為《與熊共舞 : 軟件項(xiàng)目風(fēng)險(xiǎn)管理》的小書(shū)來(lái)了解更多信息。

?
你需要關(guān)注經(jīng)濟(jì)學(xué)和商業(yè),而兩者都遠(yuǎn)非精確科學(xué)。在上下班途中聽(tīng)聽(tīng)音頻書(shū)和講座吧。你需要了解潛在的業(yè)務(wù)問(wèn)題,這樣才能發(fā)現(xiàn)自己公司的走勢(shì),并及早采取行動(dòng)。剛開(kāi)始工作的時(shí)候,我很不理解那些關(guān)注商業(yè)問(wèn)題的人——那是穿西裝的人要考慮的東西,并不是真正的技術(shù)。但是關(guān)注商業(yè)問(wèn)題的人才是聰明人。
播客是一個(gè)重要的信息來(lái)源。任何人都可以制作播客內(nèi)容,雖然其中很多質(zhì)量不高,但也有一些真正閃耀的寶石,特別是那些專(zhuān)門(mén)涵蓋專(zhuān)業(yè)話題的播客。我從這些播客中學(xué)到了很多東西,它們讓我與時(shí)俱進(jìn)(可以聽(tīng)一下我與James Ward的播客:Happy Path Programming)。
這是你在學(xué)校學(xué)不到的另一件事。商業(yè)世界和編程世界都以追逐流行而出名,它們都在追逐那些承諾將事情做得更好的時(shí)尚方法。簡(jiǎn)單的時(shí)尚方法很容易讓人看出荒謬之處,或者在短時(shí)間內(nèi)暴露無(wú)遺。另一些則比較難以讓人發(fā)現(xiàn)問(wèn)題,它們包含一些道理或真相,所以你無(wú)法迅速駁斥。有時(shí),你必須去偽存真,因此必須鍛煉批判性思維。
我曾經(jīng)看到一個(gè)食品袋上寫(xiě)著:“研究表明,每周至少與家人共進(jìn)5次晚餐的兒童和青少年,飲酒的可能性降低了50%。”它暗示的結(jié)論是,一起吃晚飯可以防止酗酒。一起吃晚飯是主導(dǎo)因素嗎?是否還有其他原因能導(dǎo)致人們回家吃飯并且遠(yuǎn)離酒精?
以下是許多人真誠(chéng)相信的事情。
公司不再需要盈利?,F(xiàn)在是新經(jīng)濟(jì)時(shí)代。
房地產(chǎn)總是上漲,即使工資沒(méi)有上漲。
大學(xué)必須有傳統(tǒng)校園,而不能是寫(xiě)字樓的形式。
當(dāng)你來(lái)自1和0的世界時(shí),情況就更難了。在那里,我們真的、真的很想相信一切都是確定的。比這更困難的是,你已經(jīng)知道簡(jiǎn)單添加開(kāi)發(fā)人員或擴(kuò)展系統(tǒng)都會(huì)改變系統(tǒng)的主導(dǎo)因素,而周?chē)拿總€(gè)人仍然認(rèn)為這一切都應(yīng)該是確定的。
有一本書(shū)用研究報(bào)告揭穿了有關(guān)管理人員和項(xiàng)目的錯(cuò)誤觀點(diǎn)。它碰巧是基于軟件的,但幾乎可以應(yīng)用于任何地方。這本書(shū)叫作《人件》。它小巧有趣,我向所有人推薦它。唉,它真的不是一本回答問(wèn)題的書(shū),它只是堅(jiān)定地摧毀了許多被廣為認(rèn)同的觀點(diǎn)——關(guān)于人們?nèi)绾卧诰幊滔嚓P(guān)的業(yè)務(wù)環(huán)境中工作。這本書(shū)最好的一點(diǎn)就是提醒你注意:接受一個(gè)錯(cuò)誤的想法并圍繞它建立一個(gè)糟糕的世界有多么容易。它可以幫助你提出問(wèn)題。
當(dāng)帶著從過(guò)去幾年學(xué)到的技術(shù)知識(shí)進(jìn)入新工作,再想起我今天告訴你的內(nèi)容時(shí),你很可能會(huì)覺(jué)得,公司里的每個(gè)人都愚蠢地做出了糟糕的決定。但是,我還要告訴你一條來(lái)自Gerald Weinberg的重要格言,它并沒(méi)有真正回答任何問(wèn)題,只是讓你理解發(fā)生了什么。他說(shuō):“事情之所以變成這樣,是因?yàn)樗鼈儽緛?lái)就是這樣的——走到現(xiàn)在的每一步都是合乎邏輯的。”這就是傳說(shuō)中的“溫水煮青蛙”(這是另一個(gè)誤解,青蛙實(shí)際上跳了出來(lái))。因此,從你全新的角度來(lái)看,事情可能很荒謬,但請(qǐng)記住,中間的每個(gè)決定,都是別人權(quán)衡問(wèn)題過(guò)后所選擇的當(dāng)時(shí)看起來(lái)最好的選項(xiàng)。這種觀點(diǎn)并不能解決任何問(wèn)題,但是可以讓你對(duì)被困住的人多一點(diǎn)兒同情。
你需要犯很多錯(cuò)誤才能把事情弄清楚。所以要謙虛,并不斷提出問(wèn)題。
