aaron stannard是新創公司markedup的ceo,他最近花費大量時間僱傭、評估很多不同的程式設計師,並和他們一起協作。在這個過程中他發現並總結了十種程式設計師無法意識到自己潛力的原因,意在讓更多程式設計師發掘出自己的潛力,從而成為強大的程式設計師。
aaron提到,他的公司中所使用的技術非常複雜,某些大型企業都很難掌握,所以對於想要加入團隊的程式設計師來說,入門門檻非常高。因此,儘管他們非常仔細地僱傭新人,但還是很難找到足夠天才的程式設計師。於是,他總結出十種阻礙程式設計師職業生涯發展的行為,並據此來幫助想要提公升自身的平凡的程式設計師們。
1. 太害怕學不會新的工具、語言和框架
一般的程式設計師會墨守他們最喜歡的工具,而不希望學習新的,因為他們認為,離開了那些語言和工具,多年的經驗就會付諸東流。而強大的程式設計師會擁抱那些挑戰和機會,積極地學習新的工作方式。
2. 直到特性「完成」的時候才會提交。(但永遠都不會完成!)
他在markedup公司中把這種行為叫做「囤積提交(commit hoarding)」。有些程式設計師沒有足夠的信心來承受團隊中其他成員的批評和審查,因此會把自己的工作藏起來,直到「完成」狀態才提交。
這種開發者會損害團隊中其他人員的生產力,因為團隊看不到他每天的成果,而且他也不會在正常開發的過程中尋求幫助,這樣就會造成很多「最後一分鐘」的缺陷,從而讓交付延遲。而強大的程式設計師會知道,**並不是他們自己,因此會把**經常自信地呈現在其他團隊成員的眼前,獲得批評和建議。
3. 只是「知其然」會很危險
在這裡aaron舉了微軟最近在c# 5.0中引入的async和await關鍵字為例,這兩個關鍵字會讓建立和管理非同步呼叫變得很容易,但是也會造成上下文切換、對共享資源進行多執行緒訪問的成本,僅僅對此有基本了解的程式設計師會盲目地使用這些特性,把所有i/o呼叫都封裝成c#中的task物件,這會建立出危險的、不可**的而且非常難以測試的**。
好的開發者不僅「知其然」,而且會了解為什麼這麼做以及應該在什麼樣的條件下使用。
4. 分析癱瘓(analysis paralysis)
分析癱瘓是指在程式開發初期進行系統分析,常因為太過執著於控制所有可能的變化和意外,而造成大量時間的浪費,裹足不前。這是一種很經典的問題,會影響很多一般的程式設計師。它通常是由過度分析造成的,但是aaron認為其根本原因在於不敢做出壞的決定。一般的程式設計師會擔心犯錯,只想一次成功。
而強大的程式設計師不會害怕,他們會編寫很爛的**,對其進行單元測試,如果認為無法達到目的,就會在45分鐘之內把它拋棄。強大的程式設計師會積極地限制用來研究的時間,因為他們知道那是個陷阱——看起來是有效的,但經常都無效。
5. 沒有對工具和開發過程投入
如果你想要成為天才程式設計師,那麼就需要投入時間提公升技能和知識,而將你和普通的**工人區分開來的是快速編寫出生產級別**的能力。你可以同時擁有好的**和速度,但是你需要先對你用於構建的過程投入。
一般的程式設計師不會對工具、過程和環境投入,只會使用大量的時間學習新的語言特性和api如何工作,但那並不會改變什麼。
通常,你作為程式設計師所能夠做出的最大改進並不是專注於你所編寫的**,而是優化你編寫**的過程。
6. 羞於請求幫助
一般的程式設計師羞於或者不想讓人知道自己不懂,所以他們裝作什麼都知道,但這樣就有可能提交某種非常可怕的**到庫中。說「我不知道怎麼做。」沒什麼錯,強大的程式設計師知道這一點,所以當被問題難住的時候就會請求幫助。
7. 不知道如何讓其他程式設計師更容易使用你的**
在所有技術團隊中,工作很重要的一部分就是人員的並行(human parallelism),也就是多個人能夠同時對同一**庫工作的能力。但是對於團隊來說,能夠非同步工作也很重要,當你不在的時候我可以修改你的**,反之亦然。
一般的開發者並不這麼認為,他們會開始對一項任務編寫**,認為他們會永遠擁有這段**。而強大的開發者會知道技術債務的說法,從而試圖通過設計**來對其限制,讓它盡可能可維護和自解釋。
編寫可讀的**需要程式設計師改變他們的看法——你的**要比你在組織中存在的時間長。
8. 不知道如何閱讀其他人的**(或者不想讀)
當一位一般程式設計師看到用他所不熟悉的語言或框架編寫的**庫時,就想立刻重寫,而不考慮業務價值或者推向市場的時間。而強大的程式設計師會接受這樣的觀點,重寫所導致的業務成本通常是不可接受的,所以應該避免這種行為。他們會試圖坐在計算機前,理解、學習然後修改現有的**。
閱讀**要比編寫**還難,但是強大的程式設計師會投入時間來學習如何超越。
9. 不能從終端使用者的角度編碼(你考慮的範圍太狹窄)
有句話說得好:作為程式設計師,你的工作不是解決技術問題,你之所以解決技術問題,是為了解決業務問題。
一般的程式設計師只會陷在技術問題之中,而不知道最初是為什麼要解決這個問題。更嚴重的是,一般程式設計師無法從頭開始建立出具有業務價值的東西。當被要求基於簡單的使用者設計新特性的時候,他們會死板地、照著字面對故事或者說明書做出解釋,這樣交付的產品使用者根本無法使用。因為他們不會考慮相關的用例;不會考慮終端使用者的體驗;並且在做面向使用者的內容時,設計都會很笨重。這導致他們無法編寫業務應用,只能做產品。
好的程式設計師會從終端使用者的角度來看他們的**。我怎樣才能讓它更輕鬆地解決使用者的問題呢?故事的文字內容之外有哪些方面會讓這個特性給使用者帶來更多收益呢?
10. 無法判斷任何程式設計任務的業務價值
強大的程式設計師能夠自我管理,對選擇如何投入時間做出很好的業務決定,他們會問這樣的問題:這是我現在應該做的最有價值的事情嗎?我應該為之投入多少時間?離交付日期有兩個星期,我現在能做什麼,從而更容易滿足那個日期呢?
一般的程式設計師不會,他們只會拿著說明書,然後盲目地實現,直到結束,不關心他們的工作和公司的業務目標有什麼關係,以及對其他團隊和業務組會產生什麼樣的影響。這樣,他們就會在業務價值很低的技術任務上浪費大量開發時間。
aaron在最後做出總結:如果你想要成為更好的程式設計師,那麼就要從改變你看待**以及編碼的方式開始。你需要理解所編寫的每行**背後的業務成本;你需要從客戶或者終端使用者的角度來看待工作;你需要接受**會比你在組織中存在的時間更長,所以要以其他開發者能夠繼承的方式來設計;最重要的,永遠都不要害怕新的挑戰,也不要害怕請求幫助,你無法獨居一隅來提公升工作效果,軟體開發也是社會化的工作。
upyun.com是國內領先的雲服務提供商,專注於提供靜態檔案的雲儲存、雲處理和cdn加速服務。現在註冊,即可免費體驗!
程式設計師的十種級別
第一級 神人,天資過人而又是技術狂熱者同時還擁有過人的商業頭腦,遠矚,技術過人,大器也。如丁磊,求伯君。第二級 高人,有天賦,技術過人但沒有過人的商業頭腦,通常此類人不是頂尖黑客就是技術總監之流。第 牛人,技術精湛,熟悉行業知識,敢於創新,有自己的公司和軟體產品。第四級 工頭,技術精湛,有領導團隊的...
程式設計師的十種級別
第一級 神人,天資過人而又是技術狂熱者同時還擁有過人的商業頭腦,遠矚,技術過人,大器也。如丁磊,求伯君。第二級 高人,有天賦,技術過人但沒有過人的商業頭腦,通常此類人不 是頂尖黑客就是技術總監之流。第 牛人,技術精湛,熟悉行業知識,敢於創新,有自己的公司和軟 件產品。第四級 工頭,技術精湛,有領導團...
程式設計師的十種級別
第一級 神人,天資過人而又是技術狂熱者同時還擁有過人的商業頭腦,遠矚,技術過人,大器也。如 丁磊,求伯君。第二級 高人,有天賦,技術過人但沒有過人的商業頭腦,通常此類人不是頂尖黑客就是技術總監之流。第 牛人,技術精湛,熟悉行業知識,敢於創新,有自己的公司和軟體產品。第四級 工頭,技術精湛,有領導團隊...