標籤:

怎麼才能成為一個nodejs大神?

如題?


有些答案太狹隘了,Node.js 其實不怎麼需要學,太輕了。要成為這方面的大神,說明你在別的有些方面也是大神。

1. 認真學習 ECMAScript,並學會如何看 ECMAScript 規範;

2. 學會看 Node.js API,而不是學著死記硬背,並常看社區動態以及 CHANGELOG;

3. 學會搜索 Node.js 生態圈,而不是死記硬背要學會某個框架,那樣沒用;

4. 在會 Promise / yield / async 外,還應該不忘好好學習 callback,很多新人把這塊重要的思想給忽略了;

5. 夯實編程基礎,與 Node.js 無關,如數據結構、設計模式、操作系統等等,這些東西會了之後你的思想就對了,造輪子什麼的手到擒來;

6. 學習整個後端體系,包括但不局限於 HTTP 協議、TCP 等等,還有資料庫(並不是學會如何寫 SQL,而是資料庫基礎);

7. 最後其實只要編程基礎紮實了,成為哪門子大神都不是什麼難事,可以參考我的 Live。

感謝有人在評論區提醒,閱讀 Node.js 源碼以理解各種原理也是很有必要的。

最後,我正在去往大神的路上,路途遙遠,不見天日,好方,誰來幫幫我。


下面這些是必要的

  1. http 協議
  2. 一個sql或nosql資料庫的使用
  3. js回調管理能力
  4. node的核心概念,EventEmitter,Stream
  5. 一個node框架,精通middleware這個模式(並不複雜)
  6. 精通node程序調試技巧,工具


在cnode上堅持寫文章和開源項目2年,足矣,輕鬆進阿里騰訊,不用你找他們,他們自會找你的。


這個問題問@朴靈 最合適了。


我作為一個只寫過一些簡單 node (做了接入阿里雲 oss ,輸出 api ,接入 redis 在線字體動態生成等工作,不過我覺得都是很表層的東西把,也沒什麼難度,感覺自己寫的代碼賊爛)的前端工程師來答一下。

其實真正需要學習的是整個後端的系統(體系)啊,我覺得前端要學 node 最大的困難,以及需要去攻克的點就在這了。os / fs / http / net 模塊。這些哪門服務端語言沒有對應的實現?

去了解了整個後端的體系,怎麼設計 api,怎麼設計資料庫,怎麼去組織一個後端項目的 目錄結構,應用分層等等,才是最重要的。

在上面的東西都會了之後跨語言寫一些代碼並不是一個太難的事情,當然,要精通那就得去了解一個語言的細節了,也就是 ECMAScript 標準,以及 nodejs 提供的 api 。

以上全是吹牛逼的,因為我自己對於標著重號的部分,是完全缺失的,求大佬帶。。


不深入技術細節,推薦2個特別好的資料。

ElemeFE/node-interview (先不要看答案,自己探索完再去看答案)

《深入淺出nodejs》(朴靈大神的這本,堪稱經典)

學完這2個資料,你離nodejs大神就更近一步了。


當我第一次接觸到 Node.js 的時候,就下定了決心要成為 Node.js 大神。於是我大二期間,幾乎天天逛 Github 和 Cnode.js 。也參加各種線下活動,玩各種好玩的東西。那個時候我還記得我 Github 幾乎全是綠色 。

還記得當初第一次使用 Babel 編譯 ES6 語法的激動心情~還記得當初第一次見到 Angular 時感嘆原來前端還能這麼寫~還記得第一次見到 Mongodb 時知道原來還有 NoSQL 這種東西~等等當初 Node 還沒有普及的時候,一切都是那麼的新鮮,那麼的有趣。置身在 Node 的世界裡面,到處都是新鮮的,開闊眼界的~~沒有人告訴你說學 Node 上來直接用 ES6 語法,沒有人告訴你說用 Koa/Fastify/Egg 等框架。一切都是需要你去自己去摸索。

現在,怎麼學 Node 都有各種教程,也有各種線路。變得簡單但是卻失去了發展新大陸的激情。

另外感概最深的是,自己辛辛苦苦(參考英文文檔)研究了好久的東西,還沒來得及高興/裝逼(其實也就大約1年後),就發現旁邊的人都已經很了解你所研究的東西了。原因竟然是因為這期間有很多人寫了教程,從而降低了他們學習的門檻。

所以我也認識到,有一些東西,你能擁有別人早晚也會擁有。而且還比你好。有的時候我甚至覺得我乾脆晚出生幾年,這樣踩在前人的肩膀上才能讓你爬的更好。

所以,如果你定義的大神是指知道的比別人多,那麼這種大神真的會很累。因為需要時刻去找新的知識。所以說究竟什麼樣子的大神,要看你來定義。

不過話說回來,在 Node 方面,想要有較好的發現,至少要完成這麼幾點,不過這幾點都是學計算機都應該有。

第一,一定要有自主意識。要主動去學,不能說因為書本上沒有寫的知識點或者內容就不去了解。

第二,要有隨時追蹤新內容的能力。最簡單的例子就是,比如 node 更新了,那麼你要去看看他這次更新了啥。從而能拓展出很多你不曾了解的內容和東西。就像是你不會去思考 Node 中錯誤模型是什麼樣子的。(當然我也沒思考,我也是看了 node 的 issue 才知道的,原來之前都是直接 throw 的。後來變成了通過 internal/error 處理)

第三,拓展思維和批判思維。拓展思維簡單來說,當你看到一個新事物的時候,或者一個新的知識點。你要能從一個點拓展到多個方面。而批判思維就是說為什麼框架要這樣設計,用別的設計方式可以么?而不是說只知道有這種設計模式。。

第四,當你擁有上面的幾條以後,你可以說是一個比較厲害的 hacker 了(這裡是指那種比較有想法,知道的很多,能力也不錯,還特別會扯淡的人)那麼以後你就需要靜下心來慢慢去研究這些內核的方面。(ps這裡是指 Node 後端,如果是 Node 全棧的話,建議還要多去研究一下 webpack/es6/http/browser ship/zone 等與前端相關的規範和內容。)這個也是最累最無聊的階段,但是確是很有意思的。然而我並沒有進入這一階段,因為我覺得這個階段不如多去了解一下其他的技術,比如安卓(最近剛入手親兒子),docker,golang,3d,ps/ae/pr等。可能有的人喜歡在一個方面深入,但是我喜歡用到的時候再去深入了解 (其實主要是身邊好玩的東西太多了)。

還有幾點就是我玩 Node 多年所體會到的心得。

第一,關注社區,因為 Node 比較年輕,而且更新特別快,所以及時關注社區動態是很有必要的。比如說 cnode,twitter node ,github等。也可以多專註一些名人的微博twitter等。

第二,不要害羞,有問題直接問,有想法就提出來。你要是有一個新的提案的想法,就去做。(至於他們認不認同我就不知道了,//撤)

第三,不要想著什麼事情都有人(googlr, stackoverflow)幫你解決,你要嘗試自己去找解決方案。(造輪子,修輪子,拼輪子等)

上面我只是說了一下大神的必經之路,但是不保證你走了就一定是大神。

就這些吧,有空補充~~


不請自來答一波

nodejs大神肯定是一個循序漸進的結果,不要想著一步到位

一、基礎篇

  1. js基礎,由於nodejs是js的變種,遵循js的大部分標準,所以js基礎要牢固,做到這一點說難也不難,說簡單也不簡單,把JavaScript權威指南這本犀牛書吃透足以
  2. node基礎,node的基礎思想和常用api得先深入理解,例如io操作,http,buffer先不求到源碼級別,但必須熟練使用。做到這點,看幾本node入門書,邊看邊練,問題不大

二、實戰篇

node的出現給了js開發無限的可能,近兩年node已經突破到多個領域,常用的是構建工具,web伺服器,另外還有桌面應用開發的nw.js和手機操作系統雲os的開發,iot開發。可以先聚焦web伺服器和構建工具

  1. 構建工具:前端的開發配套工具例如yoman,grunt,gulp等都是基礎node開發的,主要是對io的操作,嘗試去使用一下這些開源工具,並且了解他們的原理
  2. web服務:node給了前端開發服務端的能力,從資料庫的讀寫到頁面,介面的封裝,全部用js搞定不是夢,使用現有koa,egg框架直接開發一個網站並上線,應該就掌握了大部分實戰功能

三、進階篇

有了實戰篇的能力,滿足大部分需求應該問題不大,但是要把node用的非常6,並且能夠在性能優化,高並發處理,工程化方面有所突破,還必須做到以下幾點

  1. 深入node框架的原理和設計理念,進而能夠有開發或者二次封裝一個框架的能力
  2. 掌握計算機網路基礎,特別是dns,http/https協議,tcp,udp等方面
  3. 掌握計算機基礎,操作系統,編譯原理,彙編,測試基礎等
  4. 熟悉java,c,c++等其他語言及設計思想,橫向對比

很多人都停留在node表層,包括本人,要系統的完成底層知識的學習的過程很漫長也很痛苦,但是要是堅定信念在程序員這條路上走下去,就要比別人付出更多,加油,共勉!


這個問題問

@朴靈

最合適了。


學好JavaScript


不會js密集計算的都是假大神


首先你得成為一個Java大神,然後學兩個星期的js就好了!


首先你得有天賦


推薦閱讀:

ECMAScript 6 的模塊相比 CommonJS 的require (...)有什麼優點?
a=new b()和a=b(),其本質的區別在哪?
使用markdown製作的html幻燈片有哪些?

TAG:Nodejs |