EpicEditor - 前端的代码真奇妙


看了sofish这个百姓网工程师团队的blog,发现前端的很多东西实在太容易了。相当大的改变了我对编辑器的看法。随手用人家的代码做了个编辑器。真好用。

我承认我作弊了

前不久写付费代码,192行PK两万行,我承认我作弊了。

1. 忽略细节

因为我没有介入到任何细节里面去,仅仅知道财务需求,业务需求是什么,最大的问题解决了,其他就忽略了。大多数让大家头疼的问题我根本就不知道,更不要说有解决方案,但问题是,眼不见心为静,可以专心思考最重要的是什么。这是全新的眼睛的好处。有人说Think out of box。当不知道box在哪里的时候,想在外面太容易了。这和想象力无关。跳出来显然比从外面看要难。

2. 跨界

这是另外一个天然的优势。让CEO忘记业务的各个部分就和让Dev忘记细节一样难。因为可以全局的思考问题,代码乱的时候,说明是业务乱,我可以直接去改业务,而不纠缠。在全局思考问题的确比局部容易很多。

3. 创立者的道德优势

因为系统的大多数地方是我构建的,打破的时候没有任何心理负担,顶多说一句:“哪个傻人设计的?”如果这个傻人就是自己,一点问题没有,但是如果对于别人的代码,很容易被听成人身攻击。提出一个更好的方案还要估计是否成为了当众羞辱另外一个人。自己的自己打破太容易了,一句“我错了,我现在不这么想了”有什么大不了的。而一句“你错了”带来的与人自尊心相关的东西太多了。如何让这个公司里最好的主意浮出水面,而不是谁提出来的,是一个公司成功的关键。

但这三点,虽然每个人做起来比我难一点(这点我必须承认),但如果我们意识到,就进入了下一个境界了。

为什么百姓网开源?

2012年9月6日,百姓网的第一批项目开源发布。其中包括前端的模版语言Jedi(Hax的作品)和后端的数据访问层Baixing Graph API(小排作品)。这次发布是小范围的,仅仅是第一个尝试,以后每隔一段时间我们会把做出来的东西拿出来和大家分享。

为什么要开源?在中国的互联网环境中这么做是不是太另类了点?

1. 署名原则

在写这篇文章的时候,我在考虑开源的事情。

第三,署名!!!!我刚刚注意到这一点。为什么在出版领域,作者,记者,专栏作家,甚至blogger,微博,都是署名的,而只有程序员在大多数软件和互联网公司是不署名的?署名是很重要的权力,为什么号称先进的软件/互联网行业没有采纳呢?

我希望百姓网的工程师的作品是署名的,而且向公众发布的,这样一个优秀的程序员的作品可以被更多的人看到和使用。

2. 发现组织的错误

我并不担心因此我们最好的程序员会流失,因为如果这件事情发生,仅仅是因为这里已经不是一个最好的工作场所了,不是生产效率最高的环境,周围已经不是自己最欣赏的人了。如果这些条件发生,把hacker保护起来不被外界知晓仅仅是皇帝的新装。我宁肯暴露这里的不好,并且努力做到业界最好。因为死,仅仅会因为自己做得不够好而死,而不是暴露了不够好而死(暴露只是加速了死亡)。赵赵分享了一个关于错误的TED视频。Kathryn问大家犯错的感觉。大家说“有压力”,“难堪”,但她指出,这仅仅是意识到自己犯错的感觉,而真正放错的感觉,就是“我做得很对”。我希望如果我们有任何做得不好的地方,让我感觉到那种知道犯错的感觉。

3. 提高质量

如果知道代码会被所有人看到,我们每个人会写更好的代码。让我们面对它吧,即使开源也不会有多少人真的关心的,但这种可能性让自己有更高的标准。当每个人的工作都考虑到开源的话,代码很自然的模块化了,很自然的需要思考和别人的模块的交互。

4. 找到最好的人

很快百姓网的技术人员面试会完全转移到GitHub上面去,如果希望加入我们的团队,只需要找到任何可以改进的地方然后发Pull Request过来就好了。我希望当我们见面的时候,双方都已经非常确认了。如果未来的百姓网有任何的功能你不喜欢,如果你又是一个Hacker,直接撸起袖子写程序就好。怎么让这么多人的程序有一种办法(除了苹果那种审核以外的做法)可以共存呢?恩。好问题,等着你来解决。

总之,我们持续的寻找全球范围内最高效率的工作方法。开源是不是最高效率的方式我们还在探索,但这个追求是恒定的,不变的;而对效率的追求就是这家技术公司的灵魂。

 

 

压制了贬义词就压制了褒义词

那天我提到Hacker的反叛精神,有人问:如果无法无天怎么办?如果。。。怎么办?我说,要的就是无法无天。

同义词的褒义词和贬义词两种说法很容易让人代替思考。

我在想,其实当我们用褒义词形容一件事情的时候,我们很接受;但是如果拿贬义词形容同一个行为的时候,我们就反对。但关键,正如同义的褒义词和贬义词的定义所揭示的那样,这个褒贬代表的不是事物本身的好坏,而仅仅是观察者的好恶。如果是这样,排除了自己的好恶,你到底是接受还是不接受呢?

真正想明白一件事情,是用贬义词对这个事情描述一下,如果依然能够接受,才是真正接受,否则仅仅是一个语言游戏,并没有思考到事情的本质。当我们压制了贬义词,就压制了褒义词,因为这两个就像用两个reference到同一个内存地址的变量,改动了一个,另一个也就改变了。

怂恿就是鼓励,吹捧就是赞扬,武断就是果断。如果当自己理直气壮的内心接受别人用贬义词来形容自己的时候,就是真正坚定的时候。

比如创业公司因为尝试太多,随时上线导致了服务器不稳定。第一个想法就是加流程保证服务器稳定,但当我们开始做这件事情的时候,也就必须接受我们在压制创新。这很难接受。对于服务器的down,eBay的办公室里面写着一秒钟的宕机意味着多少多少美金,一看就是不懂技术的CEO的思路。而Facebook的墙上写着:Move Fast and break things!  Move fast我所欲也,not break things亦我所欲也,两者不可兼得,break things而move fast也。

我们太容易头疼医头,而忽略了它带来的副作用。问个问题:当一家创业公司如果一年了都没有服务器瘫痪一回,是不是什么地方出问题了呢?是因为系统维护做得太好了的可能性大一点,还是跑得不够快的可能能性大呢?

 

Github vs SourceForge

最近一直在用GitHub,再看一下SourceForge,对比一下。比如:

比如这个项目:https://github.com/mxcl/homebrew

再看看这个项目:http://sourceforge.net/projects/clisp/

感觉不一样吧?(不是比较两个项目,而是类似的项目放在不同的地方的感觉)

一个2001年闭源,10年没有变化的SF,和一个每天都有惊喜的GitHub,我们要做哪个?

一个千方百计用广告赚钱,把广告商的利益放在前面,而用户的利益放在后面,和一个为了用户着想,用户回来付钱,我们做那个?

我们如果关心的不是熊猫用户,就像SourceForge不关心程序员一样,必死。(虽然需要10年的破败期才会真死,但放弃用户的那一刻这个公司已经死了)。

试错,不是试对

我们说创业公司要试错,但话虽这么说,我们脑子里轻巧的转一个弯儿,就把它当作“试对”来理解了。试了呢么多错,当然目标是为了对了。但实际上并不这么简单。

二分法害死人。这世界上的事情,要是除了对就是错真实太容易了,但实际上绝大多数的情形是第三种:叫做业界平均。它既不是错的(大家都这么做),也不是对的(你并不比大家聪明),而是一个不对不错的解。(类比,爱的方面不是很,而是冷漠。甚至和爱,恨,冷漠等真正相对的,是不知道这个事物的存在。)

业界平均做法不见的是错的,这也就是这么多人乐于此的原因,但问题是,这是最大的错。平均的做法会得到创业公司平均的结果,就是死。所以无论试错,还是试对,它们都是业界平均的反面,它们都是一个字:试。

如果尝试,脑子里必须接受尝试带来的结果,就是对或者错。接受对的可能性容易心平气和,如果明明知道会是错的,要不要去试一下呢?

如果有人提议做一件事情,我会问:如果失败了,会有什么影响?如果是:搞不好网站就废了,公司就死了,我八成会鼓励真的去试一下。如果答案是:放心,就算搞砸了,也不会有任何影响,很少用户会注意到的。我就会说:要是连失败了都不会有影响,成功了怎么会有影响?还是想点儿错得更离谱的东西来鼓捣一下吧。要的结果,不是小对,而是大错。大错和大对是同一个东西,小错和小对是一对儿的,不错和不对就是业界平均。

这和写文章,讲演一样。观点的鲜明,和绝大多数大家已经知道的东西不一样才有价值,否则就是在复述所有人知道的东西。不一样,90%的可能性会是武断,绝对化,但只有这样才有10%的对的可能性。

所以,试错就是要带着不错(就是不同)不归的勇气去尝试,毕竟,试对需要的心里门槛远远高于试错的门槛。我虽然不能保证对,但保证错还是容易很多的。

不好了,池子漏了

周末在杭州给天使湾的十几家移动互联网公司分享,看到他们做的东西,和庞小伟聊了聊,得到如下思考,和大家分享。

2012年是传统互联网公司遇到前所未有的挑战的一年。

从1995年开始,中国的互联网网民就不断的增加,每18个月网民总数翻番的速度几乎没有停下来过。如果看看当年中国最大的门户网站新浪上市的时候日浏览量只有1000万,而现在随便一个网站都有可能超过千万就能知道这十几年的发展速度。不过,坏消息是,这种增长从2011年开始放缓了。现在中国5亿网民,我可以非常自信的预测,中国网民数永远不可能翻番两次了。在之前的10年,每天都有新用户,对于网站来说永远有机会,新用户就算是平均分配也有不错的增长,而增长低于两年翻番就是落后。而这种情况,变了。互联网的人口红利,第一次接近发完,传统互联网增长压力剧增,看看最近的一两年,很多的报表都在显示网站增长速度放缓,从百度,腾讯的网页到第二梯队的大多数网站,都是一样。

屋漏偏逢天下雨。在过去的十几年里面,互联网的网民数只增不减,无论什么时候拉上来的网民,都在一个大池子里面,这个池子从来没有漏过水。但是,从2011年开始,这个池子开始有了一个大窟窿,这个窟窿就是移动互联网。越来越多的用户迁移到移动终端上。虽然不是一去不复返,但是在PC上上网的目的,时长等发生着重要的改变。

看看移动的这个窟窿有多大!现在智能手机大约4000万终端,但这个数字很有可能在未来的3年里面达到4亿(3年还是5年不是关键,关键是短期一定能达到这个数字)。如果真的是这样的话,以Android,iPhone为代表的智能机用户每个月可能就要新增加1000万,这是一个大得不得了的数字,是一个不能忽视的人口红利(天哪,不是红利,就是本金派发了)。

同样,我们看一下智能手机的移动客户端的安装量。现在一般的安装量在100万以下(包括我们的)。一些300万左右的是比较大的,超过1000万安装量的几乎就是人手一个了。新浪微博,微信,大众点等等。但是想想一下,再过3年,会出现什么状况?一个普通的应用的安装量应该在1000万以上,智能手机安装量过亿的将会诞生。这是一个非常大的机会。我们这里仅仅探讨智能手机,就是Android,iPhone,其他的终端暂且不算作移动互联网。

而手机领域,一定和网站领域不同。一定不同。具体的不同我还没有特别的感觉,但需要恶补这方面的知识才能够在这个领域不被甩下。隐约感觉互联网是主机的一张脸,让用户过来看这张脸,而移动互联网是用户的一张脸,用户打开的应用应该就是非常个性化的自己要的东西。移动互联网绝对不应该和PC互联网的体验一致。我们需要重新思考这个问题:我们解决什么问题?我们怎么解决?而完全不需要考虑PC互联网的很多的做法。我们很有可能需要按照你是谁来做程序,比如给房东用的,给工人用的,给白领用的这样的方式做APP。等等等等。需要有很多的思考。

结论:我们需要非常非常的重视移动互联网。这其实是百姓网的第二次创业。被一个大潮甩掉太容易了,能够在两次大潮中间都有所表现的公司,太少见了。按照历史的平均水平来看,如果我们不做些什么,百姓网很快会在移动互联网来到的时候变得无足轻重。

创造价值

很有趣的事情。如果不发生交易,一个家庭的“钱”的数量应该是不变的。比如,在这个时刻,我们象木头人游戏那样喊“停!”,然后谁都不要动,每个人手里的钱的数量就会不动。这个时候假设一种情况:你开始把自己的一个坏了的相机修好了,这个时刻你的钱虽然没有发生变化,但是你的财富发生了变化,你变得比原来多了一个“好相机减去坏相机的差价”那么多财富,广义上来说,整个人类社会的财富增加了这么多。

钱仅仅是一种流通的符号。在任何时候,钱的总量应该是比较固定的,至少纸币是这样,因为政府保证了它的稀缺性,就是总量的稳定。如果一个人拿到了一张纸币,一定有另外一个人少了一张纸币。如果广义的把所有电子货币也算进去,其实总量还是固定的,除非中央银行干点儿事情。从这个角度上来讲,钱是大小不变的蛋糕,我们只是决定怎么分蛋糕,如果多点,有人就会少点。

但财富不是。如果你拿一张白纸出来,画了幅画,你就在改变手里的财富。如果你是个好画家,财富就在增加(我们假设画好画的白纸的财富大于白纸本身,虽然有很多人会反过来),当他不断的画画的时候,财富在不断的增加。注意,不是他一个人的财富,而是整个人类社会的财富在他疯狂的画画的时候在增加。

但不幸的是,随着工业社会的发展,能靠一人之力创造财富的机会慢慢减少,仅仅剩下有限的一些手艺人可以靠自己的双手创造财富:修鞋的,开锁的,捏脚的,画画的,写文章的(越到后面,且是越不象修鞋的那样可以真的靠一个人,他们也依靠其它的人才能实现财富),但其中人数最多的一群人,是程序员。

我所见到的对于公平主义最猛烈的抨击者,都是一些创造财富的人。曾经和一个美国的外科医生聊天,他对奥巴马的医疗政策恨之入骨。他说,如果没有极高的收入,我们为什么要花那么多的时间去学习和保证做最好的手术?如果听到世界上1%的人拥有远超过1%的财富,我们的第一反应是“不公平”,但我们需要去了解的是到底这个差距是如何产生的,是因为贪污,腐败,挪用,抢劫,勒索,偷盗,印假钞得来的,还是继承,结婚,金融,商业,还是最后一种:创造出来的。

创造财富和变现是两个概念。我们可以创造出巨大的财富,但是并不卖钱而是直接捐赠。财富的定义是“人们想要的东西”。我写了很多的blog,我相信在这个世界上还是有人认为这些是他们想要看到的,我仅仅把这些创造出来的财富免费贡献了出来而已。从财富的角度来看,我们能够更清楚地知道我们的哪些行为在创造财富,哪些不是,而这个过程和是不是看到钱进入口袋不尽相同。

什么不创造财富呢?不是所有创造或者制造的行动才是创造财富的过程。比如洗车,去除了灰尘,让车变得更轻,更小,但更漂亮了,他们在创造财富;流通环节,大量的批发物品分成小量的零售,这也在创造财富。判断标准是,到底有没有人要这样东西。只要有人要,就是创造财富。我个人觉得马克思所说的价值是无差别的人类劳动的定义不准确,人类劳动并不总创造价值,就像一个人在树上搓痒痒几个星期,这些劳动也不创造任何其他人想要的东西。而且,无差别的也是在现代社会不合时宜的说法。对于程序员和作家这种劳动,如何可以真的界定无差别呢?按工作时常,还是行数呢?劳动一定是有差异的!

如何有效的衡量一个人创造出来的价值是个历史难题,且不要轻易去尝试(这种说法政治上不正确。应该说:去大胆的试吧!同时伴随着难以觉察的坏笑)。CEO是一个很有趣的职位。CEO是可以用公司创造的价值来衡量的,如果把一个公司分拆成每人一个公司并且互相付费好让大家一起工作,每个人都是CEO,倒是一种衡量的异想天开的做法,虽然这完全不现实,因为越来越多的工作需要一起做,而每个人都是用自己和周围所有人的平均值来领工资的。

最近开始思考对于软件这个行业,微软的一些做法还是有其先进性的,至少在1995年之前。其中一种做法就是把团队都搞得很小。比如Microsoft Project团队,就十几个人,这样东郭先生和猛男都很容易看出来。比如只有十个人的公司,虽然还是无法衡量每个人的贡献,但至少偏差变小了。一个人的贡献大不过总产出,小也不会比1/10小太多。一个小的团队,你最好找最好的伙伴,因为最终你的工作会和他们平均。对于一个CEO来说,最好找最聪明的人,因为最终你是你找来的所有人的平均值的代言人。

我们一定要找到一种方式让各个团队松耦合。比如一个工具团队给所有人提供工具,让其它的团队各自相对独立。这不仅仅是一个技术决定,更是一个管理学上的决定,而且管理上的决定比技术决定更重要。通过让工作独立,让一个团队的工作不要和太多的人求平均数,我们其实在提高每个人的产出。

小还有一个好处,就是你有可能拿到你能找到的最优秀的人。好是没有绝对意义的。在一个全明星的队伍里,你还是能够挑出最好的几个。在奥运会的竞技场上,其实是无数的国家自己的冠军在一起争夺冠军。冠军之所以表现好,就是因为我们仅选一名。我们可以确信的是,当我们选的人越多,平均水平一定越低,比如金银铜牌的平均值一定低于金牌,却一定高于全民水平。当一个公司越大,平均水平一定越接近于社会平均水平。一个成功的公司不就是因为它在某方面的能力远高于社会平均水平吗?我很难想象一个一万人的公司比社会平均水平高太高,无论他叫微软还是Google.

我们在创造财富,只有理解财富是如何创造出来的,才会沿着正确的方向去理解如何安排创造它的活动以及如何分配。

PS. 本文受Paul Graham的很多思想启发,表示感谢。