阅读 206

掘金 AMA:听知乎专栏《V8 引擎》、LibrarySniffer 作者 -- justjavac 和你聊 V8 & 技术学习之法

第八期 沸点,掘金团队请来了知乎专栏《V8 引擎》、LibrarySniffer 作者 -- justjavac 做了为期三天的 Ask Me Anything (AMA) 活动(已结束)。

我们在此精选了一些来自用户的提问及 justjavac 的回答。

关于 justjavac

社区小伙伴提问

如何系统学习一下 V8 引擎? ─ @YibuMe

非常想系统学习一下 V8 引擎,但是老是看文章,总感觉少点什么,学的不深入,请教一下 justjavac 大大 V8 学习经验,怎么系统有效的去学习? 需要什么前置知识的

我学的也不系统,九牛一毛而已。V8 确实太复杂了,而且里面的奇技淫巧太多了,如果仅仅是想知道 es 规范是如何被引擎实现的,那不如是看 jsc。但毕竟 V8 是 js 引擎界的一匹黑马,吸引着很多人来研究。

  1. 官博 v8project.blogspot.com/
  2. youbute 视频,我整理了一个 V8 相关的播放列表 www.youtube.com/playlist?li…
  3. twitter
  4. Google I/O 或 Developer 的 V8 介绍
  5. 博客:
  1. 源码

你对 V8 的贡献及如何看待他人对你的评价? ─ @doodlewind

  1. 请问您是否是 V8 的贡献 / 维护者?如果是,应如何参与(非源码解析、文档翻译与新闻搬运等)non-trivial 的社区开发?
  2. 请问您如何看待尤雨溪老师对您「首席 markdown 程序员」的评价?
  3. 请问您是否认为您的技术产出与社区的知名度相匹配?

看了所有的问题,你的最有意思,第一个回答你吧。

  1. 我不是 V8 的贡献 / 维护者,我只是一个 V8 的业余爱好者,喜欢把自己的空闲时间拿出来研究一下 V8/Chrome/Node,也喜欢把自己的心得写成文章分析给大家,只是做了一些 trivial 工作。 参与一个大型项目,可以从提 bug 和修 bug 做起,这也是很多人参与开源项目的入手点,因为大部分 further 都是核心开发人员在维护,不过也得看运气,我曾经给 Babel 提交过些 bug,随后贺老修复了 bug 并提交了 pr,但是官方迟迟没有合并,最后核心团队直接在 bebel 7 的重构代码里面修复了。 注意开源礼节,比如仔细阅读 CODE_OF_CONDUCT.md 和 CONTRIBUTING.md
  1. 尤大的一句调侃,其实我们在微信里面,不乏有比这更过分的调侃。而这个称号也是我最初自嘲时发明的,这一点很多人都知道,根本原因是我在 github 的一篇 markdown 获得了国内的 star 数最高榜。之前有人嘲笑「首席 webpack 配置工程师」时,我回了一句,我还是「首席 markdown 程序员」呢,后来就一发不可收拾,被人做成了表情包。
  1. 第三个问题很难评定。"但行好事,莫问前程"吧。关于"技术产出",你大概指的是狭隘的 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 个提问者赠送他的书籍《人工智能》。记得查收通知哟~

关注下面的标签,发现更多相似文章
评论