標籤:

想學習nodejs 有什麼書可以推薦的?


nodejs 這種三天一改版的東西,看書太晚了,要看官網和各種 npm 包的文檔


《Nodejs系列課程,從入門到進階幫你打通全棧 - 知乎專欄》

本課程由社區博主:Scott 編寫

本文通過提供給大家學習的方法,以及我個人錄製的一系列視頻,幫助你更快更好的學習 Nodejs,了解前後端的 HTTP 知識,以及配置和使用阿里雲 ECS 來部署你的 Nodejs 項目,成為那個具有爭議的全棧開發工程師。

要不要學習 Nodejs

如果你是前端開發工程師,你本地電腦上不可避免的要安裝 Nodejs,作為工具也好,作為伺服器也好,要幫助你做掉很多又臟又累的事情,比如 less/scss 的編譯,ES6/7 到 ES5 的轉換,Javascript 代碼的壓縮合併,切頁面調試樣式的熱更新,無論是通過社區迅速更新換代的 Grunt/Gulp/Webpack,還是通過自己集成或者定製到本地的其他模塊,Nodejs 的這個運行環境都是你得力的助手。

如果你是後端開發工程師,比如之前是開發 PHP,Java,最近轉行做 Nodejs 或者想要增加一個語言技能才來學習 Nodejs,你也不可避免的要去了解 ES5/6/7 或者說 Javascipt 的整個語法概念,去瀏覽 Nodejs 的各個 API,然後基於 Nodejs 之上的一些流行框架,比如 Express/Koa,甚至是阿里開源的 Egg,用你既有的後端開發經驗,對於 Web 服務層交互的知識,再套上這些框架的 API,來玩票性質的搭建一些子項目運行一些產品業務。

如果你是運營或者產品經理,但是你已具備一些基本的開發技能,比如 HTML/CSS/Javascript,甚至是對 Linux 主機的系統使用,域名解析也有一些經驗,你可能也更願意在不去學習另外一種全新的語言下,來藉助 Nodejs 搭建你的 Web 服務,幫你的小點子小創意快速上線測試,獲取一些用戶的反饋或者價值驗證,事實上我認識的不少產品經理對 Express/React/Vue 這些很喜歡,能高效的幫他們實現一些產品原型的測試。

以上舉例,是為了說明影響你漲薪也就是職業發展的其中一個因素,就是某項技能的深度,或者是某些技能的廣度,這些技能包含但不限於前端後端或者產品,不要給自己設限,從事某個工種不代表你只可以鑽研這個工種,就拿前端舉例,既然本地有了 Nodejs 的運行環境,那麼適度的往下擴展技能樹是順水推舟的事情,而對 Nodejs 很感興趣的無論任何職業的人來說,什麼時候學習它都不晚,因為整個互聯網經過幾十年的發展目前的現狀就是, Javascript 成為了 Web 層最容易入門使用且最被工業標準和廠商推廣的語言,掌握了這個語言,就掌握了 Nodejs 的 1/3,剩下的 2/3 分別是 HTTP 知識和 Nodejs 本身的運行機制和系統能力。

我在 2016 年被杭州芋頭哥邀請去大搜車做了個小分享,當時現場氛圍特別好,整個杭州甚至蘇州的許多做 Nodejs 的同學,其中超過 2/3 都是前端工程師,都跑來一起嗨皮,我之後又模擬錄製了一遍,對於 Nodejs 不熟悉的同學依然有參考意義,大家可以聽一下:

  • 創業公司的 Nodejs 工程師

Nodejs 與 Javascript 先學哪個

Java 和 Javascript 是雷鋒和雷峰塔的關係,而 Nodejs 和 javascript 可以簡單的看做是雷鋒塔和雷峰塔上的磚這樣的關係,雖然這樣比喻不夠準確。

掌握 Javascript 和掌握 Nodejs 並不衝突也並沒有絕對的先後順序,因為往往我們開始使用 Nodejs,是從 Web 的層面,而這個層面,我們有很多簡易入手的框架使用,比如 Express,即便不了解它的原理,以模仿性質的方式我們都可以通過閱讀文檔來編寫一個簡單的網站程序,然後基於這種迅速可見可得的體驗進一步激發我們學習的興趣,花更多的時間去從多維度反覆敲打自己對於 Nodejs 的知識結構,這樣一天兩天慢慢就理解它的知識點了,通過實際的手寫代碼,運行伺服器,看預覽效果,再去查文檔,寫更複雜的代碼,有些關鍵字不懂再去查查,這樣其實就是一個不斷反覆不斷倒帶學習的過程,說是學習,其實並沒有刻意的去啃 Javascript 或者 Nodejs 的語法和 API,而是自然的從工具使用走向理論構建的過程。

上面這段是面向非常初級的 Nodejs 學習者,如果已經有了其他語言的編程能力,那麼入門 Javascript 也不會有太大障礙,可以先去了解 Javascript 這門語言的特點,再去嘗試使用 Nodejs,在我看來,只要你對於 Javascript 和 Nodejs 是陌生的,那麼學習這兩個就是交替並行來回穿梭的過程,在去熟悉 Nodejs 的過程中,也就逐步的了解到了 Javascript 的語法規則,在研究 Javascript 的過程中,也就更容易領會 Nodejs 暴露出來的框架封裝出來的方法函數變數他們的使用姿勢和運行特點。

先看書看文檔還是先找項目練手

對於學習習慣不同記憶能力不同的人來說,看文檔和做項目哪個更優先,應該不會有標準答案,而且這兩個在中期以後往往是交叉的,我個人的學習習慣一般是,先做項目,如果項目太難,我就把項目中難的功能都去掉,梳理出一個最簡版本,以寫代碼為為主,以看文檔作為補充,比如白天或者核心時間寫代碼,午間或者公交車上這些零碎時間翻文檔,可以有目的的看,也可以隨便挑幾個感興趣的看,這樣做的缺點是,在項目一開始啟動的時候,會因為不熟悉文檔,走一些彎路而且比較耗腦力,它的優點是,一開始就寫代碼有作品雛形出來,容易激發我征服它的鬥志,更有慾望把它做出來,所以這樣開始的方式,往往我都不會中途放棄,而看文檔的方式,我會覺得枯燥,或者不知所云,可能看看就困了放棄了,這種不太適合我,但是它的優點也很明顯,如果充分的看了文檔,基於原作者或者原始團隊的角度理解技術點,更容易一開始就走在正確的道路上,無論是名詞還是原理或者 API,心中會很有方寸,做項目的時候也容易推測出來出問題的環節去哪裡找答案。

對於新人來說,先把項目做起來會比較實用,走彎路和踩的坑必然會多一些,但是這樣更容易產生興趣把硬骨頭啃下來,也會提高解決問題的即時反應能力,所謂臨陣不懼,運籌有度。

哪裡找練手項目

練手項目從觀看類型上分兩種,一種是純文字形式的,比如連載的博客,一種是視頻,或者是直播或者是錄播的視頻,連載的博客好處是都形成了文字,並且有代碼示例,看的時候可以用腦力集中消化某一個技術點,容易看懂,這同時也是它的一個缺點,因為博客中不同的技術點都用大腦消化後,就會產生一種已經理解了它的直覺,這種直覺會促使你快速的通讀全完直到最後,所有的編程環節卻沒有動手實施,導致過了三五天後再來回想這些文字和當初所理解的概念,腦海中就會印象模糊甚至一片空白,用行話說就是沒有把消化後的知識持久化。

直播的視頻對個人的時間要求比較嚴格,同時直播中不能暫停甚至不能提問,會導致自己被動的 Push 往前走,容易遺留下一些關鍵的問題點沒有及時消化,不過現在有的直播平台會自動存儲有備份,所以也可以重播。

我個人傾向於看錄播的視頻,可以暫停,可以快進,可以重播,跟著屏幕敲代碼大概是目前最好的一種跟隨實戰的方式了,錄播的視頻這方面有很多的學習平台,我自己平時是泡在慕課網,雖然我也是講師,但是我也經常聽別的講師講的課程,收穫還是挺大的。

如果你對 Nodejs 已經有一定的掌握了,那麼其實可以跳開一些簡單的博客啊視頻啊,直接上 Github 上搜一些別人開源的 Github 項目,Clone 到本地,跑起來,再去讀他們的源碼,這是最直接也最有效的學習方式了,但是這個對於初學者往往比較難,因為閱讀源代碼的前提是要有一定的編程量,上來就一通讀不僅會增加理解項目的難度,更會因此失去閱讀代碼的興趣。

我下面會羅列一些,我自己錄製過的一些項目,或者其他的我覺得可以按照這個路線繼續深入學習的項目資源。

Express 實現一個電影網站

在我入行的那個年代,一般編程的第一個練手項目,往往是一個增刪改查的博客系統,或者是一個聊天室,這方面資源很多,但是我個人覺得起點略低而且提不起興趣,於是就錄製了一個開發電影網站的免費視頻課程,課程地址如下:

  • Node+MongoDB 建站攻略(一期)
  • Node+MongoDB 建站攻略(二期)

這兩個課程,是採用 Nodejs+MongoDB 外加一些必要的中間件,比如 Mongoose 建模,body 解析,Jade 模板等等,有前端的頁面也有後端的頁面,有註冊登錄也有密碼的加鹽設計,後端這裡也有管理員的角色,請求豆瓣數據寫入資料庫包括評論的數據結構和評論流程的實現,算是一個五臟俱全的小小麻雀。

課程中用到的 Express 框架,需要理解 req 和 res 兩個跟業務密切相關的知識點,一個是數據流進,一個是數據流出,然後就是 Express 的中間件機制基本是基於回調或者是基於事件的,這些都是在跟著把代碼全部實現後就能理解的東西,一開始不用太糾結細節,先關注流程就行,同時因為數據存儲用到了 MongoDB,項目中也使用了 Mongoose 來配置和鏈接資料庫,來設計每一個數據模型的 Schema,可以理解為表的概念,另外由於課程錄製的比較早,大家要特別留意版本,在 2 期課程中有一個補錄的升級課程,可以在一期的學習中,跳過去看升級再回過頭看。

或者如果不喜歡 Scott 早期課程的聲音或者講解的方式,也可以直接看下面的這個課程,裡面有許多小例子,跟著敲代碼不累。

Nodejs 的基礎概念和 API 講解

這個是純面向新手的課程,地址如下:

  • 進擊Node.js基礎(一)
  • 進擊Node.js基礎(二)

在這兩個課程中,我嘗試了新的錄製風格,但同時也導致了錄製的時候,描述過於逗比不夠嚴謹,還好很多看過的童鞋們還都表示很有收穫,看來激起學習興趣的確是所有市面的博客也好,視頻也好都要去提升的一個點。

用 Nodejs 開發微信公眾號

在微信公眾號推出的那個風口,滿大街都在找能開發微信公眾號的工程師,而且由於公眾號本身與微信打通的鏈路和易傳播性,H5 工程師成了各個類媒體公司和創業公司的標配,但是微信公眾號由於它的特殊性,需要前後端協作完成,並且需要通過微信的官方伺服器進行消息的分發和中轉接收,給很多公司是前端後端同學帶去困擾,增加了協作的成本,於是具備 Nodejs 開發能力的前端工程師在市面上備受歡迎,因為 Java/PHP 這種傳統後端可以賦予公眾號純數據的介面調用許可權,而多變的業務邏輯則可以由前端自己通過 Nodejs 來自由控制,同時微信公眾號裡面的消息和跳轉的頁面自己都能完全控制,於是 Nodejs 微信開發工程師往往通過一兩個人的配合,就能極高效率的完成公司在微信端的的業務實現,涉及到複雜數據或者大體積數據存儲的部分,仍然可以交還給 Java/PHP 工程師來負責,從公司層面,產品做的更輕更快而且人員成本上也更省錢,從個人層面,對於產品研發的流程也更有控制權,同時個人也更有競爭力更值錢。

在現在,公眾號依然是很多傳統公司走向互聯網化所優先考慮的方向,加上小程序的推出和一系列附加能力的擴展,這兩個可以很好的協作來拉新和轉化,現在具備 Nodejs 在微信的使用層面,依然是有很大的成本優勢。

於是響應慕課網的需求,推出了這個收費的視頻課程:

  • Node.js 七天搞定微信公眾號

在這個課程裡面,把上面的電影網站,進行了大刀闊斧的升級改造,基於原來的登錄註冊後台上傳這些功能外

  • 把原來的 Express 框架也切換到 Koa 框架
  • 利用 yield 來做非同步操作的執行
  • 從零開始封裝微信中間件
  • 深入到最底層的請求邏輯
  • 微信第三方介面調用過程
  • ES2015 新特性使用(Promise, Generator)
  • 充分理解 http 請求和實現二跳換 token 請求
  • ...

讓這個微信公眾號,本身可以響應用戶的消息,比如上傳圖片/視頻,文字自動回復,電影的檢索和數組消息推送,還可以在公眾號裡面跳到電影網站的手機版本,裡面可以調用語音 SDK 進行搜尋,可以基於微信的 openid 進行用戶註冊和評論等等,這時候原來那個電影網站的小麻雀就變成了一隻犀利的老鷹,能對微信用戶提供更豐富的功能和體驗,而這一切的背後,僅僅是 Nodejs+MongoDB 外加 Koa 框架的支撐。

React Native App 開發

React 問世以來,特別是 React Native 問世以來,整個前端世界再一次陷入了變革狂潮,用聲音或者行動宣示要搞事要運動,因循守舊的工程師被動主動的被淘汰,因時制宜的工程師和大量的前端新人,踩在老人的屍體上大步前行,無論承認與否,互聯網世界一天天變得更豐富多彩,技術的圈子亦然,變革的速度快慢不重要,基於變革而能及時上車的勇氣很重要,無論是 Microsoft,Facebook,Google,Instagram,還是 Alibaba, 騰訊,地球上的一線大公司的一線牛人,在過往的幾年中,開源了巨量的框架,尤其在 Nodejs 和 React Native 方面,也都有了許多實踐和改造,給許多的中小公司帶去更多的信心,有了更多的選擇。

開發 App 就是這樣,世界不再是過去的非 Object-C(Swift) 即 Java,也不再是犧牲性能追求效率的 Cordova 和 PhoneGap,而是有了介於二者直接的 React Native,更多的養不起兩個不同語種工程師的小公司和創業公司,開始眷顧能適應兩個平台,且能滿足自己業務和展現需求的 React Native,而開發一個 App 並不簡單,除了肉眼可見的前台,還有作為純 API 介面的後台,前後之間依然有種種的門檻,這時候 Nodejs 的輕便就又派上用場,具備 Nodejs 開發能力的 React Native 工程師,到今天為止依然是香餑餑。

還是順應潮流,結合慕課網推出了這個課程,同時慕課網的官方設計師負責給 App 出插圖潤色,不過這個課程是收費的:

  • React Native貫穿全棧開發App

在這個課程中,先撇開 React Native 這個純 App 端展現的部分,整個後端是用 Nodejs 開發的,框架依然是 Koa,涉及到了用戶 token 生成獲取,簡訊驗證碼,無後台的 Mock 數據,以及基於 MongoDB 的 Restful API 服務,對於音頻視頻資源的轉碼和合併都是在後端完成,裡面涉及到大量的非同步操作,對於一個初級和中級工程師,有非常好的實戰借鑒意義。

上面發了都是我的個人作品,下面提供下其他的我認為學習 Nodejs 需要投入時間研究的知識或者方向;

培養英文讀寫提問的能力

有句話怎麼說,編程三分靠資歷,7 分靠 Google,大部分你在業務場景中遇到的技術問題,在網上都有現成的答案,問題是你不知道用什麼關鍵詞去搜出來,這個還是比較考察英文的表述能力,這些最前沿的技術,都是老外們實踐出來的,我們的腦迴路也應該在編程之外,多適應一下英文的思考方式,多逼自己閱讀英文技術文檔,隨著時間慢慢就能習慣,只要解鎖了英文的這把枷鎖,就打開了新世界的大門,無論是從檢索和閱讀角度,還是從提問參與的角度。

關注 Github 倉庫 Wiki 和產品榜單

我們上 Github 的時候,往往會很關注熱門的框架庫,那麼這些框架庫里往往蘊含著更有參考價值的寶藏,那就是 Wiki,比如 Express,在它的 Wiki 裡面,除了有 Express 的升級指南,中間件列表之外,還有一個 Frameworks built with Express,什麼意思呢,就是很多團隊或者個人對 Express 不夠滿意,或者自己的場景更特殊,Express 不能滿足,他們都基於 Express 這個框架基礎或者思想來構建了一個新的框架,這些新的框架,都的基於他們的需求或者他們認為合理的方向來實現的,這些框架的源代碼包括文檔,大家在學習 Nodejs 的時候,可以好好研究一下,能學習到更多他人在設計框架時候考慮的方向,實現的方式,比如這些:

  • Feathers -- 一個迷你的數據驅動的框架
  • Monorail.js -- 一個極輕量級的 MVC 框架
  • Locomotive -- 受 Ruby on Rails 啟發而開發的強大的 MVC 框架
  • CompoundJS -- 同樣是受 Ruby on Rails 啟發的高水平 MVC 框架
  • Calipso -- 基於 Express/Mongoose 的內容管理系統
  • Derby -- 一個實時的協作應用框架
  • Bones -- 基於 Express/Backbone 實現的 CS 應用框架
  • Matador -- Twitter 工程師開發的 MVC 框架
  • Lemmy -- 一個不可描述(爆粗口)的神秘框架
  • Mojito -- Yahoo 開發的 MVC 框架

綜合比較一下,就能找出更適合自己用的框架,等到對框架足夠熟悉的時候,就可以去閱讀他們的 issues 甚至是源代碼,看的多了想的多了,就越來越上道了。

全棧的最後一公里

全棧這個詞很敏感,有人不認同有人無所謂,對我而言,它就像是一個 H5 工程師一樣,只是表述了一種印象或者概念,具體嚴謹與否不重要,因為跟人溝通,心領神會即可不必強究細節。

那麼在學習 Nodejs 的過程中,有一道門檻是無論如何也逃不過去的,那就是 伺服器的選購配置,域名的解析指向,Nodejs 項目的部署等這些偏運維方向,這些讓很多新人甚至是已經工作的工程師困擾,自己去琢磨太花費時間,不去琢磨,始終沒有能力憑自己雙手,讓一個產品上線或者讓自己的一個想法實現到互聯網上,不論是成為獨立站長,還是只是讓朋友同學訪問,於是我把這些總結了一下,以以上幾個項目為例,大概分為如下幾個步驟:

  • 部署方案規劃
  • 待部署項目分析
  • 選購及備案域名
  • 廠商對比與選配阿里雲伺服器
  • 初步 SSH 無密碼登錄連接和配置
  • 搭建 Nodejs/MongoDB/Nginx 環境
  • 配置 IPTables/Fail2Ban 防火牆及主動防禦
  • 域名 DNS 轉移及 A 記錄/CNAME 解析配置
  • MongoDB 角色配置與安全規則設置
  • 線上 MongoDB 單表單庫導入導出與跨機遷移備份上傳
  • PM2 發布環境配置
  • 伺服器與 Git 倉庫讀寫配置
  • PM2 一鍵部署線上 Nodejs 項目
  • 電影網站/ReactNative App 後台/微信公眾號/微信小程序後台等項目實戰部署
  • SSL 證書申請及 Nginx 證書集成提供 HTTPS 協議
  • 上線方案復盤總結

後記:

我從業 7 年,前 4 年在阿里巴巴做前端開發工程師,開發全網的通用創意模板,近 3 年在創業公司擔任技術負責人,也就是聽上去高大上的 CTO,我職業的前 6 年月工資不到 1 萬 5,最近一年才調薪過 2 萬,我選擇了一條荊棘的跨專業自學入行之路,之後又創業,彎路多多踩坑無數,希望從我的親身經歷中,大家可以對自己有更準確的定位和投資,掌握更好的技術/職業上升的方法,我走過的彎路不再是束縛你的套路。

更多技術好文,請關註:我是程序員 - 知乎專欄


Node.js in Practice

Node.js the Right Way: Practical, Server-Side JavaScript That Scales

Node.js Design Patterns

可惜國內很少人買,你可以去亞馬遜英文搜這些書。


給你Boss說,我要用NodeJS做什麼什麼產品,限期多久完成。保證你馬上不會糾結看什麼入門書了。


這裡假設你的javascript已經入門

Node.js入門經典 (豆瓣) 這本書的東西很雜,用來走馬觀花的過一遍不錯。

Node.js開發指南 (豆瓣) 這是我的入門書,講了Node.js里的基本概念,以及express框架的部分內容,覺得看完這本基本上就算入門了。

Node.js 實戰 (豆瓣) 書中講了利用nodejs的幾種框架做小項目。看這本書的目的在於在做自己的項目(而不是抄代碼)會發現node.js讓人不愉悅的問題,比如超長回調什麼的。

深入淺出Node.js (豆瓣) 加深Node.js的基礎,針對Node.js一些令人不爽的問題提出解決方案,教了Node.js的一些奇技淫巧。


我的入門書是 了不起的node.js 雖然例子有點老 比如express還是2.x的 但是由於書中有大量的例子 講解也淺顯易懂 很適合入門不過相對的講得也不夠深入


朴靈那本,主要圍繞node「不太會變」的部分,而且收穫的知識應該不僅僅局限於node上。不過你應該至少有過一定了解後再翻這本,這書好就好在沒有很多教程里「數組下標從0開始」之類的讓人覺得虧了幾十頁書錢的內容。


nodejs開發指南。

裡面大部分代碼跑不動,然後你需要對著官網一點點把書上跑不通的代碼改到跑通。


沒有好書,都挺爛的。


如果是新手,沒有對angularjs有太深入的了解,可以先看Manuel kiessling的那本 node入門,簡單的簡紹了nodejs的基本知識,上手快。


推薦閱讀:

《深入淺出Node.js》《Node.js 實戰(雙色)》《了不起的Node.js》 這三本書那本書比較好呢?
怎麼才能成為一個nodejs大神?
ECMAScript 6 的模塊相比 CommonJS 的require (...)有什麼優點?
a=new b()和a=b(),其本質的區別在哪?

TAG:Nodejs |