程序員寫(xiě)好技術(shù)文章的幾點(diǎn)小技巧
去年成為了內(nèi)網(wǎng)技術(shù)分享平臺(tái)的年度作者,受邀寫(xiě)一篇關(guān)于“如何寫(xiě)好文章”的文章。我本身并不喜歡寫(xiě)字,去年寫(xiě)的幾篇文章,涉及的話題自帶流量,所以閱讀量多了一些,談不上有多擅長(zhǎng)。不過(guò)我還是分享一下我自己寫(xiě)文章時(shí)用到的一些小技巧吧,希望對(duì)大家有幫助。
一 最重要的是內(nèi)容
如何讓自己有源源不斷的內(nèi)容可寫(xiě)?這與平時(shí)的積累有關(guān),多閱讀,多思考,多寫(xiě)作,真正的技巧無(wú)外乎這些。方法論層面的東西不再贅述,我重點(diǎn)講幾個(gè)具體的小技巧,直接“授之以魚(yú)”。
二 優(yōu)秀技術(shù)文章的特點(diǎn)
1. 閱讀量 ≠ 文章質(zhì)量
有些文章標(biāo)題比較吸引眼球,有些話題自帶流量,有些內(nèi)容的受眾比較廣,所以有很高的閱讀量,但這并不代表文章本身的質(zhì)量。
前幾天無(wú)意翻到一篇《超長(zhǎng)用戶(hù)行為建模在躺平家居內(nèi)容推薦中的應(yīng)用實(shí)踐》,我覺(jué)得寫(xiě)得不錯(cuò),但是內(nèi)容我完全看不懂,是專(zhuān)業(yè)領(lǐng)域的文章,受眾不多,有上千的閱讀量就已經(jīng)很不錯(cuò)了。但是另一篇 《如何畫(huà)好一張架構(gòu)圖?》 就有超過(guò) 3W 的閱讀量。當(dāng)然反例也有很多,就不再列舉了。我自己寫(xiě)的幾篇講技術(shù)細(xì)節(jié)的文章,就沒(méi)有講技術(shù)對(duì)比、討論技術(shù)發(fā)展的文章閱讀量高。內(nèi)容越專(zhuān)越細(xì),能讀下來(lái)的人就越少,但并不代表文章質(zhì)量不高,反之亦然。
技術(shù)文章盲目追求閱讀量和點(diǎn)贊數(shù)不是件好事,所以第一個(gè)小建議就是不要太關(guān)注閱讀量和點(diǎn)贊數(shù),寫(xiě)的文章對(duì)別人有用,才是最有成就感的。至于除了閱讀量和點(diǎn)贊數(shù)以外,還有什么指標(biāo)可以衡量一篇文章的好壞,歡迎大家留言討論。
2. 文章要長(zhǎng)長(zhǎng)長(zhǎng)長(zhǎng)長(zhǎng)長(zhǎng)長(zhǎng)長(zhǎng)長(zhǎng)長(zhǎng)長(zhǎng)長(zhǎng)長(zhǎng)長(zhǎng)長(zhǎng)(也別太長(zhǎng))
我翻了幾篇阿里技術(shù)公眾號(hào)里閱讀量較高的文章,各種話題都有,風(fēng)格差異很大,但是有一個(gè)共同點(diǎn):文章寫(xiě)得很長(zhǎng)。這并不代表文章寫(xiě)了很多字就是好文章,背后的真實(shí)含義是:好文章的內(nèi)容足夠豐富。
內(nèi)容豐富詳實(shí),這是一篇好文章的必要條件。還有一個(gè)條件是要包含真正有價(jià)值的內(nèi)容,不能含太多水分。
提供一個(gè)小技巧:如果你寫(xiě)了一篇文章但是覺(jué)得內(nèi)容很單薄,可以先當(dāng)成一篇筆記存起來(lái),等有了更豐富的積累之后再整理成文章。擴(kuò)展文章內(nèi)容的方法,并不是添加無(wú)意義的空話套話,而是根據(jù)文章探討的問(wèn)題延展開(kāi)來(lái)。
比如說(shuō)介紹自己解決的一個(gè)老大難 Bug,可能真正修改的代碼并沒(méi)有幾行,把過(guò)程講出來(lái)也不過(guò)寥寥幾段。這時(shí)候你就可以再分析一下 Bug 存在的原因,為什么一直拖到現(xiàn)在,再思考一下如何避免這類(lèi)問(wèn)題,遇到同類(lèi) Bug 怎樣快速排查。這樣自己想問(wèn)題的角度更全面了,文章內(nèi)容也更豐富了。
比如你想介紹一項(xiàng)自己在學(xué)的新技術(shù),發(fā)現(xiàn)自己寫(xiě)的東西其實(shí)就是官方文檔的簡(jiǎn)化版,去重之后幾乎什么都不剩了。這時(shí)候不要再繼續(xù)抄文檔了,把自己的思考總結(jié)先記下來(lái),繼續(xù)學(xué)習(xí)技術(shù),持續(xù)記錄新的內(nèi)容,有更全面的了解之后,再寫(xiě)文章。
3. 清晰的敘事結(jié)構(gòu)
優(yōu)秀的技術(shù)文章,結(jié)構(gòu)一定是清晰的,有可能目錄就代表了某個(gè)技術(shù)體系,或者代表了解決問(wèn)題的思路。
優(yōu)秀的內(nèi)容 + 清晰的結(jié)構(gòu) = 好文章
能把技術(shù)問(wèn)題講清楚,就很考驗(yàn)表達(dá)能力,這是大部分程序員比較欠缺的。對(duì)于技術(shù)類(lèi)文章,常見(jiàn)套路也不多,我簡(jiǎn)單介紹兩類(lèi)吧:
-
線性敘事,逐步推進(jìn):適用于介紹排查問(wèn)題的過(guò)程、分享設(shè)計(jì)思路、介紹項(xiàng)目的迭代進(jìn)展。
-
結(jié)構(gòu)化敘事,層層展開(kāi):適用于講規(guī)劃、做總結(jié)、畫(huà)大圖、介紹一整套技術(shù)方案。
4. 線性敘事,逐步推進(jìn)
對(duì)于這類(lèi)文章,讀者是應(yīng)該按順序一段一段看的,寫(xiě)的時(shí)候腦海中模擬讀者的視角來(lái)寫(xiě)。這類(lèi)文章的小技巧就是:模擬讀者視角,設(shè)定一條主線,有節(jié)奏的向前推進(jìn)。和講故事差不多,每一步的推進(jìn)要有邏輯,要保持思路不要斷掉。
有時(shí)候稍微加點(diǎn)趣味也是不錯(cuò)的,比如 《Flutter Widget 和 CSS 布局原理 PK》 這篇文章,目標(biāo)是分析 Widget 和 CSS 的設(shè)計(jì)差異,我把文章寫(xiě)成一場(chǎng)比賽,先介紹參賽選手,然后分了 5 個(gè) Round 開(kāi)始 Battle,然后是 Love&Peace,最后一個(gè) Happy Ending。
另外一篇 《記一次完整 C++ 項(xiàng)目編譯成 WebAssembly 的實(shí)踐》 介紹了自己嘗試新技術(shù)的心路歷程,先介紹背景,再分析需求做拆解,然后講嘗試了什么方案,遇到了什么坑,又繼續(xù)試其他方案,最終是什么結(jié)果。讀起來(lái)比較流暢。
5 結(jié)構(gòu)化敘事,層層展開(kāi)
除了按順序看的,還有不按順序看的文章嗎?有的,尤其在專(zhuān)業(yè)的技術(shù)文章里很常見(jiàn),大部分是“總-分”的結(jié)構(gòu),先講整體框架,再分章節(jié)介紹各個(gè)部分。
比較常見(jiàn)的是那種總結(jié)型的文章,比如 《平臺(tái)建設(shè)的7大問(wèn)題:螞蟻AI平臺(tái)實(shí)踐深度總結(jié)》 和 《救火必備!問(wèn)題排查與系統(tǒng)優(yōu)化手冊(cè)》 ,就是翻閱性質(zhì)的書(shū),可以通讀一遍,也可以只看其中一段,之后遇到相關(guān)的問(wèn)題,根據(jù)目錄跳著閱讀。
對(duì)于文思泉涌的人,可以一口氣把整篇文章寫(xiě)完。但實(shí)際情況是,很多時(shí)間被碎片化,可能還要引用一些專(zhuān)業(yè)內(nèi)容,可能需要查資料,寫(xiě)文章的過(guò)程會(huì)被中斷。這類(lèi)文章不是一口氣寫(xiě)完的,是先搭架子再填充完整的。其實(shí)寫(xiě)起來(lái)也很簡(jiǎn)單:先想好標(biāo)題,再劃分好目錄結(jié)構(gòu),再一段一段的填充內(nèi)容,最后再潤(rùn)色一下連接部分。文章可以不按順序看,也可以不按順序?qū)憽?/p>
我自己寫(xiě)的《關(guān)于瀏覽器、Weex、Flutter 的比較和思考》這篇文章就是先劃分好了目錄,再一點(diǎn)一點(diǎn)填充的,寫(xiě)文章的時(shí)間跨度也比較長(zhǎng),想起來(lái)一點(diǎn)寫(xiě)一點(diǎn)。
線性敘事是個(gè)鏈表,結(jié)構(gòu)化敘事是樹(shù)。
三 提升寫(xiě)作技巧
我初高中的時(shí)候比較喜歡看閑書(shū),偶爾自己寫(xiě)點(diǎn)東西,但是我作文考得并不高,這里大言不慚地聊一下怎么寫(xiě)作文吧哈哈哈哈哈。只講怎么寫(xiě)技術(shù)文章,并不能提升任何文學(xué)功底,但說(shuō)不定能幫你避開(kāi)一些小坑。
1. 碎片化記錄,結(jié)構(gòu)化整理
大部分人的問(wèn)題是不知道該寫(xiě)什么,即使已經(jīng)有足夠的積累,有明確的話題要寫(xiě),也不知道該如何下筆。這就要靠日常的積累了。
在平時(shí)工作的時(shí)候,可以建個(gè)文檔庫(kù),把日常的一些瑣碎的想法記錄下來(lái),隨時(shí)寫(xiě)隨時(shí)存。我是用手機(jī)的便簽 App 隨手記東西,比較喜歡它的語(yǔ)音轉(zhuǎn)漢字功能,工作相關(guān)、生活相關(guān),隨時(shí)隨地想起任何話題都可以記錄下來(lái)。
在有了明確話題,準(zhǔn)備寫(xiě)文章之前,先把各種碎片化的記錄收集起來(lái),形成一份“素材”文檔,然后梳理文章脈絡(luò),把素材應(yīng)用進(jìn)去。操作起來(lái)很簡(jiǎn)單,剛開(kāi)始的時(shí)候會(huì)遇到前后不通暢的問(wèn)題,那就不要直接復(fù)制素材的內(nèi)容,重新?lián)Q個(gè)表達(dá)方式寫(xiě)出來(lái)。多練習(xí)練習(xí)就好了。
2. 刻意練習(xí),先寫(xiě)再改
有了素材之后,平時(shí)可以專(zhuān)門(mén)練習(xí)寫(xiě)作能力,先寫(xiě)一小段話,明確的描述一個(gè)觀點(diǎn),然后不斷修改。其實(shí)寫(xiě)周報(bào)就是一個(gè)很好的鍛煉機(jī)會(huì)(現(xiàn)在不要求寫(xiě)了,自行練習(xí)),練習(xí)把做的事情描述清楚,說(shuō)話的方式簡(jiǎn)單點(diǎn),不要用太多高大上的詞匯。最關(guān)鍵的部分在于:寫(xiě)完花五分鐘再改一遍!讀一下是否通順,有沒(méi)有把問(wèn)題講清楚。反復(fù)修改才是提升寫(xiě)作技巧的關(guān)鍵。
用周報(bào)舉例有點(diǎn)奇怪,畢竟是郵件類(lèi)型的東西,和寫(xiě)文章差別很大,還是不要亂改周報(bào)了,改自己以前寫(xiě)的文章吧。找一篇自己以前寫(xiě)的,內(nèi)容很不錯(cuò)但是寫(xiě)得不太行的文章,重寫(xiě)一遍!這個(gè)過(guò)程既溫習(xí)了技術(shù),又鍛煉了寫(xiě)作技巧。不要覺(jué)得無(wú)聊浪費(fèi)時(shí)間,親測(cè)很有效的。
3. 注意排版和語(yǔ)法細(xì)節(jié)
對(duì)于不拘一格的程序員來(lái)說(shuō),寫(xiě)出來(lái)的文章沒(méi)有排版,就是家常便飯。不需要追求高級(jí)的排版技巧,稍微注意一下幾個(gè)常見(jiàn)的問(wèn)題就好了。
正確使用標(biāo)點(diǎn)符號(hào)(沒(méi)想到我居然在講這個(gè)……)
大部分的文章里就只有逗號(hào)和句號(hào),逗號(hào)和句號(hào)也是看心情隨意劃分,鍵盤(pán)上按到哪個(gè)是哪個(gè)。其實(shí)還有單雙引號(hào)、頓號(hào)、冒號(hào)、分號(hào)、嘆號(hào)、破折號(hào)、省略號(hào)、書(shū)名號(hào)、中文括號(hào)「」【】等等…… 使用方法可以去網(wǎng)上搜,這部分我覺(jué)得問(wèn)題很常見(jiàn),就單獨(dú)多講了兩句。對(duì)了,中文文章要用全角標(biāo)點(diǎn)符號(hào),盡量不要混用英文標(biāo)點(diǎn)符號(hào)。
添加多種展現(xiàn)形式,可參考 GitHub 的 Markdown 語(yǔ)法
如果全都是普通段落,看起來(lái)太平,可以加上無(wú)序列表、有序列表、段落引用、表格等等。行內(nèi)排版可以加上粗體、 斜體 、 代碼標(biāo)記 等,偶爾還可以用 刪除線 。
其他還有一些小的建議:
-
區(qū)分大標(biāo)題小標(biāo)題,分配的均勻一些,最多不要超過(guò)三層。
-
每個(gè)章節(jié)的長(zhǎng)短也盡量均勻一些,太長(zhǎng)的內(nèi)容就拆個(gè)小標(biāo)題。
-
重要數(shù)據(jù)給出明確的數(shù)據(jù)源,擴(kuò)展信息給出資料連接。
-
中英文混寫(xiě)的時(shí)候,在中間加一個(gè)空格。
-
注意英文的大小寫(xiě),尤其是專(zhuān)業(yè)名詞的縮寫(xiě)。
-
英文喜歡長(zhǎng)句,復(fù)合從句一層套一層;中文追求言簡(jiǎn)意賅,錯(cuò)落有致,可以多加標(biāo)點(diǎn)符號(hào),把長(zhǎng)句分隔開(kāi)。
-
寫(xiě)完之后通讀一遍,盡量少寫(xiě)錯(cuò)別字……
最后一個(gè)小技巧:多用圖片。即使圖片里只有文字,信息量也遠(yuǎn)超文字。