下载APP
关闭
讲堂
部落
Python 进阶训练营
算法训练营
架构师训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者

结束语 | 我的前端学习踩坑史

2020-05-07 李兵
图解 Google V8
进入课程

讲述:李兵

时长05:50大小5.36M

你好,我是李兵。
这是我们这个系列课程的最后一讲,今天我们不谈技术,我想跟你聊聊这么多年我学习前端踩过的一些坑和学习心得。
其实我早些年主要是做 C/C++ 开发的,到了 2009 年,接触到了浏览器研发,这个时候我对前端并不是太熟悉,但是在开发浏览器的过程中,需要了解大量的前端知识。我当时的学习策略是,只有当遇到了与前端有关的问题时,才会去学习相应的知识来解决。这样做本意是想要节省时间,结果却反而让我花费了更多不必要的时间。
比如在开发双核浏览器的 Cookie 共享的过程中,我发现有一个例外,那就是设置了 HttpOnly 属性的 Cookie 是无法被共享的。
为了解决这个问题,我就去查 HttpOnly 相关概念,发现这和 Web 安全体系有关系,然后我就去补安全相关的知识。之后我又发现,浏览器多进程架构和安全系统息息相关,也就是说,这些知识是环环相扣的。
因为我当时对前端并没有做整体的了解,所以对浏览器中涉及到的安全相关的设计也没有过多关注。每次遇到一些和前端相关的细节问题时,我都需要花费很多时间去补充相关知识,然后再去解决问题,这种方式白白地浪费了我非常多的时间。更加遗憾的是,我之前积累的很多前端知识,都是这么缝缝补补学习过来的。
所以,当你要开发一个新项目或者学习一门手艺之前,应该将其所涉及到的知识做一个全方位的了解。我就觉得发明“技术栈”这个词的人是一个天才,“技术栈”非常形象地表达了学习一门手艺所需要的是哪些知识,以及应该按照什么顺序来学。
比如学习前端这门手艺,栈底到栈顶依次是浏览器架构、Web 网络、事件循环机制、JavaScript 核心、V8 的内存管理、浏览器的渲染流程、Web 安全、CSS、React、Vue、Node、构建工具链等,我们可以从栈底往栈顶一步步循序渐进地学习。
学习技术栈的每一层都不难,难的是当你抛开底层栈的内容去理解上层栈的内容,那么就有可能陷入知识点的盲区。
其实,我们在学习一门手艺的时候,即便没有完善的技术栈资料,只要肯花更多的时间,也可以克服困难。甚至我们的学习过程可以像一个无头苍蝇,横冲直撞,某一天也会突然顿悟整个知识体系 ,俗话说,在一个领域耕耘十年,必定能成为该领域的专家。
但是,三年可以搞定的事,为什么非要花上十年呢?
系统性学习一门技术,花费的时间也是最短的,也可以说是性价比最高的,因为系统性地、循序渐进地学习,那么学习到每个知识点时,其实并没有其他的知识盲区,这样学习起来是最轻松、简单的。
虽然技术栈的概念已经提出来很久了,但是我发现大家对技术栈的理解却不同。比如我们在招聘前端工程师时,经常会看到有人在简历上提到自己的技术栈包含了 Vue、React、Node 等这些偏应用的知识,在我看来,这并不是技术栈,这只不过是栈顶函数的上下文而已,而对于那些在技术栈底层上下文相关的知识,在简历中却很少有提及。所谓技术栈,应该是在某一领域,从底层的基础知识到上层的应用技术有一个完整体系。
那么当我们进入一个领域时,应该如何建立适合自己的技术栈呢?
如果你进入的是一个成熟的领域,那么一般都有比较完整的技术栈的资料,我们需要花些时间分析资料,系统性地了解这一领域知识的宏观架构、它的过往历史、它的优缺点,然后结合现有资料和我们自身的特点来建立我们自己的技术栈。如果你所在的领域还在高速发展中,并没有人总结出完整的技术栈,那么为了更好地理解技术的发展脉络,我们需要花更多一些的时间去整理出该领域的技术栈。
所以后面我就吸取了经验,比如我学习神经网络的过程中,就采取了先构建技术栈的方式,先系统性复习了微积分、概率论、线性代数,然后结合实际项目完成了数据清洗、构建模型、模型训练,最后到实际应用。整个过程我只花了半年时间,最后我对神经网络也有了非常深的认知,现在我们正在打算将神经网络运用到我们的新项目中。
采用了同样的的方法,我在学习区块链和数字货币时,整个过程也是非常轻松的,先分析区块链要解决什么问题,然后整理技术栈,再通过技术栈来一步步学习,不到两周,我基本就把整个数字货币的来龙去脉分析的非常清楚了。
好了,到了这里我们的课程也要告一段落了。最后我想跟你说的是,学习一门手艺其实并不难,难的是如何充分利用时间来高效学习,因为这世界最值钱的就是我们的专注力和时间,花三年干成一件事和花十年干成一件事的代价是不一样的,希望你都能够找到适合自己的方法来高效学习,也都能学有所成。
另外,如果你有时间,也请帮我填个课程问卷,我和编辑大茹想收集更多的反馈来优化课程。今天虽然是结课,但我们的工作并没有结束,未来我还会回来加餐、回复留言。
再见。
unpreview
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
上一篇
22|答疑:几种常见内存问题的解决策略
 写留言

精选留言(9)

  • 2020-05-07
    再见了。老师这么高产,我相信很快又能见面了!
    展开
    8
  • 2020-05-07
    看完这篇总结,又认真读了几遍。老师的这种体系化的学习方式,很受启发。以前学习零碎的前端知识总有种盲人摸象的感觉,觉得知识好多好杂。

    另外有个疑问对于技术栈底层的内容(比如浏览器架构),如果搞起来比较吃力,还需要花大力气啃下来吗?谢谢
    展开
    2
  • 2020-05-07
    老师你是怎么学CSS的?以及对于移动端的学习有什么好的建议或方法或学习资料于渠道?
    2
  • 2020-05-10
    老师再开一个【JavaScript面向对象的程序设计】专栏呗。感觉这个是属于拦路虎之一。
  • 2020-05-08
    v8课程意犹未尽,老师后续再讲点更多的内容,可以的话把浏览器渲染引擎部分的一些知识也出一个专栏
  • 2020-05-08
    构建自己的技术栈(或者说自己的知识思维导图),然后按照技术栈的项目有目的地学习。非常感激老师的经验分享!
    展开
  • 2020-05-07
    非常赞同老师的方法论。感谢老师深入浅出的讲解
    展开
  • 2020-05-07
    在零零碎碎的构建前端知识体系后,尤其赞同老师的观点,在理解了底层后,再去理解上层也会容易很多。你会知道他为什么要这么做,是为了解决什么问题。
    展开
  • 2020-05-07
    非常同意老师的观点
    展开