寫作背景
筆者前年開始撰寫的《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”這個問題,其實有挺多東西想寫,篇幅所限,後面的文章詳細展開。
相關連結