如何指導軟件開發新手
ZDNet: BUILDER.COM
老資格的軟件開發設計人員經常被要求幫助那些沒有什么經驗的新手。但是,如果這名軟件開發方面的新手在此之前沒有任何的技術開發背景的話,這個任務就變得相當艱巨了。
作為要幫助別人的人,你所扮演的是一個非常關鍵的角色。這是由于你所做的一切將決定這名技術開發方面的新手是否能夠走上正確發展的道路。對一名缺乏經驗和背景的軟件開發新手來說,最需要的就是你的耐心以及豐富的專業技能和經驗。在指導這些新手的時候,你不但需要檢驗什么是他們已經知道的,而且還需要讓這些新手掌握他們以前并不知道的內容,并且要為這些人選擇合適他們的項目。
訓練的開始
有這樣一種典型的情況:項目經理告訴你,桌面支持小組的Alex將會加入到你所領導的這個開發小組。之前,Alex已經有了在桌面支持小組中超過兩年時間的工作經驗,但是他希望能夠變化一下自己熟悉的工作,于是就決定把發展方面轉移到應用軟件開發的領域中來。部門經理希望你能夠幫助Alex進入這一領域,幫助他學習如何成為一名軟件開發設計人員。在加入到你的小組之前,Alex將會參加一個為期一周的培訓課程,這個課程能夠幫助他熟悉一下你所領導的小組所使用的開發語言。
你必須首先了解這名新組員的一些情況??梢酝ㄟ^向他提出如下的問題來掌握這些情況:
他對操作系統熟悉到什么程度?是否能夠自己解決一些操作系統或軟件方面的問題?這些問題在讓他調試程序或者面對軟件開發所遇到的問題的時候能夠有所幫助。
他對產品的認識程度達到了一種什么樣的層次?如果他已經和客戶一起工作了兩年的時間,他應該對客戶在使用這些產品的時候會經常遇到什么樣的問題能夠有比較全面的了解。
他還需要學習有關軟件開發的哪些方面的概念?舉個例子來說,他在加入你的團隊之前所接受的為期一周的培訓中應該涵蓋必要的相關概念。
在這種情況下,Alex在正式加入你的團隊之前必須先參加培訓課程。我們非常推薦在新手加入團隊之前一定要參加必要的培訓課程;這是讓這些新手能夠了解軟件開發所需要的基礎與知識的最佳方法,而且可以避免對你團隊的工作產生影響。你可以在通過下面這些方法來更好的幫助這名軟件設計新手:在他正式參加培訓課程以前,應該和他一起討論并瀏覽一下課程的內容。一定要向這名新手明確的指出培訓課程的哪些部分對于將來參與工作是最為重要的。這么做的目的是為了讓這名軟件設計方面的新手在參與培訓課程的時候能夠更好的抓住重點,以便他在將來正式加入到團隊中之后能夠更快速的掌握各種要領。在經過這種交流之后,應該可以對這名新手現在的水平有了一定的了解,并且可以對他在參加完培訓課程之后能夠達到一個什么樣的水平做到心中有數。
為新手確定第一份任務
新手所接受的第一次工作任務是非常重要的,所以,一定要選擇合適的項目來讓他完成。就第一次工作任務來說,你所選擇任務的類型以及你如何幫助這名新手完成這個項目,都會影響這名新手對這份工作的感覺。
一定要在這名新手正式加入到你的團隊中來以前就為他準備好一份合適的工作任務。這么做是為了讓這個新來者能夠快速的開始工作,也能讓他更快速的融入到團隊中去。我喜歡讓新手們完成這樣的工作,比如說讓他們把新功能添加到已經準備完成的軟件程序中去。這樣的做法能夠給這些新手們帶來以下的好處:
如果讓這些新手獨自完成編制整個軟件程序的工作,通常他們都會因為進展緩慢而對這份工作充滿了挫折感。如果只讓他們往現有的軟件程序里邊添加功能則會容易的多。
這些新手可以通過完成這樣一件工作來學習資深的軟件開發設計人員是如何去解決實際問題的。
這些新手能夠通過這樣的一份工作接觸到優秀的程序編碼范例。
如果你希望讓這些新手對已經編制完成的程序進行修改的話,你一定要記住下面這些要點:
在這些新手完成修改工作的同時還應該讓他們能夠學會新的東西,一定不要讓他們去做過于復雜的修改工作以避免他們產生挫折感或者感到泄氣。
這份修改工作應該具有針對性,特別針對這些新手的情況。作為一名有經驗的軟件開發設計人員,你一定體會過這種感覺,就是接受了一份看不到曙光的任務,這會讓軟件開發設計人員的士氣變得十分低落。
作為新手的指導者,你應該對分配給這名新手的程序編碼非常熟悉。因為在這名新手開始工作之后,他肯定會遇到很多的問題,并且作為他的指導者,他一定會經常向你請教有關這個程序編碼的問題,所以,你如果對該程序編碼非常熟悉的話,解釋起來會簡單一些。
對工作任務進行說明
應該通過解釋該應用軟件的功能并且指明有哪些部分需要被修改來讓新手們熟悉工作任務。通過這種比較高層次的全面介紹,能夠讓負責這項工作的新手知道如何才能開始工作。和新手一對一的討論這個程序中有哪些部分是需要被修改的。這么做能夠讓你知道這名新手在之前的培訓課程中學會并掌握了多少內容。在這次一對一的會談中,你應該注意下面的這些內容:
這名新手對進行開發的環境有著何種程度的了解?立即就讓他在這個開發環境中開始工作對于一名新手來說并不是一件十分容易的事情。
這個新手對于將要使用的開發語言掌握的到底如何?如果這名新手對于他將要使用的開發語言掌握得并不好,比如說他還不了解其中的變量、條件語句以及循環等等內容,那么軟件開發的工作就跟本不可能進行。
一定要注意觀察這個新手用多快的速度拿起桌子上的工作說明。這是一種肢體語言,能夠讓你了解這個新來的開發人員對于你向他描述的項目內容有著什么樣的感覺。對于新手來說,第一份工作任務總是令人感到忐忑不安的。但是,你當然不會希望這個新手感覺這份工作任務對他來說太難于完成。如果這名新手看起來對這份工作任務還不是十分的明白,你一定要盡力再向他解釋清楚明白。
讓新手進入工作狀態
當我向新手介紹新的工作任務的時候,我喜歡在他們的計算機上打開程序編碼,并且直接的向他們指明那些需要被修改的部分。這樣做有很多好處,首先能夠幫助他們確定這些程序編碼是可用的,其次還能夠讓他們知道如何在他們自己的環境對這些程序編碼進行編輯。我還會幫助他們找出那些需要被修改的部分,并且告訴他們如何對相關的部分進行修改。最后,我會問:“你認為我們該如何進行修改工作?”
提出這個問題可以讓這些新手認真考慮通過什么樣的方法來有計劃有步驟的解決問題。對于沒有從事過軟件開發工作背景的人來說,最需要的就是要獲得有關項目的足夠信息。讓他們獲得這些足夠信息的一個好辦法就是直接向他們講解其中的新功能是如何運作的。在你向他們做講解的時候,要寫下一些解決方案的程序代碼或者流程圖。我喜歡通過這種方式進行講解,而且不要忘記在程序代碼后邊加入注釋語句以便在隨后真正開始工作的時候能以實際的程序語句代替。不要一次講解太多的內容;不要忘記這些程序設計人員都是剛剛步入這一領域的新手,他們不可能一下子就做準備面對全部的編碼工作。
在和新手討論過工作內容之后,應該問一問這些新手對于該項目有些什么樣的感受。讓他們進行充分的討論并且讓他們提出足夠多的問題。當你回答了所有這些問題之后,你就可以讓這名新手估計一下他完成這項工作需要多長的時間??赡苓@個新手無法明確的告訴你到底需要多少時間。但是通過這個問題,你可以讓該名新手針對工作做出一個時間計劃。這個時間計劃應該是雙方都能夠接受的,并且要把工作分割成階段性的,以便完成每一步驟后都可以向你進行匯報。完成工作所需要的時間應該具有一定的靈活性,因為負責這項工作的是一名新手,所以需要給他時間以便讓他能夠提升自己的專業技能。
對新手完成的工作進行總結
當這個新手完成工作任務以后,你應該坐下來和他好好的談一談,然后看一看他所完成的程序編碼,并且對這些程序編碼進行測試。向這名新手詢問他都克服了哪些困難。當你和他一起檢測程序編碼的時候,一定要向他指出有哪些部分的程序編碼可以做的更好、更有技巧性。你不要自己動手對程序編碼進行修改;讓這名新手自己修改他的作品,這對他來說也是一個能夠學習更好的編程技巧的大好機會。
結論
幫助新手步入正軌絕對是一件富有挑戰性的工作。你不但幫助他們學習編程,而且還需要你幫助他們學習編制優秀程序的技巧,以及解決問題的辦法。一下子傳授太多的內容會讓這些新手們感到力不從心,你提供給他們的應該是他們真正需要的東西。這樣,這些新手就會快速的成長為合格的軟件開發人員,并且成為你團隊中的有用一員。
原文轉自:http://www.anti-gravitydesign.com