我是工业聚,可以来问我任何问题!

#21

不好意思,问题有点多,最后一个问题:grin:,目前公司比较大,大公司的通病就是可能每个人都是螺丝钉,只在自己的岗位上去做事情,但是带来的问题就是自己可能会很长时间只钻一个地方,比如我是前端,可能就一直写页面,用RN,就一直用RN,我希望强化自己的后端或者其它框架,但是却没有办法,时间久了担心自己其它方面会越来越弱,也许某一块会比较熟练,但是毕竟范围有限,请问如何解决这一现状呢?或者说从自身角度出发,如何去改变它呢?

1 Like
#22

你好,请问对于其他的框架,如Vue, Angular, Ember, Backbone等等了解多不多?为何当初选择深入钻研React?你认为对于常用React的程序员来说,学习其他前端框架的时候有什么需要特别注意的吗?

2 Likes
#23

你好,请问2018年的学习生活计划是什么?

1 Like
#24

工业聚你好。

我是一个什么都接触的二傻搬砖,有以下问题想请教一下:

  1. 我主要想应用一下机器学习,这样学习伊始是否需要一些大学数学基础(全忘了,如果需要还要复习一下),下手建议从传统机器学习算法还是直接上深度学习的框架

  2. React / Vue / Angular 这类框架已经极大的方便了前端工程师的开发,您觉得未来的前端框架演化会接着朝一个怎么样的方向发展,是否还会有 jQuery -> MVVM 的跳跃式改变。

  3. 想看看您对未来前端职责和后端职责的看法,因为目前有许多项目的后端其实也是由我们「前端」来执行完成的,前后端的界限似乎越来越模糊。

  4. 对于目前业界「知识付费」你有什么看法吗?或者对于现在前端圈造网红的现象有什么看法。您接触过这样经常「知识付费」的人吗?是否会影响正常的工作和知识积累。

  5. 对于「前端门槛低」的说法您有什么看法,前端门槛低到底是一种好现象还是一种泥石流?

  6. 在社招招聘开发时,您更看重学习能力还是之前所做的项目的匹配度。

2 Likes
#25

这个问题我在几个地方回答过。比如survivejs里的访谈

在微信群「ReactJS中文」里提到过:

react 13 年底左右开源,react-like 的库在 15 年底开始涌现,恰好是 react 进入 v14.0 并且 api 保持兼容和稳定的状态。13年底到15年底之间,虽然有 virtual-dom.js ,但没有没看严肃的 react-like 尝试。这期间 react api 也频繁变化,正如现在 react v16。从这个角度解读,可以认为现在处于时候未到,react-fiber 的特性还没稳定,价值还没被充分证明,并非一个跟进的好时机。

另一个层面是,react-fiber 架构的复杂性和实现难度。比如,即便是最小化 react-fiber 可能也不小。比如,react-fiber 让 react 体积已经足够小(react 体积确实变小了),react 自身就更轻量,其他轻量版也失去市场竞争力了。如果 gzip 之后,相比原版 react 体积优势不显著,那就没有太大意义。

对于 react-like 库来说,也有一个乐观方向。react-fiber 是 react-fiber,基于 react-fiber 的 react public api,未必需要完整的 react-fiber 实现。就像 react 里的 virtual-dom 可能是最庞杂的一个实现一样,fb 里用 react-fiber 实现异步渲染,不代表这是一条唯一的路。

不管是悲观方向,还是乐观方向,现在都包含巨大的不确定因素。等 React V16/17 新特性稳定下来,才能准确评估,跟进的难度、意义和价值。

另外一点,js 的体积问题,可以有其它解决之道。比如 SSR, 骨架屏、service-worker 等。

现在可能不是跟进的好时机,可以把精力放到其他性价比更高的事情上。可以玩新东西,也有很多,reasonml, wasm, pwa, ssr, isomorphic 等等。

1 Like
#26

不管是技术深度还是广度,都依赖于一个扎实的技术基础。如果还没有通读过《JavaScript权威指南》、《JavaScript 高级程序设计》、《JavaScript DOM编程艺术》等经典书籍,可以开始啃起来了。

然后,可以开始实现常见的 UI 和交互效果,比如轮播图,移动端的 swiper,Tab 切换,下拉刷新等等。每一种效果,都有从低到高的完成度。比如。轮播图里,有无小圆点切换,有无左右箭头,是否支持定时轮播,是否可以无限循环地轮播,是否支持移动端 touch 事件等等,都反映了你写的效果的完备性和完成度。不断地提高它们,同时也就打磨了 JS 编程能力。

其他还有模板引擎(templte engine),lodash/underscore,jquery/zepto,react/vue 等不同类型的库或框架,先不看它们的源码,按照你对其 API 的理解,仿写一个最小可运行版本。再去看它们源码,印证你的实现跟原版实现的差异。

技术的深度和广度,都是积累而来的,无法一蹴而就。如果没有相对严酷的历练,难以沉淀下来深刻的知识和领悟。

4 Likes
#27

你的问题跟二楼的有点类似,可以参考对二楼的回答。

这里可以再总结一下,我们可以回顾自己现在掌握的知识和技能,可以发现,绝大多数都来自于曾经的严酷训练(如高中彻夜复习、暑假集中培训等)。那是一段当时并不轻松,但回想起来很充实的状态。有人称之为「学习区」,在「学习区」我们不轻松但成长最快。在「舒适区」我们很轻松,但成长较慢;在「恐慌区」,我们无所适从,只想逃离。

现在让你直接看 react/vue 的源码,可能直接进入了你的「恐慌区」,觉得自己水平很差、人很蠢。我们需要找到自己的「学习区」,每个阶段我们的学习区都是不同的。如果没有打好基础,那么「学习区」会一直停留在基础知识的层面,一进入更高领域,就会感到不适和恐慌。基础知识是每个学习者无法逃避的一个学习阶段,一定要通过某种方式突破它,并且这个方式一定不是轻松的(不是舒适区)。

「拖延现象」是逃避有难度的事情,沉迷自己舒适区的一种行为表现。在现在信息碎片化和信息娱乐化的时代,让人立刻得到短暂愉悦(如看抖音、刷微博、微信等)的事物太多了。需要鼓起很大的意志,刻意让自己去做有难度的事情,并坚持去做。最后会有显著成长。

先明确自己有要去改变的意愿,再强迫自己有尝试去改变的行为,并开始对自己的不作为,感到愤怒。从内心形成自趋力,最后形成习惯。初期必定痛苦,习惯之后可以体会到乐趣。

1 Like
#28

我学习「机器学习」的方式是「边学边做」,尽可能把自己学习到的知识,体现在代码上。

一开始,并不使用 keras,tensorflow 等库或者框架,而是自己根据机器学习里的算法介绍,裸写一个最小可运行实现。

我没有去刻意啃数学以补充所谓基础知识。图片加载有两种方式,一种是从上到下加载,图片虽然只展示半截,但是清晰的;另一种是从模糊到清晰加载,图片虽然展示了全部尺寸,但一开始是模糊的。我认为学习应该走后者路线。先有 big picture 一个纲领和大概,然后不断细化知识,对这个领域有更清晰的理解。如果从所谓的数学基础补起,恐怕连什么学到什么程度才算有基础,都难以确定。

另外,边做边学,也可以让数学知识学起来更灵动和真切,它不仅仅是公式,还是代码,也是代码运行后的现象;理解的维度得到了拓展。

当然,我目前的「机器学习」水平还很低,在这个领域的投入还不够多(毕竟还有本职工作要做)。上面只是介绍一下我个人的学习策略,未必适合其他人。权当参考。

1 Like
#29

是的,主要跟 suspend 特性有关。

react suspend 特性的实现机制是,重复执行 render 流程。第一次执行 render 时,fetcher.read 方法里的 promise 如果还没有 resolve,就 throw promise,终止此次渲染。然后进入 componentDidCatch 的阶段,catch 到 promise 后,在 promise.then 时,再次触发渲染流程。

这个机制要求async-safe,类似于 restful api 里两次 get 请求预期拿到一样的结果,虽然第一次 get 被 abort 了,但不应该影响第二次 get 到的结果。

上面说的是「重复执行 render 流程」,而非「重复执行 render 方法」,「render 流程」里包含 componentWillMountcomponentWillReceivePropscomponentWillUpdate 等生命周期,如果在这些生命周期里操作了 component 实例的属性或调用了有副作用的方法,那么两次渲染流程就无法满足「幂等」要求。

所以,干掉 will*,把 willReceiveProps 挪出到静态方法 getDerivedStateFromProps,可以防止开发者操作 component 实例,增加 async-safe 的安全性。

#30

即便不用 GraqpQL,也可以不用 redux/mobx,就看你的 web app 的状态复杂度。如果很小,那么用 react new context api + setState 方法即可。

如果对 GraphQL 整合有兴趣,可以看一下 apollographql 项目。

#31

在前端领域我的技术积累,是由我的老婆(当时的女朋友)推动的。我之前对 IT 技术没什么了解,她认为我在这方面骨骼清奇,怂恿我去学习。

原始积累的方式主要是两个:1)做 web 特效 demo 向她表达爱意;2)在她公司的楼下,等她加班完毕的间隙,看 web 领域的电子书,打下扎实的基础。

我老婆比我优秀得多,我在平衡事业、家庭、娱乐等方面很弱,全靠她敲打。

4 Likes
#32

react-native 是优秀的项目,为 web 开发者打开了新的职业生态。但如果想在移动端 native 开发领域有所作为,掌握 native 开发的语言、工具和生态,都必不可少的。

相对于 Android\IOS 开发,写 react-native 的前端是被服务者,而前者是服务者或者说顾问。

1 Like
#33

对前端来说,系统地学习后端知识,在求职阶段不是必要的;但一点都不了解,也不合适。适当了解一些。

不必等工作几年再去考虑大厂,可以现在就去投,去面试,去考虑。即便面试被刷掉了,你也可以知道自己要满足大厂的要求,应该加强哪些方面。

#34

我喜欢 vue 的 api 的简洁和贴近 web 开发的习惯,以及它用 compiler 把 template 从编译为 vdom 到编译为字符串拼接的 ssr 优化策略。其它几个,目前了解不深。

1 Like
#35

在学习技术上,我是兴趣驱动的。学习技术,对我而言,跟玩撸啊撸,守望先锋等游戏有相似的乐趣,并且更不容易腻,成就感也更强。这是一个很好的状态,我不知道怎么进入了它,我希望后面可以一直保持住这种热情。

我的成长 80% 发生在工作内容,个人项目只有 20% 的增益。但恰恰是个人项目,使我得到机会去付诸工作实践。所以从重要性来讲,个人项目里我的积累,也很重要。目前可以说是工作和业余的技术学习,对技术成长而言,同等重要。

1 Like
#36

反复的造轮子是一个好的练习,跟反复的复制粘贴代码不一样。这个问题跟前面的有点相似,可以看一下我对前面的回复。

#37

这个问题非常好。在进入技术领域之前,我对数学、物理学、哲学、心理学以及演化论都很感兴趣,我认为它们是理解世界的不同维度,缺了任何一个,都缺少了一个重要的、不可替代的视角。

我对技术的兴趣,也延续了上面的特征。计算机是另一个庞大的、重要的世界的体现,如果不懂计算机及编程,就像一个麻瓜,所见皆如魔法。

仅仅掌握编程语言,也不足够,还需要对编程语言如何被创造有所了解。这就进入编程语言的设计和实现的领域。除此之外,很多问题,无法手写规则解决,必须通过特殊途径,间接解决。这就进入了人工智能/机器学习的领域。而在很多领域,最后都会触及到数学跟编程的结合,目前最贴近数学的是函数式编程语言,又是一个新领域。

正是对世界和自我的反思与好奇,不断引领我去了解不同的领域。虽然难以成为每个上述领域的专家,但光是得到一些知识的理解,都足够让我兴奋很久。

在现代,没有人可以掌握人类创造的所有知识。我们需要根据自身兴趣,对知识做一个优先级的划分。我的划分方式是先去掌握纲领性的知识,它们可能是所有知识的核心部分,可以创造新知识,或者推导出旧知识。数学、物理、哲学、心理学、演化论、计算机编程、编程语言实现、人工智能/机器学习、函数式编程等,都属于我认为的纲领性知识的范畴。

2 Likes
#38

vdom 的技术实现太细节,不适合在问答里铺开。可以参考一些材料,如 virtual-dom.js,代码量不多。

如果有兴趣了解更多,也可以去看 react,react-lite, preact, inferno,anujs 之类的源码。

1 Like
#39

这个需要发布系统的支持。

如果是同构应用,在本地编译好,有一些必要性。我们得在 server 端和 cdn 里都发布一下 js,如果在分别发布系统里的服务器里编译,有可能因为 npm 依赖版本的不一致而产生不同的文件 hash,造成 404。所以,本地编译好,再分别发布到 server 端和 cdn,可以保证内容是一致的。

#40

这个问题我之前做个分享,可以看一下 slider文章

1 Like