做程式員要"海納百川",其實就是建議各位要做一個通才。當然做通才是有條件的,我總結了下前提有三:
1.你已經是一個專才。熟練操作學一門像樣的程式設計語言。
2.有穩定的工作和收入支援。
3.想得更多的挑戰和機會。
作為專案經理和管理者而言,坦白的說,比較喜歡的還是專才,因為專才聽話,你在他知曉的領域劃一個圈,他能保證幫你完成任務,而且還不給你添麻煩,專才們在各自的領域的努力才會推動項目前進。那在項目中,通才的表現又如何呢?你給他畫一個圈,他會給你考慮到圈子以外的事,甚至跳到別人的圈裡子耍弄一番。他就像潤滑劑一樣,提出很多創新的idea,雖然老是給專案管理者帶來不少的麻煩,但是總能讓整個項目更加協調。其實專案管理者討厭他,但又離不開通他,他的鬼點子時常能最佳化各個結構和模組。更重要的是當管理者被提升,要選擇接替者一般是一個會顧大局,協調眾多專才的通才。
在所有的專案管理者或者teamlead的心裡,肯定都有一種軟體工廠的構思或者布局。大意就是整個部門各個人都各施其職,讓整個軟體開發的過程,就像一個生產工廠一樣運轉。招來的程式員都是生產線上的工人。他們不需要想太多,照任務單做就是。客戶需求就像產品訂單一樣進來,需求分析師開始根據訂單安排我們要生產的產品規格滿足客戶的需求,系統架構是開始把這些規格加工成工廠生產計劃或者價格架構。設計師拿著詳細的設計文檔來往這個架構裡面套,剩下的就交給代碼機器人們填充內容,然後到品質工位,檢查貼牌,然後出廠。整個過程每個工位都是專才,在領導的構想中,他們每天都只需要做重複的勞動就好了,如果他們想辭職了,也不會帶走我們全部的生產機密,更重要的是這樣的工人很廉價,找一個替換品不難。但是實際上管理者的春秋大夢很難實現,原因是軟體這個產品具有可複製性,也就是軟體可以copy. 在軟體工廠裡,生產兩個完全一模一樣的產品是沒有意義的。客戶的需求都是很柔性的,每次都會不一樣,大大小小的改變是避免不了的,管理者們費盡了心血設計的一套生產流程,竟然只能生產一件產品?(去過生產線的朋友應該都知道,一旦生產的流程有所變化,線上的工人們基本上都不知道怎麼開始幹活了,要重新培訓上崗,因為他們從來就沒有想過,半成品是從哪來的,又是幹什麼去,一直都在做機械的勞動。)但是我們的管理者們,他們肯定不會罷休焦頭爛額,會再一次最佳化生產流程。到下一個新的產品,又會繼續把生長線從頭至尾最佳化一下。某一天管理者突然頓悟,我們為什麼每次都手把手的跟每一個人安排任務,每次都親自設計整個流程,我應該去辦公室裡面喝喝茶,上上網。這個時候他會想到誰?毫無疑問,肯定不是專門,他需要的是一個能走通每一個環節的通才。
小時候我經常聽我老爸說:"不要半桶水,不要什麼都懂點,什麼都不專"這句話就是用來貶低通才的,在這裡我要為通才平凡。我的一個軟體項目曾經出了一次事故,整個汽車的生產線面臨停產,幾次電話支援的效果都不理想,需要一個技術人員立馬去現場解決問題。軟體用delphi開發在windows平台運行,oracle資料庫,通過進口的硬體,用客戶的線束跟汽車通訊,操作員是個新手,電腦硬體是我們提供的,現場環境惡劣。我思索了每個可能出現問題的可能,客戶能提供的有效資訊太少,連軟體的記錄檔都無法取出來(USB連接埠封閉,車間資訊嚴格保密)。我不可能同時派一個軟體工程師,資料庫DBA,IT,或者硬體工程師奔赴現場。最後我選擇去的是一位軟體工程師,他很快找出來原因,是客戶的線路沒有按照我們的電路圖製作,關鍵線一條線是斷開狀態。我相信他,不是因為他是我們公司最厲害的程式員的,而是他懂技術領域的比其他人要多。
其實在整個項目開發過程,除專案經理外,不可能每個人都會一直忙忙碌碌,無論是程式員,測試員,設計師,架構師,你總會有一段時間無所事事,除非你同時加入很多的項目。希望你能在有空的時候關注下你的同事們在做什嗎?你能不能協助下或者學習下。做了這麼多年的程式員,我們可能都常有一個共同的擔心,這個擔心是什麼呢?我們一個項目或者我們公司的的關注點,研發的中心開始轉移出我擅長的技術領域。我們害怕自己發揮不了作用和特長,害怕我們對公司沒有價值,也就是意味著我們漲工資的幅度要比別人小了,或者沒有工資加了。其實這個擔心還不是最要命的,最要命的是,我們要精簡團隊的時候,你才發現自己比較單純,只會測試或者編碼,很多平時做其他工作的同事都能做你的替代者,那麼你就要被over了。
說了這麼多的苦口婆心勸大家做一個海納百川的通才,大家肯定會問,我覺得我在我的team裡面已經算了百事通,萬事通了,我應該怎麼繼續豐富我們的技術領域呢? 夜深了,還沒洗澡,我在這裡不打算多說了,我請問各位幾個問題,希望可以為你指點方向:
1.你有沒有想過在公司裡,你計劃的職業階梯的各個領導每天都在幹什麼嗎? 你的boss,你boss'boss.....?(拿破崙不是說過將軍和士兵之類的名言....)
2.你知道你的一個組的同事在幹什麼嗎,每天?
3.你知道哪幾種作業系統平台,軟體開發平台?你會通過別的路徑走到羅馬嗎?
4.軟體工程師你知道你要用的資料是哪來的怎麼來的嗎? 資料庫管理員你知道你的資料是去哪裡的嗎?為什麼人家裝個oracle一下就搞定,我寫了一輩子連oracle的程式連個listener.ora都不會配。
5.程式員知道你開發的軟體,打包後是怎麼安裝註冊的嗎? 那般客戶的是什麼折騰你的寶貝軟體的嗎?
6.有沒有約個罵你的傑作的客戶出來吃吃飯,聽聽他的使用者體驗?
希望我們都能明白自己缺少的是什嗎?如果程式員想找一份工作,做一個專才足矣,如果想把事業做好你最好做一個通才。