如何失败的做一个产品开发者

来自一个虚构的真实案例

语言还是底层一些好?

刚毕业出来工作的时候,觉得写底层老牛逼了,要不就去写写 C/C++ 吧,整天和指针,内存玩一块好像好高端的样子,总觉得 PHP, JavaScript 是不懂编程的人才用的玩具啊。 我可是 EE 出来的呀,不去写汇编,做板子已经很 low 了,写着写着发现,C/C++ 也好无聊,想做一点小事,字符串的处理就够你搞好一会儿,项目小还好,项目一大编译的时间可以去喝杯咖啡了,加上跑 Regression 的时间都可以去吃午饭了,而且时不时还来个 Segmentation Fault . 我的青春怎么能这么被浪费掉呢?

为什么你爱装逼呢?

听说真正的黑客都用Perl(也不知道从那个傻逼哪里听说的,噢好像不是傻逼,是Steve Yegge吗,不对,他好像说的是 Lisp),要不就去做作基础设施开发,build 一个棒棒的平台,控制着整个公司产品的开发,测试,发布,感觉好牛逼的样子呀。说干就干吧。用着写完了自己都看不懂的代码造了无数的内部轮子之后,兴高采烈发布了,发现压根没有人用,而且在传统软件公司做着基础设施开发好尴尬,产品研发团队,QA团队所有人都看你不爽,所有人都会和你抱怨, 就是因为你们基础设施团队瞎搞,流程搞来搞去的,工具换来换去,你们还要不要人干活了,而且还用着那么难看的 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 还要轻量级优雅,你开始惆怅了,心里泛起了一点点涟漪: 要不要试试看呢。

然后你的产品在 Github 躺了好久了, 却,依然没有完成。