掘金 AMA:聽 Node.js Core Collaborator 之一 死月聊 Node.js && 技術寫書

清蒸不是水煮發表於2018-08-26

第五期 沸點,掘金團隊請來了Node.js Core Collaborator 之一,《Node.js:來一打 C++ 擴充套件》作者死月做了為期三天的 Ask Me Anything (AMA) 活動(已結束)。

我們在此精選了一些來自使用者的提問及死月的回答。

關於死月:

  • Node.js Core Collaborator 之
  • 《Node.js:來一打 C++ 擴充套件》作者
  • 在螞蟻金服體驗技術部,負責一些內部基礎設施、框架的研發和維護
  • 掘金專欄:juejin.im/user/556864…
  • Github 地址: github.com/XadillaX

掘金 AMA:聽 Node.js Core Collaborator 之一 死月聊 Node.js && 技術寫書

社群小夥伴提問

node 使用場景? ─ @zephyru

路過,首先,抱頭蹲防最高..其次.. 問個老生常談的問題...當前環境下NodeJs的應用場景? 誠然,業務邏輯的效能,通過C++擴充套件可以有長足的提升,然而個人有種華而不實的感覺... 做膠水的話..python似乎用的更多... Web伺服器端,大型專案大都還是選擇JAVA..我聽有用Node寫到最後依賴管理非常痛苦...又推倒換回JAVA的... 幾年來,在大型專案上我只聽說淘寶在16年拿來做過中間層...其它還有什麼大型專案的成功案例麼? 我個人,其實是很喜歡NodeJs的..畢竟我是前端,寫js很親切,但是,目前..我還沒有找到Node拿來寫玩具或者中小型專案以外的應用空間... 近兩年...我開始見到用js來做深度學習,和寫硬體的... 在這些方面不曉得有何高見?

----------------------------

備選問題: 聽說,有些地方招演算法,只要看面試者隨便登入一個社交平臺,看是不是二次元妹紙頭像就基本能決定要不要,對於這個現象的看法?

其實這個問題網上答案已經很多了,並且很多答案也都是可信的。在於小公司來說,Node.js 快速出原形,並且後續迭代,是非常好的一個選擇。對於這種專案的,技術選型來說並沒有太多講究,無非是選型的人手熟哪個,並且能不能 Hold 住。當下的硬體環境或者設施來說,語言以及其效能在大多數場景下並不會成為瓶頸,而網上各種大肆吹鼓某種語言的現象其實看看就好。

而對於大一點的專案來說,或者公司環境來說,除去上述的方面考慮,還要考慮到生態的完善性、人力資源的掌控性,Java 無疑是一哥,而 Node.js 在其易學性上面也減少了一定量的人力成本和學習成本,在各種業務線上的表現來說其效能也不會成為瓶頸(極端情況另論)。語言之爭非要說 Ruby 啊 Python 啊什麼的比 JavaScript 好,仁者見仁——學習成本來說,由於早年還不大會程式設計的時候玩 RPG Maker 留下的陰影,導致我至今沒學會 Ruby,所以學習成本這事也是仁者見仁智者見智。

你要說有什麼專案的話,網上能得到的資訊其實很多的,支撐天貓的各種活動會場(尤其是雙十一)的服務就是 Node.js 實現的,而你能見到的很多的支付寶前端頁面,也都是 Node.js 渲染出來的。

當然也有不少公司拿 Node.js 做純(且唯一)的後端,這證明了是可行的,還是一開始那句話,通常的選型來看無非是拍板人的選擇,並不會說造成不用某個東西做就做不下去了的情況,除非是某些已經鞏固比較深的地位,如 Docker 與 Golang 的搭配等。

你說的硬體、人工智慧方面,這些領域與上述回答不一樣,它們在我看來 Node.js 的確是玩具,也許未來某一天會有所成就,目前我持保留意見。在 IoT 方面應該的確是個不錯的選擇。

至於備用答案,其實這是一個概率問題。我們假設一個面試官手頭有非常多的簡歷,但他自身很忙,沒有時間去篩簡歷。我雖然不懂人力資源,但也能猜個大概,招人並不是要把所有的合適的人招進來,而是在有限的人頭數量中挑幾個合適的,也就是說其實漏掉幾個合適的問題也不大,除非是那種“非要不可”的。既然漏掉幾個沒關係,那麼問題就簡單了,我因為精力有限,粗粗將人分為“可能挺不錯”和“雖然這一波也可能有不錯的人但是有機率是不怎麼樣的”兩撥,這兩撥人中在面試官的腦海裡的印象會出現“不錯”的人的概率在第一波中比較高。至於為什麼高,這個就涉及到 ACG 的圈子了。OIer / ACMer(你可以理解為演算法很不錯的人)圈子與 ACG 的圈子重合度相較於別的圈子來說會高一些,通過這種方法第一遍篩人就能有一定機率拿到自己想要的人。並且,在招人的時候看的不僅僅是能力,兩個人水平一樣的情況下,面試官更傾向於招一個與團隊基因更為契合更有共同話題的候選人,這個時候,整個團隊都有 ACG 基因,二選一當然招妹子頭像的了。

關於 C++ 擴充套件華而不實這點,可以參考我的另一個答案,閱讀的角度。你不寫擴充套件,這本書依然可以為你能更好地自行閱讀 Node.js 去了解它提供很好的幫助。

這裡只是拿 C++ 擴充套件作為本書依附的一個宿主。

node未來的方向? ─ @wujunze

你好 node未來的方向 和 它真正能擅長的場景是哪些 ?

Web 領域應該會繼續守住,但也不會去撼動誰誰誰的地位,各有所長,在大家的熟練度、效能以及研發效率之間找一個平衡。相似的還有就是遊戲類的伺服器,但是競品太多了,而且還沒完成一個太集中和完善的生態,老大哥柚子感覺已經好久沒人維護了。

在渲染方面會有優勢。因為這一層比較輕薄,上 Java 就顯得厚重了。

一些 Serverless 引擎以及類似場景可能會有天然的優勢。例如 leancloud 在你做各種事情的時候可以寫一些 JavaScript 原始碼作為補充邏輯,自己解釋自己的開發成本通常比你在 Java 層面搞個解析器或者上 V8 之類的研發成本會低一些,而且效能也不錯。

IoT 方面也是一個不錯的選擇,不過我還在觀望。

其它方面就是客戶端的東西,例如 Electron,NW.js 等,的確會降低客戶端軟體的開發門檻以及研發效率,畢竟樣式什麼的直接上 HTML + CSS 了,這個方法比較好,以前就有人這麼用了,以前就是 qt 也用了類似的方法。我一直期待會有一個內建 Node.js 的無線終端引擎,而不是 React Native 之類的,也許是因為相較於他們現在的引擎 Node.js 還比較笨重吧。

包括 Cocos2d 之類的也一樣,不知道為什麼就是不基於 Node.js,可能是那邊的開發者不在一個領域,大家都不 care 裡面有什麼,生態裡面能做什麼,只要是能寫 JavaScript 就夠了。

最近在寫一個桌面的 2D 遊戲引擎的 Node.js 玩具 Wrapper,就想驗證一下自己的想法,Node.js 也可以寫遊戲,而不只能是基於別的執行時的 JavaScript。

Wrapper 在 GitHub 的私有倉庫。而 github.com/XadillaX/no… 這個是更小的一個倉庫,用於驗證通過 Node.js C++ 擴充套件能搞這麼一個 Wrapper 的正確性的小 Demo。

未來如果真有這麼一個引擎了,我感覺開發遊戲起來會更方便吧,不過這只是我的個人業餘愛好而已。

如何成體系地輸出技術文章? ─ @lingany

想問下如何成體系地輸出技術文章?單篇文章地思路我還是蠻清晰,demo、設計思路、程式碼分解、完整程式碼(如果我的思路有問題歡迎指出)

其實先列提綱是比較有必要的。比如我的書,如何寫 C++ 擴充套件,腦圖畫出來所關聯的點就有 Node.js 模組是怎麼樣的,你要寫的話需要安裝什麼,需要了解 libuv、Chrome V8、NAN、NAPI 等等等等。這些大綱列出來後,針對每一點再繼續細化,最後成為一個體系。

然後你就沿著體系中的每一個點線開始寫成面就好了。

最後來幾個實戰部分加深一下印象就好了。

另外,推薦一下一篇當初啟發我的一篇文章。寫一本技術書籍

大搜車、螞蟻金服這兩個技術團隊各自有啥特點? ─ @Kotling

我去年陪朋友參加過你的 Meetup,可以評價在大搜車、螞蟻金服這兩個技術團隊各自有啥特點嗎

技術團隊我只能說是我待過的團隊,不代表所有的螞蟻團隊和大搜車團隊,而且不代表其他人對團隊的看法。

首先一點就是驅動型別變了。在大搜車的時候目標比較明確,而在螞蟻團隊的時候更偏向於自我驅動型,你所要做的事情別人不一定知道,由於不是在業務線,你需要自己思考怎麼樣去更好地服務於業務線,要花更多時間在這一層面的思考。

而人與人之間的聯絡也變了,由相對緊密的團體(指的是做的事情非常緊密和有關聯,不是團隊的私下關係)變成了更相對獨立的個體,每個人負責的內容讓團隊的每個人都有一定的外在聯絡,需要自己去維護和負責,而在大搜車更偏向於的是內在聯絡——所以螞蟻所在的團隊相當於對於每個人的能力考驗變得更高了,每個人都更需要獨當一面。

技術方面,由於大搜車的基礎設施雖然很不錯,但相較於螞蟻團隊並沒有那麼完善,所以在各方面的選型或者使用方面會有更大的自由度,比如我可以選擇使用 OpenResty + Node.js 來完成一個閘道器係統,只要樂意,我甚至可以拿 Rust 玩玩並上線;而在螞蟻這邊的團隊,由於設施完備,體量也在,所以相對沒有設施的各種技術棧會難以線上上進行,相對來說技術棧選擇的空間變小了,但是好處就是,開發、運維等一些列操作變簡單了。而很幸運的是,我在螞蟻金服所在的團隊就是負責各種前端、Node.js 技術棧基礎設施的建設和維護。

總之,排除別的東西不講,兩個團隊在技術方面各有優缺點吧。

前端er ,請問未來一兩年怎樣規劃?─ @hehe_coder

前端er ,請問未來一兩年怎樣規劃

說實話,我對“介面展示互動層”的前端不甚瞭解,也不資深,無法就這一條深度路線給出太好的建議。但是正如我一次知乎 Live《當我們在學 Node.js 時,我們在學什麼?》(www.zhihu.com/lives/90721…

「最後,太極生兩儀,兩儀生四象,四象生八卦,八卦生萬物。Node.js 就是萬物中的一個,而整個程式設計界可以比作太極,我們從萬物開始學,最後都需要歸宗到太極當中去——當我們在學習 Node.js,我們其實就是在學程式設計,不要把自己侷限住了。」

無論你是何種崗位,你始終是一個程式設計師,而一個程式設計師最重要的是思維和基礎,哪怕工作中不是一定或者經常會用到,思維和基礎的提升對你的整個職業生涯都非常有用。比如資料結構、演算法、安全、離散數學等等內容,都是在我看來哪怕一個合格程式設計師不熟練但也至少知道的必備素質。

如果你在這些基礎上尚有欠缺,我推薦你在日常工作有條不紊繼續下去,新的技能繼續習得,架構能力可以提升的前提下,開始補上這些基礎。而且這些基礎對我前面所說的“工作繼續”、“架構提升”以及“新技能 Get”等等方面都會有非常大的幫助。

還是那句話,不要把自己侷限住了,這是我的建議,也只代表我個人的觀點。

當然,如果你這些能力上已經非常好了,而以我的能力,應該暫時無法在前端路線給出更好的規劃了。

javascript和node可以算同一個領域嗎?─ @a851870

javascript和node可以算同一個領域嗎?還有英語要怎麼學習

很多人把 JavaScript 當成前端,實際上它只是 ECMAScript 對應的一套語言,引擎有 V8 等等。而 Node.js 實際上是使用 Node.js 寫後端,但是還是很多人覺得它是前端。在這種大環境下,相較而言,我只能接受這種“泛前端”的概念了,就是大後端以前的,都叫“泛前端”,包括給前端提供 RESTful 介面的後端服務。

按照正確的理解來說,JavaScript 領域包含 Node.js 和瀏覽器前端 JavaScript,以及其它一些別人自己寫的用 JavaScript 做的事情,比如 React Native、Cocos2D 等等。

英語怎麼學,你讓我一個四級壓線過的,研究生英語掛過科的人怎麼回答呢?

如何在面試中能發揮正常水平?─ @軍長

請問如何在面試中能發揮正常水平,經常會發現面試問的問題,其實自己仔細想想是會的,但有些問題總是當時沒有get到點或者沒回答好。以及想問問同是畢業3年的前端,個人成長有什麼好的建議?感謝。

不好意思,恕我直言,從我聽你的講述來看,你面試中如果能答上來屬於“超常發揮”。

#其實自己仔細想想是會的,但有些問題總是當時沒有 get 到點或者沒回答好#

雖然有點不好聽,但是我單方面判斷,雖然自己知道,但是對這一塊領域還是比較不熟悉,或者相對陌生。如果這些題目能答好的確屬於“超常發揮”了。

如果想在面試中能“發揮正常水平”,還是推薦在日常開發中或者業餘中把該弄會的東西“真”的弄懂弄會,並且追根溯源,而不是一知半解。一知半解很容易給自己造成一個“我其實是知道這個東西的,只是面試時候沒答好,沒有 Get 到點”的錯覺。

但如果我猜測錯了,那有可能是面試官問問題的方式或者面試水平有問題。

畢業三年,基本上是屬於一個可以有至少一兩個新人帶的階段。這個時候主要還是夯實自己的基礎,並且弄透徹,這樣才能在帶人的時候把人家也弄懂。至於基礎和思想來說,還是我的另一個回答,多寫多思考以及多學習。不要把自己侷限在“前端工程師”,而應該是一個“程式設計師”、“工程師”、“黑客”,甚至是“架構師”,以這個為目標去進步,而不是進步成一個“比現在要厲害的前端工程師”。就跟軍隊一樣,首先是一個“兵”,然後再是各種不同的兵種。


本期 AMA 社群小夥伴提了許多實用問題,感謝死月認真地為掘金小夥伴解答了不少疑問。瀏覽更多的問答,可以到死月的 AMA 進行閱讀和討論。


死月 AMA 福利:書籍《Node.js:來一打 C++ 擴充套件》

死月從所有提問中選擇 2 個他覺得提問著贈送他的書籍《Node.js:來一打 C++ 擴充套件》。記得檢視評論提醒喲~

掘金 AMA:聽 Node.js Core Collaborator 之一 死月聊 Node.js && 技術寫書

相關文章