程序員如何寫一本書?

jopen 9年前發布 | 12K 次閱讀 程序員
 

我在過去的幾年中,寫了 4 本書。有傳統意義上的兩本實體書:《JavaScript 核心概念及實踐》和《輕量級 Web 應用開發》,還有兩本電子書《3 周 3 頁面》和《函數式編程樂趣》。當然對我而言,主職工作是軟件開發,寫作是個副業。

在寫作的過程中,有一些 有趣的 心得。

  • 寫作本身是一個很好的 學習過程 (至少是一個驅動你學習的動力)
  • 寫書非常枯燥,特別是校對的時候
  • 寫作 不會 讓你變得富有,但是 有時候 會讓你開心(不總是)

寫文章 vs 寫書

寫博客/文章和寫書還是有很大差別的,一個明顯的差異是寫文章會比較隨意,而且應該盡量保持精簡。一篇文章提供一些信息即可,應該盡量遠離細節(如果寫一篇教程,則另當別論)。而寫書則應該盡可能的深入細節,盡可能可以讓讀者依書自修。

投入與回報

首先要明白的一點是, 不要指望用寫書來賺錢 ,至少前 4 本是這樣的。粗略的算一下:我的第一本書賣了 3000 冊,每賣一本我可以得到 4 元 RMB,一共就是 12,000 元 RMB。而這本書我斷斷續續寫了三年。那是很多個周末,很多個假期,很多個夜晚的付出換來的,如果真正要計算投入產出比的話(純粹金錢上),這顯然是一個 毫不合算的事情。

作為一個參考,IBM developerWorks 的投稿,千字 200 元,一般寫5,000 字以內,也就是 800 元 RMB 左右。而要寫一篇這樣的文章,我只需要一天(當然需要數周/數月的積累)。12,000 元 RMB 需要寫 15 篇文章,如果每周寫一篇,不到 4 個月就可以寫完,而且寫文章比寫書容易多了,畢竟篇幅比較短小,易于校對。而且對于大部分開發者來說,固定在一個主題上的難度要比 15 個獨立的主題簡單的多,因為無需特別深入。

所以根據經驗,要抱著 公益 的情懷來寫書。也就是說為了讓知識更好的分享,讓你學習到的先進科學技術來幫助更多的開發者,提高他們的開發效率,讓他們可以在周末多休息一天。而至于翻 譯技術書籍,那基本上就是免費的了,完全是一個公益活動(耗時數月,斟酌字句,推敲表達方式,但是價格極為低廉:千字 60 元 RMB),所以下次見了技術書籍的譯者,就多少給他捐點吧,他們才是在 為人民服務

知識的詛咒

“知識的詛咒”是指人們在獲得了某種知識 之后 ,就無法想象 沒有這種知識 的情況了。這種現象隨處可見,比如一個你到了一個從未去過的陌生城市,遇到以為當地人,然后向他問路。當地人覺得已經說的很清楚了,但是你還是不知道該怎么走。另一個例子是:假設你不認識泰文,然后你打開任何一本 泰文 寫的小說,你只能依稀感覺到這是一種文字,除此之外你并不能從中獲取任何的信息。但是當你學習了一段時間 泰文 之后,再來看這本小說,之前的那種感受就再也沒有了。

程序員如何寫一本書?

寫書的時候,你首先需要具備某種知識。但是寫書的目的是將這些知識傳遞給那些不具備此知識的人,而根據“知識的詛咒”,你又無法確知那些初學者會遇到哪些問題!解決這個問題的方法就是找初學者來試讀。而且為了保險起見,還應該找盡可能多的人來試讀。

寫作方式

一種方式是自下而上的,寫一些獨立的文章,最后發現可以串起來,然后形成一本書,另一種方式是自上而下,但是又會逐步調整。根據經驗,不論是寫一 篇簡單的博客,還是寫一本書,都需要按照自上而下的方式。隨心所欲的寫下去,基本上都收不住,而且整個文章支離破碎,貌似有很多內容,但是不成章法,讀者 也無法輕松的獲取知識。

先列出大的章節,然后逐步細化,但是未必是按照順序來寫。先編寫自己最熟悉的部分,然后逐步完善。例子的選取需要精妙而恰當,最好有圖例來說明。

配圖制作

一般而言,我在書中會使用兩種圖:流程圖和一些截屏。截屏通常使用 Mac OSX 自身的功能就已經足夠,而流程圖我會采用一些額外的工具如:

  • graphviz
  • keynote/sketch

程序員如何寫一本書?

用 Graphviz 畫圖的好處就是可以將圖像代碼一樣放入版本庫來管理。

除此之外,我還學習了一些設計軟件的基本用法,事實上只需要用一些簡單的元素就可以做出非常專業的配圖:

  • 字形/字體(大小,粗細的變化)
  • 顏色(基本的配色理論就可以做出很舒服的配色)
  • 層次(尺寸,位置,顏色的深淺)
  • 陰影

程序員如何寫一本書?

代碼格式

書中實例需要很多代碼來說明,如果是制作電子書的話,可以使用 Markdown 預處理器自帶的功能來高亮。另外如果需要 RTF 格式,可以使用這些工具:

  • highlight 工具
  • intelij 中的插件 copy on steriod

這里有一篇博客來說明如何將你的代碼帶著格式拷貝到剪貼板中,拷貝之后,就可以將這些內容粘貼到 Word 或者 Keynote 中了。

jest.dontMock ('../components/headline.jsx');

describe ('Headline', function() { var React = require ('react/addons'); var Headline = require ('../components/headline.jsx'); var TestUtils = React.addons.TestUtils;

  it ('#render', function() { var text = "this is a title"; var headline = TestUtils.renderIntoDocument (<Headline title={text} />);
    var title = TestUtils.findRenderedDOMComponentWithTag (headline, 'h4');
    expect (headline.getDOMNode ()) .toBeDefined ();
    expect (headline.getDOMNode () .textContent) .toEqual (text);
  });
});

一些潛在的

在寫作的過程中,會有一些潛在的坑。這些所謂的坑是新人可能無法想到的。相對于言之無物,不知如何下筆,最痛苦的其實在于 平淡 。大部分時候,你可能很容易就能寫出開頭,但是很難堅持到最后。即使好不容易寫完了第一版,后續的重讀和修改,會讓你苦不堪言。

內容寫好之后,樣式是下一個重要的問題,好的內容需要有與之匹配的排版。在中國,作者不但要負責內容,還要負責一些排版的事情。這一點非常奇葩,但是又是實情。這也是我更推薦電子版的原因(排版更加美觀,選擇更加多樣,而且一旦有問題可以更容易的修改)。

另外一個問題是錯別字檢查!檢查錯別字對于作者來說,是一件非常困難的實情。而對于讀者來說,則是一件很容易的事情。這跟 知識的詛咒 的道理一樣。

程序員如何寫一本書?

發布方式

實體書

傳統的出版方式有一些明顯的問題,這些問題已經和現代的知識傳遞方式產生了沖突:

  1. 時滯性(新技術的更新速度遠遠超過審批,印刷等流程的時間)
  2. 排版(如何低成本做到語法高亮,或者彩圖)
  3. 更新頻率(當技術更新之后,如何更新,是傳統紙質書無法解決的問題)

傳統的出版方式有點像傳統的軟件開發,一本書從開始寫作到最終出版,要經過很多環節。忽略掉寫作過程,從交稿到出版會經歷很多次審核和校對,可能 會歷時4-8 個月,著這個過程中,很多東西都可能發生了變化,一個典型的例子是《用 AngularJS 開發下一代 Web 應用》,原版為英文版,翻譯成中文版再到出版之后,書中的很大一部分內容已經過時。讀者拿到書之后,會發現書中的內容已經和當前的版本/文檔不匹配了。這 種現狀隨著技術的更新速度和頻率還會再加劇。

第二點是排版。我聽說國內有些出版社已經開始接受 Markdown 作為稿件的格式,但是大部分還采用 Word 或者 WPS 等格式,這樣排版就變成了一個大問題。以我自己為例,我的原稿用 Markdown 寫,但是寫了幾章之后不得不切換到 Microsoft word 上,而我自己的 Mac OSX 下的排版到編輯的 Windows 下就會變樣,而且還會涉及字符集,字體,Word 版本等等問題的影響,最后導致印刷出來和原始稿件出入很大。

最后一點是更新頻率,如果發現了錯別字或者錯誤的地方(即使之前檢查過多次,仍然會有漏網之魚),由于實體書的特殊性,一般需要等到再次印刷才能解決。這意味著先購買的讀者會承擔一些風險,更新后的版本又如何讓讀者看到呢?總不能又買一本吧。

但是這些問題都可以通過電子書來很好的解決。首先,電子書可以隨時更新,最低限度的降低時滯性。排版上來說,作者可以使用 Markdown 來編寫,而展現則可以應用一些預定義的模板來完成。最后,更新頻率完全可以控制,對讀者來說風險更低,因為電子版書籍的可以很容易的追蹤交易記錄,從而得 到免費的更新過的版本。

電子書

目前已經有很多的渠道可以發布電子書,比如 gitbhook,知筆墨。這些應用的出現,大大降低了發布 書籍 的成本,我的《函數式編程樂趣》,用了 3 天就完成了草稿,而發布只需要數秒。

另外一個問題是書籍的價格和作者的收入。一本書定價 50 元 RMB,出版社給作者的版稅是8%,也就是說,沒賣出一本,作者可以得到 4 元,如果你的書非常暢銷,這還是一個不錯的價格。但是可能 90% 的書籍都不會是暢銷書(就好比每個班級都會有優等生,但是他們僅占全班人數的 10% 一樣)。這對作者是一種浪費:你需要耗時數月甚至數年來寫一本書,然后市場的反饋又非常慢(畢竟你無法出版一本未完成的書)。

我在 selfstore.io 上有兩本電子書:《3 周 3 頁面》和《函數式編程樂趣》,《3 周 3 頁面》定價為 16 元,每賣出一本,扣除掉交易費之后,我可以得到 14.7 元。

對我來說,這樣可以得到更多的回報,對于讀者則可以更加快速的得到更新,而且由于有預覽版和一系列的其他信息,還可以在很大程度上降低讀者的風險 (更不用說快遞費,等待時間等問題)。我在 gitbook 上的統計顯示,《3 周 3 頁面》已經被累計下載了 28,861 次,實際的讀者也將近5,000。而且沒有任何的審核流程,也沒有排版的時間浪費,我只需要關注內容即可。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!