1. 程式人生 > >觀點:何為經驗

觀點:何為經驗

前幾天在看《程式碼大全》時,第三十一章,第八節中談到了經驗,引發了我的一些思考。裡面有這樣一段話:

人們也往往荒唐地強調程式設計師的經驗。“我們需要有五年以上 C 語言程式設計經驗的程式設計師”就是其中一例,如果一程式設計師在頭一、二年沒有學 C 語言,第三年學也不會產生很大區別。這種型別的經驗和其工作能力沒有多大區別。
在程式開發中,知識更新迅速使此領域中“經驗”處在一種奇怪的地位上,在其它許多領域,過去有著成功歷史的專業人員,往往令人放心,並且因其一串成功的事情而得到尊敬。退步很快的人將很快和潮流格格不入。為了使自己有所價值,你必須緊跟潮流。對年青的、求知慾旺盛的程式設計師,他們往往在這點上有優勢,而有些老的程式設計師認為自己有所資格了而討厭一年接一年都要證實自己的能力。
最後一個問題是:如果你已工作了 10 年,你得到了 10 年的經驗應當是真正的經驗,你如
能堅持不斷地學習,你就能得到經驗,如果你並不想學到什麼,不管多少年你也學不到什麼。

我覺得這說的太有道理了。過份的量化去強調所謂的經驗是很沒有道理的,比如在很多公司的招聘廣告裡面都有要在某某領域多少多少年的經驗以上,我認為可以在廣告中這樣寫,但是想應聘的人可以不完全理會它,招聘部門和麵試官在選簡歷和麵試時更不應該把這個作為一個硬性指標,否則會錯失有能力有潛力的人,而錯選已在IT界混了多年的老油條。注意我是說不必完全理會經驗年限,但也不可不看,應屆生與“有經驗的人”還是有區別的,不要走極端。

記得我剛畢業的時候,進入公司的一個7人的專案組,裡面的人配備是醬紫的有二個應屆生(其中一個是我)有二個有二年工作經驗的研究生,有二個有四年工作經驗,其中一個是Leader,還是一個有七年工作經驗。如果按照常理來講,或者理論上來講,應該是這個七年工作經驗的老大哥當Leader,或者承擔最多最重的責任才對。但是事實完全相反:沒有人把新人當作新人,也就是沒有陪訓,其實沒有陪訓很正常,因為對於大多數小公司來講都沒有正規的過程的,我也不在乎是否有陪訓。剛進去的二週就要做一個新功能的開發,可笑的是那些有經驗的人竟然和我們二個應屆生來爭,都想推脫,都想把更多的事情推到別人身上。我一直以來都持有一個觀點那就是能力越強責任越大,但是那些人卻真的讓我鄙視他們。特別是那個七年工作經驗的人,動不動就請假,上班基本上都是在上網,因為他混的時間長,所以能把分到的任務很快的做完,但他卻一點也不多承擔責任,對他人不管不問。幫助幫助新人更是沒有事兒。這也就算了,更可悲的是,雖然他混的時間長,但是做事不認真不仔細,雖然能很快的完成,但是質量也不過關,程式碼的細節沒有做好。在測試的時候,會發現很多隱藏的Bug,因為像整合測試這樣的粗活都是我們新人來搞,所以有很多次我們都會加班加點在修改測出來的Bug,最後發現竟然是老油條的程式碼的問題。而且這個老哥脾氣還大的很,不聽從Leader的安排,週末也不來加班,跟他講他的模組出了問題,也不承認,後來雖承認了,卻拒絕修改,最後還是我們別人去修改,把Leader氣個半死。雖然我們是新人,但是那份激情是如烈火般的,我們非常願意接收新的任務,加班加點也會把它做好,每天下班前也都主動的到Leader那問下,是否有其他的事要做。總之是特別的積極,用現的觀點來說就是好用,是匹好用的馬。

當然,今天說這些,沒有一點報怨的意思,都過去二年多了,這裡只是想說有經驗的人不一定好用,雖然他們的能力可能會比應屆生好一些(但也不一定)。像我之前文章中所提及的,對於軟體開發來講,真正的技術可能只佔50%,更多的還看工作態度,責任心和人品這些所謂的“軟能力”或叫“內功”。就比如我剛講的經歷中,我寧可要六個有激情的應屆生,也不要那些老油條。團結一心加上勇氣加上努力,可以做成一切專案,至少在一定程度上是這樣的。

在我們的身邊這樣的老油條不在少數,雖然工作了很多年,但是工作水平卻不怎麼樣。上班溜號上網,不負責任,做事不認真,應付了事,脾氣卻都不小,任務也都是靠Baidu+Google+Copy+Paste來完成的,程式碼也亂七八遭的。雖然新人也可能這樣做,但是新人會聽從安排,會按照程式碼評審去做調整做修改,而老油條們卻自認為很牛叉,拒絕修改和重構,還能給你扯出一大堆廢話出來。

我一直很喜歡新人,因為他們很有激情,很有潛力,同時又比較容易接受建議。雖然他們知道的少,會的少,但是肯去學。就好比我當初一樣,我剛到公司那天,下午開發環境弄好後,因為專案需要Java語言,雖然在學校裡學過,但是基本上忘記了。記得那天下午用Eclipse寫一個HelloWorld的Java程式,竟然都有編譯錯誤。但是二個星期後,我就能用Java跟老油條們一起開發專案的一個新模組,雖然程式碼量不大,但也用到了多執行緒,繼承和多型,也是到了那時才真正理解了什麼叫多型。知道為什麼嗎?因為那二個星期我每天中午,下班後都拿著Header First Java和Core Java在看,有時會看到晚上十二點多,那會住著一個小黑屋,無電視,無網路,時間就都用來看書了。就這樣,二個星期就能夠用Java來開發了。

McConnell說的很好,十年經驗,到底是十年經驗還是一年經驗的重複十次。用我的話講就是,一千個HelloWorld.c能不能比一個Linux網路驅動的技術含量更高?答案是顯而易見的。

愚認為:經驗=不斷學習+實戰+反思+總結。不斷學習才能獲取新的知識,而新的知識又必須在實戰中得以驗證,驗證過程必有反思,最後總結方成經驗。經驗的作用就是讓我們成長,讓我們有積累,當遇到類似的問題,類似的情景的時候,能夠快速的拿出解決方案。如果未能不斷學習,那麼經驗會倒退的,因為人,只要是人,就會慢慢的遺忘。

最最關鍵的是,是否每天都在進步,抑或,今天只是昨天的又一個重複。