15年開發(fā)經驗的外國大??偨Y,想提升10倍效率,要做好3件事
本文作者 Matt Watson 已經寫了超過 15 年的代碼,也由此總結出了提升 10 倍效率的三件事。Matt 表示,一個 10 倍效率的開發(fā)人員很快就知道了他們需要做什么,要問什么問題,什么時候不問問題,并且是掌握事件優(yōu)先級別的高手。以下為譯文:
幾乎每個軟件開發(fā)人員或程序員都見過其他人編寫的代碼,說明了“任何人都可以編碼”。但你有沒有遇到過所謂的神話般的“10倍效率的開發(fā)人員”?作為一個10倍效率的開發(fā)人員,在編寫代碼方面做得很少, 更多的是知道要寫什么代碼。
我們許多人開始編程的時候都有特定的目的。比如,我開始編程的時候,是讓我能在睡覺和在學校的時候自動玩那個文字版的MUD游戲。我那時候是個寫腳本的13歲小孩,甚至不知道什么是編程。
當我們?yōu)槠渌碎_發(fā)軟件時就變得很困難,因為我們常常缺乏相同類型的動機和興奮感,而它們驅使我們追求自己的愿望。我們沒有自己的想法,而是花幾個小時在會議中嘗試了解這些想法,然后我們大部分時間都在修改別人的代碼 ,或者提交自己的代碼。這導致一定程度的隔閡,進而降低了生產率。
要成為一名10倍效率的開發(fā)人員,你必須學會在這種環(huán)境中脫穎而出,甚至創(chuàng)立自己的公司來領導這項工作。
任何人都可以是一個10倍效率的開發(fā)人員,至少在每一天的某個時刻。
提升10倍效率的3件事
要成為一名10倍效率的開發(fā)人員,你需要幾年的工作經驗,無論使用哪種編程語言和工具集。你必須善于解決問題和編寫代碼:這當然是必須的。
重要的是你要明白,如何編寫代碼并不能讓你成為10倍效率的開發(fā)人員,10倍效率的工程師,10倍效率的程序員,或其他任何你想要的名字。
你知道5W:“誰(Who),什么(What),在哪里(Where),為什么(Why),什么時候(When)”。雖然這些都適用于軟件開發(fā),我想關注那三個定義了10倍效率的開發(fā)人員的特點。
這三項把普通開發(fā)人員與10倍效率的開發(fā)人員區(qū)別開來:是什么(What),為什么(Why),知道什么時候(When)做什么。
是什么(What)
在企業(yè)界,開發(fā)人員經常從事他們不太感興趣和不理解的項目。對于大多數開發(fā)人員來說,這不是一個大問題,只要他們收到了很明確的任務說明,并且也得到了清晰的需求。
問題是開發(fā)人員通常沒有很好理解需求。相反,我們使用一種叫做 “敏捷開發(fā)” 的東西。我們收到一個任務,上面有幾個字,并指望我們自己去理解到底需要做什么。
軟件開發(fā)最重要的就是溝通。我們開發(fā)人員需要知道在做什么,試圖解決什么問題,以及到底需要什么樣的結果。我們知道的越多,就可以更快的完成。最重要的是,知道工作的目的是工作成功的關鍵。
水平差的開發(fā)者會在一個項目的錯誤方向上花幾個小時,而不問任何問題。他們就是我所說的 -10倍效率的開發(fā)人員,因為他們一事無成,浪費了所有同事的時間。幾乎每個人都遇到過這些開發(fā)人員,與他們一起工作會讓人感到沮喪。你一定要小心,不要養(yǎng)成這樣的習慣!
有些開發(fā)人員即使沒有很多細節(jié)也能很好地工作。他們有創(chuàng)造力,并提出正確的問題。這些人可能是10倍效率的開發(fā)人員。他們知道如何解決問題,并經常提升整個團隊的水平。
最重要的是,10倍效率的開發(fā)人員真的很擅長快速地確定需要完成什么和問什么問題。
理解為什么(Why)
也許軟件開發(fā)的***障礙就是理解為什么。如果你不明白你要解決的問題,那就很難解決了。
為什么我在睡覺和上學的時候把幾個終端腳本放在一起玩MUD游戲?當然是我想在比賽中達到***級別。我清楚地知道為什么,我盡我所能來實現目標。
同樣的方法也適用于任何軟件開發(fā)項目。了解他們所在的垂直行業(yè)和他們試圖解決的問題將會使開發(fā)人員更有效率。了解為什么和理解垂直行業(yè)也有助于防止不必要的工作,騰出時間專注于那些會使產品或功能對用戶更有價值的事情。
問題是知道為什么還不夠。作為一個真正的10倍效率的開發(fā)人員,你必須對這個問題重視,并從里到外地了解它。我相信,大多數10倍效率的開發(fā)人員本質上也是產品人,具有良好的產品愿景。
知道什么時候(When)該做什么
時間對于軟件開發(fā)項目非常重要。確定項目任務的處理順序看似容易,但卻非常關鍵。你的工作可以幫助公司獲取一個新客戶或者或清理掉舊的技術債務?
作為開發(fā)團隊,我們必須不斷地選擇我們要做什么和什么時候做。
所有軟件開發(fā)工作項目都屬于以下三類:
-
我們必須做的事情
-
我們需要做的事情
-
我們想要做的事情
我們必須為客戶完成新功能。我們需要修復軟件中的 bug。我們想減少些技術債務或開發(fā)一些酷的新產品功能。這些都需要平衡取舍。
我們應該同時開展所有三個維度的工作項目。我們不能把所有的時間都花在技術上,但也許我們應該花一小部分時間在這上面。
開發(fā)人員還必須知道何時在其代碼中構建復雜的體系結構。我寧愿保持代碼盡可能簡潔,直到不添加架構就會死的時候我才會重構代碼。
開發(fā)者也必須知道什么時候避免追逐時髦的東西。他們傾向于使用新的工具和技術,但是這些東西可能只會減慢一個項目,而不是更快地完成它。
10倍效率的開發(fā)人員擅長于優(yōu)先級排序,并了解何時將時間投入到架構中,而不是使用一坨意大利面條般的代碼來實現某種工作。請記住,你的用戶并不關心你的軟件是如何工作的,也不管該架構有多花哨,他們只想它能解決問題。10倍效率的開發(fā)人員應該知道這一點。
是什么(What),為什么(Why),什么時候(When),這三件事如何做好?
現在讓我們來談談成為10倍效率的開發(fā)人員的重要技能:掌握是什么(What),為什么(Why),什么時候(When)。
從為什么(Why)開始
成為10倍效率的開發(fā)人員的***步是對你要解決的軟件和問題變得充滿熱情,你需要從里到外完全理解它,這首先是要對你工作的公司及其使命充滿激情。
不要因為別人告訴你要寫一個按鈕(button),然后你就只寫一個按鈕,努力在更高層次上去理解為什么(Why)。如果你持續(xù)關注為什么,你對你的團隊和公司會有更大的價值。
做一個好的開發(fā)者和優(yōu)秀的問題解決者,而不僅僅是好的程序員。
我會把自己描述成一個黑客開發(fā)者。我是那種能很快把一些丑陋的代碼拼湊起來并解決幾乎任何問題的人。我的代碼不漂亮,但它能解決實際問題,這才是最重要的。
你不必編寫***的代碼與單元測試來成為一個10倍效率的開發(fā)人員。你需要知道什么時候要做和什么時候不做這些事情。
一個10倍效率的開發(fā)人員擅長解決特定的問題,并通過代碼滿足業(yè)務需求。你能做的最聰明的事情就是在你把項目交給其他人(他們更善于***敲定一些架構和其他一些細節(jié))之前就知道它能走多遠。
什么時候(When)做
知道什么時候要建立一個復雜的架構,而不是拼湊一些東西,需要經驗和你蜘蛛俠般的感官。你要么有這種感覺,要么你根本不知道。
我曾與一些最聰明的開發(fā)者共事過,他們總是很糟糕的優(yōu)先考慮模式和架構,而不是功能和排期。他們總是過度實現或者一遍遍重構,爭取 “***的代碼”,而不是 “可交付的代碼”。
10倍效率的開發(fā)人員必須利用他們的經驗和本能來知道什么時候要專注于架構和***,什么時候就是把事情搞定。
知道該做什么(What to Do)和該問什么(What to Ask)
許多軟件開發(fā)歸結于溝通技巧。可惜的是,在我們要工作的項目上許多注釋和要求都不是很詳細。一個10倍效率的開發(fā)人員知道如何閱讀這些,應用他們知道的業(yè)務里的 “為什么”,并提出相關的問題。
***的開發(fā)者知道在尋求幫助之前要在某件事情上花多少時間。他們也知道要問什么問題,以闡明需求來推進項目。
結論
我已經寫了超過15年的代碼??梢哉f我是一個10倍效率的開發(fā)人員,我知道我自己擅長什么,當我做我擅長的事情時,我可以很快地完成大量的工作。
如果你想做一個新產品的原型,我就是你要找的人。如果你需要尋求Angular,React或其他一些前端的幫助,我絕對不是你要找的家伙。在這些任務上我將是一個-10倍效率的開發(fā)人員。
10倍效率的開發(fā)人員不是一個神話,他們確實存在。他們很可能是開發(fā)經理、架構師、***開發(fā)人員或公司創(chuàng)始人。如果他們不是的話,他們應該轉變。我后來成為了公司的創(chuàng)始人,到現在為止是第2次了。
當然,沒有人能在每一天的每個時候都是一個10倍效率的開發(fā)人員。我們沒有精力或專注力每天以這樣的速度工作,因為我們不是機器人。
如果你理解軟件開發(fā)的 “是什么(What),為什么(Why),什么時候(When)”,你就可以是一個更有效率和更好的團隊成員,甚至是一個每天幾個小時內的10倍效率的開發(fā)人員。希望能給你和你的團隊帶來幫助。
Matt Watson(@mattwatson81)是Stackify的創(chuàng)始人和CEO。他有14年的.NET開發(fā)經驗,熱衷于幫助開發(fā)人員改進軟件。在編寫代碼或記錄博客之外,他會陪三個孩子玩耍。