作为一个非前端开发人员,看完这篇文章后我的感受是:认认真真,系统科学地学好计算机基础课是多么重要的一件事情。计算机的基础课程里会教你:
- 如何做一门 DSL 语言 ( css )
- 如何在屏幕上正确的显示像素 ( html layout and rendering, canvas, webgl, svg )
- 一门编程语言长什么样子 ( javascript )
- 数据结构是什么,我们平常解决问题会用哪些算法 ( virtual DOM, DOM, Render Tree )
- 进程,线程,~~携程~~协程都是神马
- 从外部存储器读取数据到内存中是怎样一种体验
- 还有很多...
然后 web-browser 做的事情就是帮助你把这些东西用比较通用的方法包装好,让你可以在掌握了固有基础知识的前提下,很灵活的运用他去做一些创新和拓展。
所以,当你掌握了基础知识后,看待前端那些“技术”时,你会和这些技术的开发者们产生共鸣而不是排斥或抵触。你会欣赏其他人的解决方案,或者会因为他们的奇思妙想而衍生出新的灵感,从而触动你产生自己的解法。
比如 css,从一开始的 less,sass,stylus 到 postCSS 以及 w3c 近几年对 CSS next 的提案。大家努力的重心从来没变过,就是如何做好一门 DSL。你理解本质需求,就不会害怕这些衍生品,反正大家思路都差不多,思路古怪的,政治不正确的,你凭借自己的科班能力早就判断出来了。
再比如 MV* 和 Flux,都是在努力解决数据流向和数据展示的问题。而我从来没觉得这些框架的推出是“追新”,反而是因为 CPU/GPU 发展使得过去因为机能限制,浏览器优化不够,市场占有率等问题而不能去普及的技术方案,可以在现有背景下重新去尝试和推广。当你看到诸如 React 这样的框架推出的时候,你应该感到兴奋而不是像这篇文章的作者那样去抵触和害怕。兴奋什么呢?如果你的计算机基础学科知识扎实,你会兴奋大家过去几年都想到一块去了,很多“如果 (what if)”的美好愿景竟然有了这般实现。
再比如 Canvas,WebGL,过去我需要从非常底层去搭建图形程序的周边,才能开始进行一些图形编程的实验,现在都有了非常方便的方式方法,我会由衷地感谢标准委员会和为此努力的厂商和程序员们,而不是如作者说的那样:
而近些年,随着前端越来越被重视,越来越多的server端或者其它GUI技术(flash、webgl等)转做了前端,这种情况发生了根本性变化,无论在国内还是在国外。这一波新前端们,对编程是熟悉的,对框架是熟悉的,而对css和html是相对陌生的。
这个观点太可笑了,我一个对前端编程完全不懂,但比较认真学计算机基础学科的人,只要你跟我说 css 是一门 Layout + Rendering 的 DSL,我至少就懂个三分了。然后我肯定问你呀,Layout 是怎么计算的?你告诉我浏览器坐标系是 Screen Space,原点在左上角,Y 轴向下,我懂四分了。然后你跟我说,除了固定坐标定位还可以根据节点高宽来动态定位,定位时也会根据文字数据做处理,我懂五分了。然后我问你 Rendering 是什么鬼?你告诉我浏览器也就能画矩形,贴图片和渲染文字。我肯定问你渲染优化策略是什么,你说 Tiling + Dirty Rect 我大概就懂六分了。然后我问你能用矩阵么?你说有 Transform,不计入排版。我问你能伸缩么,你说有 Flex 但父节点高宽必须能推算出来。我问你能拉曲线么,你说有 SVG。我问你能打点么,你说有 Canvas。你不用说了,我知道怎么画东西了。到此你已经懂七分了。剩下三分,真的觉得细节不懂,你只要去看一看开源的浏览器实现,比如 Webkit 或者 Gecko 中关于 Reflow/Layout 部分的实现即可,有什么难理解的?干嘛一定这么高冷的认为只有一小戳的人才能玩某个圈子?
所以啊,同学们,我跟你们讲,大学的时候认认真真的学好计算机基础课程,即使你以后只是像我这样做个打杂的民工,也不至于因为技术日新月异的变化而感到害怕和焦虑。不过是狗熊所见略同而已,就是比比谁的爸爸好,谁的时间多。
吐槽结束,继续潜水。。。