每天早上醒来,都感觉自己像是从另一个世界回来。今天做了一个很奇妙的梦,那种情节我以前从未见过。
梦里的故事是这样的:主人公和一个比他更有经验、更强大的对手面对面站着。他们戴上VR头盔,一起进入了一个虚拟世界来进行决斗。
刚开始,我进入了主人公的视角,结果对手确实很厉害,主人公几乎没有反击的余地,只能艰难地支撑。
然后,我进入了对手的视角。在这个视角中,事情竟完全是反过来的,主人公的形象高大恐怖,不断压制对手,对手只能被动挨打。
到最后,对手实在坚持不住,败给了主人公。
这个梦让我大受震撼,我强烈感受到了其中的隐喻:
一切战斗都是和自己幻觉的战斗。
在每个人的世界里,对手似乎总是很强大,而我们自己似乎总是很菜,对手看似即将获胜。但关键在于继续下去,不过度执着或过多思考。如果我们被这样的念头干扰,心想对方这么强我放弃吧,那么这才是真正的幻觉。
虽然我没有证据,但我直觉宇宙是一种“观测者创造”模型,即事物是在被看到的瞬间创造出来的,被观测者创造出来。
为什么我们能共享观测到的事物呢?因为很可能只有一个观测者,我们都是它。
P.S. 昨天刚好看了一个费马大定理的视频,我直觉费马说的那个“这里写不下的简单证明”,是一个类似的方法。
Crypto 里许多新产品的状态很像是,我先弄个概念原型出来,看大家感不感兴趣,如果有人感兴趣,那我继续做或是融钱,如果没人感兴趣,那就不做了。
这是我不太理解的方式。
我对解决真实存在的问题比较感兴趣。真实问题的意思是,直到这个问题被解决前,它都有被解决的空间,而不在于人们是否感兴趣。
许多 poc(概念验证)项目我觉得是这样的,他们在新技术上嗅到了某种解决问题的机会,又或是模糊地感受到 “有意思”,然后做了一个 poc。这本身没问题,我用一些 poc 的时候也能嗅到那种有趣。但可惜的是,他们中很多都不会真正去研究问题本身,而只是陶醉在新技术中。这导致用户使用后发现这个东西没有真的解决问题。当用户走了,poc 也被搁置了。
15 年时朋友跟我讲说,唐彬森发现饮料很赚钱,而且低糖的市场有空缺,觉得可以做一做。许多年后的现在,我们都知道这个巨大的机会缔造了元气森林,但如果是你,你会怎么去做呢?
按照 crypto 里人们做 poc 的思路,那当然是快速做个东西推出来,验证一下这个想法对不对,没人买就不做了。但唐彬森不是这么做的,在第一款产品真正上市前,光是团队就换过整整三拨人,销毁了五百万的饮料,仅仅因为还不够好喝。
带着问题的视角去看这件事,我觉得是很好理解的:问题尚未解决,那继续解决就是了。
当人们说一个东西很酷时,背后发生的事情是这个东西很好地解决了某些真实存在的问题。人们感受到了它,但又说不清楚,最后只能说:“哇,酷”。
最近的合约越写越短。
一月份几个协议还都在 80 行左右。最近写的两个协议,一个不到 20 行,另一个不到 40 行。
把东西写这么短有意义吗?会有更多人用吗?会有人在意吗?我也不知道。但至少对我自己是有意义的,我不想生产我自己不喜欢的东西。而且我没有刻意把它们写短,从设计上,它们就只有那么长。
说起长度,前一阵碰巧读了 ENS 的合约。本来只是想找个简单合约读读休闲一下,但我没有想到它会有那么多代码,去掉注释后有六千多行,简直不可思议。不吐槽了,我还是做好自己的事情吧。
鸟山鸣去世了。
我常觉得鸟山鸣比尾田荣一郎更会讲故事。海贼王每一页都密密麻麻塞满了文字,生怕你遗漏了故事细节,但龙珠的每一页都很干净,文字没有很多,故事却同样引人入胜,人物也很有特点,这很了不起。
又读了一遍 Worse is Better,一篇 1989 年的老文章,讲为什么一些看起来“很垃圾”的软件会占领市场。我读了很多遍,还是能学到新东西。
我从中学到的东西就是,简单比正确更重要。
不必追求“正确”,你需要 50% 正确,当它像病毒一样传播以后,人们会花时间将它改进到 90% 正确。但它首先要是一个病毒,而不是一个“正确”的东西。复杂的东西显然不会成为病毒。
我常常感慨 ERC20 标准是如此简洁优雅,作为一个八九年前的标准,它很好地支撑了一整个生态。摸鱼时对 ERC20 的产生做了一些考古,我没有时间来专门为它写一篇文章了,但我觉得很有趣。
现在的人可能无法想像,就连 “是否该有一个代币标准”,当初都是经过激烈争论的。还有,哪些功能属于代币标准,哪些功能属于钱包和合约,叫 coin 还是 token,批准部分要如何设计,要不要 decimals,要不要一个专门合约用来注册 token,代币名称和符号放在 EIP20 还是 EIP22 (代币注册表)里,到底是先制定标准还是日后从实际市场中提炼标准…… 这些也都是经过了许多争论的。
人们看到一个简单的东西时,常常看到它 “有” 的东西,但通常“没有”的部分才是设计的重点。
参考资料:
Crypto 的地图打开了 10%,剩下的还在迷雾里。人们都挤在那一小块地方,掘地三尺也要挖出些东西来。
而我不小心掉进了那 90% 尚在迷雾中的地图里,每天都遇到奇妙的东西,但周围只有我一个人。后来我想了一想,这里不可能只有我一个人,一定还有其他人。只是地图还没打开,所以我们彼此都不知道对方的存在。
我猜他们也是孤独的,因为他们周围大概也没有人。
赵本山:
“我最怕的就是深刻。我自己的作品我试了几回,凡是我要深刻的,要品位的,都是不爱看的,收视率极低。千万不能把自己变成一个深刻的人。如果自己深刻了,你的作品就没法深刻了。”
Uncle Bob 说:
函数的参数越少越好,最好的函数是那些没有参数的函数。
我自己也常有类似的感觉,只是一直没去想为什么。直到最近,我偶然翻到了 Uncle Bob 的书,一句话让我豁然开朗:
函数和参数处在不同的抽象层级上。
我觉得这很好地阐述了函数的精髓,即一种抽象。想像一下,购买一个产品,不是开箱即用,而是要阅读大量说明书,理解其原理,对它进行繁琐的配置,这显然是不人性的。好的产品和好的函数一样,它们是完整的抽象,并不迫使用户去理解内部细节。
上周,和朋友聊起我的一堆新协议。其中有两个协议,功能不同,面向的用户也不同,但代码非常相似,有超过 90% 的代码是重复的。
我们讨论是否应该将这两个协议合并。起初,他第一反应是当然要合并。但深入讨论后我们都意识到,合并实际上会引入更多问题。
从用户的角度来看,是应该要分开的,否则会产生认知上的负担。跟使用者的认知负担相比,代码层面的重复是完全可以接受的。
这和函数参数是同一个道理。
同样,协议与应用的关系也是如此。
有些协议因为抽象层次低,所以非常灵活。对于了解它的人来说,它可太牛逼了,能干 A,能干 B,能干 C…… 啥都能干。但对于普通旁观者而言,因为它抽象层次低,很灵活,所以反而很难理解它究竟是什么。
这个时候,上层的应用就变得非常重要。因为应用提供了更高层次的抽象,是更好理解的——它就是用来干某件事的,其他的干不了。
如果到了应用这一层,还是很灵活,很多功能,不无脑,那就有问题了。
写这篇文章的过程中,我逐渐意识到,这个抽象问题实际上是更为广泛的存在,比如在信息的传播中。
对于信息或知识的传递,基础而本质的内容往往较难传达。它们似乎无处不在,却又难以捉摸。因此,人们通过一层又一层的抽象来解释这些概念,最终产生了我们熟知的畅销书、短视频、标语和小白科普文章。
“懂的人” 觉得,这些东西太肤浅太不严谨了,让人们越来越傻;但对于大众来说,这就跟好用的产品一样,是更友好更易于理解的。细节的损失,甚至部分曲解,并不是一种缺陷,而是必要的,因为这就是抽象的意义。
有时候写代码会经历这样一种感觉:刚开始觉得一个库怎么这么垃圾,然后用着用着,逐渐发现它的许多做法是有原因的,那是它细心、周到、关怀的地方。
人生好像也是这样,一开始你觉得一些人很糟糕,但当有一天你成为他的时候,你意识到他的行为都是有原因的,而且是好的原因。
那些“傻逼”和“坏蛋”,要么是过去的我们,要么是未来的我们。如果有一天我们很幸运地有机会“成为每一个人”,很可能会发现既不存在傻逼,也不存在坏人,存在的只有不理解。
世界就像一场 show,上面有三个演员:昨天的你,今天的你,和明天的你。只是他们互相认不出来。你一边看着“昨天的你”,说傻逼。一边又看着“明天的你”,说坏蛋。可是他们都是你。
你们都在台上,是这场 show 的精髓。
有时候我和女朋友说一些我在工作上的真实想法,她会说:
“你说的是对的,但如果别人听到,可能只会觉得你是个自大的笨蛋”
所以我一般不说那些话。而且加密圈子对于装逼的人似乎有某种诅咒,谁装逼谁破产。
但我后来发现,即使我很低调地说话,别人也会说我装逼。有次我说 bodhi 上那些“垃圾内容”并不垃圾,判断它垃不垃圾不是 bodhi 的工作,就这都有人说我装逼。
要考虑这些是很累的。我决定永远移除这个过滤器,学习赤裸地、真实地表达我所有的想法,并接受任何人说我装逼或傻逼。
以下是我在工作上的一些真实、朴素的想法:
-
Bodhi 是以太坊诞生以来到目前为止,最难设计且最重要的协议,没有之一。如果你不理解这一点,说明你要学习的还有很多。
-
大部分协议都非常垃圾,不管它有多有名。如果一个程序员花了一个礼拜学习 Solidity,却还看不懂你的协议,那你已经 fucked up 了。
-
发布 Bodhi 前我觉得它能真正解决公共物品募资问题的机率大约是 30%,但之后我的许多疑问被验证了,现在我觉得是这个机率是 60%。
-
Bodhi 有一定机率(比如 1%)会成为人类历史上最快达到万亿规模的经济体。
-
虽然 ERC1155 设计得很烂,但它可能会取代 ERC20 成为最主要的资产标准。或许 Bodhi 会成为最大的交易所,但这和它要解决的问题相比,根本不重要。
-
人们尚未理解公共物品募资问题的重要性,以及它对社会的影响,我也懒得谈它,不仅人们听不懂,还会给我惹来麻烦。
-
有瑕疵的理论下的实干,比完美的理论更重要(这恰是列宁和托洛茨基的区别),这同样适用于 crypto,我们今天所有的方案都是有瑕疵的,但不影响我们前进。
-
Bodhi 的死掉是可以接受的(当然)。
-
我最喜欢的链是 Gnosis Chain,比任何一家 L2 都要优秀(得多)。Bodhi 没有部署在上面,只是因为它的原生代币是 xDAI,很麻烦。
-
简单比正确重要。为了正确而牺牲简单是很愚蠢(和很菜)的。
这些可能都是错的,但表达出来让我快乐。
P.S. 朋友读完后建议我把最后一句改成:老子说啥都对。
文档的重点可能不是帮开发者解决问题,而是让开发者有机会玩一下。
很多文档都特别复杂,他们似乎都假定开发者的状态是:
“我已经下定决心要在你这里创业做我的下一个十亿美金项目了,我需要了解你的一切。”
但事实上他们的状态可能更像是:
“我不知道你是啥,但我愿意花上我宝贵的一分钟,看看你有什么好玩的。”
如果他玩了觉得有点意思,那他或许某天想起你时,会再多玩一下下。
开发者和普通用户很可能没有本质区别,他们都要玩点什么,唯一的差别是他们可以通过代码来玩。
我认为有 20 个不同的独立开发者愿意在他们宝贵的周末分别在你上面瞎搞点什么,很可能比一家有 VC 投资的 20 人团队决定在你这里认真做点什么,更有价值。
万物都有它自己的道路。
女友编了一个故事,我觉得很有禅意:
大师会从广州去北京。
但今天我们人在上海想去北京,于是大师说,我们得先去广州才能去北京。
因为他只认得从广州去北京的路,在上海他就不会去了。
对于任何一个问题,通常有两种解决方法,一种是解决它,另一种是不解决它(即意识到它可以被忽略)。
这两种解决方法是同等困难的。
甚至后者要更难一点,因为除非对问题有深刻的理解,否则人们意识不到这个选项存在。