小問:未来的前端应该如何学习

举报
feichaiyu 发表于 2020/02/17 22:12:19 2020/02/17
【摘要】 2017年3月15日,周四晚上8点30分,七牛云技术研发、《实战 ES2015》作者小問带来了主题为“有理有据地展望未来 Web 开发体验”的交流。以下是主持人小冰整理的问答实录,记录了作者和读者问答的精彩时刻。问:未来的 Web 作为前端的我们应该怎么去面对技术的不断更新和学习呢?答:这个问题其实是一个80%在学习前端或者 JavaScript 的同学都想问的问题。就如我在文章中所说的那样...

2017年3月15日,周四晚上8点30分,七牛云技术研发、《实战 ES2015》作者小問带来了主题为“有理有据地展望未来 Web 开发体验”的交流。以下是主持人小冰整理的问答实录,记录了作者和读者问答的精彩时刻。


问:未来的 Web 作为前端的我们应该怎么去面对技术的不断更新和学习呢?

答:这个问题其实是一个80%在学习前端或者 JavaScript 的同学都想问的问题。就如我在文章中所说的那样,Web 领域可以算是如今众多计算机技术领域中发展速度较快的一个。而现在有非常多的前端或 Web 工程师都有这样的困惑:摩尔定律已经不足以描述 JavaScript 技术发展的速度了,几乎每个月都会出现新的技术,我们究竟要如何去了解和学习?是否要一直跟着潮流的发展而追逐?

在回答这个问题之前我先捂着脸自我吹嘘一波,我是国内甚至全世界接触 Node.js 最早的第一批人之一,我也曾经参与过国内 Node.js 社区的奠基活动,并在这期间造过不少轮子。Node.js 确确实实让 JavaScript 技术的发展得到了飞速发展。但是就如某位老师所说,“你会滑动门吗?你会 Flex 吗?” 技术发展太快,我们甚至都已经不知道我们下一个技术选型或者学习目标又会是什么样的黑科技。不过我对于这种问题的态度一贯都是这样的:请始终保持着一种批判的态度去看待所有的技术发展。

我们可以举个例子,当初 Node.js 刚出来的时候,很多人都觉得这是一个“前端工程师做出来的玩具”。同样的,曾经有一种技术叫 “Silverlight”,当初很多人都觉得它非常厉害,豪门出身(微软)、兼容性强(支持 Windows、Linux 和 Mac)、甚至还有萌妹形象加持(微软台湾的“小光”)。

截然不同的两种态度以及它们如今的现状说明了一个情况:社区或大众的态度不等于最终的结果。我本人在两个技术上都多少有些涉猎,我经历了 Node.js 的兴旺发展,也经历了 Silverlight 的衰落。单纯地从技术角度看技术本身是无法做出非常准确的预测的。所以说对于技术的态度只要保持自己的喜好就好了,就像今天很多人都觉得 React.js、AngularJS 和 Vue.js 是三派分立,不知道要怎么学习好。非常巧,我个人同时学习和使用着这三种开发框架。在我看来技术选型只要找到自己喜欢的就好,也最好不要有太多的门派观念(所以我个人也不太喜好宗教,哈哈)。而对于新技术的出现,最好就是保持敏感观察、仔细审阅,如果有时间有兴趣就可以花些实现去研究和探讨,交流和实践是验证一个新技术是否值得自己学习下去的最好途径,而不是听途说道。


问:如何提高 JavaScript 能力,以及在精力有限的情况下,JavaScript 和 Vue.js 也提高那个较好?

答:说实话,我个人是比较倾向于先把 JavaScript 基础打牢固的,就像机器学习先把数学和算法学好。但要记住,这并不是门槛,而是基本功。JavaScript 基本功足了,你在学习和使用 Vue.js 的时候,对于其中的一些黑科技和花俏技巧就不会觉得很陌生,而是会去思考这其中是怎么的一个原理和实现方式。当然,学好 Vue.js 可以让你自己的竞争力更强。《JavaScript 高级程序设计》是我一直非常推荐的一本 JavaScript 基本功训练秘籍。


问:后端转前端菜鸡提问,RxJS 应用场景是什么样的?有相关的项目经验可以分享吗?公司项目用到 AngularJS 2,发现 RxJS 是一个利器啊?

答:RxJS 算是近几年中潜力最大的 JavaScript 开发领域之一。它的定位是将 JavaScript 中的所有数据都以流的形式进行处理,所有的操作都建立在一个个流水线之上。它可以将一些非常复杂的数据处理流程理顺,甚至可以将它看做时为数据流准备的 LoDash。但非常可惜,我个人并没有在这上面花非常多的时间,所以我建议可以看看徐飞老师之前发表的一篇文章,其中用了一个非常生动形象的例子来讲解了如何使用 RxJS 对流数据进行操作。


问:如果 iOS 对 PWA 一直不点头,未来怎么预期?

答:这个问题其实在前几天有过非常深入的讨论,我们可以顺便插入下最近非常火的一个话题:Apple 封杀 JSPath。JSPatch 是一种可以让 iOS 开发者通过云服务,并利用 JavaScript 来为原生的 iOS 应用编写更新包的工具,也就是所谓的热更新。理论上 JSPatch 可以通过 JavaScript 调用所有可用的 iOS 中的 Objective-C 原生接口,也就是说甚至利用 JSPatch 来直接实现完整的功能也是可以做到的。但是我们回忆一下当初购买第一台 iPhone 或者 iOS 设备的理由是什么?

我的理由是“高品质”,AppStore 上的每一个 App 都是经过了 Apple 的严格审核才可以上线的。但是当有了热更新技术以后,一些别有用心的开发者就可以利用其来绕过审核,将一些违规的功能和内容更新至已经发布的应用上。使得 AppStore 中的平均品质在不断下滑。而我们看看另一个智能移动设备系统的巨头 Google 的 Android,Google 在 2015 年正式公布了 PWA。这就意味着,任何人都可以在完全没有审核的情况下,开发、发布和更新自己的 WebApp,而这些 WebApp 的体验还可以跟原生的 App 非常相近。这显然就跟 Apple 的原则完全相反,那么我们就可以从中看到对产品品质有着如此严格要求的 Apple,有多少可能性会对这种(JSPatch)技术点头呢?不过有趣的是,PWA 中的“将网页放置在主屏幕”这一特点,早在 iPhone 4 时代就已经有了。而且离线技术也并不是只有 Service Worker 一种。所以在我看来 PWA 未来在 iOS 上会以另外一种方式或另外一个名字存在,但绝不会达到威胁到原生 App 的地步。


问:预计未来移动端 APP 开发将以什么为主?

答:短期之内,以 JavaScript 作为开发基础的技术是绝对无法代替原生应用开发的。

且不说未来,其实从好些时间之前开始,中国的厂商们就已经将一种非常先进的 App 开发模式发展到了世界领先的地步,那就是 Hybrid 模式,也就是混合模式。早期是 Native + Web,中间通过 JSBridge 的方式进行信息交互。后面 React Native、Weex 等 JS-Native 技术的出现,则又出现了 Native + (RN/Weex) 的模式。目前我也在这一方面做一些研究,吸收中国特色 Hybrid App 开发模式的优势,以及 Google 的 PWA 中的一些技术特色,相信会在不久的将来向大家再分享一下。

我觉得在很长一段时间内,App 的开发都会以这样的一种形式存在,大部分会以纯 Native 的方式开发,其次为 Hybrid,最后才是纯使用 React Native、Weex 等技术开发。

可能大家会好奇为什么是纯 Native 大于 Hybrid,这要说一下我自己的一次创业经历。我曾经为了开发一个 App,考察过 Swift、Hybrid、React Native 和 NativeScript(当时 Weex 还没有正式发布)。最后还是选择了用一个月时间现学现卖 Swift。当时放弃 Hybrid 的原因是因为成本太高,虽然 Hybrid 中的 Web 部分可以使得 App 的开发和更新成本降低,但是在没有任何基础技术沉淀的情况下,Native 和 Web 之间的交互桥梁的开发成本会耗费很多时间,但后面也改成了这种模式;而放弃 React Native 的原因是,React Native 依然存在不少限制,有的是开发模式的限制,有的是 React Native 自身的限制。NativeScript 跟 RN 类似。


问:对于前端的工程化如何看待,如果自学的话,有什么好的方法,或者不错的教程,可以以 webpack 为例,多页面的工程化有什么优点及缺点?

答:前端工程化是我们这几年一直一直在推的概念,但这不是一种技术,而更像是一种管理方式。工程化的目的是让前端项目在团队协作中更加容易操作,也更加符合软件企业软件开发的模式。就好比工厂中的生产车间,福特公司发明了生产流水线,使得汽车的生产效率大大提升,成本也降低了非常多,这就是工程化的意义,当然这是站在团队协作的角度上的分析。而对于个人来说,工程化的意义在于你可以将自己的项目更“整齐”、更“干净”地进行开发和展示,就好比我们写代码这件事本身,你可以写出完全没有章法像“汤”的代码(Soup Code),也可以利用模块化思想、OOP 思想、标准编码风格等等将你的代码的可读性提高好几个层次。而要说教程的话,我绝对推荐张云龙大大的系列文章,看完绝对让你受益匪浅:https://github.com/fouber/blog/issues/10


问:WebAssembly 对于前端的影响,你怎么看呢?

答:WebAssembly 其实并不是什么新事物了,早在几年前 Mozilla 的 asm.js 就已经引发了不少轰动,我们就暂且用 ASM 来作为这类技术的统称。在之前大家都觉得 JavaScript 是一种运行非常慢的语言,很多人都认为其原因是 JavaScript 的单线程特性,但实际上并不全是。我们可以回想一下我们在大学里学习的(或自学)C 语言,每一个变量的创建都需要我们先将其大小做一个预估计,比如数组的长短、数值的精度等等。这是因为编译器可以根据这些预设值对内存空间进行准确“开辟”,但是 JavaScript 从语言本质上就缺乏这一特点。所以在 JavaScript 中每一个值,引擎都会直接预留最大可容纳空间。


问:你觉得 JavaScript 方言 TypeScript 、CoffeeScript 之类的会长久吗?前端用强类型有什么刚需场景?

答:分久必合、合久必分。我们可以不把他们看做“方言”,而是看做是 DSL,即运用在特定领域中的语言。TypeScript 是为了喜欢强类型的人准备的语言,CoffeeScript 则是为喜欢 Ruby、Python 的人准备的。所以并没有长不长久这一说,只是使用占比大小会怎么变化而已。我目前就在大量地使用 TypeScript,但说实话前端没有强类型的刚需。比较强的场景则是它在团队协作开发中有着比 JavaScript 自身强很多的优势,强类型就意味着绝大部分代码及其目的都是可探知的。在项目开发的前期,我们不可能先将所有的文档都编写好,而 TypeScript 配合一些开发工具中的自动提示就可以起到一种类似于文档的作用。可以让我们在开发过程中减少不必要的冗余沟通,这对团队协作来说是绝对的优势。


问:聊一下 webAR 和 webVR 去年支付宝扫福和腾讯 QQ 附近派红包用的是原生 VR 还是 webVR ?

答:我记得 GitChat 之前就有一篇专门将 AR/VR 技术的文章,我在文章里也简单地讲了一下。VR 技术是将用户带进虚拟世界,而 AR 则是相反地将虚拟带进现实。显然我们并没有进入支付宝或是微信的虚拟世界中哈,所以都是 AR 技术的应用。至于他们用的是原生 AR 还是 WebAR,这个确实我需要再去跟他们的团队沟通一下。WebAR 和 WebVR 其实在 AR/VR 刚诞生的时候就已经有相关的概念了,因为网页毕竟是互联网内容最基本的载体,而 AR/VR 则是表现技术的新载体,那么在互联网时代新的表现技术自然是要考虑到怎么跟互联网相结合的,第一个需要解决的便是怎么将网页表现出来。


(以上内容转自GitChat,版权归GitChat所有,转载请联系GitChat,微信号:GitChat,原文: 《小問:未来的前端应该如何学习》


本文转载自异步社区。

原文链接:https://www.epubit.com/articleDetails?id=NC7E3EF935A500001202D193069075000


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200