我个人感觉这个圈子里面貌似蛮多大神的,但是真正出来的东西在哪里?之前还看到某“大牛"评价jQuery 是大便,大家都在用大便。我个人比较难理解这种思维,求解惑,真的很牛为啥没做出angularjs 之类风靡的东西。
回复内容:
一个框架能不能火,最关键的不是技术实现上多 nb,而是在于这个框架是否代表了一种(在其所处的时代)先进的开发理念。
举例来说,在大部分开发者都在为浏览器兼容性和设计糟糕的原生 DOM API 叫苦连天的时候,jQuery 的横空出世自然显得光彩夺目。那个年代,大家根本不把前端当应用来写,能爽快的操作 DOM 就已经足够成为王道了。jQuery 简洁的语法,华丽的链式 API,同时掩盖了各种兼容问题,能不火吗?
慢慢地,大家发现前端要做应用,光有华丽的 DOM 操作也不够,还得有应用结构。所以 Backbone 出现了,把 MVX 的概念引入了前端,让大家发现原来前端也是可以有架构的。
再接着,大家发现 Backbone 的视图层依然需要手动侦听 model 的变化做各种 DOM 操作,数据到视图的映射依然繁琐。于是大家开始推崇 MVVM 数据绑定,(其实 Knockout 是和 Backbone 差不多时间出现的,只不过由于其实现不如 Backbone 来得简明易懂,所以不如 Backbone 火),于是 Angular 火了。
不得不承认,即使是放眼全球,前端开发理念相比软件开发的其他领域,也基本上是属于一个跟随的状态。比如最近函数式编程就在对前端开发产生着巨大的冲击 - 首当其冲的就是以幂等渲染函数为核心概念的 React。由于 React 本身的函数式血脉,以它作为渲染层引入其他函数式理念变得触手可及,于是我们看见现在国外前端在研究的都是 immutability, FRP, uni-directional data flow, stateless stores, isomorphic application 之类看上去高大上的话题。
如果你现在去基于一个已经普及的理念新写一个框架,即使实现得再好,也不过是造了一个轮子。当然,造一个同类理念中最好的轮子,还是会有很多人来用,但这毕竟只是一个改进的轮子,大家不会把你当做一个划时代的东西去推崇。只有当你把一个从没在这个领域出现过的理念实现了,才能够达到 jQuery, Backbone, Angular, React 这些里程碑式的框架所达到的地位。(顺便广告下,在前后端数据通信这块,Meteor 可以算是一个里程碑式的存在,Relay 可能是下一个)
所以说到底,能不能搞出风靡的东西,一部分是眼界,一部分是时势。首先只有把眼界开拓到当前领域的边界之外,才可能做出开拓这个领域的东西。国内的前端界目前基本是处于跟随国外前端界的状况(就像国外前端界跟随整个软件开发领域一样),从眼界上来说就差了一个身位,又如何奢求能够做出划时代的东西?
另一部分的时势,就是你所实现的理念是否正好顺应了当前业界的普遍需求。太超前或是太落后,都火不了。
需要说明的是,眼界和工程实力是两个东西。单就工程实力而言,我相信国内的工程师们完全不比国外的差,差距就在眼界上。首先如贺老所说,英语水平是一个整体上限制了眼界的障碍;其次,如今国外的前端工程师受过正统 CS 理论训练的比例估计也远远高于国内;最后,国内的公司加班严重,能完成工作任务就不错了,哪里还有力气搞开源(除非把开源弄成 KPI)。所以说到底是个大环境问题。还有一个原因,就是英语足够好的就肉身翻墙了,你懂的。
我一再说的是,成功是偶然的,无人问津才是正常的。
GitHub上几百万个repo,据说一半以上是从第一次发布后就无人问津的0关注项目,90%是没有几个fork的。真正有点人用的项目据说也就几万个。
而jQuery、Angular这种“风靡”级别的,全世界也就那么几个。
如果不是总45度角仰望,放低下脑袋,那还是可以看到一些的,比如百度的echarts(你可以看到star数,fork数,issue数,PR数都很高,说明这个项目有很高的活跃度)。个人为主的项目我也随手拿一个做例子: @sofish 的sofish/pen · GitHub
,在github上已有3000+ star。
至于最风靡的框架/库为什么不出在中国,有很多原因。比如说英语能力(不要小看这个的影响)。请参考在前端领域,国内和国外的的互联网公司有差距吗? - 贺师俊的回答
PS. 说jQuery是大便,我是不同意的。但是你听别人说什么,需要考虑语境,也可能只是讲话者要表达观点时用了一个略激烈的修辞,不代表他的观点就是不对的,就是没有价值的。
---- 以下是与主题无关的内容 ----
jQuery是历史上最成功的前端框架/库,但毋庸讳言,第一jQuery早期代码是很挫的(所以很多老的前端高手看不上他),第二现在看jQuery已经过时了(所以今天真正明白前端未来大势的人不会再来给你讲jQuery如何好blablabla)。
当然,这些并不能掩盖jQuery的光辉。
如何看待jQuery,我认为有两种错误,一种是认为jQuery的成功纯属偶然,或者认为jQuery只是满足了小白。另一种是认为jQuery就是好,认为所有其他的框架/库都没必要。
这两种错误的原因其实是一样的,就是不明白jQuery到底好在哪里。不明白这个,也就不明白为什么jQuery的时代已经过去了(尽管我们还会继续使用它好长时间)。
有空我会好好写一下这个话题,这里先打住。
框架要流行只需要做一点:解决大多数人当前的问题。
有些框架技术上很厉害但不解决大多数人的问题,那再厉害也没有。有些框架解决大多数人过去的问题,例如很多人说自己能写个 jQuery,但现在谁还需要?还有些框架解决大多数人未来的问题,例如我 2009 年就写过等价于 Promise 的 Async, @赵劼 写过等价于 async generator 的 Wind.js,但在 callback hell 还不是大多数人的问题时这没有价值。还有些框架,明明问题是能解决的,但就是清高,不愿意帮助小白用户上手,一样死路一条。用 jQuery 作者 John Resig 的话说,如果一门技术的社区,老人总叫新人 RTFM,这门技术两年内完蛋。
总而言之就是,写一个framework是需要经过特殊的训练的,这并不是任何一个领域的专业知识所能搞定的事情。
并不是你前端写的熟练就可以搞出jquery
并不是你C++用得熟练就可以自己发明stl
并不是你make敲得多就懂得怎么写build system
很多朋友说国内程序员浮躁,我这是完全不赞同的。
首先 你拿jQuery比较是不合适的,这就好比你为什么不再造一个J2EE的道理是一样的
其次你认为那些牛逼的开源项目都是一帮人义务劳动吗?显然不是。那些知名的牛逼的开源前端项目,都是出自知名公司的,Angular,React,包括再偏ui一点的bootstrap。去看看他们背后的公司是谁。都是知名公司在做。这个是行业现象。
包括现在很多开源社区的名人,身后都是有公司支持的,Linux,webkit,webrtc,crosswalk,openstack等等等等。。。许多外企公司都有开源项目部(Intel就有 SSG OTC),专门来做开源项目以提高行业话语权。
所以,不是国内前端工程师浮躁,也不是国内工程师水平的问题,而是国内公司大环境的问题,目前来看,提高开源社区话语权显然不是国内it公司当下要做的事情,虽然也有一些小的开源项目在做,但都不是专门设置一个开源部门来做。
国内的环境造就了一大批伪专家,只会用别人的代码,用熟了就开始批判以显示自己牛逼,比这个牛逼一些的会参考别人的代码自己造些轮子,声称自己的轮子强过jQuery,angular多少云云,实际上水平的差距还是比较大的。总体来说就是我们现在的实力只能够做到跟随而不能做到首创,加上国内环境让大批伪专家横行,在前端这行搞个几年你不敢声称自己是专家你都不好意思和同行交流。
表面上看是:懒累穷抄
实际上,jquery 等是实际项目和需求+优秀程序员+高质量社区的结果。
要有鱼首先要有水。
某些“大牛”分不清楚,“做出好东西需要掌握的技术我都会” vs "我会用掌握的技术做出好东西" 之间的巨大差别。
牛逼哄哄的中国码农做不出来的(或者做出来不便公开的),岂止前端框架,岂止 AngularJS、jQuery?现在大家日常用的主流开源框架、程序库、平台、开发工具,有几个是中国的编程高手创造的?几乎都是拿来的。软件工程上的这种差距不是 1-2 年,而是 8-10 年,甚至更长。
这是一种市场现象,也是一种文化现象。
导致这一现象的原因很多,我分析几个主要的原因:
原因 1、落后的软件工程教育和浮躁的大环境导致缺乏大量优秀、经验丰富、有创造力的职业软件设计师像研发 AngularJS、jQuery、Spring、Struts、RoR 等等之类的优秀框架,背后是需要强大的技术实力、编程思想支撑的。没有独到的顶尖专家型思维、成熟的编程方法论(如 OOAD)、扎实的软件科学基础(如算法与数据结构)、领先的软件架构设计知识与能力(如架构模式与设计模式)、良好的编码素质与习惯、娴熟的软件工程与团队管理水平。。。,能开发出优秀的框架?所有这些编写专家级、优秀框架代码的要素,都需要一个创新者起码拥有 10 年以上的积累。
关于积累,@张盟 的评论很到位,我引过来:
我觉得最主要的是国内35+到50岁以上的前端er太少了,或说老一辈的技术转前端的寥寥,大多都转管理或自己创业做产品了。根本原因是顶尖层次的前端coder少,3-5年经验的水平大家55开,到10年这个分水岭,国外领先太多。
同感!国外 30-50 岁是出成果的黄金年龄段,而国内大多是 30 岁以下廉价使用的娃娃劳动力。缺乏深厚的技术经验积累与沉淀,确是一个主因。我们这个社会太浮躁了,人人都想着捞快钱。没有那种耐得住寂寞、精益求精、持续打磨的工匠精神,要想做到世界一流,堪比登天。
OOAD 方法论的兴起、争论与繁荣是在上世纪 90 年代,2000 年后已趋于成熟,成为国外职业软件工程师的核心基础技能,而伴随这一时期的正是 C++、Java 等 OO 语言和大量开源框架的兴起与强盛。
反观国内,OOAD 进入国内大学课程主要是在 2005 年以后吧,一直存在着时间差。至今,江湖上的许多人连一个 Object Model、Design Pattern 还整不明白,还在忽视、贬低 OOAD,鼓吹“裸编”、伪敏捷,以为“设计就是代码”。。。在这样的一个大环境、烂江湖里,能培育出世界一流的框架设计?
这道理其实与糟糕的中国足球很类似,没有扎实、强大的足球基础教育,与崇尚专业精神的文化和环境,何谈冲出亚洲?中国有几个世界级的球星?光知道砸钱(中国人不差钱),搞人海战术(中国人多),给高薪(重赏之下必有勇夫),加班文化(中国人勤奋、耐力好,擅长加班)。。。有 P 用?做梦吧。
关于浮躁,楼上某匿名用户的评论很精彩,我引过来:
国内的环境造就了一大批伪专家,只会用别人的代码,用熟了就开始批判以显示自己牛逼,比这个牛逼一些的会参考别人的代码自己造些轮子,声称自己的轮子强过jQuery,angular多少云云,实际上水平的差距还是比较大的。总体来说就是我们现在的实力只能够做到跟随而不能做到首创,加上国内环境让大批伪专家横行,在前端这行搞个几年你不敢声称自己是专家你都不好意思和同行交流。
浮躁的、盛产牛逼哄哄的伪专家的大环境能产生出世界级的编程大师,尤其是敢于秀代码的开源大师么?很难。
原因 2、与国内的开源市场大环境还不成熟有关原因 3、国内的真正高手、大牛肯定是有的,只是他们在忙其他更有价值的事情,精力还顾不及开源。这可能不是一个能力问题,而是一个值不值,以及时机和切入点的问题。所以我看好下个十年。
待续。。。
1. 有价值的轮子已经被造了无数遍,值得造的轮子并不多了。
2. 写框架和调接口(应用层)需要完全不同的mindset,是两个不同的工种。大部分职业程序员是调接口的。
3. 任何一个产品包括开源项目,都需要推广宣传才能流行起来。大部分理工科的人有个单纯的执念:If I build it, they will come,并不懂distribution.
4. 国内大部分程序员,写代码只是混口饭吃,工作以外的,实在有心无力;对于大部分企业,写一个框架并不能直接转化成效益、流量。内外都缺乏驱动力。
5. 语言引起的交流障碍。开源项目都需要一个国际性的社区,成员可以用英文顺畅交流,中国人不占优势。
1、理念落后一些,总是跟着别人走
2、为了kpi和沽名钓誉造轮子,怎么能造出最好的轮子?