軟體工程師如何帶好實習生?


前段時間剛帶幾個實習生,目前都已經找下了工作,offer都不錯,包括百度,微軟,滴滴等。幾個實習生離開的時候對我很感激,甚至湊錢給我買了禮物,而且即使在離開後找工作的過程,我們還保持頻繁溝通,交流找工作的心得。

總得來說,我沒有把實習生當實習生用,而是當正式員工來用,個人感覺這個立場很重要,否則你安排的工作就會不自覺的是些打雜的工作。但是實習生也有其特殊的一面,就是最終都會離開,而且隨時都會離開,因此我招的實習生明確約定最少實習3個月,半年最合適,每周工作3天,這樣才敢大膽的用。

即使如此,從法律角度來說,實習生還是可以隨時離開的,因此在安排工作的時候,雖然我不會避諱核心代碼的編寫,但實習生的代碼在開始我要給他們講設計,提交前我還會詳細的review,直到滿意才會允許提交。這樣達到了一個效果,一則實習生真正創造了生產力,二則通過前期的設計貫徹以及代碼review,實習生的工作和我自己的工作沒有區別。

除了工作之外,我還會和實習生交流些我一直以來的開發心得,可以分享兩點:

1.我把我這麼工作以來分類良好的技術文檔發送給了他們,包括前端,後端,資料庫,linux,大數據,nosql等。

2.離職前,用了一下午時間,我對他們做了一個應聘培訓,畢竟我也參與公司的招聘,對面試方的心理還是有所了解的。


帶不帶得好,主要還是看實習生自己。畢竟他想不想進步、願不願意聽進去、有努力讓自己變得更好地意願比一個好導師更重要。

在實習生可教化的前提下,下面這些建議可以參考下:

1 培養學生的自信心

這個最重要了,工作上很多事情都會有頭一次遇到,很有可能超出當前自己的能力範圍,對於有自信的人來說,即使自己遇到沒接觸過的工作,也有信心搞定,這樣才能在工作中獲得更多的肯定和機會。

建議:

  • 安排工作由簡入繁,自信心就是從搞定一個又一個問題積累起來的。
  • 多鼓勵、多誇獎,即使他做得不夠好,也要鼓勵和引導,給足耐心。

2 提升學生的工作能力

學習成績/能力不等於工作能力,比如眼高手低。

建議:

  • 平時溝通過程中讓其養成以目標為導向的意識,以我們作為導師在工作中的親身經歷來講,過程重要,但結果更重要,績效考核肯定是功勞大於苦勞。
  • 平時溝通過程中讓其養成及時彙報的習慣,特別是對於新人來講,在沒人引導情況下很容易走偏,及時溝通反饋自己目前的工作情況,一是可以及時知道他在做什麼,二是如果發現問題能夠及時糾正過來。

3 言傳身教,引導養成好習慣

好的工作習慣能夠讓人少走很多彎路,並且能夠規避很多坑。比如:

  • 每完成一個功能,驗證OK後及時提交代碼,避免一大堆代碼堆積後再上傳,不方便代碼審查和回溯,如果是多人並行開發還有可能給合併代碼帶來很大的工作量;
  • 提交測試前自己做驗證,避免出現低級問題,導致自己的信譽降低,並且影響工作效率;
  • 想清楚了再才編碼,避免做無用功或者寫低質量的代碼;
  • 遇到問題先思考,實在解決不了後再才考慮藉助身邊的資源和搜索引擎解決;
  • 主動彙報自己的工作情況;
  • 主動推動自己所負責的業務,避免工作進展緩慢,工作很久仍然對項目一知半解;
  • 不定期總結、反思,從教訓和經驗中獲得進步;
  • 對技術點要有深究其原理的精神;
  • 改bug後一定要驗證,避免改bug成了寫bug。


根據我間接帶實習生的經歷,我覺得

1. 你得清楚並且讓他清楚實習期間的主任務是什麼,最終期望的成果是什麼。(能否達到期望也是他能否轉正的關鍵。)

2. 接下來你可以幫他把任務細分到每個月或者每周,讓他知道分幾個階段,在不同時間點項目應該進展到哪一部分。

3. 然後就可以開始工作了。如果不熟悉項目需要的技術,開始2周可以給他熱身,給他項目會用到的技術文檔鏈接,各模塊有問題找誰問,布置一些練手的小任務。

4.接下來,就是每周一對一交流,有問題引導他解決。開始幾周忙一點,之後就好了。

以上經驗適合開始就有具體項目做的實習生,我實習的時候,最怕不知怎麼入手,不知道我要做什麼,不知道有問題問誰,所以反過來想,應該就是帶實習生的方法吧。


說一下自己當年做實習生的經歷

剛入職的時候什麼都不會,而我的導師又是一個性格很暴躁的人,每次給我布置任務就簡單幾句話,包括做需求也是這樣,大概告訴我有這麼個需求,然後就讓我幹活。但是做為一個新人,根本不知道有需求文檔這個東西,也不太會做需求分析,也不知道哪裡可能有坑,就這樣吭哧吭哧做,做完沒有自測,就讓測試給我們測,可想而知做出來之後有一大堆問題。

然後我導師就叼了我一頓。

當時壓力真的很大,一方面基礎比較差,做事比較慢也比較多問題,另一方面又要面對導師的指責。所以我覺得對實習生一定要耐心指導,包括明確目標,任務分解,需求分析,可能存在的問題等等,在他遇到問題來求教時耐心講解,甚至要主動去溝通了解新同學的疑惑,讓他儘快上路。

我還是覺得不管什麼工作,溝通都是最基本又是最重要的一項技能,做好這個就能更高效的解決問題。


在三個公司帶過實習生。以下都是個人體驗,不代表大家的做法或者推薦的做法,但是我帶過的所有實習生全部獲得轉正offer並且最終接受,所以應該還是做得不錯。

10年前的微創軟體:基本都是上海周邊比較好學校的學生,本科,進來後做培訓,講大課,然後一帶四做項目,一直到畢業了轉正繼續做。一般就是提早半年甚至一年入職的員工。

微軟:基本都是美國不錯學校的學生,本科或碩士。3個月。也遇到過一次冬天,悉尼來的。每次都是來前2周老闆說我們有個實習生來,誰帶一下?主要的任務是想出不錯的項目並且指導完成,不需要是正在做的東西,而且貌似也很少會用上實習生寫的代碼。

Google:美國不錯學校的學生,本科或碩士。3個月。提前半年想好一個項目提交並需要Director審批,然後開始做招聘,從內部系統中已經技術面試過濾過的候選人選一些電話半小時了解背景介紹項目,雙方都覺得好的話就發offer。實習生來之前自己還得參加法律方面的培訓,因為來了之後直接report給自己,等於就是他/她的經理。提交代碼時是以相同標準review的。

所以要帶好實習生,在不同的公司要求是不同的。

10年前的微創軟體:作為lead,帶著大家做,把實習生當作經驗稍差的新員工。有空的時候一起去吃一頓。大家嘻嘻哈哈打成一片,幹活時都賣力就好。

微軟:平時有什麼探索類的想法記下來自己不要做,等夏天。然後和組裡其他人搶一下(有的時候不用)。真的做起來就是按部就班,反正就是解決個可行性問題,最終真的能做也是自己重新做的。

Google:從項目本身到人的管理再到設計評審代碼提交都一手包辦,還特別要注意一些法律上的東西(比如不能和自己的實習生date之類的)。當然做完之後的成果也是挺大的。

雖然各個公司的做法和流程都不一樣,但目標都是相同的:

1. 用至少3個月的時間來觀察實習生是否可以在公司里成功。

2. 如果上一個答案是肯定的,展現公司的魅力讓其願意留下來。從這一點上來說,10年前的微創軟體和Google都很容易,基本不需要特別注意。而微軟相對來說要難一些。


我覺得帶實習生還是應該以合作共事的心態去對待。一要讓其完成對應工作又不對團隊帶來較大培養成本,二讓也讓他也開心有成長。這樣雙贏,皆大歡喜。

流程上,

1,明確工作計劃,傳達工作目標,拆分到月、周的級別,前兩周拆分到日。

2,建立反饋渠道,一般可通過日報、單雙周周溝通形式。

內容安排上,

1,由簡入繁,一開始安排邊緣不緊急不重要的活兒給他,判斷其技術水準和形式風格,便於安排後續節奏。有的技術紮實穩重好奇心重,可堪大任,後續可逐步加大難度。有的功底尚淺做事馬虎態度消極,這樣後續就不用放更重要的任務了。

2,謹慎控制他的許可權,不要一開始就讓他touch線上,特別是重要系統,一定是你確認他有獨立做事能力之後才允許。否則容易搞出故障。

3,除非靠譜實力強,別安排獨立項目給他做,否則要花大量時間陪他完成整個項目周期。

管理上,

1,多鼓勵他嘗試一些在學校應用不了的技術,拓寬視野,建立工作成就感。

2,多肯定其工作成果,不要透露不屑的態度,建立其自信。

3,多親手和他一起解決問題,只有一起共事才會真的有團隊感,只會指揮的老闆不是好老闆。


最重要的事情是在實習真正開始之前就決定了。一個是 project 規劃,一個是招人。

Project 規劃。Project 方面,一般是準備一個 isolated 的問題。除非是 returning intern, 對已有的 infra 的dependency 要盡量少,不然大部分時間花在理清楚 dependency 上了。另外留意會不會有 authorization 的問題,不要 intern 來了才發現這個也不能 access 那個也不能 access. 規劃方面,至少安排好前6周的 timeline(如果是12周的 internship )。後面的根據 internship 性質,可以安排一些 exploration 或者 follow up 工作。要考慮到 Intern 可能比你的期待值上下浮動很多。。。

招人問題,這個估計每個人的 priority 不一樣。我的經驗是首先要聰明,其次要hard working 和 cooperative,最後考慮 skill set。我以前覺得 skill set match 最重要,後來發現人的素質比 skill set 重要太多。比如遇到每天摸魚的,講個東西半天理解不了的,溝通不能的,聽不進意見的,真是被氣死。。。

目前還沒有完全摸索出招人的招數。Skill set 最容易看。聰明不聰明看看 GPA 和面試。Hardworking 基本面不出來。。。只能看看經驗什麼的,如果特別多產那麼估計挺勤快。Cooperative 面試的時候可以測試一下 stress test, 比如看 candidate 怎麼跟你 argue。


  1. 結(gao)對(ji)編程啊,手把手教他。我之前實習真是坐在 mentor 旁看他如何寫代碼。
  2. 互相 code review,快速適應公司代碼規範、風格等;熟悉當前項目代碼倉庫,每個模塊的功能等,如何增加邏輯、如何補充測試等;走一遍上線流程,介紹公司內部工具和平台使用方式等;看公司項目文檔。
  3. 合理分配任務,循序漸進,從基本的任務開始做起。有基礎的同學一般上手挺快的。
  4. 及時反饋,每周針對工作和編程中的問題溝通一次。


不知為什麼就被人邀請回答問題了。。 在矽谷一線公司也混了幾年, 被manager"強迫"mentor了一些new hire 組裡也有過很多實習生和自己也曾經是懵懂少年的人還是以當事人和mentor以及旁觀者的角度談一談這個問題

首先實習生一般是new grad (本科或者master, phd不太了解 一般一些大公司除非是research position對phd開的坑很少) 在通過phone / skype interview或很少輪數的campus onsite後就來公司實習了 = 。=

在linkedin組裡有過大二大三的老美實習生,感覺就是每天很開心的來上班,然後公司福利也很好,每天就是玩玩玩= 。 = 也見過很拼的,代碼提交很多,積极參加hackthon,沖著拿return offer。

然而我覺得如何帶好實習生這個問題可以簡化為如何讓實習生能夠擁有快樂短暫短期實習經歷並且拿到return offer

首先站在manager的角度談談他們眼中的實習生。很多正常的manager其實對實習生的expectation很低很低,當然像亞麻這種血汗工廠有些組還在實習期間讓oncall的outlier就不說了。。。 manager一般也是以完成公司下發的政治任務的心態(公司為了樹立良好的公關形象和社會形象一般每年有和學校合作開career招實習生) 給實習生分配任務,當然能超額的給組裡做貢獻就更好了。任務的長度一般以三個月內完成一個project(包括一定時間的ramp up)為合理。因為還要給實習生熟悉公司的開發環境,所以項目一般由淺入深。 可能讓實習生先修個bug 再提交小的代碼,最後獨立完成一個project。實習生也會在某種程度上浪費組裡的資源,至少會佔用其他組員mentor時間,所以很多老闆的真實心態也是希望實習生能夠大多數時間內能獨立進行自己的任務,而不要過多打攪正常其他猿/媛的生活= =

分析完老闆心態,站在mentor的角度,如何讓實習生和老闆都愛你呢 ~~ 當然是設計實習生project的時候一定要花心思 這是最最最重要的!總的來說一個好的project具備以下幾點

  1. 控制在實習短暫的三四個月的時間內完成 (讓實習生度過一個充實而愉快的假期。。。有時間工作有時間浪)
  2. 難度適中(不要和自己過不去 接很可能剩下未完成的部分讓你做的坑 其次讓實習生在老闆眼中的印象是一個能幹的好少年)
  3. 最後能成功demo(能讓大家知道你是一個好mentor讓實習生有成就感好寫實習總結以及增加實習生拿return offer的幾率)
  4. 最好和組裡現在的project息息相關或是解決組裡人都沒有時間做的事情 (增加visibility)

我聽說過很多實習生最後的實習經歷不太愉快或者覺得壓力很大是因為項目太過於難,短時間內難以完成,儘管個人能力突出但是因為種種原因讓manager覺得個人能力不夠(太難導致不停bug組裡其他人) 項目越做越大,最後也沒有deliverable而拿不到return offer -- 這些都可以在一開始避免的。

其次, 一定要多和實習生和老闆交流。前者我就不說了, 經常問問實習生有哪些地方卡住了,多給他們做code review,製造和組裡演示project的機會。 然而有很多mentor忘了和老闆交流這一點。 其實及時給老闆積極正面反饋實習生的優點,比讓老闆自己發現實習生的優點有效的多。畢竟老闆也知道你自己才是最了解實習生的人,從你口裡講出的讚美就更有說服力了。 除非你確實不想以後在和你的實習生工作,不要在老闆面前做實習生的負面反饋。 真是這樣的話,那麼一開始就不要帶實習生就可以了。。。

那麼作為一個實習生,怎麼能讓你的mentor(特別牛的大腿請無視)有更好的機會帶你飛向return offer呢。。。

首先,不要什麼都做伸手黨,多嘗試,然後在自己做好research仍不能解決問題的情況下再場外求助。 一方面這鍛煉了自己解決問題的能力,另一方面減少對他人過度頻繁的麻煩。

其次,讓mentor經常了解你的想法,你的blocker, 一方面讓他幫你找到解決問題的途徑,另一方面也方便他隨時調整project的scope,好讓在規定實習時間內有一個完整的能展示的成果。一個簡單能動的project勝過10萬行不能跑的project。

大概就說這麼多了。。。


說說我剛開始工作時遇到的一些情況,希望能給題主提供一些思路。

最開始的一周,基本上就是裝一些開發軟體,看看文檔,然後熟悉熟悉開發環境,毫無壓力,開開心心的度過。而且下班之後還能看一部電影,和妹子聊聊天,小日子過得真叫一個舒服,每天都沉浸在,老子終於開始自己賺錢了的喜悅之中。

第二周開始,陸續接到一些開發任務,不過都很簡單,設計文檔也都把功能寫的比較明確,代碼也沒有多少行,只要找對位置就可以了。

做單元測試,提交,遇到 bug 和測試溝通,然後修改,再提交。慢慢了解到公司的一些業務,有一點小壓力,但憑藉自己的聰明才智,還在掌控之內。

大概一個多月之後,接到一個大活兒,比較複雜,光設計文檔就好幾頁。和設計人員交接的時候,根本就聽不懂說的是啥。但那個時候還是挺自信的,心想沒事兒,只要回去看代碼就行了,沒啥不懂的。

回去一看代碼,尼瑪!更不懂了,這都寫的啥?這個時候已經感覺有點要掌控不住了。

接下來的一周就是不停的問,然後各種加班,回去之後接著想解決辦法,就連做夢都是改 bug,壓力那個大啊,感嘆錢真是不好掙。

緊趕慢趕用了一周時間寫完了,提交上去,被同事(就是帶我的人,真的很感謝他)說寫的不對。

然後把我叫到他工位旁,在我的注視下,他開始改起了我的代碼,用了兩個小時改完,而且沒有 bug。

能體會到我當時心情嗎?我起早貪黑寫了一周,人家花了兩個多小時就搞定了,真是五味雜陳啊。對自己的職業生涯都產生了懷疑,真的是掌控不住了。

但左思右想還是沒放棄,主要也沒有別的能幹。從那以後,各種加班,完全自願的那種,儘快熟悉公司的業務,下班後還看電影?看視頻學習啊,就一直堅持著慢慢挺了過來。

所以啊,我覺得帶實習生呢,一定要給一些壓力,這樣才能成長,但也不能太大,和我一起去的幾個同事就沒挺住,紛紛離職了。

還有就是要幫他解決具體的問題,在我來看這一點挺重要的

剛工作的小白,真的什麼都不懂,如果不回答的具體,那更雲里霧裡了。解決一個具體問題至少讓他熟悉了整體流程,大概思路。如果虛心學習,再有舉一反三的能力,那解決其他問題也就更順暢了,良性循環。


做軟體其實就是做翻譯,把思路用代碼表達出來,

所以做軟體不是寫代碼,寫代碼只是一種實現手段。

當然了,程序員必須練好這些手段。

如若有實習生讓你帶就很爽了。

先把項目拿出來,思路擺開講給他,然後開始教他一步步實現,最後就是自己理思路,吩咐他們實現就完了。

當然他們有技巧不足的時候,就得指導指導,反正到時你不寫代碼,他們寫代碼,你就感覺自己像個項目經理或者架構師。你每天要解決的都是總體方案設計和擴展的問題了,然後實習結束他們就成為你的手下,你就做領導了。

若他們不留下,最後還得靠你寫代碼,你就要給你領導說,你要做領導,不想寫代碼。

若不同意你就跳槽,到其他公司去做管理。

只有腦子進水的程序員才整天揪著代碼不放,在那裡討論什麼php是最好的語言,java比其他語言好得多,golang又崛起了以後要乾死java,sql又要被nosql幹了。或者是xx設計模式很高明,xx架構耦合性低,xx插件要這麼寫擴展性才高。

記住,帶人是機遇,是實習生掌握技能的機遇,也是你升職的機遇。不要藏著掖著,代碼實現這些技巧手段,什麼設計模式,什麼封裝解耦,這都是低門檻的玩意兒,若沉溺於其中自以為屌爆,實際上就是擼個破代碼還擼出優越感了,憑這些是得不到加薪升職的,因為你隨時可以被替換,你自覺地很屌,但你走了,公司業務不會受到影響,這就叫缺了誰都轉。


在不同公司,我帶過幾個,最後要麼自己走了,要麼被公司勸退了,我思考過,應該不是我的問題。領導都說了,不是我的問題。


如果公司有培訓的章程,就按章程來,沒有就先涼他們一段時間,好好觀察一下。職場上不是所有人都值得你去教的,看看他們的人品再說。


先佔坑。今年暑期在谷歌帶實習生,等我帶好了再來回答。


學會體量,實在不行大家就解除合同。每個人都是從新人走過來的。一定不要高高在上,你的經驗真的不值一提,互相學習交流,不帶甲方姿態就好!


我看完以後就想我點進來幹什麼?看了回答心好痛,怎麼大家都有人帶嗎

我完全是放養,想學都沒人帶只能自己摸索走彎路也只能蹲下來抱抱200斤的自己


首先一點,別讓他覺得他是實習生,把他當做團隊的一份子。


我是一個被帶過的實習生。感覺最重要的是,要向實習生講明白他的任務,一定要明確。不管是教他東西,還是讓他幹活。

就好比是需求分析一樣,兩個人對同一任務的理解是一樣的。布置好任務後,讓實習生從細節角度複述一次。

溝通和啟發思考是最重要的吧??*(?o?╰?╯?o??)??


我最近帶實習生真是心累,主要是我的實習生太懶了還臉皮死厚又逗比,完全說不過他,老是問我一些可以通過搜索引擎解決的事情,我和他說這些問題你搜一下就知道了,他居然和我說問我會更快一點,窩草,要不是我脾氣好早一巴掌扇死他了。。。。我想先糾正他的思想吧,能通過搜索引擎解決的問題絕對不能先問他人!當然他又缺點也有優點,優點是人相當聰明,code能力也很強,就是tmd太懶了(做事需要你催他,但只要他認真做他基本可以將事情完成很好的那種)


主要是讓他學會把理論聯繫實際,根據需求解決問題。多些實踐。培養他們合作的精神及獨立完成任務的能力。按圖施工。


推薦閱讀:

運行bgp的路由器具有所有的公網路由嗎?
傳統工科和計算機結合的行業是否具有發展的前途?
關於C語言中輸出超精度位數浮點數的問題?
什麼時候中國的手機晶元或系統能成為主流?
學計算機專業,多倫多大學,滑鐵盧大學,麥吉爾大學和英屬哥倫比亞大學裡面,應當選哪個?

TAG:程序員 | 軟體工程師 | 計算機科學 | 矽谷就業 |