餘晟:軟體開發中的人文關懷

發表於2013-02-27

來源:亂象,印跡

幾年前,我從溫伯格的《技術領導之路》中學到一點:技術人員往往更喜歡和機器打交道,因為他們“認為”自己更適合和機器打交道;但是,優秀的技術人員必須(也必然)具備好的溝通能力。所以,溫伯格鼓勵各位技術人員多加練習和其他人打交道的能力。溫伯格的這個觀點我是非常贊成的,好的技術人員一定需要“勇敢”面對他人,不能被“自實現的預言”侷限在機器的世界裡。

不過我也發現,“技術人員(當然我主要說的是軟體開發人員)不適合跟人打交道”的負面影響不止於此,它還成了一種刻板印象(stereotype),進而影響到開發團隊之外的人。這個問題其實很嚴重,它會導致其他人和開發人員溝通時自覺或者不自覺地切換到“和機器溝通”的模式上來,比如單純依賴郵件而避免見面溝通,比如“你只管這麼做出來就好了,別管我用來幹什麼”。以面向機器的模式來與人溝通,結果往往是完整的專案(而不是狹義的“軟體專案”)割裂開來,皆不歡喜。

這種情況我一直在思考,究其原因,一方面是組織不夠完善,另一方面,軟體開發也缺少人文關懷——軟體可以沒有活力,而軟體開發卻不能沒有活力;程式可以像機器一樣,程式設計師卻不能像機器一樣。要改變這種狀態,就應當增添更多的人文關懷(這裡要多解釋一點,“人文”其實也可以叫“人性”,它與“文”並沒有太多關係,只是“人性主義”約定俗成翻譯成了“人文主義”而已),把開發人員當成活生生的人,而不是視為程式或者工具。

當然,做到這一點並不容易,因為許多人印象裡,軟體開發人員就是“悶瓜”(充其量是“悶騷”),不好捉摸也不好打交道,那麼幹脆把他們當成工具來對待好了,“人性化”這樣高難度的處理還是免談為妙。但是事情並沒有這麼簡單,因為不善於溝通,並不意味著開發人員不在乎人文關懷,想法,絕大多數人內心其實是願意接受而且認可這些關懷的。只是因為許多開發人員不善於表達,因此並沒有太多資料研究和論述軟體開發中的人文關懷(或者開發人員真正在乎的人文關懷),所以這個話題值得一說。

按照我的經驗,以下幾個方面都是軟體開發人員比較在乎,而往往被其他人所忽視的,所以要增加軟體開發的人文關懷,不妨多注意。

第一,開發環境。這裡說的“開發環境”不是指的IDE,而是開發人員所使用的軟硬體。這類裝置是大多數開發人員唯一的生產工具,它們的好壞直接決定了開發人員的生產效率。可惜,許多人似乎並不理解這一點,很多公司只給開發人員配備普通的辦公電腦,於是開發人員也只能貢獻出普通辦公人員水平的程式。目前來看,硬體上有比較大的記憶體(8G以上),多臺顯示器(最好其中一臺可以很方便地旋轉),有用起來順手的鍵盤滑鼠(這點非常重要),軟體上有無障礙訪問Google的線路,健全開放的程式碼庫等等,應該是必須的配備。提供這些條件,一方面可以切實提高工作效率,另一方面,可以大大改善開發人員工作的心情。後一點看起來無關緊要,卻體現出對開發人員的尊重,其影響甚至超過前一點。

第二,內部交流。我見過許多開發人員,即便是與旁邊或者對面的同事交流,也不願意說話,而喜歡在IM上打字,這樣的效率非常低,更厲害的是造成隔膜——上班時間都沒話說,下班時間就更沒話說了,想要形成有凝聚力、配合默契的團隊,就始終只能是美好的願望了。所以,日常工作中一定要鼓勵面對面的交流,(尤其是多人蔘與的討論,可以專門安排地方交流),以逐漸形成面對面交流的行為習慣。不少開發人員即便自己比較悶,內心也不排斥甚至渴望活躍熱烈的工作氣氛。我曾經遇到過一名水平不錯的程式設計師,他雖然不擅言辭,卻不喜歡大公司內“死氣沉沉”的技術部,更願意呆在人人都願意說話,人人有話說的小團隊。現在,我們部門的開發人員經常會為了一些問題三五成群地交流,並不影響其他人的工作,這種氣氛還很受大家喜歡。這些例子都說明,對開發人員而言,當面對話其實是非常必要也非常合適的交流方式。

第三,工作意義。我曾說,程式設計師職業素養的體現之一就是對業務的瞭解。現實中,確實有不少一些程式設計師對業務不夠了解,不過程式設計師對業務沒有足夠的熱情只是一方面原因,另一方面,業務部門不願意讓程式設計師詳細瞭解也是常見的情況。許多公司的業務部門需要開發力量時,既不描述專案的背景,也不介紹專案的意義,只生硬地扔過來幾份文件(而且很多是粗製濫造的文件),就完成了對接。究其原因,有時候是這些人將程式設計師視作簡單的“碼農”,認為他們不需要了解業務,只需要寫程式碼即可;也有寫時候是因為程式設計師思維比較嚴謹,遵守邏輯,而不少業務部門的人缺乏這類訓練,表達想法和需求時如不夠嚴謹細緻,更習慣“看一步算一步”的野路子。前一種情況是態度上的不尊重,後一種則是能力上的欠缺(或懶惰)。但無論是哪種情況,都會給開發人員造成非常不好的影響,最終結果就是專案的支離破碎,大家都龜縮在自己的地盤上,“鐵路公安,各管一段”。其實按照我的經驗,絕大多數開發人員並不排斥理解自己所開發的軟體的實際應用和意義,以此為基礎,大多數人甚至有興趣去提出改進方案,這其實是非常好的狀態,其前提是,需要為給程式設計師提供足夠多的空間和機會去理解自己工作的意義,而不僅僅是告訴他們“你只管這麼做就好了,別問我為什麼這麼做”。

第四,個人成長。“一個人要怎樣才願意呆在一家公司?”一位前輩告訴我的是:如果這個人覺得公司有前途,自己也有前途,就會呆下來。這個答案我非常認可。但是在實際工作中,後一個“有前途”往往被忽略了。在軟體開發中這個問題更嚴重。一方面,開發人員經常被視為生產程式碼的機器,大家只關注他提交的程式,而不關注他是如何提交程式的,在工作中有什麼收穫;另一方面,很多開發人員對於前途常有持續的焦慮,又得不到解決。常見的結果就是開發任務顯得冷冰冰、硬邦邦,開發人員也感覺自己做的都是簡單重複勞動,產生倦意甚至抗拒情緒(我知道許多人會說,要想成為一名好的開發人員,就應當在簡單重複勞動中精益求精。這個道理確實沒錯,但也需要有合適的切入點,換句話說,應當讓開發人員認可精益求精的價值,並真切體會到它帶來的好處)。其實,有許多開發人員對自己的未來是有所打算的,比如有些人可能希望更瞭解業務,有些人希望更深入鑽研技術。技術團隊的領導平時應當能抽時間瞭解這些設想(如果能加以建議或指點就更好了),在安排新工作時有所照顧和側重,這樣,開發人員就可以感覺到自己的成長,覺得自己的工作是有前途的,工作起來也更有積極性。

許多年前我讀到董樂山先生翻譯的《西方人文主義傳統》,心裡從此深深打上了“人文主義”的烙印(也由此知道了“人文主義”其實和“文”沒什麼關係)。經過這些年來的工作和思考,我又認定軟體開發和其它工作並沒有迥異的差別,既然其它行業可以提倡人文關懷,引入更多的人性化因素,軟體開發也可以這麼做。因為軟體開發的特殊性,找到開發人員認可的“人文關懷”可能難度更大一些,但並非不可能,而且相當有意義。

相關文章