天天看點

阿裡軟體資深架構師李戰談:開發者的人品問題

阿裡軟體資深架構師李戰談:開發者的人品問題

文 / 李戰



  程式員都知道:絕大多數程式設計中的問題,最終都是自己的人品問題。當遇到奇怪的問題時,我們總是喜歡懷疑系統、懷疑編譯器、懷疑網絡、懷疑硬體……就是不願意懷疑自己的人品。熬過幾個不眠之夜後,最終還是發現自己的代碼存在人品問題。隻有極少數的情況才是系統的問題。

  同樣,一些程式員在職業發展中遇到問題時,也總是喜歡懷疑公司不好,懷疑戰略有問題,懷疑流程制度不合理,懷疑老闆和同僚……就是不願意懷疑自己的人品。

  在大大小小的 IT 企業中,總能看到一些技術并非最頂尖的程式員做成大事的例子,也總看到一些技術牛人被埋沒而不能一展才華的現象。我想,除了機遇之外,還有一個很重要的因素,那就是:程式員的人品問題!

  當然,這所說的“人品”,依然是調侃的說法,并非指道德問題。其實,人品問題指的是程式員的軟實力。如果将程式員的程式設計技能稱為硬實力,那麼程式設計技能之外的東西統統可以稱為軟實力。不容置疑,程式設計技能是一個優秀程式員必須具有的硬實力,對程式員的職業發展起着最直接的作用,但程式員的軟實力同樣不可忽視。

  如何修煉自己的人品呢?我想談談自己的一些經驗和教訓。



  程式員相輕

  在長期與程式員打交道的過程中,發現大多數程式員和我一樣,喜歡以自我為中心,特别是年輕的程式員。也許我的觀察可能不完全正确,但從許多程式員的言談舉止中,确實可以感受到我曾經的浮躁心态。

  喜歡以自我為中心的人,往往會自以為是,并按自己的思路和想法行事,不太願意聽取别人的想法和意見。同時,這樣的人,性格相對内向,喜歡沉浸在自戀和自負的虛幻空間裡,其他人的思想都看不上。當兩個都很自我的程式員相遇時,他們不是互相傾聽和學習對方的優點,而更喜歡找對方的缺點,進而顯擺自己的優勢。這就是所謂“程式員相輕”現象!

  不知道各位程式員是否存在程式員相輕的心态,反正以前的我經常看不起别的程式員,甚至還看不起那些德高望重的老前輩。能被我欣賞的程式員更是寥寥無幾。同僚編寫的代碼在我眼裡就是小兒科,或者幹脆就是垃圾。我認識許多過來的程式員,那些曾經很自我,但現已放下,進而潇灑程式設計的程式員。他們現在都在一些公司的團隊裡擔當重要角色,但據他們反映,“程式員相輕”的現象在 IT 企業裡是普遍存在的。

  現在的軟體開發,大都需要團隊協同來完成的。團隊作戰是需要團隊每一個程式員互相信任和尊重,将分散的力聚在一起形成合力,進而攻克一個又一個的項目工程。如果一個團隊中的程式員相輕現象嚴重,團隊中的成員就會從互相争論演變成互相指責,逐漸失去成員間的互相信任和尊重,内耗日漸嚴重。最終,團隊的力量就四分五裂,大家并不向同一個方向使力,整個團隊将變得毫無戰鬥力。

  我想,對于程式員的職業發展來說,要過的第一個坎就是克服“程式員相輕”的心态。隻有修正了這一人品問題,才能将自己的思想從狹隘封閉的自我空間中解放出來,才能踏上一條寬廣的職業發展之路。那麼,克服程式員相輕的心态很難嗎?其實不難!很簡單:放下自我!

  世界上最難戰勝的對手就是“自我”,而世界上最重的包袱也是“自我”。因為自我,人必自戀,心必自私,行必自負,榮必自欺,敗必自卑。程式員相輕這一最大的人品問題,就是因為太自我。如果敢說“我的人品沒問題”,那就得先放下自我。自我放下啦,人品問題也就放下啦。既然這樣,我們何不将這沉重的包袱放下,讓心靈輕松自由起來呢?



  溝通交流

  大多數程式員是比較含蓄的。比起複雜的人際交往,我們更喜歡單純的技術工作。是以,在與人交流的時候,程式員會表現出兩方面的不适應:一是不善于傾聽; 二是不善于表達。其實,我以前也是這樣。在聽别人講話時喜歡默不作聲,而心裡總盤算自己的思路。輪到我講話的時候,卻不能有效地表達自己的思想,講的話很難讓人了解。有時候,又喜歡打斷别人講話,将自己的觀點強加于人,也不管是否聽懂對方的意思,就大加指責,甚至出言不遜。

  溝通交流障礙是大多數程式員普遍存在的另一個人品問題。而在團隊協作中免不了互相溝通,如果一個程式員在溝通方面存在障礙,是很難融入團隊開發工作的。是以,程式員應該努力提升自己的溝通能力,修煉溝通交流方面的人品。當然,提升自己的溝通能力,并不是要求我們練成辯論家的口才,隻要能做到有效地傾聽和有效地表達就已經足夠了。

  其實,做到有效的傾聽還是比較容易的,特别是當對方的表達能力很強的時候,我們隻需要靜下心來認真傾聽即可。即使不是很容易聽懂别人的話,就多問問,請對方再講講。反正,一定要先了解别人的意思,才表達自己的意見。或許在你看來别人的想法是錯的,不妨先讓人家把話說完。沒準等人家說完之後,你會發現原來自己錯啦; 即使自己沒錯,也能可能了解錯了人家這樣想的原委。了解是從傾聽開始的,認真傾聽展現了對人的尊重。設身處地想想,如果是你在發言時,是否希望人家都能認真傾聽你的心聲,了解你的思想呢?那麼,在别人發言時,我們為什麼就做不到認真傾聽呢?

  然而,傾聽的目的是為了了解别人的想法。一些人默不作聲,貌似在聽人家講話,實際上想着别的事情; 而一些人卻是不懂裝懂,假裝點頭,讓人家誤以為聽懂了。對于有效的溝通來說,這些現象不但沒有好處,反而會帶來更多壞處。問題得不到解決,隐患埋藏得更深。是以,傾聽就要認真仔細的聽,努力從講述者的思緒去了解問題,真正了解别人的想法。懂就懂,不懂就不懂,千萬别不懂裝懂。不管你是菜鳥還是大牛,多問問,沒人會瞧不起你!

  相對來說,做到有效地表達會難些。很多程式員會有這種感覺,讓我寫代碼容易,讓我說出來就難。隻可惜,代碼是寫給機器的,溝通交流面對的卻是人。是以,提升語言表達能力也是非常重要的,除非你不打算與人打交道。

  其實,在語言表達方面還是有一些簡單的原則可以借鑒的。首先,要記住,不管怎樣講,要把握得住講話的邏輯線索; 其次,先講背景,建立起溝通的上下文,再講具體的細節; 然後,在講解中穿插關鍵詞語的簡短解釋。相信這樣講解是可以讓許多人了解的。這就好像程式設計,得有完整的邏輯主線,得有上下文,還得有變量定義,等等。

  另外,在講話時盡量少用指代詞,就是少用“這個”、“那個”、“它”等詞語。不妨直接說出這些指代詞背後的真正名詞,不過是多說幾個字而已,但聽者更容易準确地知道你指的什麼。比如,你向别人請教時說“這個東西有問題,你知道原因嗎”,人家一定會反問“什麼東西”。但如果你說“Memcached 命中率有問題,你知道什麼原因嗎”,人家就可以立即開始思考問題的原因啦。盡管在你的頭腦裡“這個東西”指的就是“Memcached 命中率”,但人家并不清楚。這就好像程式設計時對變量命名一樣,相信程式設計經驗豐富的你基本上不用 a、b、c 這樣的通用名字,一定會用 bufferSize、totalAmount、lastChild 等等讓人一眼就能明白的單詞。那麼,既然你能在程式設計中可以養成良好的命名習慣,為什麼不能在語言表達中也養成良好的命名習慣呢?

  程式員如果把溝通交流的人品修煉好了,保證你的職業發展會駛上快車道。



  協作能力

  我以前喜以歡單打獨鬥。如果我不能掌控全部代碼,我甯願不做; 或者動不動就把本該人家寫的代碼也寫一份,搞得别人很沒面子。後來我知道,就算我是千裡碼,日編千行,夜編八百,也很難獨自完成現代的大型系統開發。在現代的軟體企業裡,協作能力也是對程式員人品的重要考驗,我們應該努力提高在協作方面的人品。

  首先,提高協作能力要善于厘清責任和義務。其實,這個很簡單,就是根據大家約定的分工做事情,該誰做的就由誰做,該誰擔責任的就誰擔責任。不要盲目做事,更不要随意插手人家的事情。程式員應該牢記自己的責任,切實履行自己承擔的義務。隻有這樣,才能赢得同僚們的尊重和信任。其實,對一個有戰鬥力的團隊來說,不但需要忠實履行義務的成員,更需要敢于承擔責任的成員!

  其次,就是要随時了解和關心别人在做什麼。我以前喜歡悶頭做事情,守好自己的一畝三分地,其他的都不聞不問。這對于協作開發來說是非常不好的。在一個協作的團隊中,不了解别人在做什麼,自己的事情也肯定做不好。厘清責任和義務,并不是說可以不了解和關心他人的事情,千萬别為了厘清責任和義務而走極端。

  最後,就是做事要積極和靈活。在這一點上,可以說是仁者見仁,智者見智,修煉起來确實需要些悟性的。做事積極主動相對比較容易,看到團隊的問題主動提出來,并從自我做起加以解決; 對于沒人承擔或誰都不願做的事情,試着去做做; 自己取得了成果,主動與大家分享一下; 别人的工作有了進展,多多鼓勵和支援一下。不過,做事靈活就更不容易把握,這要求既能成事,又不失原則。這種人品隻有在摸爬滾打中才能修煉出來,就看大家的悟性啦。



  職業修養

  毋庸置疑,程式員是一種職業。一些人是因為生存而選擇了做程式員,一些人是因為興趣愛好而選擇了做程式員。可能大多數程式員和我一樣,既是為了生存,也是喜歡程式設計,是以選擇了做程式員。不管怎樣,吃了程式員這碗飯,就得對得起程式員這一職業。既然程式員是一種職業,那就有職業化的要求。一名程式員是否具有職業化的修養,可能是企業老闆最關注的人品名額。

  職業化與專業化有很大不同。我們常常會稱贊某人很專業,說的是這個人有某方面的專長。某方面的事情他是專家,他也很願意去做那些事情。這叫着專業化。

  職業化首先要求我們要有專業的技能,除此之外,還要求我們有職業的态度、職業的意識和職業的道德。工作中的事情,并不每一件都是你喜歡和擅長的,但你也得去做。簡而言之,專業化就是“将喜歡的事情做得很好”,而職業化就是“将交給你的事情當作喜歡的事情,并将事情做好”!

  我承認,和大多數程式員一樣,我也想加入核心技術團隊,也喜歡做創新性的工作,喜新厭舊,不想幹程式設計中的體力活。但在一個企業裡,不可能人人都參加核心技術開發,修建軟體大廈總要有一些人會去做施工隊,去幹搬磚頭的體力活。于是,當有工作交代下來的時候,如果不是我喜歡和擅長的,也隻好硬着頭皮去做,不情願的牢騷隻能暫時憋在心頭。當然,既然接了這單子的買賣,也就想盡辦法努力去做好,一來是要面子,二來是怕将來留下麻煩。多年下來,也逐漸在一些不喜歡和不擅長的工作中找到快樂和成就感。後來才明白,這就叫職業化。

  另外,項目開發團隊中最怕出現情緒化的程式員。尤其是在核心開發工作中,情緒化的程式員無疑就是整個項目的定時炸彈。盡管這樣的程式員可能有着極高的專業化造詣,一旦項目客觀要求發生變化,與其原來的喜好和理想不符的時候,他們就可能就會産生抵觸情緒,甚至幹脆撂挑子不幹啦。其實,情緒化是不成熟的表現,更是缺乏基本的職業修養。想想自己過去也曾有過類似的表現,如今想來真是可笑啊。

  其實,做到職業化也沒那麼難,隻需要樂觀的心态和那麼一點點犧牲精神。既然工作和納稅一樣是無法避免的,我們何不快樂面對工作。既然這件事情總得有人做,犧牲一下又何妨,權當行善嘛。當然,要做就得做好,得有那麼一股勁。讓我幹體力活,我就權當鍛煉,即使讓我掃地,我也要比别人掃得幹淨!這樣才能在工作中找到快樂和成就感。在職業生涯中,也許會失去某些東西,但也會得到某些東西。

  有職業化修養的程式員在企業和團隊裡是值得信賴和讓人放心的,将這樣的人放到重要和核心的技術項目中将是項目成功的有力保障。因為,不管項目需求如何變化,不管技術方案如何調整,有職業化修養的程式員都會認真做好需要的每一件事情,這可以有效地保證企業和團隊的整體利益和目标。是以,想要你的職業發展一帆風順,一定要修煉職業化人品!



  尾聲

  是否能認識到人品問題,關鍵看自己,是否打算修煉人品,關鍵也要看自己,外人是幫不了的。哲學家說,外因對事物發展的影響有限,而内因才是推動事物發展的根本因素。是以,如果程式員自己不願意修煉自己的人品,無論外人如何苦口婆心都是沒用的,反而會讓他覺得你讨厭。

  人必須要自己經曆了一些事情,才會有切身的體會。面對問題,如果開始從自身找原因啦,也就是緣份的開始。當苦苦求索,而不得其解時,也就是機緣到啦。某一天,自己突然想明白啦,或者偶遇高人點化,心中突然豁然開朗,就是頓悟。頓悟之後才發覺原來一切都很簡單,以前純粹是自尋煩惱。程式員不就是那麼回事兒嘛!從此,我們就可以輕松潇灑地做程式員啦。

  但要記住,程式員還是程式員!别修煉了半天人品,修成了專家,成了辯論家,成了哲學家,成了思想家,就是不會程式設計啦。如果大家都得道成仙了,誰來幹活呢?當然,因為你的道行高,大家希望把你供起來,但千萬别自己把自己供起來。真的,程式員修煉人品,不是為了擺脫程式設計工作,而是為了找到程式設計的快樂。

  有一位大和尚曾對我說:真正的快樂不在于你擁有多少,而在于你付出了多少!如果你将每一件事都當善事來做,心就會快樂。是以我想,行善從程式設計開始好啦……



  作者簡介:

  李戰,阿裡軟體的老頑童,資深架構師。有近 20 年的軟體開發經驗,屬最老一代程式員之一。早年從硬體設計與開發,後來轉向純軟體領域,曆經彙編開發時代到今天的雲計算開發時代的整個曆程。目前在阿裡軟體從事雲計算方面的研究與開發工作。

  (本文來自《程式員》雜志 10 年 01 期)      
http://www.cnblogs.com/bdel/articles/digest_1.html