为什么我不推荐盲目 flutter 以及作为前端程序员的一点感悟

Posted by MinusWang on 2019-06-17

转载-原文链接

先总结观点:

1、只有大厂才有资格谈发展,小厂只看生态和眼前

2、app 市场没那么大了,越来越多的 app 倒闭或被并购,甚至成为安卓 rom 的一部分,未来是内容至上的年代

3、如果 flutter 真的很优秀,1 年甚至 3 年后再学一样不晚,早进早踩坑,晚用晚舒服

4、是不是有人真的以为 app 程序员就是 java = android 和 ios = objc 啊,打开你的 apk 包看看,里面那些 lib 你认识多少,找一个不认识的试着反汇编一下,看你会遇到多少阻碍

5、想要真的 run anywhere 的都死了,微软都没做到,flutter 能么?

首先说一点,为什么你有资格写这个东西,我配么?对于互联网包容的环境来说,我配不配和我有没有资格写这个东西没关系,而且很重要的一点是,越是厉害的人越容易无视一个东西的设计缺陷,因为他们太牛逼了,可以轻松搞定任何复杂的东西,甚至帮助这个新框架去改进,去朝着自己想要的方向变化,对于他们,geek 的东西就很优秀,但是绝大多数程序员做不到,他们需要社区,需要成熟的第三方库,需要稳定的环境。

问题争论的焦点,在于未来 app 还有多大的市场,否则各种新框架也没有什么优势了,诚然,小众的需求也要满足,但是太小众的需求难赚到钱,最后大家还是会考虑大众的需求,就拿查公交路线来说,这些数据都是公交公司给的,谁的门道够谁就能拿到数据,以前我需要一个查公交路线的 app,后来我改用公众号,再后来我惊喜的发现我用高德地图也能搜出公交路线来了,甚至他也整合了公交到站的时间预测。另外一个类似的就是挂号,以前各种挂号 app 推广,但是真正让我惊讶的是支付宝居然可以直接绑定我的就诊卡,而且没需要我输入,而其他 app 不仅需要手动输入就诊卡,还需要到特定柜台开通使用,虽然大家会一致声讨阿里偷了我们的隐私,但是就这个便利性而言,你给我个不用支付宝的理由?

类似的需求太多了,主题、闹钟、天气、便签、垃圾清理、短信拦截,越来越多的内容被整合进 rom 里,你知道的,你知道会被你骂死的( HW 的某功能),都慢慢被整合了,以前买一个手机要一大堆 app,现在还需要多少?唯一没有被取代的,一是游戏,二是音乐视频 APP,再牛逼的 rom 也没法整合这么多正版内容,为了郭德纲我需要优酷,为了看 hihop 我需要爱奇艺,为了明星大侦探我需要芒果,为了周杰伦我需要 qq 音乐,似乎正版化也带来了一些烦恼。

所以说,在大公司的平台级 app 一统天下的年代,还有多少新的 app 等我们开发,cordova 第一次做到了 write once,run anywhere,react 第一次提供了 native 到 web 兼顾性能和工程化的解决方案,然而现在到了 2019 年,安卓 845 加持下连支付宝这种在我以前米 4 上慢的要砸手机的 app 都能瞬间启动,flutter 的性能卖点还有多少?有人总想着滑动的丝丝顺滑,这也是 iphone 引以为傲每次来吹的地方,所以你的 flutter 想追这个点,拜托兄弟,你连最基本的启动速度都没做到,还想 UI 体验,这不是异想天开么?以前我用米 4,一个 QQ 音乐要启动 10 多秒才能放出歌,支付宝动不动 20 秒还没启动扫码,我需要的是速度啊,几个简单的功能被包装成巨大的平台,这怎么能优化的了?想优化先瘦身,如果你做轻量级 APP,支付宝除了收付款,什么付款都没有,想不快都难,别说 flutter 了,用 web 页面都能快到起飞(当然支付宝为了安全是不可能的)。

还有人天真的以为自己搞定了 UI 层就能让 native 程序员让位置,先别说音视频这种对性能极致要求的地方,也别说某些人吹的替代 unity、cocos 这些(你可以写一个引擎出来,你能写出一大堆配套的工具么?),你解开一个安卓包,看看里面有多少 lib,有些 lib 可能你认识,但是你认为这 lib 跟你用开源代码编译出来的一样么?更别说你不认识的 lib,里面放了多少不想被破解的逻辑,难道这些是你用了 flutter 就能搞定的?那些资深的安卓和 ios 程序员,c/c++、算法、数据结构,还有各种优化、混淆技术早就成精了,然而只有前端这里今年换个框架明年换个框架,今年要服务端渲染明年浏览器 SPA 后年还是服务端渲染。

一直以来,闲鱼在新技术上都有着执着的追求,打开闲鱼的 app,你会看到 flutter 和 weex 的封装,似乎没看到 rn 呢,然而这些新技术给闲鱼带来了什么,首先这个 app 相比 flutter 没出现之前,功能上几乎没任何变化,pc 端还阉割了搜索(可以理解为 pc 端放弃维护?),也就是说,所谓快速开发迭代并没有为你节约人手,用户的体验反倒还差了,每次 pc 端没法搜索的时候还要骂你两句,所以你图的是什么?

一统天下,这是任何前端程序员的梦想,应该说 cordova 是最接近的,你可以一个页面又包 ios 又包 android,pc 端丑一点无所谓但是还能看,公众号里改把改把也能跑,然而到了 react native 开始搞平台化差异,你要做两套开发了,而 flutter 推翻了原来的 ui 架构,做的跟 unity 一样,这意味着你没有 rn 的生态,没有 cordova 随便一个 web ui 拿来就用的自由,要重新开始,一点一点踩坑,这也是为什么大厂敢宣传的原因,他们有大量的 native 程序员,可以完成底层想要功能的适配,可以解决框架种的深坑,最重要的是这种推到重来还能算绩效,而对于小公司,在社区不成熟的前提下,这是很危险的行为,2 年可能公司都没了,cordova 还更新的好好的,为啥 rn 就将死了?

顺便说一下,ios 自己连 iphone 和 ipad 两个差异化都没做到,现在又一个框架想统一三端,这 flag 立的就有问题。

作为前端,想不掉队学新技术没错,但是不能看到啥技术都瞎吹,甚至说什么未来有 flutter 工程师,flutter 工程师如果有只能说明这框架的坑太多需要专人解决,那么这框架的易用性和学习成本,相比 react 那就是 0 分拿走别客气,相反如果 flutter 做到了成熟的生态,填平了深坑,那你 1 年和 3 年后开始学习并没有什么区别。这里作为前端工程师你还感觉不到么,以前面试要问的 ie6 ie8 兼容性,奇怪的 css hack 写法,现在还有人问么?所以啊,一些人说的没错,有些公司不问框架开始问数据结构和算法,这当然是程序员的必修课,而且如果你学过几个框架,这些框架的套路就可以摸个七七八八的,然而这也不是你给 flutter 那种垃圾 ui 写法洗白的理由。

顺便,我们是做企业开发,用的是最被鄙视的 cordova,我们的需求很有意思,除了热更新,还要从服务器上加载模块执行,当然我们是企业签名不要求上商店的,webview 的自由允许我们为所欲为,有人说 webview 的软键盘有坑,那很简单我们不在底栏放输入框不就完了。。

如果是前端程序员,我还是推荐大家学习 java 的,理由如下

加瓦加瓦,添砖加瓦,说明 java 才是开发的基石

j2ee=捷途易易,这也是为什么 java 在企业开发如此风靡的原因

如果你问我 2019 年 vue、react、angular、flutter 学哪个,我会毫不犹豫的推荐 jQuery,理由:

jquery=杰阔睿,杰是杰出,代表 jquery 的高超设计水平,阔表示广阔,也就是海纳百川之意,睿就是睿智,指 jquery 处处精妙的设计