所有由benben发布的文章

回答问题前需要做些什么?

关于这期播客,有听众评论:

主播好会提问!但嘉宾为什么一直在质疑问题啊?基本每个问题他都觉得没意义/不准确/不必要……习惯性地否定别人吗?

我的回答:

对于回答问题,我遵循有三个原则:

1)在回答“为什么”之前先问“是不是”。比如「为什么年轻人都不快乐?」

2)当任何人问一个用一个意义不明确的名词提问的时候,回答前必须先明确对方这个词是什么具体的意思?比如「Web5 的的主要特征是什么?」

3)回答一个问题前先确定这个问题的答案有没有意义?比如「邻居家张三昨晚吃了个苹果,你对此怎么看?」

对于每个问题先进行验证,澄清,或者选择,再尝试回答,是我很多年对自己的要求。

对于我不在乎的,不想深究的问题,我一般回答得比较轻松简单,反正世界上绝大多数的问答,都是你问你的,我说我想的,并没有什么交集,看似交流,问答,实则如同演了一出《三岔口》,根本没有碰到。

而确保和对方有高质量的交流的时候,在回答每一个问题,都应该先做这样的确认。这种确认虽然费脑子,对话会显得不流畅,但是我认为沟通中不可获取的环节。

这样很多时候会显得没有礼貌,咄咄逼人,但这不是本意,只能说是探究真相的代价。

DID 的醍醐灌顶时刻

7 月 19 日,DID(Decentralized Identifier)已经作为 W3C 的标准推出了。我 7 月 20 日问了一堆 DID 相关的问题:

关于去中心化标识符(DID )的问题集合

结果半个月过去了,我依然没法回答自己的问题。我阅读了 Google 关于 DID 的前几页的所有结果,还有 YouTube 上面的的相关的视频以后,心中生气的情绪不断孕育。我在即刻,Twitter 等各种地方,向整个世界求助:

我们知道,http://abc.com 这样的 URL,可以输入到浏览器的地址栏里。tom@abc.com 这样的邮件地址,可以输入到邮件客户端的收件人一栏里。哪怕是 0x9eF….B1ba3 这么复杂的以太坊地址,我也知道可以输入到钱包转账的收款人一栏里。谁能告诉我:

1)2022 年 8 月份,整个世界里面,有哪怕一个可以显示我的 DID 地址的地方吗?

2)整个互联网上,哪怕有一个地方,可以让我输入类似于 did:web:abc.com 或者 did:example:123 这样的 DID 地址吗?

3)有任何一个应用可以让我用到 DID 吗?

如我所料,没有人能给我答案。我有些抓狂了。这难道是酝酿了这么多年的 DID 的现状吗?似乎有点不太好的气息。按道理,不是应该应用先行吗?当年 HTTP/1.0 的正式标准出来前两年,使用土制的 HTTP 协议的 Netscape 都已经上市。

不过后来即刻的 @w3tester 同学救了我,向我推荐了他做的应用:https://credential.zkid.app。我才总算第一次,跌跌撞撞的完成了这一生的第一次 DID 体验。

这也又一次验证了,概念总让人晕头转向,而应用让人秒懂。这些应用让人秒懂一个晦涩难懂的概念的时刻,被我称之为「醍醐灌顶时刻」(DAO 的例子NFT 的例子电话的反例

看到自己的 DID 地址

访问:https://credential.zkid.app 

经过一些简单的助记词记录什么的类似普通钱包的设置过程,你就可以生成一个 ID,如同一个以太坊钱包,或者比特币钱包一样。在界面的右上角,我第一次看到了类似这样的一串字符串:

did:kilt:light:004sb5zyXirkEBDTDR5HQgYLBRdFgMWXhJNR3Zs8tNgQLVtmLd:z1Ac9CMtYCTRWjetJfJqJoV7FcNjbuKfUVy9CgD1PiUwcPwzuUPV4P1wzXoKX5V4dq99TP7GnYqvwvSTsEJFBJQ

这个 DID 具体怎么用,倒是可以下一篇文章再细说。(一句话说,DID 似乎是一个公钥的 DNS)

得到一个认证

在 Credential Type 一个标签里面,空空如也。@w3tester 好心地给了我一个 CType: 0x7c98af5a580071e36baddebeee8000236095531819660dad994b9efb04f95a10 。我 Import 进去,出现了如下一个组织:

这个叫做 DAO-Member-1 的,似乎是一个可以签发什么东西的机构。

鼠标放上去,有一个「Create Claim」的按钮。点了以后有如下的界面:

这个表格似乎跟去很多政府部门填的表格有点像。我为自己填了信息,比如 Name: Jianshuo, Rank: 10, Role: Player,然后点击「Submit」。

之后,在「Credential」一页里面,就看到了如下的信息:

我的新提交的 Claim 的状态是 Attesting。就是等待验证状态。
过了一段时间,@w3tester 同学在系统那边批准了我的这个声明,我的一个作为 Name: Jianshuo,Rank:10,Role:Player 的声明的状态变成了 Attested
发生了什么?我的猜测

这个过程,就这样结束了,并没有办法继续做什么了。但我隐隐约约地理解了 DID 的作用和过程。

Dao-Member-1 或许就是另外的权威的组织,可能是大学,可能是公安局,可能是任何政府机构,或者任何其他组织,或者你的朋友。
你先去那里领一个表格,然后填写,再把这个表格返回给这个机构盖章。
这个表格上或许写着你从这个大学毕业的时间,或许是你的身份证,或者年龄,或者仅仅说我滑板玩得很好。然后对方机构就以他们的 DID 的身份帮你盖个章(这是一个叫做 Verifiable Credential, VC的机制),然后你就可以像拿出一张身份证,驾照这样纸质的东西一样,拿出这张数字的表格。这就是身份证等各种表格的未来的样子。即便那个机构的网站不见了,甚至这个机构本身都不见了,这张数字的表格依然可以使用。
也就是说,以后凡是牵涉到盖章,或者签名的场所,都有机会和 DID 的验证发生关系。毕竟,世界上能数字化的都数字化了,我们却还在依靠自己的小肉手和木头章也太落后了。
希望这个过程也让大家有点点懂。(为啥只是一点点懂?因为我也只是一点点懂

注:感谢 @w3tester 不吝赐教

抵制住被叫老师的诱惑

最近经常被称为王老师,或者建硕老师。我理解对于这个年纪不上不下,叫建硕感觉有些过于随便,叫什么的确是个难题。

我非常理解大家的好意,心怀感激,不过还是时不时地纠正一下,不能欣然接受有人叫我老师。我开玩笑说,最近就忙着纠正两个误解:Web3 不是 Web;建硕不是老师。

其实,这种不是很礼貌的纠正行为,其实仅仅为了保护自己的思维。其实,别人怎么称呼是别人的事情,本不该干涉,但是人最怕的还是自己骗自己。如果不经常性的通过澄清提醒一下自己,会不自觉地以老师自居。我自己对自己的内心努力觉察,会发现什么时候我对「老师」这个称谓稍微心安理得一点点,对于准备写的东西就多一点点患得患失,对于说错什么东西的担心就会增加一分;对于别人的观点,就会少一点倾听的耐心;对于所谓的面子就稍微在乎多一点点。这对自己是完全没有必要的负担。

我又是一个对于用词,造句对于人的内心的影响很喜欢研究的人。深知用什么词,真的会比明意识更加容易塑造自己的内心。

毕竟,这个世界上最容易骗的人永远是自己。

所以把叫什么这个难题抛给大家吧。我一直觉得所有的人叫我建硕挺好的。但肯定不是什么老师。不过依然感谢好意。

无聊猿不是一个送给爱人的好礼物

在传统的世界里面,男性表达爱意,最常用的是钻石,更加便宜一点的是鲜花。我在思考,在纯数字世界里面,钻石和鲜花的等价物是什么?我还没有明确的答案,但肯定不是类似无聊猿一样的东西。

为什么呢?

人类,包括很多高级一点的动物求偶时,雄性送给雌性的求偶礼物,最佳选择,既要很难获取,又要没有用处。无用,不可转让,恰恰是这样的礼物的共同特征。

为什么自然界里面,雌性需要雄性提供担保吗?因为对于养育后代的责任,双方完全不对等。养育后代这件事情,雌性(鸟,猴子,袋鼠等等)需要付出漫长的时间,甚至承担生命的危险,而雄性基本上没有什么太大的责任。所以,雌性就必须有一种方式判断,谁更有可能照顾自己和后代。所以,难以获取的某种东西,比如彩色的羽毛,亮晶晶的贝壳,或者人类世界的钻石,都是这样的一种保证。

但是,对于雄性来说,只有送完全没有实用价值的东西,才不至于最终人财两空。对人类来说,送房子,送车,或许和送钻石的价格类似,却是危险的行为。这是连雄性园丁鸟都知道的常识。

所以,所谓浪漫礼物,无用是必须的。鲜花,蛋糕,婚纱,钻石,哪一个不是无用的呢?只有无用,才能在提供担保的同时,既保护女性,也保护男性。

无聊猿因为太容易流通,太容易变现,而不是一个 Web3 时代的最好的礼物,那么什么是呢?我现在也不知道。但我相信一定会有。在 Web3 世界,无论女性还是男性,对于建立稳定关系,还是需要一个钻石的代替物的。

不管是什么,我觉得有两个属性还是需要同时具备的:

1)这东西非常贵。

2)这东西一定非常无用。

或许非常贵的,却不可转让的礼物是 Web3 世界对这个问题的最好的回答。这样的东西是什么呢?

保持欲望的好办法是抑制它

我强烈推荐的方法不多,除了费曼学习法这样通过书写,输出学习以外,另外一个我最推荐的方法,就是给自己限量而非目标

给自己限量而非目标

比如写 blog 这样的事情,我曾经要求自己每天写作不超过一篇。这样的要求帮助我坚持了十年日更。因为如果一开始心血来潮,把想写的东西全都一股脑写出来了,第二天一定断粮。反过来,如果每天都有超过自己想写的话题,脑子里一直保存着五六个题目,缓慢的释放出来,每天就总有想要写的东西。这种想写而不得的状态持续了十年,也就持续输出了十年。

给自己设定限量而非目标,这和大多数人的之直觉相悖。

我看过太多人立的 flag 都是:新年里,我每天都要_________。不用问,这个目标基本上没有实现的。

但是如果反过来,把对自己的要求改为限制,比如:

  1. 跑步:每天不能超过 1 公里;

  2. 吃东西,让自己不要一次吃够,总要欠一些;

  3. 看书:每天看不允许超过两三页;

  4. 就算是写文章,给自己设置一个文字的上限,比如 600 字。

这样的例子很多。我个人发现这样的限制,总可以让自己保持对这件事情持续的热情。

和自己的欲望玩耍

人,做任何事情,最底层都来源于欲望。欲望(写作,读书,画画,吃东西等),就如同小火苗一样,需要小心的呵护。不要让它轻易熄灭。

阿兰德伯顿在《身份的焦虑》第三章《政治》里面就分享了这个洞见:

一旦我们拥有了某个东西,用不了多久,我们就会停止喜欢它。要想停止注意某件事物,最快的方法就是将它购买到手。

我们的欲望,就如同自己身体里的猴子。需要用一些方法和它玩耍,调教,让它为自己所用,推动我们持久的去做一件事情。

一旦过于轻易地满足了它,我们生命的动力就消失了。

保持欲望最好的方式,就是抑制它;反过来,杀死欲望最好的方式,就是满足它。

杀死欲望最好的方法是满足它

昨天记录下来的思绪,留了个尾巴:既然保持欲望的好办法是抑制它,反过来说,杀死欲望最好的方法就是满足它。

这句话虽然没错,但对我们的生活并无任何指导作用。

对于保持欲望,我们可以用限量的方法,维持欲望小火苗长久的燃烧,这很容易做到。而对于杀死欲望,难道我们能用「满足所有的欲望」的方式消除它吗?想买跑车,去买一辆回来不就好了?提这样的建议,会被人扔到垃圾箱里并踩上几脚。

具体的建议才是好的建议」。对于不断膨胀的欲望,我们能够遵循的具体的建议是什么呢?

这个问题难住我了。所谓「如何降伏其心」这事儿,是整个佛教,或者任何宗教,都在努力回答了几千年的问题。虽然他们都给出了自己的答案,但显然这事儿不容易,否则也不会持续困扰每一个人。

我自己没有什么灵丹妙药,但是有一个心法,对我自己还是有帮助的。这就是在自己有任何欲望的时候,直接了当的提醒自己:这件事情完成了,你所得到的快乐就是一个脉冲,会在达到高峰以后迅速降回到零

这件事情是显而易见的。

我们都知道,如果我们想买一辆跑车,真的花了大价钱把它买回家,出不了几天,我们对它就视而不见,不再去想它了。如果不相信的话,我们不妨回想一下家中的哪一件东西,不是当时急切的想买回去,而现在却大多想不起来自己已经拥有的吗?

我们人生最早的几个谎言之一,就是父母老师告诉我们「等你考完试就爱怎么玩怎么玩了」、「等你考上大学就幸福了」。我们看看自己,再看看周围,哪一个像是终极幸福的样子?我们自己告诉自己,我们的不幸福就是因为没有 XXXX,但是哪一个 XXXX 保证过我们永久的幸福?

我们脑子告诉我们,「如果____________,那么我就幸福了」,其实是向我们承诺,我们爬上陡峭的悬崖,将会踏上幸福的高原。实际上,在我们的脚踏上那一块土地的下一秒,大脑就会把我们打回谷底,焦虑和欲望会驱使我们爬另外一个山峰,并且许诺新的幸福的高原。

所以,当我们许下任何愿望之后,请一定跟着加一句:「我知道,这个目标达成以后,我并不会得到永久的快乐,但是没关系,我还是愿意去做」

这句话既给了我行动的力量,也戳破了头脑的谎言。

无论脑子里面现在想要的是什么,是挣很多钱,是对一件事情全部的掌控,是得到一个人,是得到一份工作,亦或就是想去度个假,每次当我们在大脑里面勾画达成以后的美好的未来的时候,一定要勇敢的直勾勾的盯着这些幻像,大声地对它喊话。就像《少年派的奇幻漂流》里面,「派」怒视代表内心恐惧和欲望的老虎那样,冲着它大声的喊出:

你让我做这事情,我认,我会去做的。但你要把我当傻瓜不存在的快乐来欺骗我!

我们注定要和自己的欲望共存。那个欲望不是自己。它仅仅是藏在我们脑子里名叫「Richard Parker」的老虎。学会和它共存,和它搏斗,既利用它的聒噪和不安,激励自己前行,又要学会呵斥它,不留情面地揭穿它的每一个谎言。

身处史前互联网博物馆里,看 Web3 的未来

在家中整理东西,忽然在一堆旧书里发现了两本大学时期的笔记本。这些本子应该是 1997 年左右,在我沉迷在早期互联网世界时候的记录(年龄不是秘密,不怕暴露)

那个时候没有 Evernote,也没有 Flomo,看到什么都还是拿纸质的笔记本记下来的。我翻看几页,熟悉的字迹,将我劫持上时空穿梭列车,令我一下子回到那个互联网早期的蛮荒年代。

我想,与其让这个笔记本尘封,不如写一个系列,把内容展示出来,让感兴趣年轻人,了解一下互联网是如何一步一步走到今天的,互联网最早期,是多么的步履维艰,面对未来又多么迷茫。

而这些年轻人的年纪,又正好和我写下这个笔记本的时候相仿。这是我,一个史前互联网活化石,对现在勇敢的探索者应做的微薄贡献。

我们谈论互联网,我们在谈论什么?

笔记的第一页,是一张我在上海图书馆常看的书单。左边 TP393/4444 这样的数字是《中国图书馆分类法》下这本书的编码。我需要借助它们,在图书馆的 TP 区的书架上找到这些书。右边就是这些书的标题。不要问我为什么不上网去看,不读这些书,我怎么能上网呢?这是一个鸡生蛋,和蛋生鸡的问题。
请注意,在 1997 年的互联网,或者至少在这个时代的中国高校里,所谓的互联网,就等同于 Unix 网络编程,等同于 TCP/IP 协议。浏览器这种高级东西还不普及。我是到了 1997 年的夏天在交大法华路校区的远程协作实验室的 Soloris 图形工作站上,才第一次畅快的使用 Netscape。而在此之前,互联网对于我来说,就是 Unix 的命令行那漆黑背景上跳动的游标。
那个时候,所谓学习互联网,就是用 C 程序写一些程序,监听在一个 TCP 端口,等着其他的电脑连过来,再用 fork() 产生一个新的进程去服务这个客户端。。。。(不懂变成直接忽略就好,反正现在也没啥用了)
当时真的没有意识到,那么多端口,只有 80 端口(Web 的端口),才是互联网的王者,只有 HTTP 协议,才是协议的王者。而对于互联网初期的工程师来说,80 端口和 HTTP 协议,仅仅是成千上万的协议中间的一种。
现在区块链上,很多工作也类似 Unix 网络编程一样,很底层,做什么事情都要手工一点点搭建。看白皮书,计算哈希值,等等等等。
大家看看今天的互联网,甚至不用看今天,只要看看 2005 年的互联网,比较起来 1997 年来说,几乎已经完全不是一种东西了。区块链不出意外,以一定是这样的速度进化。切莫嘲笑现在转一笔账需要经历的各种麻烦,这些都会迅速变化的。
技术还是应用推动了互联网?
Web3 领域,除了搞技术的人,还有一群人,根本不管这么复杂的东西,直接开始交易。当然很多都是被我称为专业泡沫冲浪者的人。他们就如同互联网初期那些草根站长一样。草根站长们当然不想搞懂 TCP/IP 以及 Unix 网络编程。他们在 5 年后,直接用 Discuz 搭建论坛,开军事站,小说站。最终把互联网推到千万网民的面前。
到底互联网是由开发者,还是应用者推动的呢?
这个历史上无解的争论,在链圈(技术圈)和币圈(应用圈)之间互相鄙视中传承下去。
邮票
在笔记的这一页,还夹着当时必不可少的一样东西:邮票。这也引起了我的注意。
虽然我在奋力学习互联网,我唯一需要远程沟通的高中同学们,没有一个有电子邮箱,而我的 hotmail.com 免费邮箱,也是从刚刚成立的 hotmail.com 申请到。所以,邮票依然是我在这个世界联系其他人的主要工具。
在这个时间点,如果有人质问我,互联网有什么用?到底它能满足哪些没有被满足的需求?我其实不好回答。
我可能会不是很自信的向别人耐心解释,未来的社会,每个人都会有自己的邮箱地址,你只需要一秒钟就可以给你的远方的朋友发一封信。而对于未来,真的会每个人都有邮箱吗?老实说,在那个很少中国家庭买得起电脑的时代,我还没法确定。如果有人追问,有什么实际的需求,真的需要 1 秒钟就收到信?那个时候的我或许也不知道如何回答。
好在,并没有人这样问我。因为,那个时候,周围的人都不知道,互联网这样东西的存在。
(未完待续。。。)

只因为,这场景,似曾相识

上一篇:身处史前互联网博物馆里,看 Web3 的未来

欢迎大家参观我的互联网博物馆里的这一个藏品。这是一件可以帮助我们理解现在 Web3 领域各种妥协的一件文物。

通过它,我们可以理解,在一个行业开始的时候,为了达到愿景中的未来,曾经做过哪些妥协,并且这些妥协又如何消失。

169 网

当时电信有 163 和 169 两个网络。163 是真正的互联网,不过很贵,除了 4 块钱每分钟的电话费,还要 6 块钱每分钟的上网费。想象一下,使用一个小时的互联网,需要花费 600 元人民币。当年大学毕业生的工资在 1000 元/月左右,还不够每个月上两个小时网。163 网学名叫做中国公用计算机互联网;169 的学名叫做中国公众多媒体通信网(人家没有叫自己互联网)。

这是一个 169 网的代理服务器列表。拨号 169 上网之后,还需要用这些(免费的)代理服务器,才可以访问真正的互联网。

请注意,这是一个没有宽带的世界。不但没有光纤,也没有普通的网线,甚至连电话线上的 ISDN、ADSL 这样的技术都没有。网民上网,需要一根普通的电话线,加上一个调制解调器(Modem),俗称猫,嘟嘟嘟的拨号过去上网。上网的速率是 56Kbps,这一篇文章的纯文字部分,大约 80K * 8 = 640K 比特,需要大约十几秒钟传输。至于这几张图片,没个几分钟是不行了(所谓「多图杀猫」)。

169 网这条侧链(Web3 的从业者都懂的),就是一个中国的局域网,只提供访问电信本地的资源,比如上海电信的 .sh.cn 结尾的资源,和真正的互联网并不相连,只收取电话费分钟 4 元。但有国际互联网出口的好心人在 169 上搭建了免费的代理服务器,可以从 10.xxx.xxx.xxx 网段访问外网。在浏览器里面设置以后就可以用 169 的资费享受 163 的待遇,有点类似于现在以太坊太贵,OptimismPolygan 的好心人干的事儿。

千万不要低估科技十年的发展

非常快,当历史的车轮向前滚动,技术快速发展,应用不断涌现,基础设施飞快的前进,当网速经过宽带的几次扩容,资费从按分钟计费到包月,一个月的宽带费降到了大学毕业生半天的工资,尤其是169 网络和整个互联网直接相通,所有的这些好心人搭设的服务器变得毫无必要。

这一页纸,给现在的区块链从业者还有用户的启发是,千万不要低估科技十年的发展。区块链现在满眼都是问题。随便列举几个:费用过高,容量过低,速度过慢,密码丢了无法找回,黑客攻击猖獗,缺乏跨链解决方案,用户基数低,缺少大众应用等等。。。。

不过,有句话叫做「苦不苦,想想红军两万五」。

想想互联网的初期,现在的问题再大,也比那个时候还是好一些。

再贵,能贵得过早期看一个文字版网页,十几块钱的电话费就出去了?

钱包安装再难,能比那个时候发展一个网民,就需要他先花 1 万块钱(大学毕业生多少个月的工资?)买电脑、再去买猫、再带着身份证去邮电局开通拨号上网难吗?(当然另外一个领悟是,这条路径到了中国一亿网民就停滞了,最终把 10 亿用户统统席卷上网的,的确不是这条路径,而是手机加 5G )

区块链的应用再少,要是看看那个时候 169 网上有啥东西就知道了。别说 169 网,整个互联网上能看的网站都没有。哈佛大学的网站只有一个页面,还是这个样子的:

这个我当时手抄的哈佛大学首页上,只写了「这是个实验页面,有啥改进建议给我写信。」。没有啥链接,啥都没有。其他的大学呢?还没有建立网站。

看见历史,常常可以看到未来

大家都知道我以揭穿区块链领域的大词儿迷惑行为为乐。但是,我从来不嘲笑这个技术,这个行业,从来不怀疑这个大潮将来能带来的我们难以想象的未来。为什么呢?只要看一看我的小笔记本上这两页纸记录的世界,再看看现在的世界,就知道了。现在的世界,远远超过我当时最狂野的想象。

一比特的信息,可以以极低的成本,秒级传递到世界任何角落,这是个底层技术。虽然那个时候那么幼小,但技术人员一眼就能看得到它的未来。

而现在,一比特的信息一旦写入一张全球公用的大表,就永远不可以更改。这也是底层的技术。这将带来什么?现在大多数的疯狂的想象,虽然不见得严格按照这些想象发生,但整体应该大差不差。

这就是我看着现在这个一穷二白的 Web3 世界,依然保持无限乐观的原因。

只因为,这场景,似曾相识。

后注:有谁参加这周末在 Dalifornia 举办的猫瓦街会吗?我在 19 号下午 3 点有一个关于《从史前互联网看 Web3 》的分享。如果过去可以一起聊天。

为什么说读代码像读小说?

来, 随手那一小段 anime.js 的代码。看其中最简单的一段:

 str: a => typeof a === 'string',

这一句,就看得出作者遣词造句的能力。

比如,他用了三等号,就是 === ,而不是双等号 == 。这两个相等运算在这里都是可以使用的,运行结果其实是一样的,但是三等号更加准确的表达了这里作者想意图,就是要“严格相等,不仅仅值要相等,类型也要相等”。

类似这些,随手可见。细小的地方,看起来赏心悦目。而很多不严谨的代码,计算机执行起来没有问题,但是用词不够准确,总有帮他改正确的冲动。

再比如箭头函数的定义,还有 const 的使用。这些都是 ES6 的新方法,把原来的复杂的函数定义变得更加简洁,而作者也就很快的把本来需要好几行的代码变成了简洁的一行。

另外一个值得注意的,是一种类似排比的写法。本来判断一个变量是什么类型是一个相当琐碎的事情,因为正如这个函数写的那样,不同的类型用了完全不同的方法(这也是JavaScript不够优美的地方),判断是不是 数组要用 Array.isArray( ),而判断是不是字符串则用了完全不同的方法。

而这一小段代码搜罗了各种需要判断的类型,然后封装在一个轻巧的小函数里面,一段原来需要写做这样的代码:

if(stringContains(Object.prototype.toString.call(a), 'Object')) dosomething();

变成了

if(is.obj(a)) dosomething;

并且统一了所有的类型的调用。

同时,他还用了三个字母的代码来代表各种不同的类型,这三个字母的命名方式和国际机场的三位字母代码有异曲同工之妙,让代码简洁,整齐。不知道是不是只有我,我看着从上到下整齐的那一竖排 a ,还有像军队一样的 => 就有种莫名的兴奋。

这段代码很像一个勤劳的家庭主妇,把家里孩子乱七八糟的玩具收纳到一个个抽屉里面,然后在上面贴上漂亮的标签,从此家里就一下子焕然一新。这样的小代码为什么不放进标准库里面呢?

这就是代码的美感。一种能够建立一个接口,把因为历史原因而产生的复杂性屏蔽起来,从而在自己的世界变得一切都井井有条,shipshape 。

这段代码函数的顺序也很有讲究,就在这几行里面,前面定义着,后面立马就是用起来:

const is = {arr: a => Array.isArray(a),obj: a => stringContains(Object.prototype.toString.call(a), 'Object'),pth: a => is.obj(a) && a.hasOwnProperty('totalLength'),svg: a => a instanceof SVGElement,inp: a => a instanceof HTMLInputElement,dom: a => a.nodeType || is.svg(a),str: a => typeof a === 'string',fnc: a => typeof a === 'function',und: a => typeof a === 'undefined',hex: a => /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(a),rgb: a => /^rgb/.test(a),hsl: a => /^hsl/.test(a),col: a => (is.hex(a) || is.rgb(a) || is.hsl(a)),key: a => !defaultInstanceSettings.hasOwnProperty(a) && !defaultTweenSettings.hasOwnProperty(a) && a !== 'targets' && a !== 'keyframes'}

pth( ) 基于 obj( ) 的判断来定义,dom( ) 用到了 svg( ),而 col( ) 用了前面的 hex( )rgb( )hsl( ) 。。。。这样子一步步渐进,每一步都清晰的在前面一步的基础上再走一步,这个过程就好像东野圭吾的小说里面的一个悬念上叠加一个悬念,直到把这一整段代码看完了,才知道整体的构思。

这一段代码是我在看 anime.js 的时候随手拿来的,因为相对比较完整,但更精彩的是在整个架构的设计和组合上面。

作者用了最少的代码量把互联网上散落各处的缓动函数(easing function)等等功能都统一化以后放在自己的小工具箱里面。看得我眼花缭乱,深感功力很深。

除了《如何判断一段程序是否优美?》提到的短以外,每个函数如果很短也是优美的体现。以 anime.js 为例,里面大多数的函数体都是三行语句以内,甚至最多的都是一行,直接返回,就如同题图的那段一样。就是这样的每个函数只加一点点功能,然后不断的组合,就完成了复杂的功能。这个和我们一直喜欢的乐高是概念,就是用最小的相同的小块,不断的重复的构建出任何想要构建的结构出来。

看代码如小说

看代码,就像看一部小说,有好的,有差的。不幸的是,除了文笔特别差的小说,很多小说需要花时间看完结局,才知道是不是真的好看。代码在这一点也很类似。虽然看一小段就知道个大概,但如果真的想评估的,还是需要耐着性子看下去,看到最后才能有更准确的判断。

如果有人把代码像小说一样进行推荐就好了,可以让除了计算机以外的人类,也可以享受阅读代码的乐趣。

为什么要读代码呢?阅读代码最大的好处是学习。别人的遣词造句的方法,组织段落的方法,甚至函数命名的方法,都是可以直接借鉴,用在自己的代码里面的。

熟读唐诗三百首,不会吟诗也会吟。代码届也是同样的道理。建议希望写出优美的代码的同学,应该没事儿读几段优秀的代码,绝对比写代码的时间更划算

中医科学吗?当然不科学了,人家是技术

我最近形成了一个自创的三分法世界观。有了这种三分法,我可以心平气和的和更多人聊天了。

我把世界分为:科学,技术,和文学三个范畴。

科学和技术

科学和技术的分别比较清晰。科学用系统化的,定量、实验的方法寻求世界运行的规律。而技术是为了达到一定目标的而发明的方法和工具。

技术为了达到目标而努力,而科学被好奇心引导,希望去了解背后的规律。我想过桥,所以造桥就是技术;我想有餐具,制陶就是技术。而科学并不保证发现立刻有什么用处,仅仅就是想研究。技术和科学,差不多是知其然和知其所以然之间的关系。

我们如果搞混了科学和技术的区别,把技术的活,用科学去衡量,就会吵架。

技术

一个危险的会导致立刻友尽,取关,互删等不良后果的话题是,【中医科学吗?】

当然不科学了,因为它是技术范畴呀。

在我的这个定义下,我发现中医还有烹饪就是典型的技术成分大一些,科学成分小一些。而且从这个维度,中医和烹饪简直像极了。

铁锅一口,加油到沸腾,加葱姜少许爆炒,可以提味。

这个食谱跟这个药方:

 生姜,不拘多少,捣取汁,入铜锅内熬浓涂患处,觉热辣难当,即愈。

难道你不觉得形似,且神似吗?

从做出来好吃的饭,还有能够治一些病的角度,中医和烹饪都是技术。

技术,但不是科学

就拿这个食谱为例子分析一下:铁锅一口,加油到沸腾,加葱姜少许爆炒,可以提味。这个技术管用吗?请不要用科学不科学来解释,只说管用不管用,我的经验是,管用的。不加葱姜味道缺一点香味;没有爆炒,香味的确出不来。

它科学吗?

如果真的要用科学来解释,我们得先有化学,知道葱姜,油,铁锅等的化学成分,然后研究这些成分在高温下发生了什么化学反应,产生了什么新的物质。然后需要高度发达的医学,来理解这些物质是如何被舌头的味蕾感知的,被鼻子的嗅上皮细胞捕获的,还要研究脑神经科学,这些四面八方的刺激是如何形成香的感知的。更要研究心理学,到底香是一种什么样的感受?你感知到的香到底是8分香还是8.5分香?这种香在心理层面是又哪些维度组合而来的?

这一圈全研究明白了,估计要再过一个世纪,要创立很多新的学科,才有希望。但是!在这些还没有研究明白的时候,并不阻碍山洞里的原始人围着篝火,把不知某处采摘的胡椒放到刚打回来的羊肉上,并且享受一餐更鲜美的美食。

我们周围有太多的无法用科学解释但是有用的东西,越是日常的东西越难准确的较真的用科学解释。但这不阻碍我们使用这些技术。

东方曾经有着领先世界的技术成就,而在科学领域的发展就没有西方那么成体系。所以东方传统的很多东西,如果用“是不是科学”来衡量,都不怎么科学。但是从是不是有用的角度,八成是有些用的,否则既不科学,又没有实际用处,还传了这么多代,留着它干吗呢?

文学

接下来要进入的话题就更加危险了。我把既不能放进科学,也不能放进技术的部分,也就是只存在于人的意识之用的部分,都统统放入文学这个范畴。文学这个词不准确,但是很形象,大家就当作 “像文学一样的东西仅存于人的意识之中的” 来理解就行。

我作为一个硬核理工男,是很招人讨厌的那种,总想把一切都放进科学体系里面,希望用计量,逻辑来理解世界,结果总会把天聊死。自从我开始用文学角度去理解的时候,忽然间豁然开朗。我接触到的宗教呀,意念呀,甚至占星呀,一下子就进入了我的脑子,和我内心的那个理工男和平共处了。

数学就不是自然科学

为了和我一样的硬核的理工男感觉好一点,我先说明,数学,就不是科学。或者更准确的说,不属于自然科学,顶多算形式科学。而在我的划分里面直接就归了文学体系。

之所以能想明白数学不是自然科学,是从复数开始的。根号负一,我们都知道这是想象的一个数字,不存在于自然界。根号负一不存在我们都可以接受,1,2,3,4,5 这些数字难道就真的存在于自然界吗?

我看到桌子上有三个杯子。这三个杯子是存在的,但是 3 这个概念仅仅存在于人类的脑子和意识里面,并不存在于自然界。曾经看到一本书,说文明的进步一个很重要的标志就是把数字从表达中分离出来。以前甲骨文一个字,代表的不是羊,而是一只羊的意思;我有三头羊,就需要 羊羊羊 来表示,字和自然界的物一一对应。直到很后来大家才发现,可以把羊抽象出来,把这样的东西都叫羊,而不仅仅是这一只;然后把三也给抽离出来,把这么多的东西都叫三,而不仅仅是羊。这样用三这个抽象的概念和羊这个抽象的概念纵横组合,才形成了现在的三只羊的概念。

如果连数学都是文学范畴(仅存在于人的思维中不存在于世界中),我们对于那些看似不存在的东西就有了极高的接受度。

小马过河是文学。它是真的吗?不是真的。它科学吗?和科学没关系。它有用吗?有用。只要有用,拿是不是科学去衡量万物属于抬杠。

以占星为例,以前我觉得彻底不科学,但是如果有人用它来对内心的世界进行表达,计量,交流,并且对于未来的发展趋势进行分析,你就把它当作一个很好用的小马过河就好。不要那么较真是不是科学。

上课前要先搞清要上什么课

最终我发现了,人和人交流需要有基本语境的对齐。这就好比上课之前要先搞清楚自己走进的是什么课堂。

今天上的是历史课还是文学课?如果我以为是历史课,结果老师发了一本封神榜下来,而且开始跟我讲哪吒和姜子牙,我一定怀疑是不是我疯了就是老师疯了。我会问老师哪吒哪年哪月在哪里出生的?有没有出土文物可以证明哪吒生前在哪里活动?老师也一定觉得这个学生没法教了。

这个冲突如果不对现在是上什么课这个问题澄清之前,根本无法调和。而现实中,大家常常对这一点差异毫无感知,结果天就没法聊了。

如果告诉我现在上的是文学课,尤其是和一群诗人一起上课,我会放下我的科学与否的有色眼镜,用文学课的语境和他交流。即使一个人说他用 “位于右肩膀上的眼睛看到了绿色的太阳从西方的地平线上冉冉升起,天空中飘满了玻璃球馅儿的包子”, 我都不会生气的,因为我知道他正在他的意识世界里面构建一个世界,并且真心的希望表达那个世界,并且让我认识他的那个世界。而我,必然会心悦诚服的接受这一个只存在于他脑子里的那个世界。

希望这篇文章可以拯救一些你周围像我一样无可救药的喜欢跟人抬杠的理工男。