SideProject 2016 年 11 月 11 日

如何失败做一个全平台的产品

  来自一个真实的失败案例
刚毕业出来工作的时候,觉得写底层老牛逼了,要不就去写写 C/C++ 吧,和指针,内存整体玩一块好像好高端的样子,可以写写PHP, JavaScript,什么,那是不懂编程的人才用的玩具啊。 我可是 EE 出来的呀,不去写汇编,做板子已经很 low了,不要讽刺我好不好。
写着写着发现,C/C++真TM无聊,庞大的陈旧的代码库,修改一个小小的模块,编译的时间可以去喝杯咖啡了,加上跑Regression Tests的时间都可以去吃午饭了,而且时不时还来个 Segmentation Fault . 我的青春怎么这么被浪费掉呢?
听说真正的黑客都用Perl(也不知道从那个傻逼哪里听说的,噢好像不是傻逼,是Steve Yegge),要不就去做作基础设施开发,build一个棒棒的开发平台,控制着整个公司产品的开发,测试,发布,感觉好牛逼的样子呀。说干就干吧。用着写完了自己都看不懂的语言造了无数的内部轮子之后,兴高采烈发布了,发现压根没有人用,而且在传统IT公司做着基础设施开发好尴尬,产品研发团队,QA所有人都看你不爽,出门都不敢和别人说我是写 Perl,更不敢和同事说,哎,那个那个平台是我开发的,那个那个工具是我维护的,就是因为你们基础设施团队瞎搞,流程搞来搞去的,工具换来换去,你们还要不要人干活了,而且还用着那么难看的 Perl, 想自己改改代码都要看大半天,真想一把火把你烧死。
后来你想,到底用什么语言可以既有hacker范儿,又简洁美观,既简单又复杂呢。那必须是 Ruby 啊,那高贵的红宝石才能配得上你的逼格啊。所以大步的跨入了 Ruby 的世界,刚刚被 Martz 魔怔一般的安利,一个不小心,又被 DHH 的洗脑营销,你按耐不住了,开始 Ruby on Rails 的旅程,觉得还是 Ruby on Rails 炫呀,那么优美简洁的语法,魔法一般的元编程,让人欲摆不能的不要不要的。搞了不一会,竟然弄出了一个像模像样的网站,突然间以为自己可以改变世界了,把网站往论坛一丢,漫天遍野的骂声一下子把自己的热情打到了哈尔滨的零下三十度。
没一会儿,Ruby on Rails 就 not cool anymore了,而 Node 火的不不要的,而且Google的 Angular 真是令人叹为观止的神作呢。要不是还是把 Rails 换了吧,MEAN( Mongo + Express + Angular) 才 cool 嘛,说换就咬立即换呀。然后项目还没有写完,就刮来了一道 is express dying? 的飓风,大家都开始转向 Koa了,自己怎么能落后呢,不行不行,必须得转向 Koa 啊。哇,还真不错呢,Koa的简洁一点都不比 Sinatra 差嘛,写着真是愉快呢。刷刷两三下,一个整洁的 API Server 就构造好了,开始愉快的 Angular 前端开发喽。
Boom, 快报快报,Facebook出了 React 啦,大家快用啊,特别简单的语法,virtual dom 很先进,在也不用理Angular那么复杂的 directive 了,配合着 Flux 用,爽的不要不要的呀。
UI = f(State)
你看着公式,多么简单深刻的哲学呀,而且单向的数据流那么好控制,换换换,必须得换。发发 actions, 加几段 jsx 代码,一个棒棒的页面就出来了,好棒呀,你漏出了满意的浅笑。
什么,你还在用 Flux, 好落伍呀,Redux 都已经主流了那么久了,你是博物馆馆长嘛,你的小伙伴和你说,作为一个风一样的男子,跟风是你的属性啊,你怎么能忍受这般羞辱呢,刚回到,你就打开 Vim,打开 package.json,完美的把 redux 圆满的放进去了,调整了一晚上的代码,git push 了之后,不知不觉,天亮了,你安静的睡了两个小时。
来到公司,同事不小心瞄了一眼的屏幕。大声的说,什么,你还在用 redux-thunk 来管理异步action,真实土鳖啊。同事的声音很大,所有的目光都刷刷的聚集到你的身上,你感觉无比屈辱啊,你忍住泪水,轻描淡写的说,我是在确认 redux-thunk 的一个bug,打算给他们发 PR 呢。在同事离开了之后,你马不停蹄的开始代码迁移,终于你的项目技术栈变成这样了:
后端: Koa, Mongo
前端: React(Redux/Redux-Saga)
移动端: Objective C
似乎你可以喘一口气了。
万万没有想到,Facebook又投了一个重磅炸弹,React Native 横空出世了,而且相继支持 iOS和Android,你已经错过了成为了 Swift 的第一批尝鲜者,这个时候,你再也按耐不住了,立即开始投入了 React Native 的怀抱,终于在也不用看到 Objective C 那丑陋的语法了,而且你严格遵循着社区的最佳实践,Presentational  and Container Components 完美分开,web前端和移动端代码复用特别爽,你暗暗的自豪了起来。
然后又朋友听说你在做一款产品,准备同时做 Android 和 iOS 版,为什么不也把桌面版也做了呢,Github的 electron 那么赞,有了web前端,几乎不要改什么代码就可以完成一个很棒的桌面应用呀,必须要上啊。最终你的技术栈变成了
后端: Koa, Mongo
前端: React(Redux/Redux-Saga)
Android/iOS: React Native
桌面: Electron
你终于开始安心的写代码做产品了。然有而突然有人告诉你,其实现在 Vue 比 React 还要轻量级优雅,你开始惆怅了,心里泛起了一点点涟漪: 要不要试试看呢。
然后你的产品 laivei 在 Github 躺了好久了, 却,依然没有完成。