第八期 沸點,掘金團隊請來了知乎專欄《V8 引擎》、LibrarySniffer 作者 -- justjavac 做了為期三天的 Ask Me Anything (AMA) 活動(已結束)。
我們在此精選了一些來自使用者的提問及 justjavac 的回答。
關於 justjavac
- 掘金專欄地址:juejin.im/user/55b9d2…
- 個人部落格地址:justjavac.com/
- 微博地址:weibo.com/justjavac
- GitHub 地址:github.com/justjavac
社群小夥伴提問
如何系統學習一下 V8 引擎? ─ @YibuMe
非常想系統學習一下 V8 引擎,但是老是看文章,總感覺少點什麼,學的不深入,請教一下 justjavac 大大 V8 學習經驗,怎麼系統有效的去學習? 需要什麼前置知識的
我學的也不繫統,九牛一毛而已。V8 確實太複雜了,而且裡面的奇技淫巧太多了,如果僅僅是想知道 es 規範是如何被引擎實現的,那不如是看 jsc。但畢竟 V8 是 js 引擎界的一匹黑馬,吸引著很多人來研究。
- 官博 v8project.blogspot.com/
- youbute 視訊,我整理了一個 V8 相關的播放列表 www.youtube.com/playlist?li…
- Google I/O 或 Developer 的 V8 介紹
- 部落格:
- 原始碼
你對 V8 的貢獻及如何看待他人對你的評價? ─ @doodlewind
- 請問您是否是 V8 的貢獻 / 維護者?如果是,應如何參與(非原始碼解析、文件翻譯與新聞搬運等)non-trivial 的社群開發?
- 請問您如何看待尤雨溪老師對您「首席 markdown 程式設計師」的評價?
- 請問您是否認為您的技術產出與社群的知名度相匹配?
看了所有的問題,你的最有意思,第一個回答你吧。
- 我不是 V8 的貢獻 / 維護者,我只是一個 V8 的業餘愛好者,喜歡把自己的空閒時間拿出來研究一下 V8/Chrome/Node,也喜歡把自己的心得寫成文章分析給大家,只是做了一些 trivial 工作。 參與一個大型專案,可以從提 bug 和修 bug 做起,這也是很多人蔘與開源專案的入手點,因為大部分 further 都是核心開發人員在維護,不過也得看運氣,我曾經給 Babel 提交過些 bug,隨後賀老修復了 bug 並提交了 pr,但是官方遲遲沒有合併,最後核心團隊直接在 bebel 7 的重構程式碼裡面修復了。 注意開源禮節,比如仔細閱讀 CODE_OF_CONDUCT.md 和 CONTRIBUTING.md。
- 尤大的一句調侃,其實我們在微信裡面,不乏有比這更過分的調侃。而這個稱號也是我最初自嘲時發明的,這一點很多人都知道,根本原因是我在 github 的一篇 markdown 獲得了國內的 star 數最高榜。之前有人嘲笑「首席 webpack 配置工程師」時,我回了一句,我還是「首席 markdown 程式設計師」呢,後來就一發不可收拾,被人做成了表情包。
- 第三個問題很難評定。"但行好事,莫問前程"吧。關於"技術產出",你大概指的是狹隘的 github 上的開源專案吧,那我的產出確實不多。關於"社群的知名度",我沒有覺得我的知名度有多麼高,如果你有這種錯覺,可能是我們倆的社群圈子重合度太高了。我混的社群不多,知名度大多有早期紅利在裡面吧,如果簡單的評價下:
- 掘金社群:我的產出 > 知名度,我是掘金的早期使用者,到底多早呢,比掘金還早。看到我這次的 AMA 照片了嗎,這是我多年前來掘金是照的,那時候還叫稀土,公司都還沒有成立,而掘金上線後,文章都是由聯合編輯來發表,我是早期的聯合編輯之一。我在掘金有什麼知名度嗎,沒有。
- iteye:我混的第一個社群,當時也只是做做筆記而已。10 年時間寫了 600 多篇文章,總訪問量近 500 萬次,我覺得我的文章應該幫助了不少人。至於社群知名度,我不知道那是啥。只知道我朋友被異鄉好居誣陷時,我寫了篇文章,然後給 iteye 創始人範凱發了條資訊,問他能不能幫忙轉發一下,他回覆我:"沒問題。你這個 id 我看這特別眼熟"
我在知乎回答了 500 個問題,在 sf 回答 1000 個問題,我私以為我對社群的貢獻不小,即使在社群獲得了某些所謂的知名度,不也是很合理嗎。
為什麼不建議做外包? ─ @®E·L·A·N©
剛看了評論 為什麼不建議做外包?是因為對於技術要求比較低嗎?
這麼跟你說吧,有很多 5 年以上經驗的開發者,其實呢,他們只有半年經驗,然後重複了 5 年。在我的招聘要求中,不招 2 種人:一種是培訓機構的,另一種是一直做外包的。
是因為他們對技術要求底嗎?是的,而且一年做幾十個專案,大多也都是同一個技術用 N 年。為什麼呢,穩定,成本低。有 code review 嗎?沒有。有重構嗎?沒有。有 UT 嗎?沒有。。。
對比一下產品和外包的開發流程。當最終開發完上線後,意味著專案(外包)結束了,可以驗收交付了。而產品呢,當最終上線後,才是剛剛開始。不停的反饋、迭代、打磨、……把一個十幾人用的軟體做到幾萬人,幾十萬,幾百萬,每個階段都是不同的技術,不同的架構。
做完一個能交付的軟體 vs 持續不斷的打磨一個軟體
®E·L·A·N©:
1.雖然外包公司很大一部分像您說得那樣,可是並不是做外包的公司依然沒有像樣子的code review,專案雖然是迭代了,可是每次的迭代都是草草上線,並不會給你太多的時間去怎麼優化程式碼 怎麼codereview的 而且 來北京後 我發現很大一部分公司都這樣 不過只是我從面試上來推測得出的。所有的公司產品都是業務導向的。具體程式碼層面那一塊就看技術領導的技術能力 方向 責任了。
萬事沒有絕對,只是“半年經驗,然後重複了 5 年”在外包型公司的比重很高而已。即使做產品,也不一定會持續優化程式碼,大部分公司還只是注重最終結果,也就是最終的產品質量,而不管程式碼質量和開發流程。
即使我帶過的團隊,做過的產品,也一樣。我覺得產品 v1.0, v2.0 沒有必要做 review,也沒有必要重構,這個階段的產品,目標是“能用”,能夠快速投入市場。如果被市場認可了,再持續迭代優化,達到第二個目標“好用”。在這個過程中 codebase 也越來越大,越來越複雜,也慢慢開始注重程式碼的質量和開發的流程。
外包也分很多種,也不能一棒子打死。有些是長期型的服務外包,專案週期是幾年甚至不定期。但是大多數外包公司的專案都是中短期的,專案週期是1-3個月,甚至更短,包括但不限於公司官網建設、企業 app、小程式、商城、等等。還有一些是做某個行業的專案,比如餐飲業。就是接各種餐飲業的專案,具體開發流程就不用細說了,基本都是套模板再加一些定製化開發。和流水線上的操作工沒有啥區別。
誘人的地方就是面試簡單,容易進,這也成為了很多應屆畢業生的選擇。薪資方面,通常每個專案做完都會有或多或少的專案獎金。我有一個高中同學,比我晚畢業一年,當時我工資只有 3k 的時候他就已經7-8k了(這個對比可能有些不公平,他在北京,我在天津),後來我的工資達到 20K+ 時,他也終於突破 10K 了。後來整個外包行業不景氣,他們公司的業務也不行了。好在他自學了 iOS 程式設計,跳槽去了一家手遊公司。
如何閱讀有些枯燥的技術書籍? ─ @人民幣玩家
閱讀一些逐漸深入的書籍,如何有效處理長篇大論枯燥難尋。
停下來,思考一下,玩會遊戲,然後繼續。給自己定個目標,一次讀 20-30 分鐘,硬著頭皮讀,然後思考 10 分鐘。我用這種方式,花了3個月的時間並行讀完了愛因斯坦的《相對論》和 Harari 的《人類簡史》,然後整理了 200 多頁的筆記和草稿。
也有一部分原因是生活和工作壓力太多了,讓很多人有了焦慮感。當讀書讀不進去時,就增增加了自己的挫敗感,最終形成的惡性迴圈。尤其是隨著年齡的增加,接受新事物新觀念新知識也變得越來越難。
我上大學時,從圖書館借了 2 本 Martin Fowler 的《重構》,一本英文原版,一本中文翻譯版。兩本書對照著看,大概用了不到一個月的時間吧,就把英文版讀完了。
工作後,就只能利用每天的早起時間讀書了。再後來我和老婆定了一個家庭讀書日,每月選出一個週末,這天一起看書 4 個小時以上。如果再加上選書、佈置環境、營造氛圍什麼的,基本上得耗費一天的時間。
閱讀是一種習慣,堅持下來就行
再補充一句,其實儀式感也很重要,突然就覺得讀書變得很神聖了
再再補充一句,找個女朋友,一起學習更有動力
如何平衡工作和學習?─ @希望明天遇到你
我進入程式設計完全因為興趣,相對別人而言,很沒有天賦,但是一直在堅持,現在的公司屬於成長期,無法鍛鍊技術,想從新捋一遍前端技術,又沒有時間,請問大神你有什麼好的建議嗎
“公司屬於成長期”我是不是可以理解為公司的開發流程各種不規範,沒有提升的空間了。
我經過了好幾家成長期的小公司,也在大公司帶過百人以上的團隊。其實規範不規範完全不在於公司的規模。而且從不規範到規範的過程也是一種成長。
而你說的"又沒有時間",這就完全是藉口了。只要你有時間刷微博朋友圈,就有時間學習。只要你有時間刷掘金,就有時間學習。只要你有時間打遊戲,就有時間學習。每天兩個小時,擠擠就出來了。
你可能還年輕吧,我像你這個歲數時,有的是時間。如今有了家庭,有了孩子,時間突然就少了很多,但是晚上依然有時間打打遊戲,刷刷知乎,我一般都是早上 5 點半起床讀讀書,寫寫程式碼,寫寫文章。
如果老闆告訴你把 xxxx 學完,給你漲薪2W,我猜你馬上就有時間學習了。說白了,還是動力不夠。
從頭學一遍前端技術,這個沒有必要,你可以重新學,但是沒有必要從頭學。還是基於你目前學習的技術,繼續學習相關的技術吧。或者之前沒有深入學習的知識點,現在再進行深入學習。
前端只是一小部分而已。先做一名合格的程式設計師,然後才是合格的前端程式設計師。有很多技能是不限於語言和平臺的。
如何均衡 React 和 Node 技術棧?─ @佳得樂配枸杞
jjc老師好 我的技術棧是Node.js 和 React各一半。 如果接下來繼續將時間分給兩個技術棧一家一半, 感覺哪邊都沒法做出點名堂。 希望能獲得您的一些建議,謝謝。
並不需要放棄一半,只是把其中的主要精力投入到一家,而次要精力投入到另一家而已。有側重點的學。即使那些所謂的全棧工程師,也都有側重點,比如狼叔,號稱Nodejs全棧,但是他的技術棧的側重點則在後端。
什麼是全棧,就是不要給自己設限,從一個技術點輻射出其他相關的技術點,然後不斷精進,這就是全棧。那些個既會react,又會vue,還會nodejs,還會MySQL,還會python的,……是全棧嗎,不是,那是打雜的。所有技術都學個皮毛,那學的再多又有什麼用呢。
如果你定位為後端 nodejs,那麼就學習 js 語法,nodejs,平臺,類庫,框架;然後是記憶體管理、http協議,快取策略;然後負載均衡,高併發,高可用;再慢慢一層一層的深入,技術是一個由點到網的過程,學的越多,就會發現自己欠缺的越多。
前期可以追求廣度,都多多幾門框架或者技術。但是後期一定要追求深度,把一個技術棧和相關的周邊技術學精學透,不要永遠停留在"會用"的水平。
本期 AMA 社群小夥伴提了許多實用問題,感謝 justjavac 認真地為掘金小夥伴解答了不少疑問。瀏覽更多的問答,可以到 justjavac 的 AMA 進行閱讀和討論。
justjavac AMA 福利:書籍《人工智慧》
justjavac 從所有提問中選擇 2 個提問者贈送他的書籍《人工智慧》。記得查收通知喲~