如何评价真阿当的文章:《2016年前端技术观察》?

关注者
2960
被浏览
494094
不谢邀。

评价就免了,槽点太多反而不好下手。但至少比较好的总结了阿当自己的观点,至少以后要论战不能以微博140字讲不清楚作为理由了。


本来前端圈子里对阿当(曹刘阳)的观点已经讨论过几波了,再来一次也无伤大雅。但是这次不太好的一点呢,是从CSDN/程序员这个老牌程序员媒体上发表的,就让前端圈之外的人误以为阿当的观点是前端行业的主流看法或者至少是有很大影响力的意见。这会误导其他技术人员(包括技术管理层)和非技术人员(如产品、设计)。我为什么敢说阿当的观点绝对不是主流,不是凭借我个人在前端行业的权威地位(自吹一下,反正不上税),而是这确实是业界共识(具体后面会说)。

坦率说,这个事情呢,我也有微小的责任。因为程序员编辑部其实之前找过我,希望我来写2016前端技术盘点,我呢太忙了(年底事多,还要参加好多活动),就推说这题目太难。本来我也应该推荐一些其他人来写,比如 @黄玄 啊。写技术盘点这种题目非常重要的是技术视野和技术品味,黄玄这方面很好,而且对于2016年的热点如微信小程序、(被很多人忽视的)PWA等都有很深入的观察,而且他最近应该也比较空。但是不幸的,因为程序员编辑部的工作人员在微博私信上联系的,我现在刷微博比较少,后来就把这个事情忘记了。但我确实也没想到最后他们会找阿当来写。毕竟我印象里历史上程序员杂志的编辑还是有眼力劲的,比如在2013年年初请 @尤雨溪 撰写的《开源前端框架纵横谈》,那时小右甚至还没开始vue的开发(不知道是不是写了这盘点之后才下决心自己写一个的)。当时我也还不认识小右,但那文章给我留下了印象,所以现在还记得。

其实那期是前端专刊(《程序员》2013年3月刊:前端-CSDN.NET),我们看下目录:

开源前端框架纵横谈 by @尤雨溪

Web App和HTML5给Web前端带来的变化 by 曹刘阳
(我整理时才发现那个时候阿当也写了一篇,说明当时这篇文章没给我留下啥印象。)

前端模块化开发的价值 by @玉伯

前端工程师如何应对移动Web时代的应用开发 by @winter

TypeScript:更好的JavaScript by @高博

CoffeeScript:阴霾天空的一抹蓝 by 周亮

ClojureScript:前端世界的Lisp by 胥帝

针对应用程序设计的Web编程语言Dart——《Dart语言程序设计》作者Chris Strom专访 by 韩国恺

Node.js高实时应用开发 by 谢骋超

Backbone.js在大型单页面应用中的应用实践 by @赵望野


为什么Discourse使用Ember.js by Robin Ward


模块化高扩展性的前端框架KISSY by @何一鸣(承玉)


行进中开火:YUI3在美团的实践 by @尚春


CSS预处理器:Sass、LESS和Stylus实践 by @大漠




一共14篇。【值得收藏的一期嘿】


除去我不认识的周亮、胥帝、老外Robin Ward(Discourse作者),高博老师(著名技术译者)、谢骋超(pomelo的作者)不算前端圈里的人,其他9人确定是前端圈内的。韩国恺(应该是google的)、尚春(美团的)我不熟,其他7人我都多少有过交流。其中只有阿当转行做了产品,其他人就算做了管理不太写代码了,但至少还是前端或大前端团队的技术leader。以我的了解,我认为他们任何一人都不会同意阿当的大部分观点。

其中有几位自己就回答过相关问题:

关于「真阿当」对目前流行前端技术的批判,大家有什么看法? - 尤雨溪的回答 - 知乎
关于「真阿当」对目前流行前端技术的批判,大家有什么看法? - 玉伯的回答 - 知乎
如何看待真阿当每天在微博吵架? - winter 的回答 - 知乎

毕竟,按照阿当现在的观点,TS、CoffeeScript、ES6、Angular、React、CSS预处理器、Node.js……都贬低了一遍,你们对照一下其他人当年写的稿子和现在做的事情,哪能赞同阿当呢?


不幸的是,这次CSDN/程序员在14位过往撰稿人当中偏选了阿当。

而且如果你翻一下阿当当初写的那篇,尽管我们知道当年他就已经很固执了,但其实还没有现在这么……走火入魔。





技术更新换代近在眼前,每个前端人都应该对此有危机意识……才不至于在这场新的革命中掉队。
呵呵。


有些人可能会觉得(包括他自己表达的也是)他是实践之后才觉得这些东西不好的。但是他到底实践了多少呢?大部分人可能并不知道阿当是个多么固执的人。实际上我、winter、 @米粽 、大城小胖 @魏子钧@月影 等当初在盛大创新院和阿当做过一段同事。特别是大城小胖、米粽跟他一起做过项目。当时(2010年)要做游戏大厅基于websocket的服务器端,所有人都建议他用node.js,一方面node.js已经有很好的websocket库和socket.io这样的封装库,另一方面我们许多人都非常看好node.js,并且统一到js能方便团队协作。但是他偏要自己用python撸一个。

所以他一开始就对node.js充满偏见直至今天。

BTW,所有盛大创新院共事过的前端(包括非前端的,如老赵 @赵劼 ),没有一个赞同他的。真的是众人皆醉他独醒?

再说CSS预处理器。公平的说,许多非常杰出的前端工程师,包括一些今天已经成长为行业领袖的同志,确实当初(2007年到2012年间)也不能接受CSS预处理器。但是到今天还反对的,除了阿当之外,我是真没遇到过了。当然,我自己很多时候也不用CSS预处理器,比如side project,或样式部分非常简单的项目。但是凡是复杂的需要团队协作的项目,必上CSS预处理器。因为和阿当理解的相反,CSS预处理器的优势越是复杂项目越是需要团队协作,越能体现出来。真正的技术团队leader早晚会通过实践明白这个道理。只能说阿当从来没有真正放下成见。

另一方面,也不是说你没用过就不能评价了。比如我经常没怎么用过就评价嘛。但这得建立在非常强大的技术能力、技术视野和技术品味之上的。(忍不住又自吹了。)

阿当在2010年
拒绝:node.js、CSS预处理器
推崇:YUI

我在2010年
推崇:node.js、CSS预处理器
唱衰:YUI

面对完全相反的判断,马后炮来说,当年一个工程师应该听我的建议,还是应该听阿当的建议?

其实就当年来说,node.js/CSS预处理器,我和阿当都没怎么在production里实践过;YUI,阿当擅长,我从来不用。说起来他还比我多用过一项。但是这三个东西的趋势,我都预判准确。


当然,我也有判断失误的时候,比如2003年我就推崇XForms……现在没有几个人知道这东西,不过你们如果去看一下,就会发现,这不是MVVM嘛!咳咳,只能说太超前也不好。


先写这些吧。(反正自吹的部分已经ok了)



【补充1】

有人问到CoffeeScript。我从来就没特别看好过CoffeeScript,也没有鼓动过任何人在production里使用coffee,尽管我还是挺欣赏CoffeeScript的许多设计的。但是请别说我跟阿当在CoffeeScript的看法上一致。毕竟唱衰那么多东西,怎么着总能蒙对一两个吧。


【补充2】

当然,也许阿当只是来吐槽的。但是吐槽的关键是要有娱乐效果。比如本问题下 @方应杭 的吐槽姿势就很好嘛。看来下次阿当再发文章可以找方应杭先翻译一遍。


【补充3】

有人问我RN的事。我其实对RN无感,但是可以讲点事实,就是国内有许多公司早就已经在用了,携程、58的移动app已经全线上RN了,类似RN的Weex则已经是阿里的技术战略。我写这篇文字的时候随时刷了一下知乎就又看到一篇去哪儿网同志关于RN/Weex在ListView底层技术上的分析(知乎专栏),注意这文章的作者是iOS程序员。实际上许多公司引入RN、Weex的都是本来完全做native开发的移动端团队,而不是前端团队。我在多次技术大会上看到RN/Weex的分享的听众native和web开发者各占一半。所以阿当写的“学了React Native就可以在公司做App开发了?你先问问iOS和Android团队答不答应……公司定岗的原因,iOS和Android团队也绝对不会对你友好……”我相信很多人看到都哑然失笑。

当然RN是不是就是移动开发的银弹?肯定不是嘛,否则阿里就不要自己再搞Weex了嘛。有没有其他可能?肯定有嘛,比如PWA,我个人其实也是比较偏爱PWA代表的“纯”Web技术方向的。所以阿当也不是所有话都完全不对(毕竟连李红米 weibo.com/1960954893/Ej 也只能做到每页都有错误,无法达到每句都有错误)。比如他说“阉割版的CSS导致前端技能的受限”、“learn once write anywhere的性价比不(够)高”、“如果webview的性能问题在未来得到解决”……好像挺一针见血的嘛。

当然,每个人看到的那个部分也不一定一样,比如本问题有些答案里觉得
“某当老师反对coffeescript和typescript的理由是比较赞成的”
“关于SPA和Web Site基本赞同”
“但是,强调基础是对的”
“有个观点是极其赞同的,很多人只会用框架用工具而不注重基本功的修炼”
“但是我觉得他对node的看法比较中肯”
“除了对Angular 1和微信小程序的评价相对中肯”
“不过全文反复强调前端要好好撸基础知识这点我是赞同的”
“关于全栈的批评。我觉得他说的没错。”
“最后说自己可能不对,可能有人觉得这句做作,但是我觉得能说出这句话还是很有勇气的”
……

我先不说这些认知本身是不是对,其实有不同观点很正常。有些人就不理解为什么所谓“前端大佬”们就专针对阿当,以至于被一些同学认为“有失风度”、“狗咬狗,一嘴毛”?

我引用在本文里 @ 过的某两位“前端大佬”对这文章的评价:

唉,这种文章的误导性就在于把偏见揉杂在正常的观点中,让经验不深的读者很难分辨。让假话容易被相信的最佳方法就是把一句假话混在九句真话中说。


这文章烦就烦在又臭又长,没有中心脉络,观点有些没问题有些有问题,混杂着一堆偏见。

因为是私下对话,未经授权,所以就不贴人名了。得罪人和“一嘴毛”的事情我来就可以了(手动doge),反正我也是这么认为的。(咦,说好不评价的呢?)


【补充4】

关于YUI。阿当最擅长的事情是缅怀YUI。

我理解YUI给当年雅虎中国系的同学们带来的从切页面到真正工程化的前端编程的启蒙作用,且因为并入淘宝,所以整个阿里系的前端早期都受到YUI的影响。

雅虎当年确实是一面旗帜,出了不少好东西。关键还有DC、NZC这样的名人。但是请不要高估YUI,也不要老是过分吹捧DC、NCZ了。

YUI是比较老牌的库,但也只是当年众多JS库之一,dojo其实比YUI还早一年,而且背后的公司支持比YUI还强大。dojo的问题主要是1.0之前api版本变化太剧烈,当年开发者还没有经过semver的教育,远没有今天对待版本变迁理性,因此dojo流失了大量用户。但实际上dojo无论代码实现质量还是api设计都比YUI强多了。YUI对国内开发者有更大影响是因为前述阿里系前端辐射的影响。

其实不光是我唱衰YUI,玉伯、 @田乐 等在2008年底关于js库未来的一次讨论中虽然观点不一,很多预测也不准,但对YUI都是不看好的。
YUI则带着浓厚的“官方、团队”js库的气息……让YUI成为不少开发团队的选择。但YUI 2.x缓慢的更新速度,以及对新思想的接纳程度,很多时候让人恨得牙痒痒,太慢了,和其它新生代框架相比,YUI 2.x像是一个步履蹒跚的老年人,让人很无奈。YUI 3.x目前还处于preview阶段,可以将其看成一个全新的JS库……(但)仔细比较后,YUI 3.x并没有带来什么新东西,更多的只是吸收接纳了新生代框架的许多理念。对YUI的前景,就如对Yahoo!的期待的一样,我相信它会存活着,但也许仅仅就是这样活着下去
——玉伯
YUI的api设计不好。作为oo的库它不好,作为fp的库它更不好,所以它不会有多好。不过在widget类库里面它肯定继续占重要地位,因为YUI的widget的确兼容性很好。
——田乐

如玉伯所说,YUI3 其实基本上是重写了,可见YUI2跟其他同时代的库比有多落后。但是作为一个追赶者仅仅靠吸收别人的理念是没超过其他竞争者的可能的。因为YUI团队的技术品味其实不够。对,我说的就是老是被搬上神坛的NCZ。(DC其实也不怎么样,但是YUI3跟他已经没啥关系了。)

NCZ是个优秀的工程师,但技术品味跟John Resig、Alex Russell之类的比还是差一档,关键是干这行早,乐于布道,而且是在Yahoo!,有大厂光环。你看他写的书其实也就那样(我就从来不推荐),包括最近的Understand ES6。我前一阵帮忙粗审了中译版两章还发现了几个原书的bug(nzakas/understandinges6),技术可靠度与NCZ的名气不相匹配。说真的,作为新技术介绍类书,NCZ这书未必比阮一峰写的那本好。阮老师的书还一直在修订,新版已经都包括SIMD、SharedArrayBuffer这么新的东西了(我不是说新东西多就好,但既然是介绍新技术,至少都覆盖到是对的)。

NCZ对于前端/js生态最大的贡献其实是他离开Yahoo!之后做的。你别看我看似贬低NCZ,那只是针对你们这些把他供上神坛的人讲的。一码归一码,eslint足以让NCZ进入前端名人堂(如果有这样的名人堂的话)。话说,eslint这东西要求的就是公平对待需求、技术观点中立,像我这种有鲜明观点的人就不适合去搞,像NCZ这种比较中庸的正适合。除了eslint在js生态里的重要作用,我特别要说,eslint的开源社区非常好,我提交过的PR因为缺少文档放了好久,后来有人就给补上文档合进去了。能建立这样的和谐社区很大程度上是创始人决定的。所以我相信NCZ最后是真懂了JohnResig当初给YUI的意见的。阿当说什么“当年John Resig公然嘲笑YUI,zks出面力挺YUI3”,其实根本没看懂JResig的意思,还认为是嘲笑,嘿。

扯远了。

当时玉伯他们等一批人其实看好的是 mootools。当然 mootools 小火了一阵之后也没怎么样,不过反正比 YUI 强一头。

即使说UI组件呢,YUI不仅比不上dojo,也比不上最早从YUI里fork出来的Ext。要深入分析?我反正就抛个结论,你们怀旧的有空可以捡出来看一下,我有点时间还是向前看比较好。


【补充5】
未来几年内,前端一定将三分天下:其一,是以Ext为代表js库将传统页面的表现形式发挥到极至;其二,Adobe的flash/flex凭着成熟的技术和丰富的经验,以及不断创新的热情,引领着前端的技术走向;其三,微软的sliverlight凭借着公司强大的技术团队和.net体系协同做战的优势,奋起直追,很有可能追赶上flash/flex.
感谢阿当自己又提供了一个全部失败的预言例子。也真难为了。