官术网_书友最值得收藏!

2.7.1 代碼的溝通價值

1. 50%以上的時間是用于溝通的

看到這個標題,讀者可能會很詫異:

“代碼不是由計算機來執行的嗎,怎么會是一種表達方式?”

“這不是講如何寫代碼的書嗎,怎么好像是在講語文?”

我想問讀者一個問題:在做軟件項目的過程中,我們的時間都用在哪里了?

有些讀者可能會說,用來寫代碼了。還有些讀者可能會說,如書中介紹的,用在做需求分析、系統設計、編碼、測試、上線等工作上了。

在差不多20年前,我看過一本介紹軟件工程的書,這本書告訴我,在一個項目中,超過50%的時間是用于溝通的。

在很多公司,軟件工程師的很多時間都花在了開會上。很多人告訴我,只有晚上才有時間寫代碼,白天被安排了各種會議。而如果將“溝通”僅僅理解為“開會”的一種形式,就有些狹隘了。

溝通方式包括:面對面交流、發送郵件、基于聊天工具(學名叫Instant Message)溝通、寫項目文檔、寫代碼等。

2. 寫代碼也是一種溝通方式

寫代碼也是一種溝通方式!

對于一名軟件工程師來說,其實有相當大比例的時間是通過閱讀代碼來和他人溝通的。例如,當你給同事做代碼評審(Code Review)時,你和這位同事是基于被評審的代碼進行溝通的;當你接手一個項目的代碼時,你和之前參加過這個項目的同事是在做跨越時間和空間的溝通;有時,你也需要閱讀自己曾經寫過的代碼,這是你在和曾經的你進行溝通。

從你的過往經歷來看,你認為這種溝通方式順暢嗎,你感覺愉快嗎?在很多次現場交流中,我曾經問觀眾:

“你在閱讀前人的代碼時感到很舒服,并希望能和寫出這段代碼的同學握手。遇到過這種情況的同學請舉手。”

現場舉手的觀眾不能說沒有,但也只有寥寥幾個。我繼續問:

“你在閱讀前人的代碼時認為代碼質量很差,甚至想罵上幾句。有這種情況的請舉手。”

每次現場都有好幾位觀眾會很積極地把手舉起來。可見,對所接手的代碼有較差閱讀體驗的軟件工程師比例肯定不低。

3. 代碼為人而寫

在20多年前,計算機相對于人力成本而言是比較昂貴的,CPU的性能比較差,編譯器也做得不夠好,在某些場景下軟件工程師還需要為提高性能而不得不在代碼的編寫方式上做一些特殊考慮。我記上大學時有位老師曾經講道:“需要將循環手工展開,以提高執行的性能。”那時的代碼可以稱為“為機器而寫”。

但是,現在的情況已經發生了很大變化。CPU的性能有了很大提高,編譯器也變得非常強大,對于我們所了解的很多優化技巧,編譯器都已經幫忙做了相關處理。相對于代碼的編寫,長期維護代碼的成本更高,軟件工程師的更多時間其實是花在閱讀和維護代碼上了。除了少數底層的代碼,大部分的代碼應該是“為人而寫”,也就是說代碼要有很高的可讀性。

在代碼的可讀性方面,如果希望達到一個理想化場景,可以用下面幾點來概括。

(1)在閱讀別人代碼時就感覺像在閱讀自己的代碼。如果沒有一個很好的規范,每個人都有自己的“風格”,那么在閱讀別人的代碼時,經常需要一個“適應”過程,這實際上降低了代碼的閱讀效率。

(2)閱讀代碼時能夠專注于代碼邏輯,而不是格式。在閱讀代碼時,最需要看懂的是代碼的邏輯。但是由于很多軟件工程師的代碼寫得不夠規范,代碼的格式無法準確傳遞出代碼應有的邏輯。在這種情況下,代碼閱讀者只好通過自己的大腦來“模擬”一次重新格式化(Re-Format),然后才能很好地理解代碼的邏輯。在很多時候,我恨不得立刻動手將所閱讀的代碼的格式進行優化,否則閱讀起來真的很吃力。

(3)Don’t make me think(別讓我思考)。這是一本書的名字,這本書是講交互設計的。在代碼的可讀性方面,“別讓我思考”也是軟件工程師應該追求的目標。除少數算法邏輯需要非常復雜的代碼外,對于大部分的業務和系統代碼來說,這是可以實現的目標。

4. 表達能力很重要

表達能力對于一個人的發展是非常重要的。

一般在代碼編寫上表達不好的軟件工程師,在其他方式的表達上也會存在問題,其他表達方式包括寫文檔、發送郵件、寫PPT、口頭溝通等。

我始終認為,軟件工程師最需要提高的職業素養并不是編碼的能力,而是在語文和哲學方面的素養。很多軟件工程師的大學專業都屬于理工科,他們往往容易忽視語文和哲學學科的學習。我在上中學時,語文學得不太好,和數理化三科相比要差很多,后來才發現文史哲這些學科對從事計算機行業的相關工作也是非常重要的。

語文學得不好,會影響表達能力,更會影響閱讀和學習能力。如果表達能力不好,那么你說的話別人聽不懂;如果閱讀能力不行,那么別人說的話你也聽不懂,抓不住重點。

我們可以從哲學這個學科中了解世界的很多基本規律,如果在工作中違反了這些規律,一定會撞得“頭破血流”。比如,軟件中很重要的一條規律是“沒有完美的系統,要在很多指標間做權衡。”如果一個人告訴你,他研發的系統在各項指標上都是最優的,你幾乎可以立刻斷定,他是在說謊。

邏輯學也是哲學的重要組成部分,軟件研發非常依賴于準確和嚴密的邏輯。寫代碼需要依靠嚴密的邏輯,軟件設計推導也需要依靠嚴密的邏輯。我曾經看到過不少系統設計中出現了很多邏輯跳躍,仔細推敲后就會發現這是邏輯的紕漏,這樣的系統早晚出問題,是經不起時間的檢驗的。

因此,我強烈建議,請從事軟件開發的讀者多在語文和哲學學科上下功夫。

主站蜘蛛池模板: 于都县| 密山市| 黑山县| 志丹县| 成都市| 咸宁市| 广丰县| 烟台市| 澄江县| 敦化市| 石阡县| 本溪| 青浦区| 石泉县| 达孜县| 临安市| 安龙县| 烟台市| 香港| 新晃| 漾濞| 开平市| 水富县| 贡嘎县| 合山市| 正蓝旗| 镇坪县| 衡阳市| 曲阳县| 渝北区| 会同县| 东辽县| 荥阳市| 寿光市| 南平市| 永州市| 永清县| 来安县| 积石山| 霍林郭勒市| 杭锦后旗|