技術文章如何寫,才能有較好的閱讀體驗?
本文適合有一定技術積累願意與他人分享技術心得的讀者。由於並未涉及具體技術,願意寫作的讀者均可以閱讀。
技術文章如何寫作能讓讀者有較好的閱讀體驗,是一個仁者見仁,智者見智的問題。甚至很多人都認為根本不需要考慮讀者的感受,把技術寫好寫準確就可以了,這其實就是一大誤區,你的寫作如果只是給自己看,當然我也就不多說什麼,但如果你的寫作是給別人看,就一定要考慮如何寫的問題,因為這是一個資訊傳遞的過程而不是簡單的記錄。
事實上,對於一個準備開始寫作的人來說,通常是會認為自己寫的東西一定是對的。如果一定要完全正確才可以寫文章的話,那就會讓絕大多數人裹足不前。因此,寫得對不對雖然是作者應該首先要把握的,但是無論作者自己還是別人都無法在寫出文章公佈之前知道這一點,因此這不是我本文要談的重點。
我的核心觀點是:
好的技術文章,是讓符合閱讀條件的讀者,在良好閱讀體驗的情況下,看懂學會甚至掌握文章要傳達的資訊
。因此,需要寫作中不斷思考,這樣寫,讀者會有什麼感受。如果你的寫作不能讓讀者有一種收穫的喜悅,或者閱讀體驗不佳,那麼你的寫作就是有問題的。問題可能會有很多方面,我們一點點分析。
要告知讀者文章適合什麼人讀
首先要告知你寫的文章適合什麼人讀,這儘管不是最重要的條件,但你是打算一開始就告訴讀者,這文章的適讀人群,還是讓讀者需要讀完文章後再自己去判斷這文章可不可以看得懂,兩者在閱讀體驗的感覺是完全不一樣的。通常一篇文章對於某個讀者不是太淺,就是太深。正好是自己不瞭解的技術知識,自己有興趣,而又能通過閱讀看得懂的文章才是適合的好文章。因此由於讀者層次不同,你的文章給什麼人看的定位就很重要。
你把你的文章放到了部落格園首頁上,那就意味著不管什麼層次的讀者都可能點選進去。你如果不告知讀者,這個內容至少需要具備什麼樣的條件才能閱讀,對於一篇有一定技術難度的文章,初學者去閱讀它,怎麼可能高興得起來。
反之,如果你在一開頭就寫明,此文必須要有A、B、C的知識,否則還是不看為妙,那麼誤入的讀者至少可以不需要繼續往下看,或者有個心理預期,可能看不懂,不過反正自己也沒到那個層次,沒什麼關係。
如果將寫作的具體技術難度分為九級(九級最高),你打算寫一篇難度為七級的文章。此時,你不應該考慮水平在一、二、三級的讀者,而是將四、五、六級的讀者作為目標群,因為你的難度應該要讓讀者稍微費點力就夠得著的,而不是那種根本看不懂的人,這樣的定位才會更有針對性。如果你寫的內容連二、三級讀者都能讀懂,那就說明實在是太囉嗦了,細節描述過多。如果只有七級水平的讀者才能看得懂,那通常又是因為描述過於簡潔而忽視了細節。這兩種情況你的文章價值都會大大縮水。
清晰明白地指出文章適合什麼樣的人讀,這有很多方法。可以是標題、摘要或者文章開頭,只要達到提醒的作用,不要去浪費非目標讀者的時間就對了。
另外,如果可能,還應該在文章末尾提供繼續深入學習的建議,比如之後應該閱讀什麼書,看什麼文章等。也就是說,你可以為你的讀者指明瞭接下來學習努力的方向。
總之,你在一開頭就告知此文章適合什麼人讀,幫助了讀者節約了判別的時間,這是一個非常好的開始。
寫作內容的難度層級遞進
不要一上來就是關鍵知識點,那雖然是一種風格,但卻違背了知識(或者說資訊)傳遞的規律。
你在大街上看到了一漂亮姑娘,想讓她成為自己的女朋友,你不能直接上去說“做我女朋友吧”,除非你開著法拉利或許可能。你首先要和她認識,並得到聯絡方式。簡單的辦法就是去搭訕。搭訕時如果直接說“給我你的手機號如何?”顯然也是不合適的,除非你長著貝克漢姆的臉興許可以。所以你得說點不讓人反感的話。比如:“你那iphone如果開啟手勢功能,就不需要頻繁按Home鍵了。不信?你看我的……”
舉技術寫作上的例子。在講演算法時間複雜度的知識點時,你當然可以直接講時間複雜度的定義(就像大多數資料結構教材一樣),可這是很讓讀者,特別是剛學的人迷惑的,為什麼要強調這個呢?而且由於一上來就是對大O階推導,理解比較困難,讀者的體驗就相當差。
我在《大話資料結構》書中講解的辦法是先舉了從1加到100的演算法例子,對比容易想到的演算法和高斯演算法的差異,來引入演算法優劣間的差異,並詳細解釋了函式漸近增長的原理,最後再來給出時間複雜度的定義,以及推導大O階的方法。由於讀者理解了函式漸近增長的原理,再去理解時間複雜度就變得容易了,這就是層級遞進的作法。
運動員比賽前都需要熱身,男女親熱前也需要前戲。同樣,為了讓讀者進入閱讀狀態,用一些簡單的例子來預熱,用一些稍難的例子來鋪墊,然後引出要講解的重點,這樣可以更好的達到講解好知識的目的。
得用讀者可以理解的語言,而不是你認為好的語言
微博上有這樣一個段子。一位老太太想知道什麼是Facebook,約旦VC Ahmad Takatkah的解釋:
1)Facebook是一份報紙;
2)這報紙要在電腦或手機上看;
3)報紙裡只有家人和朋友的新聞,第2頁是兒子的、第3頁是妹妹的…
4)關於他們的新聞他們自己寫;
5)其中有一頁是你自己的,想寫什麼想讓誰看你說了算;
6)報紙第1頁,是全部內容摘要。
怎麼樣,是不是感覺很不錯?如果為了讓老太太理解Facebook,去提什麼這是一家社交網站,它可以向親朋好友分享照片、視訊和個人資訊等很IT化的語言,她一定是非常困惑。她可能接著就會問“什麼是社交網站”、“什麼是視訊”等問題了。
同樣,你如果想讓你的讀者閱讀體驗好,就一定要用適合他們的文字,而不是你自己喜歡的文字,哪怕你的文筆相當棒。
這一條可能是最重要的一點,資訊的傳遞最終都是為了讓讀者理解你的意圖。寫作時,一定要時刻想著用適合讀者的語言來表達。
一圖值千言
用上千個字描述不明白的東西,很可能一張圖就能解釋清楚。比如我在講解資料結構的歸併排序時,寫了很多文字來說明排序的原理,但如果沒有下面這樣一張圖,可能都是遺憾的。很多人也許就在看圖的一瞬間,就明白了前面的迷惑原來就是因為大腦裡沒有這樣一個類似的資料變換概念造成的結果。
當然,也不一定要一張完整的大圖,也可以是多張小圖和相應的文字來解釋一個動態的過程。比如下面是進解二叉樹前序遍歷的部分截圖。通過文字加分解圖的方式,對於一個知識點的說明還是不錯的辦法。當然,最好的辦法是用動畫的形式來表現,目前暫時還不容易做到。或許未來的電子書,應用動靜結合的方式將會讓讀者有更加舒適的閱讀體驗。
不過你畢竟不是在畫漫畫,圖的目的是為了更好的說明問題,如果只有圖,沒有抽象的文字來準確的表達你的意圖,可能就本末倒置了。
總之,在分析講解時,能夠通過一些圖形化的表達來說明問題一定會比純文字的表達更加容易理解。
程式碼分解講解
時常看到這樣的情況,寫作者會把超過100行的大段程式碼貼在部落格中,然後在前或後面用一段的文字說明自己要分享的觀點,這是很難讓讀者感覺到愉悅的。因為要認真讀懂你的程式碼以及你文字表達的意思,讀者就必須要頻繁上下翻頁,這可是一件非常不爽的體驗過程。
解決辦法還是有的。不妨將大段的程式碼分解成一個小函式一段說明文字,甚至是一句程式碼一段說明文字的方式來講解。這樣的好處就是說明的文字就在程式碼的旁邊,能夠很容易就檢視到了。
另外,對於程式碼的講解有時需要模擬其執行時的狀態,根據某一斷點時刻的變數變化情況描述來說明這個函式或這個迴圈是在幹什麼。這更加需要分解程式碼來分析。
很明顯,本來是貼一段程式碼,再寫一段文字就算是完事的工作,現在需要一段一段的說明,一定是更耗費精力和時間,但這是很值得的工作。這也是我在本文一再強調的是為讀者考慮而非為自己考慮的寫作方式。
多用章節條目段落
除非你的文章很短,不然我都建議儘量多分章節條目和段落。這樣讀者閱讀不會太累。
一些單機遊戲,比如極品飛車或實況足球等遊戲,一般一局的時間不會超過5分鐘。為什麼要這樣設定,因為這可以讓玩家精神集中一段時間之後得到一定的時間休息。
同樣,讀者讀的文字,如果幾千個字就組成一段話,那將是相當累的,多半情況就是閱讀不完就拉倒了。如果幾千個字分成六、七節,每一節各有四、五段,那就會好很多。讀者可以在每讀完一小節時,體會一下其內容,或者去上趟廁所。
即便是阿凡達這樣的極品大片,也是有尿點時間的,你的文章為什麼不這麼做呢?
當然,章節條目最重要的作用是有利於幫助讀者瞭解整個文章的脈絡體系,更好的把握這篇文章講解的內容是什麼。
排版、背景顏色、字型顏色、大小、型別的處理
這些本身就是一門學問,都可以專門寫本書了。好的排版是沒有標準、也沒有止境的,可以做到千變萬化、賞心悅目。我非這方面特長,就不展開了。
不過,對於大多數讀者來說,比較傳統的排版就能夠取得比較好的閱讀效果,反而過於標新立異,比如黑底白字,藝術字體等方式是不可取的。
善待讀者
這個本不應該成為一條,但還是覺得有必要提一下。你寫給自己看,把自己寫成上帝也沒人管你。可是你是寫給別人看的,你的目的不是打擊讀者,而是幫助讀者,那麼寫作中以及之後的回覆評論中,謙虛或與人為善的態度才是更值得提倡的。
人生來就是不公平的。有些人天生聰明,讀了最好的小學、中學、大學,工作在中國IT10強,甚至是世界IT10強的企業。他們自身可能也是非常努力,但由於他的一分努力總是抵得上別人兩分甚至五分的努力,加上只會越來越好人文環境和越來越多的技術資源,就算有點坎坷,最終成為技術大牛幾乎就是必然。
一個願意分享技術心得的大牛相當難得,這一點一定要非常肯定。能讓大家佩服的原因,還是因為他持續發表優秀文章的結果。但他們又時常會在表達正確技術觀點之時,順帶罵幾句犯錯誤的小菜鳥。這種自然而露的優越感總會讓一些暫時還學無所成的讀者垂頭喪氣。
我此前就說過,人都是從小長到大的,誰TM沒有幼稚過。當你成為了技術牛人的時候,不應該忘記自己當年也是有過技術困惑,也是有過掙扎、努力、失敗的情況,體諒一下那些剛剛起步的小兄弟、理解一下他們的無知和淺薄為什麼就不可以呢?他們中的有些人可能永遠也無法成為技術牛人,但他們依然可以在自己的崗位上做出應有的貢獻。你的文章如果打擊了一些人,可能就真的傷害了他們,反之,如果可以幫助到其中的一些人,其實也是你對社會的貢獻,也是你的價值體現。
其實我也知道,我的這段文字改變不了大牛的態度,他們該怎麼寫還怎麼寫。只不過我覺得上天給了他們140分的智慧,他們卻只做到了120分的成績,實在是非常可惜。也就是說,我本覺得他們可以做得更加好。不信?翻看一下曾經的日記,是不是早已經忘記了當年那壯志豪情的理想了呢?
OK,重申一下我的觀點:
好的技術文章,是讓符合閱讀條件的讀者,在良好閱讀體驗的情況下,看懂學會甚至掌握文章要傳達的資訊。我寫了一些注意的事項,都算不上新鮮內容,也未必全面,只能算是拋磚引玉。總的說來,如果你的寫作是為了分享,那麼一定要時刻考慮你的讀者,有了這樣的心態,不愁寫不好技術文章。
注:對於一些如新聞類、搞笑類的部落格不在此文指向的範圍內。本文只針對技術交流用的部落格或者圖書的寫作。