我?guī)У膶?shí)習(xí)生,轉(zhuǎn)正了!
你好呀,我是歪歪。
我最近帶了一個(gè)實(shí)習(xí)生。其實(shí)說(shuō)最近,也都整整三個(gè)月了,已經(jīng)在走轉(zhuǎn)正流程了。
還記得他來(lái)的時(shí)候,為了和他套個(gè)近乎,有一天聊完正事之后,和他拉了拉家常。
然后我說(shuō):在我們組里面,不必拘謹(jǐn),大家在平時(shí)溝通的時(shí)候也沒有上下級(jí)的關(guān)系,敞開心扉,不要有太多顧慮。我們的氛圍是很 open 的,多多溝通。其實(shí)你別看我長(zhǎng)的老,我年齡也不大,我 94 年的。對(duì)了,你哪一年的?
他答:2000年。

那一刻其實(shí)有沖擊到我。
因?yàn)槲殷@奇的發(fā)現(xiàn),原來(lái) 00 后也慢慢的走入職場(chǎng)了。
他們從我們 90 后手中接下“垮掉的一代”的接力棒后,馬上就要順利的把接力棒交接給 10 后了。
歲月如梭啊!
反饋和思考
他加入團(tuán)隊(duì)之后,遇到一個(gè)很好的契機(jī)是剛好那個(gè)時(shí)候接到一個(gè)新的需求,為了完成這個(gè)需求,我要從 0 開始搭建一個(gè)微服務(wù)。
我讓他從項(xiàng)目設(shè)計(jì)階段就參與了進(jìn)來(lái),最后跟到了項(xiàng)目上線。體驗(yàn)到了一個(gè)項(xiàng)目上線的全流程。
對(duì)他而言,是一個(gè)契機(jī)。
對(duì)我而言,其實(shí)算是一個(gè)挑戰(zhàn),因?yàn)檫@個(gè)項(xiàng)目的整體時(shí)間給的不算充裕,分配到開發(fā)環(huán)節(jié)那就是更加緊張了。為了保障進(jìn)度,當(dāng)時(shí)緊急從項(xiàng)目組里面抽調(diào)了另外兩位同事和我一起專門干這事,就這樣人力資源還是尤為緊張。任務(wù)進(jìn)度需要按天為單位進(jìn)行推進(jìn)。
領(lǐng)導(dǎo)問我:這個(gè)實(shí)習(xí)生你想怎么安排呢?
我說(shuō):讓他和我們一起開發(fā)這個(gè)項(xiàng)目吧,我來(lái)給他分配任務(wù),匯報(bào)開發(fā)資源的時(shí)候算半個(gè)人力投入。
其實(shí),我說(shuō)“半個(gè)”人力的時(shí)候,自己心里都在打鼓。因?yàn)樗⒉皇峭ㄟ^(guò)我面試進(jìn)來(lái)的,加入項(xiàng)目組大概一周多時(shí)間,我甚至都還沒見過(guò)他寫的代碼,不知道他的技術(shù)能力在什么水平。
但是從最終的結(jié)果上來(lái)看,其實(shí)他在項(xiàng)目里的交出的成績(jī)單是遠(yuǎn)大于半個(gè)人力的。
換句話說(shuō)就是:整體表現(xiàn)是超出預(yù)期的。
舉個(gè)例子。
我給他拆分一個(gè)任務(wù),講清楚需求背景之后,讓他去落地代碼。
他寫著寫著會(huì)發(fā)現(xiàn)某個(gè)地方是需求沒有考慮到的細(xì)節(jié)問題。
于是他會(huì)很快的反饋給我,同時(shí)帶著自己的解決方案,問這樣去實(shí)現(xiàn)可不可以。
帶著解決方案的問題反饋。
聽起來(lái)是一個(gè)很簡(jiǎn)單、再自然不過(guò)的事情,但是我發(fā)現(xiàn)在職場(chǎng)中越是新人做的越好。
而老油條們,包括我自己,其實(shí)很多時(shí)候都做的不夠好。會(huì)去拖、會(huì)去掩蓋、會(huì)覺得這其實(shí)也沒啥大毛病、會(huì)去自己找個(gè)想當(dāng)然的方案就改了...
但是我覺得這個(gè)簡(jiǎn)單的事情背后有好幾層邏輯。
第一層邏輯是:自己發(fā)現(xiàn)了問題。
能發(fā)現(xiàn)問題,至少說(shuō)明你對(duì)自己寫的這段代碼的背景有一定程度的了解。
只有在需求了解到位的基礎(chǔ)上,才能在落地環(huán)節(jié)自主的去發(fā)現(xiàn)問題。
這一層,一般來(lái)說(shuō)大家都可以做到。
第二層邏輯是:發(fā)現(xiàn)了問題,到底反不反饋?
不反饋其實(shí)從責(zé)任劃分的角度,就算出了問題,主要責(zé)任不在我呀,當(dāng)時(shí)提需求的時(shí)候就沒有考慮到這個(gè)問題。
反饋上去了,最后解決起來(lái),增加的是我的工作量。
到這一層,有些同學(xué)就會(huì)經(jīng)過(guò)激烈的思想斗爭(zhēng)后決定:時(shí)間來(lái)不及了,先就這樣吧。不反饋了,不是啥大問題。
千里之堤毀于蟻穴呀。
在項(xiàng)目里面小問題多了,是會(huì)出大問題的。
如果真的是很小的問題,哪怕你打個(gè) TODO 在那里標(biāo)識(shí)一下呢?防止自己以后也遺忘了。
其實(shí)大多數(shù)情況下,這樣的問題在測(cè)試環(huán)節(jié)也能被揪出來(lái)。
但是如果自己能預(yù)判到,為什么要延遲到測(cè)試環(huán)節(jié)才暴露出來(lái)呢?
或者說(shuō)經(jīng)過(guò)激烈的思想斗爭(zhēng)后決定:這個(gè)地方我知道怎么改,直接改了就行了,就不和別人商量了,懶得去反饋了。
這里其實(shí)就是大忌,很容易埋坑的。
比如就是一個(gè)字段你不知道從哪里取值,需求上也沒有明說(shuō)。但是你可以自己從某個(gè)地方取出來(lái),也可以由上游傳遞過(guò)來(lái)。
于是你決定自己去取就行了,不麻煩上游了。
因?yàn)閬?lái)源有兩處,哪怕在你寫代碼的當(dāng)時(shí)這兩處來(lái)源他們一定是強(qiáng)相等的,但是隨著系統(tǒng)的發(fā)展,也許會(huì)出現(xiàn)不一樣的情況,而當(dāng)這樣的情況出現(xiàn)的時(shí)候,這里就是坑。
也許到那個(gè)時(shí)候,你自己都忘記了,這個(gè)值是你去某個(gè)地方獲取的,而不是由上游傳遞下來(lái)的。
當(dāng)這真的出現(xiàn)問題的時(shí)候,你一查代碼:這是哪個(gè) sb 寫的代碼?為什么不讓上游傳遞進(jìn)來(lái)呢?
然后氣沖沖的一看歷史提交記錄,你就開始默不作聲了。

第三層邏輯是:反饋的時(shí)候帶著自己的解決方案。
在我看來(lái),主動(dòng)反饋是應(yīng)該必須要做到的事情。
至于能不能帶著解決方案,難說(shuō)。
因?yàn)橛械臅r(shí)候由于自己對(duì)于全局的把控不到位,確實(shí)是只能發(fā)現(xiàn)問題,不能解決問題。
所以,這一點(diǎn)對(duì)于新員工或者實(shí)習(xí)生來(lái)說(shuō)不能強(qiáng)求,但是能做到那便是最好不過(guò)的事情了。
比如這個(gè)實(shí)習(xí)生,每次來(lái)找我反饋問題的時(shí)候,說(shuō)完問題之后就會(huì)說(shuō)自己想到的方案,問能不能這樣做。
其實(shí)很多時(shí)候他給的方案并不好,比如他想根據(jù)某個(gè)返回值去做處理,而我覺得更好的方案應(yīng)該是基于數(shù)據(jù)的某個(gè)狀態(tài)去做,或者說(shuō)加個(gè)數(shù)據(jù)庫(kù)字段專門來(lái)干這事。
這樣更加符合程序設(shè)計(jì)的邏輯。
他給的方案不是不能用,是有更好的。
但是,這里面體現(xiàn)了他自己的進(jìn)一步思考。
而從實(shí)際情況來(lái)看,他也提出了很多很好的實(shí)現(xiàn)方案,被我采納了。
能帶著解決方案,說(shuō)明自己有更深一步的思考,挺好。
思考和反饋,不論是什么階段,都很重要。
我自己有時(shí)候都做的不夠好,但是我會(huì)這樣常常提醒并要求自己。

再舉個(gè)例子
再舉個(gè)關(guān)于反饋的小例子:
我給他分配完任務(wù)后,告訴他什么時(shí)候之前要做好。
在這期間,他會(huì)主動(dòng)告訴我自己做到什么進(jìn)度了。如果自己在預(yù)期時(shí)間之前做不完,他會(huì)提前告訴我困難是什么。
他這樣會(huì)讓我及時(shí)掌控到整個(gè)項(xiàng)目的進(jìn)度,讓我提前預(yù)防風(fēng)險(xiǎn)。
我之前也帶過(guò)工作過(guò)幾年的同事,有時(shí)候任務(wù)進(jìn)度滯后,都是由測(cè)試同學(xué)反饋上來(lái)的,會(huì)搞的我很被動(dòng)。
當(dāng)然我也應(yīng)該偶爾去主動(dòng)詢問進(jìn)度。
但是在我的邏輯里面:大多數(shù)情況下,你沒說(shuō),沒有找我協(xié)調(diào),那么我就認(rèn)為項(xiàng)目是按照正常的進(jìn)度在推進(jìn)的。
我覺得任務(wù)如果有風(fēng)險(xiǎn),提前幾天反饋,可是太重要的事情了,這應(yīng)該是基本的職業(yè)素養(yǎng)。
至于怎么去定義風(fēng)險(xiǎn)的低中高,從而拿出什么樣的姿態(tài)去應(yīng)對(duì),那就是另外一項(xiàng)本事了。
同時(shí)在整個(gè)項(xiàng)目開發(fā)的過(guò)程中,其實(shí)我是不斷在給他施壓的,在有來(lái)有回的試探中,我也知道了他的能力還是不錯(cuò),有很強(qiáng)的執(zhí)行力。
所以,在這個(gè)項(xiàng)目完成之后,緊接著的另外一個(gè)項(xiàng)目中,我給了他一坨關(guān)鍵節(jié)點(diǎn)上的開發(fā)任務(wù),并告訴了他這個(gè)開發(fā)任務(wù)在整個(gè)調(diào)用鏈路上的關(guān)鍵意義。
從目前的開發(fā)進(jìn)度上看,他完成的還是很不錯(cuò)的。
老實(shí)說(shuō),最開始的時(shí)候我就是給他分配了一些“臟活累活”,因?yàn)檫@些事情必須有人做。
做為一個(gè)新人或者實(shí)習(xí)生,即使你有翻天的本領(lǐng),在我不知道你能力到底如何的情況下,只能從這些簡(jiǎn)單的活兒開始試探。
如果要說(shuō)說(shuō)不足之處的話,那就是他最終拿出來(lái)的代碼,從功能上來(lái)說(shuō)是可以用的。
但是從代碼分層、代碼規(guī)范、后續(xù)擴(kuò)展、編程習(xí)慣上來(lái)說(shuō),還是有所欠缺。
這些問題我從最開始就給他提出來(lái)了。
從現(xiàn)在他提交的代碼上看,有一定的進(jìn)步,但是還有很大的提升空間。
現(xiàn)在他可能還處于刻意模仿的階段,也許理解不了為什么代碼最后的架子是這樣的,反正項(xiàng)目里面就是這樣寫的。
由于他的代碼我每次都會(huì)重點(diǎn) review,其實(shí)每次 review 都會(huì)發(fā)現(xiàn)一些編碼結(jié)構(gòu)上的問題。
比如他可能會(huì)把一個(gè)接口中的對(duì)象一路傳遞到 dao 層里面去;比如他可能會(huì)在每次和數(shù)據(jù)庫(kù)交互的地方都寫一個(gè)新的 sql 去與之匹配,沒有考慮到復(fù)用性;比如他會(huì)把非常多的邏輯都放到同一個(gè)方法里面...
我覺得對(duì)于剛剛走進(jìn)工作崗位的學(xué)生來(lái)說(shuō),這是一個(gè)必然的過(guò)程,他們從自己的 Demo 級(jí)別的代碼,轉(zhuǎn)變?yōu)閷憣?shí)際工程級(jí)別的代碼,勢(shì)必需要一個(gè)適應(yīng)和磨礪的過(guò)程,這個(gè)事情不是一蹴而就的,就是在反復(fù)的開發(fā)實(shí)踐中錘煉出來(lái)的東西。
能意識(shí)到這個(gè)問題,并加以練習(xí)和克服,就是成長(zhǎng)。
而我發(fā)現(xiàn)他刻意模仿,是看到了他也會(huì)用一個(gè)大的 try-catch 把整個(gè)代碼塊包裹起來(lái),而他早期提交的代碼并不是這樣的。
我自己有時(shí)候偷懶,會(huì)用一個(gè)大的 try-catch 把整個(gè)代碼塊包裹起來(lái)。其實(shí)這樣寫出來(lái)的代碼好用,但是不優(yōu)雅,也不推薦。
異常應(yīng)該就在需要捕獲的地方捕獲就行,整個(gè)方法包裹起來(lái),是一種取巧的方案,說(shuō)明你對(duì)自己寫的代碼的異常分析沒有絕對(duì)的到位,企圖用一種粗暴的方式來(lái)兜底。
這樣不好,不好。
所以發(fā)現(xiàn)這個(gè)問題后我也和他及時(shí)溝通了,同時(shí)也對(duì)自己提出了更高的要求。
在編碼上不能偷懶。不能把一些壞習(xí)慣傳遞下去。
所以我開始慢慢意識(shí)到,這不僅是一個(gè)帶新人的過(guò)程,還是一個(gè)嚴(yán)于律己的好機(jī)會(huì)。
哦,對(duì)了。
我去參加他的轉(zhuǎn)正答辯會(huì)的時(shí)候才知道,還有一個(gè)導(dǎo)師拉票的環(huán)節(jié)。
于是我在手機(jī)便簽里面匆匆記錄了幾點(diǎn):

傳遞
在我的職業(yè)生涯中,我遇到過(guò)的每一個(gè)團(tuán)隊(duì)和每一個(gè)團(tuán)隊(duì)里面的“導(dǎo)師”,對(duì)我都非常的好,他們竭盡所能的把自己掌握的好的東西分享給我。
所以我也希望把這一份好的東西一直傳遞下去。
猶記得我當(dāng)年實(shí)習(xí)的時(shí)候,前端傳進(jìn)來(lái)一個(gè)字段,要最終落到數(shù)據(jù)庫(kù)里面去,中間涉及到好幾層之間的幾個(gè)對(duì)象的轉(zhuǎn)換,我硬是弄了好幾個(gè)鐘頭都沒有弄好。
帶我的同事坐在我的旁邊,音樂時(shí)不時(shí)的從他的耳機(jī)里面?zhèn)鞒鰜?lái)。在當(dāng)下那個(gè)焦急的情緒下,一絲絲的音樂都讓我覺得煩躁。
于是我給他說(shuō):能不能先把音樂關(guān)了?
他聽出了我的異樣,把音樂關(guān)了,然后說(shuō):是不是遇到什么棘手的問題了?
最后還是他手把手教我怎么解決這個(gè)問題。
后來(lái)有一次吃飯我給他說(shuō)起了這個(gè)事:我說(shuō)我覺得那個(gè)時(shí)候的自己好差勁啊,這么簡(jiǎn)單的事情搞了好幾個(gè)小時(shí)都沒搞定,最后還得你出馬。
他說(shuō):我并不覺得你差勁,而且我也不怕你差勁。我怕的是,你自己吭哧吭哧的搞,搞不定了還不問我。你不問我,我就不知道怎么幫你。有些事情,是你能力范圍外的事情,你再怎么使勁,也很難看到收益。有些事情,是你能力范圍內(nèi)的事情,你應(yīng)該會(huì)而不會(huì)的事情,那你應(yīng)該去精進(jìn)自己的技能。難的是你怎么去清晰的識(shí)別出這些問題。比如你說(shuō)的這事,你應(yīng)該也知道,就是屬于你應(yīng)該會(huì)而不會(huì)的事情,那么你就應(yīng)該去提升自己的相關(guān)技能。你也去做了,現(xiàn)在的你再次遇到那個(gè)問題,應(yīng)該很快就解決了。這就是成長(zhǎng)。
我?guī)н^(guò)實(shí)習(xí)生,也帶過(guò)工作年限比我高的人。
這一行不像是一些老手藝,需要有人傳承,一代一代的教。
但是這個(gè)行業(yè)里面有前人總結(jié)出來(lái)的一些好的東西,應(yīng)該傳遞出去。
好了,就寫到這里吧。
最后說(shuō)一句
好了,看到了這里了,轉(zhuǎn)發(fā)、在看、點(diǎn)贊隨便安排一個(gè)吧,要是你都安排上我也不介意。寫文章很累的,需要一點(diǎn)正反饋。
給各位讀者朋友們磕一個(gè)了:

本文已收錄自個(gè)人博客,歡迎大家來(lái)玩。點(diǎn)擊[閱讀原文]即可直達(dá)。
https://www.whywhy.vip/
推薦???:勸退別人學(xué)計(jì)算機(jī)的人,都是王八蛋。
推薦???:絕了啊!無(wú)數(shù)網(wǎng)友正在曝光他們公司這事...
推薦???:CompletableFuture其實(shí)也就這么回事。
推薦???:不就是搭個(gè)博客嗎?其實(shí)很簡(jiǎn)單的...
推薦???:送你一個(gè)并發(fā)編程的奇淫巧技,舒服的很...
··································
你好呀,我是歪歪。一個(gè)主要敲代碼,經(jīng)常懟文章,偶爾拍視頻的成都人。
我沒有進(jìn)過(guò)一線大廠,沒創(chuàng)過(guò)業(yè),沒寫過(guò)書,沒進(jìn)過(guò)大廠,也不是技術(shù)專家,也沒有什么亮眼的title。
當(dāng)年以超過(guò)二本線 13 分的優(yōu)異成績(jī)順利進(jìn)入某二本院校計(jì)算機(jī)專業(yè),誤打誤撞,進(jìn)入了程序員的行列,開始了運(yùn)氣爆棚的程序員之路。
說(shuō)起程序員之路還是有點(diǎn)意思,可以看看。點(diǎn)擊藍(lán)字,查看我的程序員之路
