自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

程序員如何寫一本書

移動(dòng)開發(fā)
寫博客/文章和寫書還是有很大差別的,一個(gè)明顯的差異是寫文章會(huì)比較隨意,而且應(yīng)該盡量保持精簡。一篇文章提供一些信息即可,應(yīng)該盡量遠(yuǎn)離細(xì)節(jié)(如果寫一篇教程,則另當(dāng)別論)。而寫書則應(yīng)該盡可能的深入細(xì)節(jié),盡可能可以讓讀者依書自修。

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

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

  • 寫作本身是一個(gè)很好的學(xué)習(xí)過程(至少是一個(gè)驅(qū)動(dòng)你學(xué)習(xí)的動(dòng)力)

  • 寫書非??菰?,特別是校對的時(shí)候

  • 寫作不會(huì)讓你變得富有,但是有時(shí)候會(huì)讓你開心(不總是)

寫文章 vs 寫書

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

  • 投入與回報(bào)

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

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

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

  • 知識(shí)的詛咒

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

39.png

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

寫作方式

一種方式是自下而上的,寫一些獨(dú)立的文章,***發(fā)現(xiàn)可以串起來,然后形成一本書,另一種方式是自上而下,但是又會(huì)逐步調(diào)整。根據(jù)經(jīng)驗(yàn),不論是寫一篇簡單的博客,還是寫一本書,都需要按照自上而下的方式。隨心所欲的寫下去,基本上都收不住,而且整個(gè)文章支離破碎,貌似有很多內(nèi)容,但是不成章法,讀者也無法輕松的獲取知識(shí)。

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

  • 配圖制作

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

  1. graphviz

  2. keynote/sketch

37.png

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

除此之外,我還學(xué)習(xí)了一些設(shè)計(jì)軟件的基本用法,事實(shí)上只需要用一些簡單的元素就可以做出非常專業(yè)的配圖:

  1. 字形/字體(大小,粗細(xì)的變化)

  2. 顏色(基本的配色理論就可以做出很舒服的配色)

  3. 層次(尺寸,位置,顏色的深淺)

  4. 陰影

38.png

  • 代碼格式

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

  1. highlight工具

  2. intelij中的插件copy on steriod

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

  1. jest.dontMock('../components/headline.jsx'); 
  2. describe('Headline', function() { 
  3.   var React = require('react/addons'); 
  4.   var Headline = require('../components/headline.jsx'); 
  5.   var TestUtils = React.addons.TestUtils; 
  6.   it('#render', function() { 
  7.     var text = "this is a title"
  8.     var headline = TestUtils.renderIntoDocument(); 
  9.     var title = TestUtils.findRenderedDOMComponentWithTag(headline, 'h4'); 
  10.     expect(headline.getDOMNode()).toBeDefined(); 
  11.     expect(headline.getDOMNode().textContent).toEqual(text); 
  12.   }); 
  13. }); 
  • 一些潛在的坑

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

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

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

36.jpg

發(fā)布方式

  • 實(shí)體書

傳統(tǒng)的出版方式有一些明顯的問題,這些問題已經(jīng)和現(xiàn)代的知識(shí)傳遞方式產(chǎn)生了沖突:

  1. 時(shí)滯性(新技術(shù)的更新速度遠(yuǎn)遠(yuǎn)超過審批,印刷等流程的時(shí)間)

  2. 排版(如何低成本做到語法高亮,或者彩圖)

  3. 更新頻率(當(dāng)技術(shù)更新之后,如何更新,是傳統(tǒng)紙質(zhì)書無法解決的問題)

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

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

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

但是這些問題都可以通過電子書來很好的解決。首先,電子書可以隨時(shí)更新,***限度的降低時(shí)滯性。排版上來說,作者可以使用Markdown來編寫,而展現(xiàn)則可以應(yīng)用一些預(yù)定義的模板來完成。***,更新頻率完全可以控制,對讀者來說風(fēng)險(xiǎn)更低,因?yàn)殡娮影鏁目梢院苋菀椎淖粉櫧灰子涗?,從而得到免費(fèi)的更新過的版本。

  • 電子書

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

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

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

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

責(zé)任編輯:倪明 來源: Code and Life
相關(guān)推薦

2011-04-15 10:38:31

程序員

2012-11-12 09:55:36

云計(jì)算盤古云

2020-07-10 14:04:17

編程開發(fā)

2021-11-22 17:55:56

Python 開發(fā)編程語言

2013-08-19 14:01:01

程序員創(chuàng)意

2013-12-13 13:38:32

C程序員

2016-06-03 15:18:45

程序員

2015-05-05 09:26:31

Java程序員程序員書籍

2021-09-26 17:18:49

AI GPT-3人工智能

2015-12-31 09:55:15

2015-04-13 14:07:01

程序員100到1的輸出

2018-07-04 09:30:07

Python書籍程序員

2020-11-26 16:50:21

書籍拖延癥

2010-01-04 10:07:03

程序員

2018-07-23 08:45:00

程序員能力水平

2018-06-19 15:15:44

程序員Java書籍

2015-04-03 11:15:32

程序員如何寫簡歷寫簡歷技巧

2015-07-22 09:43:30

2021-01-29 10:59:33

人工智能

2015-05-13 09:57:14

C++靜態(tài)庫與動(dòng)態(tài)庫
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號