開發者的人品問題

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

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

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

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

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


 

程序員相輕

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

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

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

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

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

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


 

溝通交流

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

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

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

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

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

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

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

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


 

協作能力

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

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

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

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


 

職業修養

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

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

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

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

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

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

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


 

尾聲

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

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

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

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


 

李戰作者簡介:

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


 

(本文來自《程序員》雜誌10年01期

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章