寫作背景
筆者前年開始撰寫的《Node.js學習筆記》 github star 數突破了1000,算是個里程碑吧。
從第一次提交(2016.11.03)到現在,1年半過去了。突然有些感慨,想要寫點東西,談談這期間的收獲、心路歷程,以及如何學習Node.js。
心路歷程
筆者一直有做技術筆記的習慣,前幾年零零散散的也寫了不少Node.js的東西,只不過都存在evernote里。寫着寫着,覺得有必要系統地整理下,於是就有了這個項目。
粗略統計了下,總共提交了約60篇教程,以及將近300個范例腳本。
大部分的commit都集中2016年11、12月份,以及2017年上半年。這段時間其實項目組挺忙的,經常一周6天班,同時在兩三個項目間來回切換。
寫作的過程挺枯燥的,也有點累人,尤其經常只能抽大半夜或周末的時間來碼字,經常寫技術文章的同學應該能體會。不管怎么說,一路堅持了下來,感覺還是有不少收獲。
1、技術積累。最初存在evernote里的只是零星的筆記,經過整理校對、進一步的思考以及延展性學習,零散的知識點逐漸串聯成體系化的知識面。這比單單記住了數百個Node.js的API,以及枯燥的配置項更有用。
2、知識分享。寫作的過程中,不少同樣正在學習Node.js的同學或通過QQ,或通過私信表達了感謝。對筆者來說,這其實比star數的增加更有意義。
3、技術焦慮有所緩解。眾所周知,前端領域變化太快,身處其中的從業者壓力非常大,這也是前不久著名的“老子學不動了”的梗突然刷屏的原因。深入學習、思考,掌握學習的方法和規律,能夠一定程度上緩解技術焦慮症。
4、意外收獲。這期間,收到阿里雲棲社區(專家博主)、騰訊雲+社區的入駐邀請,多家知名出版社的撰稿邀請,在線教育平台(如慕課)的開課邀請等。
如何學習Node.js
2年前在SegmentFault社區上有人問過類似的問題《關於nodejs的學習?》,當時簡單地回答了下。
- 實踐是最好的學習方式,如果能把所學用到實際中去,效率比光學不練要高上很多。
- 遇到問題,學會使用google、stackoverflow、官方文檔。
- 學習node的障礙,大部分時候不是node本身,而是相關領域知識。
實踐出真知,這點無需強調。遇到技術問題善用搜索引擎,也算是圈內共識了(初學者需要加強這方面意識)。
其實最難的是第3點,分辨你所遇到的問題。
舉個例子,比如現在想學習 https 這個模塊,不少初學者會顯得一籌莫展,常見的問題有:
- 問題一:https、http、net 模塊長得好像,API也差不多,它們之間是什么關系?
- 問題二:配置項里有一項是證書,這是個干嘛的?照着指引配好證書了,為什么瀏覽器會報錯?
- 問題三:server本地跑得好好的,怎么部署到雲服務器上就訪問不了,明明可以ping通,端口也啟動了,為什么提示拒絕訪問?
正式回答問題前,先祭出一張網絡分層架構圖,請讀者把它牢記在心。
互聯網基於分層架構實現,包括應用層、傳輸層、網絡層、鏈路層、物理層。其中,前端開發者比較熟悉的是應用層(HTTP協議),如果想學習Node服務端編程,那么,至少需要對傳輸層(TCP)、網絡層(IP)也有一定的了解。
對於網絡的每個層次,Node.js基本都有對應的模塊,比如https、http、net(TCP)、tls/crypto等。
前面列舉的幾個問題,都是對網絡知識、服務器知識了解的欠缺導致的,而不是於Node.js的API有多復雜、難以理解。
這里直接回答問題:
- 問題一:http為應用層模塊,主要按照特定協議編解碼數據;net為傳輸層模塊,主要負責傳輸編碼后的應用層數據;https是個綜合模塊(涵蓋了http/tls/crypto等),主要用於確保數據安全性;該用哪個模塊應該很清楚了。
- 問題二:安全證書是PKI體系的重要一環,主要用於身份校驗。本地調試用的證書如果是自己簽署的話,瀏覽器會視為不安全並報錯,可以參考 《HTTPS科普掃描帖》。
- 問題三:這種情況大概率是請求被防火牆攔截。ping走的是ICMP協議,由操作系統內核處理,能夠ping通不代表TCP連接就能夠建立成功,可以參考 《ping的使用與實現原理剖析》
寫在后面
編寫《Node.js學習筆記》的過程收獲了不少,也有不少感觸,這里就不過多碎碎念。對於“如何學習Node.js”這個問題,其實有挺多東西想寫,篇幅所限,后面的文章詳細展開。