如何评价阿当的文章《当我说前端基础时,我在说什么》?

引文:当我说前端基础时,我在说什么? —— 最近几年在前端圈的观察和反思
关注者
1,549
被浏览
51,128

70 个回答

作为一个非前端开发人员,看完这篇文章后我的感受是:认认真真,系统科学地学好计算机基础课是多么重要的一件事情。计算机的基础课程里会教你:

- 如何做一门 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 部分的实现即可,有什么难理解的?干嘛一定这么高冷的认为只有一小戳的人才能玩某个圈子?

所以啊,同学们,我跟你们讲,大学的时候认认真真的学好计算机基础课程,即使你以后只是像我这样做个打杂的民工,也不至于因为技术日新月异的变化而感到害怕和焦虑。不过是狗熊所见略同而已,就是比比谁的爸爸好,谁的时间多。

吐槽结束,继续潜水。。。

首先一句结论,我认为作者的文章看似为新手着想,实际是不想承认自己已经学不下去,但作为老人还是来刷新一下存在感的。

文章嘛,不可能所有的都是错的,比如基础这个东西,他是确定以及肯定的重要。

可是css/js就真的是基础了么?说实话我觉得如果只把这个作为基础那前端可真的是把自己的的圈子画的很小了。

另外,新技术都是伪前端么?

脱离业务谈技术都是扯淡,那我们就来实际业务来谈一下。

这个图就是我目前主要负责的一个后台CRM产品开发,是一个可视化的报表生成器。

1.作为前端开发,面对这么个东西,最最最需要的一个就是模块化开发的能力,现在使用的是webpack+ES6,顺带直接解决了之前使用r.js需要解决MD5命名问题。OK,这里已经已经用到了一个作者认为是伪前端排斥的新工具。

2.针对第一个页面,PM要求,当主表字段在某一维度被选中之后,其他维度内不能再出现此字段。按照作者来说,jQuery完全可以胜任。我不否认,我不依赖任何框架也是可以解决的,并且这个系统原来就是jQuery干的。可是呢,这里我是不是需要一个局部Model来做统一状态管理了?ok,现在在用的是一个我自己写的Model分发/同步结构,正在迁移到vuex上。好了,又一个新东西,为什么我会用呢,因为解决了我对于统一状态管理。用jQuery?增加几倍代码量去吧…

3.针对第三张图的编辑器,重头戏来了。他需要生成一个报表模板+对接数据源完成整个报表的生成工作,其中又需要拆分为上下文控制类组件(下拉框,下拉树,级联下拉),展示类组件(表格,图表,透视表,平面表),流程控制类(查询按钮),标注类(文本框)。

怎么样组织报表模板?OK,这里涉及到通过一个组件树描述来解决报表模板问题(数据结构基础),以及构建数据模型(又来数据结构了,虽然比起各种后端大大们的高达上数据结构差很多,但是也并非是不需要设计的)来负责组件渲染(主要复杂的是那个表格,具体就不说了,是一个多维多指标可下钻表格…说多了都是泪)。其中表格要求减少后端压力,最好做前端排序(对树的节点排序,嗯,算法基础来了)这前面所讲的基础,还没涉及到js/css的问题去呢。

接下来,组件开发,上面说的那个数据模型为什么需要统一呢?因为这个系统定位是平台,要有第三方组件接入的能力(按照一定标准开发)。那这里就说说组件吧,原来系统用的是公司某大神写的组件库,大概是4年前,那个时候看起来的话,这东西实现的很不错,但是呢,外包看不懂啊,整套东西就玩坏了啊!需求越来越复杂(就是那个万恶的表格),组件代码被改的那叫一个面目全非,没辙,改吧…于是乎vue重写之,并且还集成了前端排序,收起,展开(原来的逻辑是每次都重新请求数据,然后整体rerender)……嗯,说一下成果吧,不算html模板以及样式,纯js逻辑7000行 vs 500行……组件化封装完了呢,就是一个标签,给我指定的数据,我给你生成表格,有事件了,事件冒泡回调解决之(安利下vue,组件化封装实现的真心赞)。咦?有点眼熟,跟最早那批jsp控件,asp.net的控件,好像很像了哦。不过我生产力又提升了,数据驱动组件,并且外包人员看了文档也知道,哦,指定数据结构,引一个标签就行了。咦?这东西按照作者所说已经不算是前端了么?或者说这东西没什么用?我用jQuery照样解决?嗯…排期…可维护性…

PM来了,XXX,我们一直想要控件局部换肤功能啊,之前负责的都跟我说实现不了,只能整体换肤啊,你看看能解决么?为啥之前会说解决不了呢,css作用域啊,会相互影响啊,现在呢?嗯,vue-loader + stylus func替换变量生成样式,解决了…你问我原来前端能不能搞?能啊,多给我几倍时间吧。(又多了俩新技术…作者说了,这是伪前端)


最后整体项目构建,上面都说了一个组件都做到了7000vs500,那么可想而知最终打包也一样,直接说结果吧,打包时间3min vs 30s,代码整体体积 8M vs 4M(包含图片等资源)


这些问题都解决完了,开发时mock/真实api对接,请求转发,联调,部署,涉及到了各种计算机网络知识,嗯,貌似作者没提到网络技术算是前端基础。

项目的部分到这里,发现了么,痛点并不在于单纯的css/js,而是一系列问题的结合,那么如果真的要算作基础的话,这些应该全部都是(目前为止开发的东西还没有脱离前端范畴)。

补充一点,作者所谓的一系列伪前端技术,都极大的解决了我目前的痛点,既然作者说了不谈项目论技术,那么我这里已经概括着说了,可作者那些批判型的言论,又有哪个实际说了具体项目应用场景呢?引用@尤雨溪 大大之前在另一个帖子里的回复,你连个readme都懒得看就开喷,我看浮躁的应该是你吧

——————————分割线————————————————

我认为什么是基础,各种规范加上计算机网络,数据结构,算法,操作系统等等一系列计算机基础知识。这些重不重要?非常重要,业务开发时候需不需要呢?重要。业务开发时候会不会用的到呢?不一定。有什么用处呢?帮你理解你的代码是如何跑起来的,真正的执行机制是什么样子,以及面临一门新技术的时候能够快速理解并使用。

微博上已经有很多大神们出来说了,前端开发已经越来越复杂,也的确是走了很多其他方向的老路,借鉴过来没什么不好。如果只为了业务需要,其实基础可能根本用不上。那么为了混口饭吃,尤其是对于很多外包公司人员(无意放地图炮,但是的确占大多数)来说,我会用xxx框架,xxx工具就足够我吃饱饭就行了,我为啥要去打基础。对于刚入行的新人,通过业务开发逐渐开始去了解自己所使用的工具,未必不是一个好的方式。记得公司FE群里有个RD说如何学前端,几个冒泡的扔出来的话都是:跟俩项目折磨个半年就差不多了。

不好意思跑题了很久,绕回主题,作者说伪前端技术让他们不知道风向了。

我只能说,呵呵,我转行前端的时候less,sass满天飞,backbone,bootstrap遍地走,angularjs在国外已经开始火起来了,这不也是一路走过来了(虽然现在也还是很渣)。作为一个有心学习的人,自身的迷茫跟风向是没关的。自己不想学还非要怪风气不好的,跟掩耳盗铃真心没什么区别…

PS:突然想起来之前那群学生,跟我说你教我会弹几首歌就行了,我会弹唱骗骗小姑娘就行了。你要指望这群人能够创作出优秀的音乐作品,那无异于痴人说梦,但是这类人永远占大多数…

而作者给我的感觉呢,就是早些年马路牙子吉他手现在做酒吧老板的,突然发现来了一群玩拉丁,玩古典,玩爵士的吉他手来,于是跟那些新学吉他的人说,你们要小心不要别被风气带坏了,马路牙子吉他才是精髓…