程序員怎樣才能寫出一篇好的博客或者技術文章?


謝邀 @justjavac,我覺得這個問題很適合我(da)回(guang)答(gao)。這是我寫過最長的回答,平時都是抖機靈和打廣告。

(ps: 我是一個不加班的閑人,每天有大把的時間刷GitHub,寫博客。從我大二的時候,大概六年前開始寫技術博客,到現在已經有540+了,大概每年會寫一百篇左右。忘寫自己的博客地址了: https://www.phodal.com/ )

這個答案由四部分組成:

  1. 博客的流量來源
  2. 不同文章類型的寫作要點
  3. 如何寫博客
  4. 如何收集寫作的靈感

流量來源

首先,我將技術博客分為下面幾種類型:

  1. 技術細節型。頻率: 每天幾次,15~30分鐘可以寫完。
  2. 乾貨型。頻率: 每月幾次,1~2小時可以搞定。
  3. 實踐總結型。頻率: 每周1~2次,2+小時以上的時間。
  4. 雜談與雞湯型。頻率: 每季度幾次,少則幾小時,動則上月。

接著,奉獻上一章我的博客的用戶來源圖,分析完大概如下:

&" dw="565" dh="444" class="origin_image zh-lightbox-thumb lazy" w="565" data-original="https://pic3.zhimg.com/d10e850c549258a3a2d8f7025d25f95f_r.jpg" data-actualsrc="//i1.wp.com/pic3.zhimg.com/50/d10e850c549258a3a2d8f7025d25f95f_hd.jpg">

前三者可以帶來很多的流量,後者可以帶來大量的評論啦。

前三者可以讓你在Google上有一個好位置~~,後者可以讓你在用戶心中有個好位置。

通過社交媒體可以讓第四種類型的文章,有大量的評論和轉載。

乾貨型和實踐總結型的文章通過聚合網站來傳播的效果最好。

在Google中有個好位置意味著——第一的位置會有50%以上的用戶訪問,這一點很重要哦~~。再放出神圖:

&" dw="456" dh="408" class="origin_image zh-lightbox-thumb lazy" w="456" data-original="https://pic4.zhimg.com/7737b1749edc849c785ef4e0d6ce82e8_r.jpg" data-actualsrc="//i1.wp.com/pic4.zhimg.com/50/7737b1749edc849c785ef4e0d6ce82e8_hd.jpg">

首先作為一個專業的程序員,我們會用某個關鍵詞去搜索,如「InsecurePlatformWarning: A true SSLContext object is not available.」 :如果這時你的標題就是《Python 解決 InsecurePlatformWarning: A true SSLContext object is not available》,那麼你就找到了你的用戶了。

這是我之前用了5分鐘不到的文章寫的一篇文章,它在半年的時間裡帶來了6,599個訪問量。它在Google的搜索結果中排第一:

&" dw="800" dh="478" class="origin_image zh-lightbox-thumb lazy" w="800" data-original="https://pic4.zhimg.com/2bd597ff03205031060c4a22a8a900ec_r.jpg" data-actualsrc="//i1.wp.com/pic4.zhimg.com/50/2bd597ff03205031060c4a22a8a900ec_hd.jpg">

雖然很不情願地被排名第二的文章抄襲了——但是我還是第一,這該死的偽原創

而用戶不會只訪問你的一個頁面的:

&" dw="1000" dh="500" class="origin_image zh-lightbox-thumb lazy" w="1000" data-original="https://pic3.zhimg.com/802f6b0d07b4f6533c973ef8cdbbb901_r.jpg" data-actualsrc="//i1.wp.com/pic3.zhimg.com/50/802f6b0d07b4f6533c973ef8cdbbb901_hd.jpg">

一般來說,前三種類型的用戶獲取到他們想要的信息就走了,不會留下評論。至於第四種類型,沒有大V的光環,偶爾文章被轉企業V轉轉也能多個幾十個粉絲。所以我沒有第四種類型的文章太多的經驗哈。

不同文章類型的寫作要點

接著, 讓我們再看看上面的幾種類型:

技術細節型

在我的博客里很大一部分文章都是這一類,主要是原自早先對SEO的研究。對於先這種沒有光環的人來說,這是我博客的主要流量來源。這也是讓我堅持下去的動力,每天有大概三百個用戶來自搜索引擎。

這種類型主要來自於日常工作,但是好像寫這一類的人不多。每天我們都會遇到不同的技術問題——如某個第三庫更新,某個瀏覽器bug,如何使用某個技術。因此,我們就會用這樣的關鍵字和詞去搜索,反正大部分教程序員使用Google的文章就是這麼寫的。

既然你想要這樣的搜索,那我就直接把搜索結果放前面好了,如:

  1. Mac OS Laravel 安裝
  2. Homebrew versions安裝特定版本軟體
  3. brew versions gradle安裝指定版本gradle

如果你也擅長用Google的話,我想你就懂了奧秘。標題的前半部分是關鍵字,後半部分指名意圖。

接著,就是貼解決方案和代碼咯~~。在這時候需要注意幾點:

  • 試著去表達一些技術上的細節,也會省去一些技術上的細節。
  • 以自己學習的角度去想怎樣寫可以一步步下來。
  • 加入一點點自己的情感,博客和文檔是不一樣的。(詳細見下文)
  • 編寫更簡潔的內容,因為技術博客與此文不同的是,技術博客是面向尋找信息的人。

乾貨型

一般來說,這種類型的文章更類似於GitHub上的那些Awesome類型的Repo。說說幾個標題,大概可能就會有點感覺了:

  • 每個程序員必知之SEO
  • 作為一個前端工程師你了解你的小夥伴么 - chrome
  • App 上架相關事宜、解決技巧
  • 20 個非常有用的 Java 程序片段
  • Java 開發者不容錯過的 12 種高效工具

通常來說,這一類型的文章都是作者一段時間對於某一個東西的總結,非常有收藏價值。故而,這種類型的文章會在GitHub或者聚合網站上比較受歡迎。所以,它也更容易傳播。

但是寫起來的難度比較大,這依賴於你的使用經驗。所以,也不是一天、兩天就能搞定的。

實踐總結型

看看標題,可能大家都知道這一類文章要怎麼寫了:

  • JavaScript之閉包與高階函數(一)
  • 編輯-發布-開發分離:git作為NoSQL資料庫
  • 構建基於Javascript的移動CMS——添加滑動
  • Android開發從零開始

這通常是一系列的文章,而這一系列的文章一般是連續寫出來的。也因此,我們可以發現很大的書都是由這一類的文章衍生出來的。

這一類的文章更像是乾貨型和技術細節型的結合,面向特定領域的技術,也屬於乾貨。對於這種類型的文章來說,更依賴於代碼——讀者需要依據代碼一步步往下深入。

所以在這一類型的文章中代碼往往比較重要。

雜談與雞湯型

來幾一些標題:

  1. 為什麼整個互聯網行業都缺前端工程師?
  2. 程序員職業生涯中應該思考的10個問題
  3. 怎麼減少編程中的 bug?
  4. 為什麼大公司看起來都那麼糟糕?

BlaBla,簡單地來說這一類文章基本上是沒有技術的,都是一些以理論為主的概括。同時,寫這一類文章的時候,也意料著可能在某一領域有一定的水平——寫出來才會有人看。而由於偏向理論,這一類文章看的人往往會更多,因為它並不傾向於使用領域特定的技術。

所以這種類型是受眾很廣的文章,並且也像雞湯一樣容易傳播。同時,這種類型的文章,更依賴於社區媒體及聚合網站的傳播。因為大部分情況下,用戶不會這麼去搜索文章的。

如何寫博客

對於博客的內容來說,下面幾點很重要哦:

  1. 標題、小標題。一個好的標題會帶來更多的流量的。
  2. 內容。以代碼為例的文章,最好有代碼。代碼可以放在GitHub上,一舉兩得。
  3. 圖 —— 一圖勝千言,如本文第一節中的框架圖。,一個框架圖可以省去你的很多話語。
  4. 排版,又可稱為UI設計。基本的語法高亮要有,容易閱讀也要有。最簡單就是白底黑字。

下面有我之前在《招聘筆杆子——成為筆杆子》一文中說到的一些要點:

標題——必須重要,類名

對於寫博文的人來說,重點的是如何清楚的去表達他們的想法,標題算是其中之一,這個也就是為什麼標題黨成為了標題黨,而《設計模式》成為了經典。剛開始學編程的時候,更吸引你注意力的可能是《72小時學會Javascript》,而不是《Javascript 權威指南》,興許讓你買前者的原因是因為你能看懂前者,而後者不僅看不懂,而且價格更貴。只是一年以後,《72 小時學會Javascript》被你扔到了垃圾箱,而《Javascript 權威指南》卻放在了原來放那本書的位置上。你定義的類難道僅僅應該是class class1么?

小標題——地圖,method

小標題有點類似於sitemap.xml,只是他就是站點地圖,一點就到了相應的地方。他應該直接了解的說這是開始菜單,標題欄,菜單欄,而不應該是簡簡單單的第一章,如果你真是那樣寫的話,你寫的函數想必是

def fun1
end

如果你寫的是getdata那麼,我想你的函數名應該和你的文章一樣,告訴人們,你要的是getdata。所以不要吝嗇你滑鼠的一下,它可以承受上百萬字的點擊。如果因為那樣壞了,你可以告訴我,我可以幫你免費換一個歐姆龍的微動,前提是你的滑鼠可以換。如果是HTML那麼應該是h2 h3,markdown也就是用得比較多的github上的README.md的##或者是###

內容——函數體

這裡可不是讓你用一個讓人難以理解的Magic Number,你寫得越複雜,別人看的時間就越久,通俗易懂,就是一個很好的開始。你可以把一個個複雜的方法分解出來,或者提煉函數,或者重命名。當你相信你看不懂你的文章,正如你看不懂你寫的hello,world我想你是時候去重構你的函數了。

複雜的部分,就用段落來解決,一個函數如同一個段落只應該表達一個思想,太長了就如同這篇文章一樣沒有多少人會認真去看。你需要給你寫的一個精美的代碼加一個注釋,所以你也需要給你複雜的地方加上個(PS)。

在編寫內容的時候需要注意下面的幾點:

  • 代碼。必要的時候貼出代碼,會是一種快速有效的方法,工作的時候是為了完成某個任務。
  • 列表。列表可以簡明扼要的說明你想要表達的內容。
  • 圖表。一張流程圖可以說明程序的步驟,一個表格可以作好一個對比。
  • 標題。標題的好處,可以讓用戶快速定位,讓用戶找到想要的內容。
  • 鏈接。一個好的URL對於使用英文的人來說,可以利於SEO,對於中文,使用的人可以判斷出文章的專業與否。

引言——README

我想都會去看的,無論是在破解軟體的時候,還是github上面的項目。簡單的說說,這篇文章是幹什麼的,這個程序是幹什麼的。大家都會,不是么?

沒有什麼好寫的?

說說你是怎麼開始編程吧,然後寫在你的博客上,你會發現你會愛不釋手的。

如何收集寫作的靈感

下面是我最近在做的,感覺很不錯,推薦一下咯:

一般是先有個論點,然後再論據,最後才寫。

第一步,在平時把想到的一些能寫的文章用TODO的形式列出來,如我用的是「奇妙清單」。下面就是我最近想寫的一些文章的一些標題:

&" dw="720" dh="1280" class="origin_image zh-lightbox-thumb lazy" w="720" data-original="https://pic4.zhimg.com/60eb7b6555e490f6eaacec97454286f5_r.jpg" data-actualsrc="//i1.wp.com/pic4.zhimg.com/50/60eb7b6555e490f6eaacec97454286f5_hd.jpg">

但是有一些還沒靈感,只是想到了個大概——所以有的是只是一個標題。這些文章大部分都屬於雜談型的,想到什麼就說點什麼,但是會有個核心。

第二步,在平時偶然會有點靈感的時候,就用Google Keep創建一個新的記事,稍微寫幾句,提醒一下自己咯。在這一步,相當於就是找一些論據來支撐自己的觀點,等到這些觀點差不多的時候就可以寫了。

&" dw="720" dh="1280" class="origin_image zh-lightbox-thumb lazy" w="720" data-original="https://pic3.zhimg.com/565c8ee86293a33431302992eee614b4_r.jpg" data-actualsrc="//i1.wp.com/pic3.zhimg.com/50/565c8ee86293a33431302992eee614b4_hd.jpg">

第三步,便是寫。寫的時候其實沒有啥感覺,就如同我之前在《編程同寫作,寫代碼只是在碼字》一文中所說的。不得不再說說這個標題,一看就知道要寫什麼了~~。

真正的想法都在腦子裡,而不在紙上,或者IDE里。

所以,其實寫代碼的時間很短,真實長的是想出怎麼寫,文章也是如此。

原文鏈接:https://www.phodal.com/blog/programmer-how-to-write-a-good-article/

歡迎關注我的微信公眾號哈:

http://weixin.qq.com/r/mnVYQHrEVicprT4j9yCI (二維碼自動識別)


貼一篇總PV超過33萬的譯文: http://gashero.iteye.com/blog/2075324 。在iteye(原javaeye)上還沒見到有其他博文的PV能超過此文,我的博客也因為此文成了iteye博客2014年度總排名的第二位。

一篇技術文章的命運,當然要靠乾貨的奮鬥,但也要考慮到歷史進程。

2014年6月3日凌晨2點開始的Apple發布會,發布了新的iOS編程語言Swift。早上五點多我被兒子叫醒,閑來無事就把Apple同步公布的一份英文文檔的第一章翻譯了出來。早上10:14,發布到網上。於是大家早起上班看到Swift語言發布的同時,就看到第一份中文入門了。

我發布這篇文章的微博如下,172轉發,63評論。另一位朋友幫我發布的微博則超過500轉發。評論里一片的驚呼出手太快。

&" class="origin_image zh-lightbox-thumb lazy" w="1242" data-original="https://pic2.zhimg.com/v2-e9fd7d494c8937f7a06fb887ae617b14_r.jpg" data-actualsrc="//i1.wp.com/pic2.zhimg.com/50/v2-e9fd7d494c8937f7a06fb887ae617b14_hd.jpg">

在金融領域有這樣一種說法,即想要賺錢必須符合3個條件之一:Be First、Be Smart、Be Cheat。此文的重點就在Be First。Be Smart的玩法則對應了某個領域最完善的文檔。Be Cheat則可以認為是講段子之類的,或者是充分利用平台的知名度。

Be Smart的舉個例子: 擴展和嵌入Python解釋器 Extending and Embedding the Python Interpreter 。這是國內至今最完整的Python擴展模塊的文檔,6.8萬字。

從我的角度來看,想要獲得足夠的瀏覽量,還是Be First的效果更好。過去的十多年我也做過多次介紹最新的技術到國內。所以我的個人簡歷里有個列表,即由我翻譯首次引入國內,或極大的推進了該項技術在國內的應用程度的技術:

  1. mod_python:翻譯version3.2.8文檔,比國內的第一份文檔規模擴大3倍多
  2. zenoss:國內第一份中文文檔
  3. Twisted網路編程必備:翻譯完該書的1/2,開始讓網上的文章不僅限於hello world
  4. Stackless Python:與朋友合作翻譯,首次引入
  5. DBUtils:我的翻譯已被官方採用
  6. Programming Erlang:翻譯了該書的1/3並發布到網路
  7. SQLObject:翻譯官方文檔
  8. SQLAlchemy:翻譯官方文檔
  9. Python的C擴展模塊:翻譯了Python標準發行版中《Extending and Embedding》的70%,讓網上的例子不在局限於hello world
  10. sendpkt:我的開源項目,讓Python具備了發送數據包的能力,不再僅僅監聽
  11. pysqlite:國內最全的文檔是我從官方文檔翻譯的
  12. greenlet:同上
  13. protobuf:同上
  14. greenlet/eventlet:由我主要引入國內


推薦閱讀:

博客在現在中國發展的情況如何?
在瀏覽量和廣告收益不足的情況下,個人博客該如何發展下去?
有哪些設計類、程序類個人博客、小站值得推薦?
2013 年 10 月推出的開源博客程序 Ghost 相比 WordPress 有哪些優勢?
在中國靠做 WordPress 主題賺錢是否靠譜?

TAG:博客 | 程序員 | 寫博客 |