寫下這個題目,再看看自己的履歷,自己覺得自己還遠不夠格做一個好的mentor。
從2015-07自己剛畢業(yè),也是一個RD新人,到現(xiàn)在的工作經(jīng)歷也不過1年零9個月。有幸在老大的有意栽培下,在最近一個季度(3個月)里帶了一名新人。
話說這位新人雖然是本科生,但是工作時間跟我是差不多的。之前在一個小的做在線旅行的創(chuàng)業(yè)公司工作,據(jù)說也是進步飛快。自己還是有點怵,因為自己也是資歷尚淺。
這里就談談什么是一個好的RD新人,還有我的一些看法。因為我的資歷尚淺,所以這個只是第一版,希望這個也可以成為一個系列。
優(yōu)秀工程師的必備素質(zhì)subset
首先,我自己還遠遠不是一個優(yōu)秀的軟件工程師,這個是我的目標,所以這里只能談一些粗淺的見解:
- 自我學習能力 這個我放到第一位,是因為,互聯(lián)網(wǎng)或者說軟件編程是一個發(fā)展太快的行業(yè),還有無數(shù)的新人涌入。自我學習能力能夠保持自己的視野、知識架構和思維方法論的更新。突出自我是因為,天朝的教育過于重視考試,導致許多學生往往精于How而不一定能夠搞的明白What和Why。而后兩者往往卻又非常地重要。自我學習,需要自己設定目標,設定計劃,保持動力。
- 解決問題的能力 從一開始局部的技術問題、技術難點,到宏觀的服務架構,再到背后的業(yè)務流程、產(chǎn)品愿景。你必須要成為一個合格的Problems Solver。這個往往是核心的競爭力之一。
- 管理能力 對自我來說,這是一個需求、任務并行執(zhí)行的時代,需要按照重要性優(yōu)先級做好任務管理。還需要對負責的項目的進度、目標、里程碑、規(guī)劃有深入的思考與管理。
- 溝通能力 溝通能力體現(xiàn)在很多方面,在現(xiàn)代軟件工程中,上古大神solo的神技越來越少,需要團隊合作。有合作就需要有溝通。
- 責任心 一個優(yōu)秀的工程師必然是一個負責任的工程師,這個是毋庸置疑的。
那么對于一個剛起步的軟件工程師,一個好的新人應該是什么樣的?
看他對軟件開發(fā)的動機與熱情
這個可能是一個容易爭議的話題。一個是這個問題很虛,很難衡量。一個是是否有必要?
我不能否認的是,即使不熱愛軟件開發(fā),也可以在這一行干得不錯。現(xiàn)代的軟件開發(fā)需要的軟素質(zhì)越來越多,團隊合作、任務管理,還有對業(yè)務、產(chǎn)品的理解等方面突出的能力都能成為你的核心競爭力。
或許這是一種必然的趨勢,軟件開發(fā)原來最hardcore的部分會慢慢被自動化,最不容易被機器替代的是那些涉及到人與人之間的技能。
不妄議未來,只有對軟件開發(fā)的熱愛,才會有足夠的動機成為一個優(yōu)秀的軟件開發(fā)工程師,才會有耐心與恒心去解決那些tricky的bug;去為了1%的性能優(yōu)化反復對比測試觀察數(shù)據(jù);去為了解決了一個問題、攻克了設計問題而從椅子上跳了起來。也是因為它,你永遠想要了解新的技術能夠解決什么問題,保持好奇心。
解決問題的能力、思維能力也在這些反復的枯燥的case中反復磨練出來。動機與熱情是你前進的『發(fā)動機』。
如何衡量?可以關心在他的項目經(jīng)歷里,有沒有他親自解決的重大的bug、問題跟進?他如何去面對困難?他是否為其的解決而興奮?
他有沒有博客?有沒有github?業(yè)余時間有沒有為技術提升投入時間與精力?有沒有個人成長的計劃?
看他如何看待責任
新人會逐漸地參與到開發(fā),甚至開始負責一些小的模塊、功能、項目。這意味著『責任』。責任心是一個
責任包括什么?包括但不限于以下幾點。
代碼質(zhì)量和魯棒性
在我剛開始帶新人時,在code review時,常常因為代碼里的一些潛在的bug隱患去comment要求改正。新人往往會拿出一些理由,比如,我在測試時觀察數(shù)據(jù),不會有這種情況。這時候,會有一些爭論,因為測試只是抽樣測試,肉眼觀察一些日志輸出,你沒看到不代表不存在,現(xiàn)在不存在不代表以后不存在。這些潛在的bug改起來非常容易,卻能屏蔽掉可能的問題,是投入產(chǎn)出比很高的事情。
而新人有時候會以PM的deadline和緊急程度,本質(zhì)上還有自己不想返工修改再測試的懶惰為由,選擇性忽視。
這和責任有什么關系呢?
既然是負責的項目/模塊/任務,它的正確性、健壯性就是你的成果。任何任務的成果都不單單是完成功能這么簡單。在真實的場景中,壓力測試、正確性測試、代碼可維護性、可讀性都是結果的衡量指標。一個好的工程師需要在這個多維的衡量指標和自己投入的時間/精力中尋求一個良好的平衡和妥協(xié)點。
如果一個新功能在延期和帶著不確定的質(zhì)量與問題上線間選擇,在大部分情況下,延期保證質(zhì)量都是一個正確的、負責任的選擇。
這也適用于代碼質(zhì)量。
應對線上問題
在線上出現(xiàn)問題的時候,尤其是自己負責的項目,能否在所能的情況下,擔當起責任?還是說,一下班,一到周末,便消失蹤影?
在我剛開始開始進入到新的反爬項目組的時候,代碼還非常不熟悉,那個周末我還和老婆去了江蘇鹽城看她的閨蜜。奈何項目初期階段加上爬蟲猖獗,在她朋友家里硬生生加了兩天的班。
當然不是要求新人必須時時刻刻掛念自己負責的項目。
主人翁意識
對整個項目,是否有主人翁意識,主動思考系統(tǒng)存在的問題,需要優(yōu)化的點,可以提高的地方,不合理的地方,去與mentor討論,而這些可能在他的職責之外。
好的新人不會被組織架構、任務安排的界限限制住自己的思考與洞察。
看他如何應對問題
對新人來說,一次性地要求他解決遇到的問題,或許是為難他。但是,如果遇到問題就直接拋到StackOverflow(或者其他社區(qū))或者他的mentor那里,也是不負責任的。
我們常說,遇到問題,先明確問題的定義、目標,再問google/StackOverflow,結合這些信息重新審視問題,最后帶著思考去問mentor/去社區(qū)提問。
那么需要帶著什么去問mentor/社區(qū)提問?關于這個,How to Ask Questions the Smart Way這篇文章有詳細的解答,簡單來說,你需要整理清楚:
- 你遇到了什么問題?情景是什么?
- 為了解決問題,做了哪些嘗試?結果是什么?
- 對問題的可能原因,有哪些猜測?
- 出問題之前,對出問題的系統(tǒng)有哪些可能相關聯(lián)的改動?
- 解決問題的人如何能夠復現(xiàn)這個問題?
帶著你的思考與中間性質(zhì)的推論去問問題,能夠讓被提問者有更多的把握解決問題,同時覺得,這個問題對于他自己也是有價值的。
一個優(yōu)秀的程序員不會覺得幫助別人解決問題會耽誤他的時間。如果是一個高質(zhì)量的問題,他們反而會覺得興奮。但是,如果你拿著一個新出爐的問題,在他僅僅google了一下就給出答案后,明顯會影響你的『形象』。
關于這一點,對于mentor來講,還需要關注幾點。
- 我們都知道模仿是學習編程方法與編程技術的最佳手段之一。復制、修改、模仿經(jīng)常會出現(xiàn)在新人甚至老人的代碼中。但是新人可能只是在模仿,并沒有對于被模仿的代碼、技術、設計有更加深入的理解,只是為了解決問題而做。這樣模仿就失去了它最大的潛在價值。
- 在解決完一個問題后,新人是否會對問題進行記錄、反思。我個人的體驗是,當你覺得你解決了這個問題,在review、記錄這個問題,或者和別人討論這個問題時,往往自己就會意識到之前理解有所疏漏,有所誤解,或者還沒有透。記錄、討論、復盤,都是我們在rebuild、建立索引,這個過程往往會激發(fā)新的靈感,新的理解,所以,我會強調(diào),記錄/復述你遇到的問題和問題解決過程,及時反思自己的解決問題的思維過程。好記性不如爛筆頭。
- 許多問題,通過溝通與職責認定,可以交給更合適的人去做;還有,許多問題,能否通過溝通找到合適的人幫助一起解決?我自己在工作中常常摸不著頭腦,是因為在和錯誤的人溝通。在老大將正確的相關人加入到溝通后,溝通才取得了更大的進展。
以上,是我的淺薄之見,歡迎大家參與討論。日后,如果能夠更多的機會,也會分享更多的想法。