分类目录归档:未分类

善和恶是相对坐标,合法还是违法是绝对坐标

昨天关于这篇文章《世界上有坏人吗?》,有人问,难道就没有善恶了吗?

当然有。

只不过在评价好、坏、善、恶的时候一定要提醒自己,这是一个相对概念。这是正确应用这些概念的钥匙。

问题

我问一个不相关的问题:重庆是上坡路多还是下坡路多?

如果回答上坡或者下坡路多的,可以洗洗睡了。哈哈。

当然是一样多,或者说不知道。因为上坡和下坡是一个相对于观察者的方向而言的相对概念。要看你朝哪边走了。。。所以每个人都可以有这条路是上坡还是下坡的判断,判断不了是迷糊了,但是,切记

1)千万不要期待所有的人的看法和你一样。

2)不要基于你的判断去要求别人。

相对坐标和绝对坐标

我以前喜欢出一个面试题,为什么镜子可以翻转左右却不可以翻转上下?

其实这道题很简单,上下是绝对坐标系,是以巨大的地球空间为参照系的,不以人的面向,头的朝向为转移的,所以不会翻转。左右是以人自己为坐标系的,一旦人转了个圈,原来的左就变成右,右变成了左,就翻转了。

一个类似的题是:一个手表的时间比实际的时间早,它是快了还是慢了? 这也是一个相对坐标和绝对坐标把人搞糊涂的问题。

几个在船上才知道的冷知识》里面说到,水手就很智慧,他们从来不被这些不准确的相对值困扰。能用绝对坐标的,他们从来不用相对坐标。

在船上从来没有左、右、前、后、这样的让人迷惑的概念,面向船头时的左舷就叫 port ,右舷就叫 starboard ,行进方向的帆就叫 jib,后面的帆就叫 main 。不用相对坐标系衡量世界或许是一种文明的进步。

善恶是相对坐标,合法非法绝对坐标

我的生活里面当然有很多善恶,但这个观点保留给自己就好了,而讨论该做还是不该做,还是得依赖法律。法律就是一个绝对的坐标系,它明文写下了,各种情形应该如何去做。这些文字并不因为不同的人而发生改变,就如同船的 port 永远就是那几块木板一样。所以与其问,这是是对的还是错的,不如问,这事儿合法还是不合法。

这里的指的是规则。只要把规则写下来,它就一下从相对的概念变成如同马路上的行车线一样成为绝对坐标,就可以讨论。

当然,一切都落为规则成本太高,所以不是那么重大的事情就交给道德,交给民俗来解决。这是很智慧的方法。

但和规则不同的地方在于,好、坏、善、恶、很多都是相对的概念。只不过在坡下的人占大多数,大家都觉得这是上坡;偶尔有站在坡上的人说这是下坡的时候,大家常常会用民俗去压制他们。

好在民俗没有强制性,所以即便多数人以相对概念攻击少数人,也没有产生什么太严重的后果。而有强制性后果的,还是上升到规则较好。

《Mojito》 里的古巴,记忆中的哈瓦那

周董发布的《Mojito》,对我来说,是一首迷人的歌曲。人们常说,音乐是一列穿越时空的火车,可以瞬间把人带回到曾经经历的那个时间和空间。《Mojito》就是这样的一首歌。

音乐一响起,古巴,哈瓦那的那些记忆就喷薄而出,好似自己又站在哈瓦那的街头。本来已经模糊的记忆突然鲜活起来。

古巴

古巴,对于中国人来说,如同一个梦里熟悉的地方。哈瓦那,格瓦拉,卡斯特罗,都是歌曲里面,T-Shrit 衫上频繁出镜的名字。但现实里,却又很少有人真的会去造访这个加勒比海上的岛国。

去古巴,从来都没有出现在我的日程中,直到忽然看到一个游记里面说,她就在墨西哥的尤卡坦(Yucatán)半岛的旁边,在我去年访问墨西哥的时候,就改了主意,直接从坎昆飞往哈瓦那。

好消息是,外国人进入古巴,不需要提前办理签证,只要在坎昆或者美国的机场花个25美元,买一张入境卡就可以登机了。这个社会主义国家,现在对于美国的普通旅行者敞开过境,这令我大感意外。

微醺的世界

Mojito 是多么有古巴特色的一种鸡尾酒呀。它诞生在古巴的哈瓦那,用的是古巴盛产朗姆酒。朗姆酒是用甘蔗酿造的,古巴最主要的物产就是甘蔗。再加上甘蔗汁,还有薄荷和苏打水,就足以让人看到对方微醺的眼眸

我在古巴并没有喝多少酒,却觉得古巴就是个微醺的世界。是不是因为海明威这个大酒鬼在此居住的缘故呢?歌词中不经意的那句 而你是文学家笔下的那一片海 中的那个文学家必然就是海明威,而那一片海想必是《老人与海》里的那一片海。(注意:mojito 的 j 发音 为 h,t 发为 d ,这样才是纯正的西班牙语发音)

西班牙人的世界

古巴作为西班牙人300-400年的殖民地,是进入南美洲的桥头堡。

我去过西班牙的一些城市,但我见过的最辉煌的西班牙建筑,不在巴塞罗那,也不在马德里,而是在哈瓦那。我想有几个原因。

其一,哈瓦那建立的时候是西班牙最强盛的时候,整个南美遍地的黄金白银都是通过哈瓦那转运回欧洲的,所以这里的建筑如此辉煌,很多在本土都没有舍得建筑的巨大宅邸,在这里好像山高皇帝远的缘故一样,尽情发挥。

其二,这些建筑都是一百多年前的建筑,带着那个年代的复古和文艺的气息。而现在,原本应该大门紧锁的豪华的宅邸,被分割成72家房客共同居住,就跟80年代前外滩的那些老建筑一样。于是作为旅行者就可以沿着雕花的拱廊,巨大的圆弧楼梯,深入到所有的建筑的内部。而因为居民都还生活在大陆80年代初以前的水平,并没有任何财力可以装修房子,反而让古老的壁画,碎花的地板,甚至各种五金件完好的保留了下来。拱廊的壁画旧城的涂鸦, 所有色彩都因为她说不出话 所讲的就是这个场景。

必须钦佩一下黄俊朗对于一个地方的特点的敏感度。他写的词里面所有的色彩都因她说不出话,这是多么极致的夸张!如果说世界上色彩最浓郁的地方,肯定是哈瓦那。南美洲带来的浓烈的明亮颜色,在这里也随处可见。明黄色,深蓝色,深紫色,把所有的色彩就那样毫无过渡的直接刷在墙上。把北美的城市对比度调到顶,再把饱和度调到最高,或许就是古巴的样子。

社会主义的世界

古巴同时又是一个标准的社会主义国家,有着一切我在童年时代熟悉的记忆,粮票呀,外汇兑换卷呀,友谊商店呀什么的,这都是我的记忆。 所以即便大家的肤色不一样,讲的是西班牙语,建筑都是欧洲风格,我却自得其乐,感觉好像回了家一样,从不把自己当外人。

我的Airbnb房东在我到达的时候请我填写一张外国人入住登记表,怕我不理解,耐心的向我解释,她需要向当地的公安局报备我的到来。我安慰她说,放心,我对于这些非常的熟悉,甚至觉得亲切。

昂贵的上网费

在古巴,普通人是不可以上网的。几乎没有人家里有互联网(不仅仅没有宽带,而是没有互联网)。而外国人需要上网的话,全哈瓦那有据说三十几个公园可以无线上网。需要去那里买 2 美元一小时的上网卡(在专门的地方买是 1 美元,而在现场黄牛手里买就是 2 美元),一手交钱一手可以获得一张印着用户名和密码的小纸片。在一个平均月工资 28 美元的国度,2美元一小时显然是仅仅给外国人消费的价码。清晨,公园里面除了晨练的老年人就是各色游客围着小花园聚众上网。这个场景有些诡异,也有些滑稽。

没有了互联网,人一下子就空闲了下来。漫步哈瓦那街头,有一种极为强烈的混搭,碰撞感。在金碧辉煌的西班牙人遗留下来的建筑里,每个门口都有居民坐在那里晒太阳,和邻居用字正腔圆的西班牙语聊天,和游客热情的打招呼,和我慢条斯理的回忆古巴人民和中国人民的友好情谊。就如同进入了一个村子一模一样。

时间凝固在那里。建筑凝固了,人的生活,也,凝固了。

(未完待续。。。)

我是如何分辨南北,又如何一到商场就迷路的?

我周围有两种人,一种是永远知道东南西北的,一种是永远不知道的。我属于前者。而同时,在商场里面,前者常常迷路,而后者更加游刃有余。这是为什么呢?

我是如何分辨南北的

无论在自己熟悉的城市,还是在刚刚到达的地方,大多数时候,我总知道哪边是北。这让我的有些朋友大感惊奇,常常问我是怎么知道的?我有的时候也需要仔细想想,我是怎么知道的呢?为什么我就一直知道呢

我爸爸就是个方向感很强的人,不仅仅在地面上,有的时候在地下车库也知道南北。这一点我还做不到。还有在家里描述什么东西在哪里的时候,从来都用 “写字台的东边抽屉” ,而不用左右描述。这也让我小时候一直需要适应。

我仔细分析我的方位感的来源,发现每个人知道的事情,如果仔细觉察,一定有一个脑子背后的思想进程在自己都不经意的时候进行着计算,并且把这个计算结果记录下来。

熟悉的环境

打个比方,在自己家里,大多数人还是分得清东西南北的,因为家里面总有朝阳的一面,可以舒舒服服的端着咖啡晒着太阳的那边。知道了南边,哪边是北就清清楚楚。

只不过大多数人会只有问到的时候,才会做一个计算:这是南,所以相反的一边是北。而有方向感的人,会不经意的已经把这个计算算好,存储在脑子里,并且把北这个概念跟自己厨房的那个小窗户绑定在一起了。对于 哪边是北的问题,他不需要经过计算,就知道厨房那边是北。

更少的人还会继续计算,把卧室的那堵墙标上东边的标签,进门的地方在心底里面标注成西。这个过程如此轻微,甚至都是些不经意的需要回答某个问题的时候才计算出来,从此就把标签贴了上去,以至于下一次回答类似的问题会快很多。

对于同样的计算,也会向周围延展,大致的知道自己的办公的地方在房子的西边,常去吃的面馆在西北边等等。只要有几个参照物就够了,就足以回答东西南北的问题。比如说,我太清楚我卧室床头的那一面墙是东墙,我在任何地方面对太阳的时候,都知道左边就是我家里东墙的位置,虽然那里并没有一堵墙。

陌生的环境

方位感对于我这样的人来说,是很重要的一件事情,每到一个新的地方,我不自觉的第一件事情就是尽快建立最大范围的方位感。打个比方,前几天去长沙,下了飞机以后,要先看一下地图,大致的知道长沙黄花机场在长沙市的东边。“哦。知道了,我现在是从浦东机场去市区”, 我在出租车上就有这样的感觉。有了这样的比喻,我其实是把自己熟悉的环境的地图,像一个图层一样映射到了现实世界里面。虽然我的出租车在机场高速上奔驰,而脑子里面,仿佛自己走在华夏路高架上奔向东方明珠一样。

到了一个新的地方,只要有任何一个小的机会让我知道了一个确定的方位,我就会从这个线索开始建立自己的地图。这个小机会可能是瞄了一眼地图,可能是知道了一个地标在自己的方位,或许仅仅是一个指路牌。

我知道了哪边是北的时候,常常假想北边一个很远的地方作为灯塔,在街道走路的时候,不自觉的就知道,往这边走,那个灯塔在身后远处,越来越远;向右转一下,灯塔在自己的右边,再向左转,灯塔又变到了身后等等。这个感知是如此的细微,以至于绝大多数时候连自己都丝毫不注意,直到有一刻,需要回答去某个地方怎么走的时候,我就会发现我知道答案,而这个答案是很早以前就算好的。

经常确认

还有一个很重要的事情,就是时不时需要校对一下方位。用灯塔的方法当拐弯多了,难免会有些误差,忘记了一个转弯就会错90度。所以需要时不时找到一个新的方位感,再从那个点开始向外发散。尤其在上海这种道路都是弯弯曲曲的地方,需要的参照点需要更多一些。

我去一个地方有的时候会因为各种原因,把初期的方位搞错了,并且在这个方位上建立一个错误的坐标系。当我发现的时候,就会非常不舒服,并且要用至少三四天的时间才能重新建立新的方位。我猜,这个事件,就是暴露我的潜意识已经做了大量的计算,把东西南北的小标签贴满了我周围的建筑物,窗户,但一旦错了,就需要把所有已经认知的重算一遍,脑子的工作量太大,所以会很崩溃。

GPS

当然另外一个习惯就是破除对于 GPS 的依赖。我在一个新的城市开车,从来不喜欢用 GPS 。我会出发前先在地图上查好要去的地方,建立一个方位感,知道我要东开,开到什么街道以后往北开,然后目的地在什么地方。这个一旦形成,就关掉手机,直接上车就开。这样经常会有绕路或者非常偶尔的迷路,但开了一两次以后,对于脑子里面的那个地图和现实的道路就会重合,从此就再也不需要导航了。我在硅谷从来是不用导航开车的,甚至某次从纽约沿着乡间小道开到波士顿,都是靠鸽子一样的人脑 GPS 导航过去。

相对坐标系统

和我这种用绝对的东西南北还有上帝视角来导航的方法不同,还有一类人是用相对坐标系统的,用兴趣点导航。女性用这种系统的比较多。她们一直用商店,拐角等地点来作为自己辨别位置的辅助工具。

她们可以清晰的说出来,她要去的那家店在麦当劳右边,而要去麦当劳,得先走到常去的那个花店,然后从花店往左拐就到麦当劳了。虽然从来没有给花店,麦当劳打上东南西北的标签,却也不影响日常生活。

其实飞机的导航就是这样的。飞机不是靠 GPS 导航的,东西南北不重要,重要的是先朝着一个无线电发射台飞,飞到了再向下一个台飞,几跳以后就到了目的地机场。

在商场里面,这种基于兴趣点的导航方式发挥了极大的作用。因为在商场里面建立俯视图一样的方位感难度特别大。偶尔的,只要让我在商场里面从一扇窗户看到外面,我就立刻可以建立东西南北,可惜这样的机会几乎没有,在地下层更是不可能,所以我一到商场就迷路,常常一个商场去了10次也没有有效的建立起来方位感,而没有了方位感,我就无法判断怎么到一家店去。而基于店铺的导航在这种情况下就发挥出了长处,甚至比在大街上更加管用。

所以,我是基于绝对坐标系导航的,所以可以预测以前从来没有去过的地方,地图是我的朋友。而还有些人是用兴趣点导航的,所以去过一次常常就记住了。我可以在一个陌生的城市迅速的到达一个没有去过的地方,却在商场里面迷路到崩溃。就是这两种导航体系的不同造成的。

如果想了解80年代初的中国,可以去古巴

在我的古巴照片中,有一条明显的分界线。

分界线一边,是拉丁美洲的,奔放的,绚烂的,宏伟的,微醺的,充满异国情调的那个古巴;而分界线另一边,是灰暗的,巨大的,贫穷的的古巴。

从建筑上看,两个世界泾渭分明;而在生活里,却是一个世界的躯体里面,流淌着,另外一个世界的血液。

革命的古巴

图中大楼上面的红色标语,在我访问的时候,还并不认识。而后来学了些西班牙语以后,才知道,这原来是就是切-格瓦拉同志最著名的那一句话。这是他在古巴命后,孤身一人,前往拉丁美洲继续革命之前,写给古巴人民的那封信的最后一句:

Hasta la Victoria Simpre! 直到永远的胜利!

要说革命的氛围,从建筑上来看,似乎古巴更加接近于朝鲜,而非越南和80年代中国,因为我并没有看到太多的宣传壁画,以及其他的红色标语。贫穷和革命两个声部的乐章中间,贫穷出现的频率和强度压倒了革命

革命广场周围孤零零的几幢楼,内政部,电信大楼,长得都非常 “革命”。我一直百思不得其解的,到底这种一眼就能看出来的风格,在建筑流派里面属于哪一派。为什么这种简单的,有点丑陋的,体量却很大的建筑,就是属于那个年代的呢?

内政部大楼上有比正常人大几十倍的格瓦拉同志的巨幅线条画像,广场中心有一个 José Marti 纪念塔。从建筑上讲,这个高达109米的古巴最高建筑,实在缺乏美感,让人联想起朝鲜的主体思想塔,或者莫斯科大学的主楼。

在革命广场附近,无论标语,还是头像,还是纪念塔,都有着和人的尺度,完全不相称的体量,让人觉得自己有种不舒适的渺小感,有一点受了委屈的感觉,并且有一些惶恐。同样是渺小感,我们置身于教堂巨大的穹顶下时,却可以心悦诚服的承认自己的微不足道。

人的感觉就是这么细微。一群建筑建好了,就一直站在那里对于来访的客人诉说着一些东西,几十年过去,这细语不曾变化,还是被清晰的听到

和上面的古巴革命武装部大楼很类似的是下面的古巴的Ameijeiras兄弟医院(Hospital Hermanos Ameijeiras)。我总结起来,基本上这个建筑风格就是:一个巨大的灰色或者白色立方体,上面布满密密麻麻的整齐划一的窗格,再点缀以竖向线条,然后用常人无法接近的体量建造出来。

完全免费的幸福生活

我一直很好奇的是,当地人口中幸福的古巴人民生活到底是什么样的。从收入来说,28 美元每月的平均工资肯定无论如何算不上富裕,但是哈瓦那司机很自豪炫耀他们几乎完全免费的一切。免费的医疗,免费的教育,免费的养老

我反复跟他们确认,真的是免费的吗?是的,全是免费的。教育从小学到大学都是免费的;医疗,所有的病都是免费的。我问免费的质量怎么样?他们都更加自豪的告诉我,真的很好,非常好。。。

我有一些经济学基本常识,所以对这件事情不免有些怀疑。免费必然有人需要承担这个费用,但这个费用最终是从哪里来呢?

带着这个问题我去了当地的药店,还有粮店。看到的,似乎可以回答我的疑问。下面,就是哈瓦那老城的一个规模很大的药店。规模大,是指房间很大。在过去的西班牙人的巨大宅邸里面,有一个空旷的房间,里面可以跳起舞来。而放置药品的货架,是这样的。

如果凭着一个特殊的本子,我姑且叫做药本吧,是可以免费拿到药物的,但是药物的种类嘛。。。。就是照片上的样子。

同时,家家户户还是有粮本的,我本来想跟着 airbnb 的房东去粮店领粮食的,后来不凑巧没能成行。但看起来,这里的粮店,基本上和小时候去过的粮店很类似,用一种叫做粮票和粮本配合,可以获得食物。我没有拍摄粮店的照片,但基本上规模和上海的早点铺子很像,有些面粉和油,但种类似乎就是这两大类了。而本地的小学生们,也依然带着红领巾和蓝领巾(戴蓝领巾是 1 – 3 年级的少先队员)

两个真相

所以,看似冲突的两个说法都是真相。第一,免费是真相。第二,物质极度匮乏也是真相。免费仅仅代表着不需要钱,但不代表着可以获得自己需要的一切。

外汇兑换券

在古巴,外国人使用古巴兑换比索 CUC ( Peso Cubano Convertible),一美元换 1 CUC。我一听就兴奋起来,这不是80年代初中国的外汇兑换券吗?我那时候听说过,但显然还没有富裕到接触过,反而在几十年以后在这里相见了。游客只能在外国货币,比如美元,欧元和 CUC 之间兑换,而本地人用的 CUP (Peso Cubano),就是本地比索。

CUC 是没有官方渠道兑换成 CUP 的,甚至和当地人私人兑换一些是否违法都不得而知。拿着 CUC 基本上可以支付大多数的商品。据说 1 CUC = 24 CUP (如果不能兑换为什么还有这个汇率呢)。但在很多地方 CUC 和 CUP 标价的金额并没有相差24倍。尤其是博物馆门票这样的软性消费,常常标价是 1 CUC 或者 1 CUP。但我在的几天好像也没有机会换到本地人用的比索,没有办法享受到本地人才能享受到的超低价格。

CUC 标价的服务基本上和美国相似,对于我们这样的游客,认为还算合理,但是对于当地人,那可就天价了。比方说,从机场到市区,其实就是20分钟的车程,大约虹桥机场到外滩的距离吧,出租车是 35 CUC ,大约 35 美元,这个是上海的价格的一倍。谁让我们是游客呢。当我回到上海的时候,才知道当地人乘坐的出租车用 CUP 计价的话是 20 CUP,大约 6 块钱人民币左右。当地的酒吧一杯啤酒 5 CUC 左右,和上海也差不多,但在几个本地披索就可以买一大把香蕉的世界里,我脑子里面怎么也挥之不去的一个想法, 我就是穿越回90年代初衡山路上的那个老外。

在哈瓦那,或许大多数访客都留恋于让人惊讶得合不拢嘴的旧城,拿着相机去捕捉摄影天堂的绚烂色彩,而我花了些时间,去留意古巴在社会这个层面的现实,不得不说,现实并不美好。但即便如此,我因为从这样的年代走出来,有掩盖不住的亲切感。虽然一切都和现在我的世界完全不同了,一切又都那么自然而然,顺理成章,并没有丝毫惊讶。

这个灰暗色调的古巴,以及这个背景里生活的人们,我是同情和喜欢的。

关于电动车,我好像就没有里程焦虑

十一期间和 Wendy 买了辆 Tesla Model 3 。

关于电动车的加电问题

对于电动车,有很多人有严重的里程焦虑。我反而一直没有,或许跟我开燃油车即便是低油量灯亮起,我还不急着去加油一脉相承,但更重要的是,加电的模式本来就比加油方便很多。我们且不说未来,即便是现在,即便是中小城市,加电或许已经比加油方便很多,只是大家还不适应。我们来比较一下。

你见过哪个商场,写字楼或者小区的地下车库里面有加油站的?电车就有。

你见过谁家的车位上有个汽油的管子,拧开就可以加汽油的?电车就有。

虽然没有准确的数据,但是估计哪怕在小城市,给电动车加电的充电头比加油的油枪多好几倍。以上海为例,不完全统计大约800多个加油站,每个加油站按 12 个加油嘴来算也就是 1 万个左右,而充电桩的数量级不同的来源统计不一样,有说20万个,还有说30万个,但整体还是十万级别的。而且计划中建设都是以十万为单位做计划的,所以未来的充电还是会越来越容易。

毕竟,加一个家用的充电桩就是一个电工半天的活儿。建一个加油站呢?

充电速度

现在的问题不是充电桩的问题,而是能量传输速率问题,就是再快的充电桩,充电速度还是慢。

和加汽油做对比,加油站的管子如果是棍子那么粗的话,加电的管子,可以想像成跟吸管那么粗。5分钟就能加满一桶汽油,而充电的话,需要滴滴嗒嗒的几个小时才成充满一 “桶” 电。

以最厉害的特斯拉超级充电桩为例,最快也就是一分钟充的电可以跑5公里(刚开始充非常快,越到后面越慢),而加汽油的话,一分钟加的油可以跑100公里(按照加一次油4分钟跑400公里估算),能量传输速度相差20倍呢。

在我脑子里面有这么个场景,汽油车用的是“液态充电宝”,是几万年前用太阳还有植物等充好的,加油的时候不充电,直接往油箱里面灌充电宝,没电了就扔掉。这样最快,但问题是,这样的充电宝现在没法生产了,只能用一点少一点。而电动车是自带充电宝,所以需要连到电网上现充,就很慢。

另外一个比喻,就是电车好比是光纤传输数据,信息随时可以获得,但是速度还是不够快。而汽油车就好像是装满一车硬盘的卡车传输数据。虽然技术落后,但是当卡车在高速上狂奔的时候,那每秒钟可是几千 T 的数据在传输。。。。想想就觉得恐怖。

乐趣是旧技术最后的庇护所

上面这些分析还仅仅是现状呢。随着时间的推移,很快加电的体系应该迅速普及。现在再去买燃油车或许就跟2010年买了 Nokia 手机一样。当几年以后再看,发现原来,一直阻止自己做一些决定的,仅仅是惯性,以及和惯性配套的那一系列自圆其说的说法

我还清晰的记得,在我选择我的第一辆汽车的时候,当时还有一个主流的纠结,就是选择手动档还是自动档。那正好是一个自动档轿车已经开始流行,而存量汽车基本上全是手动档的年代。我选的是手动档。

当年关于手动档最主要的三个优势我还记忆犹新:其一,省油;其二,便宜;其三,驾驶的乐趣。

其一,虽然依然成立,但是差距越来越小,其二,我觉得才是真正的原因,但是大多数人把它隐藏在了其三中间了。这么多年过去了,凡是有人说某种新技术将让人们失去老技术的乐趣的说法,我都想起了手动档汽车,甚至想起了油画的确比胶卷有乐趣,而胶卷又比数码相机有乐趣。似乎有乐趣是旧技术唯一的庇护所

或许未来,开车作为一个乐趣将从大众的认知中消失,而像油画或者雕塑一样,成为很少一些人的乐趣。所以下一篇文章想梳理一下我所经历的自动驾驶。

我所经历的自动驾驶

特斯拉作为一个玩具,最好玩的就是宣称的自动驾驶。我的结论:特斯拉现状是把市面上已经有的大多数辅助驾驶做得最精致的,但以现状而言,并没有太多的突破

关于自动驾驶

特斯拉的市场宣传不错,把很多的车已经用了十几年的技术增强了,换了个名字就好高级的样子。但这些技术大多是已经比较成熟的技术。什么事情都怕拆解,拆解了就能还原技术的来龙去脉。我们就拿丰田的好几年前的车型做比较好了,发现特斯拉的技术都能找到踪迹,并且都在很多年前开始商用。即便如此,我认为特斯拉比我尝试过的其他的辅助驾驶功能已经升级了一大步了。说明 1)市场营销很重要 2)95%的好和99%的好已经不是一样东西了。

我们来拆解一下,梳理一下我们所知道的辅助驾驶的发展路径。

自动定速巡航( Cruise )

这是最简单的,现在基本上是所有的自动档汽车的标配。在高速上设定个速度,车子自动加油门,保证速度一直保持在设定的速度。

但这个功能我其实用的很少,原因是还是需要管着刹车,前面有辆慢车,就得调整了。但有趣的是,这样的技术从1900年开始就有,现代的定速巡航是在1950年代成熟,而中国的车子,是到了最近的10年才开始变成标配的。这又是一个从技术可能性到实际应用经历半个世纪之久的例子。

我大学是学习自动化专业的,记得《自动控制理论》课堂很靠前面的时候讲的就是用 PID 控制器做自动巡航定速的例子。其他我都忘得差不多了,但是感觉这东西,哪怕不用任何数字的计算机,就拿电容和电阻我记得就能焊一个出来。

最简单的 P(等比)控制器,把当前速度和设定速度的差反馈给油门,就基本上可以实现了,就跟洗热水澡冷了就往热方向转水龙头,热了就反着转就好了。高级一点的再加上个 I 积分控制器,就是把差值的时间累积再反馈回去,避免上坡或者有阻力的时候永远也达不到设定值的问题,再高级一点的再加上一个 D 微分控制器,把速度变化对时间做一个微分,感知一下瞬间的变化,使得反应更加灵敏,可以提前反应而不用已经出现很大的差异的时候再反应。然后调整一下这三个输入的权重以后加和,然后给到油门就结束了。我一点都不惊讶这东西20世纪初就做出来了。

当然,现在的定速巡航不是这么简单的,也不是模拟电路的,但意思差不多。

ACC ( Adaptive Cruise Control )

这个是自动巡航定速的自然的加强版本。很多品牌的车子都可以选装的(在美国市场基本上是标配的)。这个就是自动巡航定速加上了一个前面的雷达来判断一下前面有没有车子,如果有,就减速,减到和前面的速度一致,然后还能保持一定距离。这个是 1990 年代奔驰就有的技术,现在也已经成熟了。

我一直认为,一个 ACC 已经满足我 70% 的自动驾驶需求了。在高速上,我经常找到一辆车,然后启动 ACC , 就如同抛出了一个带绳子的钩子,挂在前面的车的后保险杠上,被拖着走。自己变成了一列火车的一节车厢。这下子刹车和油门在正常路径上可以松懈了。我能想象的自动驾驶的未来,很有可能是一辆车拽着前一辆车,像一列火车一样,一起加速,一起减速。只有最前面的那辆由一个苦哈哈的人在开。在汽车之间的通讯还没有建立之前,雷达检测前车是一个很通用的方案。

但有些 ACC,比如 Toyota 的,在慢速的时候(30km/h 以下)就嘀嘀嘀叫一下,然后就把控制权交给人了,相当烦人,说明技术在低速的复杂环境中没有信心。而 Tesla 总算是通过技术提高,让自己在低速的时候依然有信心停止-启动。这个过程就跟95%的车牌识别率不能用,99.9% 以上就立刻可用一个道理,从量变到了质变。

车道偏离警报 LDA (Lane Departure Alert)

丰田叫 LDA,宝马叫LDW(Lane Departure Warning),奔驰叫 Active Lane Keeping Asisstant。。。为啥汽车行业大家都喜欢发明新的词,称呼相同的东西呢?这些,基本上是特斯拉的辅助驾驶的简易版本。这些都是感知车道的,只有在偏离车道的时候,才会从亮灯,嘀嘀叫,到帮忙打一下方向盘,或者在车的单边轻轻刹车一下的方式,提醒司机,或者把车再带回原来的路上。

这也是大约十年的老技术了,应该也比较成熟了。但这个肯定不能当作日常功能使用,用的时候有一种在左右两个马路牙子中间开车的感觉,左撞一下,右撞一下,体验极为惊栗,仅仅是在危险已经发生的时候提示的作用。

车道保持 LTA(Lane Trace Assist)

这个是 LDA 的很自然的升级,就是不等撞到车线上虚拟的马路牙子,就开始施加细微的控制,保持车在车道中间。

这个在 LDA 的技术的基础上很容易想得明白。这个算是新技术了。这个依然不叫自动驾驶,还是自动辅助驾驶。

使用这个功能的时候,感觉自己的车开始从汽车变成了火车,可以明显的感觉到车道中间有一个跟铁轨一样的东西,自己的车是沿着一个车辙在往前行动。自己的方向盘从无级转向变成了有级转向,能感觉到在车道中间的地方一个阻尼,需要加一些力气才能向左或者向右偏离,就好像从一个车辙里面开出来的感觉,而只要不施加主动的力量,方向盘就如同带地弹簧的玻璃门一样,有个固定的位置。

这个功能也还挺好用的,对于我的帮助是,我发现了以前我开车习惯性的向左偏,总走在车道的偏左边。每次打开车道保持,车子会猛的向右打一下方向盘,我就知道我又偏在左边了。

我们还没有进入自动驾驶

到这里以前的功能,其实就是标准的六层自动驾驶分层模型中 L1 级别的自动驾驶该有的功能。我看了一下列表,如上功能,到了2020年出产的几乎所有主流厂商都有相应的车型支持。其中最有标志性的就是 ACC 和 LTA 。

形象的来讲,适应定速巡航 在帮你控制刹车和油门, 车道保持 帮你 控制方向盘。所以到这一步,Tesla 或者其他电动车还并没有从功能上有特别之处。但是 Tesla 在功能的 “性能” 上,就我以前开过的各种驾驶辅助功能来说,还是不错的。它的 ACC 是从 0 km/h 到高速度都是可以工作的,它的 LTA (它叫做自动辅助驾驶)也是很稳定,即使在小路上,车道有些断续的时候依然工作良好。

自动辅助导航驾驶

导航两个字就划分了一个时代。

再往后,其实就进入了自动驾驶的深水区了。而直到这一项实现,我们日常常说的“自动驾驶”才算真的实现。而现在,大家离这里还有一段距离。特斯拉的“自动辅助导航驾驶” (Navigation on AutoPilot)  还有蔚来的 NOP 也都在实验中,但是还没有成熟到推向大众市场。

在我自己使用前的任何根据报道的评测并不给这个社会增加价值,就先到此打住吧。期待据说下周开始推送的 FSD 的能有一些可以接触到的飞跃。

自动驾驶让汽车变成未来的 IP 包

有了导航,车就在抽象模型中提升了一个层次,开始有了出发地和目的地的概念, 而把这期间的全都封装和抽象了,让我们不需要去管这些实现细节,只需要告诉他从哪里到哪里。

用一个让非互联网工程师更加迷惑的比方,我觉得在七层网络协议中,没有辅助驾驶的传统的车工作在物理层,现在的有辅助驾驶的特斯拉工作在数据链路层,只有实现了自动导航驾驶(FSD)的特斯莱才可以工作在网络层,就如同一个 IP 包一样,给定一个 IP 地址就自己路由过去了,自动驾驶出租车工作在传输层。总有一天,我们可以把集装箱的概念和自动驾驶的概念结合,像使用互联网一样的使用汽车,把一个包裹,或者自己,交给一个巨大的网络。各种服务提供商运营着各种独立的小车,各个小车独立的把货物或者我们自己路由到应该到的地方,然后还能完成组装,直到那个时候,我觉得一个工作在应用层的物流互联网络才最终建成。

为什么 1024 程序员节会让我有些不舒服呢

对于 1024 这个横空出世的节日,我始终心里有些不舒服,却一直说不出来原因。我想,或许开始写些东西可以帮助自己挖掘出内心不舒服的原因。

刻板印象的集中制作和传播

每年的程序员节,关于程序员的一些无厘头的刻板印象,比如格子衬衫秃顶等等,就会被拿出来广为传播。虽然带着些关心的善意,但这些依然属于众多的刻板印象的一种。“ 你的格子衬衫呢?” “你的双肩包呢?” 这些业外人士的善意问题,对于当事人,就有些难以解释,不回应或许是最好的回应。

程序员的形象塑造,跟“处女座”,“女博士” 等等有异曲同工之妙,更不要说更加久远的省份地域相关的段子,比如关于广东人什么都吃的,上海人小气的。所有这些流传的段子的最大共同点就是,只有非当事人才能从中获得传播的乐趣。

程序员这个名字混淆了目的和手段

我一直更喜欢用工程师这个名字。工程师是建造东西的,程序员是写程序的,写程序是建造脑子里的那个东西的手段,却不是目标

作家节是个还可以的名字,写字员节就有些怪怪的。工人节勉强可以接受,但是搬砖员节就有损这个职业的荣誉感了。同样,护士节 vs 打针员节教师节 vs 上课员节等等等等。

对于外行来说,程序员的工作不就是写程序吗?不是的。工程师是需要在脑子里面建造一个软件系统,然后再用手敲出来一些代码,最终实现一个世界上以前没有的功能。

同样会闹笑话的是,很多程序员是自嘲说自己是码农,传播到好多人就把一个自嘲的贬义词当作褒义词来用,一脸无辜的问人家,你是码农吗?时间长了,大家也就接受了。

当然这件事情也不是件大事儿,每年全社会关心一下一个群体,认可大家的工作,工程师们也自娱自乐一下,整体是件好事儿,但就是心里面有些说不出来的美中不足的感觉。

2020年,愿你快快的过去,我们却不要忘记

2020年终于走了。

虽然这一年发生了这么多让人讨厌的事情,在最后几个小时,我却忽然有些怀念,并没有像想象的那样,会兴高采烈任由它离去。

就像我们度过的每一年一样,最终,还要感谢2020!

感谢2020让我们理解,并不是所有的事情都是那么理所当然。

世界并不总是安全的,护照上的签证并不是没有条件的有效,航班并非永远准备好让你搭乘,经济并非只有增长这一个方向,在乎的人并不见得会一直健康,世界也并非永远都充满善意。。。。

如此嘈杂魔幻的2020年,却让我成长的超过过去很多年。静下来思考的时间更多了,对已经拥有的东西更加珍惜了,内心有了一年休生养息的机会,似乎是睡了长长的一个午觉。2021年到来了,是时候起来活动了。

2020年,虽然对我们不好,却弥足珍贵;

2020年,虽然缺斤短两,但浓度爆表;

2020年,我虽然希望赶紧过去,却不希望太快忘记。

2020年,谢谢你。

2021年,欢迎你!初次见面,请多多关照。

2021年、来てください。初めまして、どうぞよろしく!

为什么代码总有可能变得更短?

我曾冒着被程序员世界骂得体无完肤的风险,坚定的论断,越短的代码就是越好的代码

不接受抬杠,不接受反驳。😄 

我经常问自己,为什么代码总能变得更短

同时,为什么把一个5行的代码编程4行基本不可能,但是把几万行的代码编程几千甚至几百行经常可以做到?

这中间的最本质的数学原理是什么?

因为代码的组合是指数级的变化的,而不是线性的。这就是我对这个问题的思索。

本文写给像羊驼,胖子一样的新程序员。

第一个维度:多维度上的概念抽象

这个思考,受到文字发展历史的启发。

最早的文字其实是和现实世界一一对应的,并没有进行抽象。也就是表形,而不是表意。

比如“”字,最初指的不是“🐑”这种动物,而是指自己家里的那一只活蹦乱跳的家伙。如果要记录家里的三只羊,就“羊 羊 羊”。一百只就要画 100 个 羊。

直到有一天,人们的思维进化了,开始把数量这件事情和种类这件事情分在了两个维度上,开始有了数字概念。

这个在语言和人类文明史上是非常重要的篇章,以后再说三只羊,已经不用画三个“羊”了,而只需要说 “三羊” 。三是数字维度,可以指代任何的三(三个苹果,三个桌子),羊指代任何的这个种类(一只羊,10只羊),而把这两个维度一组合,一个新的概念就产生了。

古代的中国人还不善于做这件事情,据考有上百个汉字与车的部件有关,比如 軒轅輪軸轄辕轮轴衡轭軎辖等等。只不过后来大家不用为每个不同的组件都起个不同的汉字来描述,直接用组合词,比如“车轮”,“左前轮” 等等来形容。这样代码量(假设每一个新汉字的引入就是一大坨代码)就大幅减少了。

通过引入维度,然后在维度上排列组合,我们形成了极大的生产力。

比如家里有三只“好看的羊”。如果用造字的思路,可能在羊上面加一个圆圈或者别的什么表示,然后重复三遍。但是现在只需要再借用一个通用的维度,比如“美 – 丑”这个维度,就组成了 “三美羊”。

如此往复,再复杂的概念,也可以轻松的不增加代码的方式表达,比如我家里面有“三白美胖羊”。。。。

通过切分维度,然后组合维度,可以令人惊讶的减少代码复杂度。

比如

map(function, iterable)

就表达了循环的维度,而不管循环什么对象,不管对这个对象干什么,就是代替了 for() 循环的一个模式。

再比如很多设计模式里面的,比如chain of responsibility 模式,就表达了if – elif else 的概念。

这些都是在一个维度上的高度抽象。所以好的代码是维度的组合,而不是为一个具体的功能从头设计一个汉字,并且只用一次就再也不复用了。只用一次的代码一定没有表达一个重要的维度。

这也就是大熊所提出的一个概念,就是一个好的程序员为什么比不好的程序员会有10倍的差异,就是一般的程序员可能知道100个维度(或许会中文接受过大学教育都有这么多维度),而好的程序员知道103个维度,这个好的程序员不是多了3%的能力,而是多了2的3次方 8 倍的能力。甚至如果一个维度超过2个选项的话,可能会是几十倍的差异。

第二个维度:二分法

想象一下有如下代码,我们先考虑简单的平铺直叙,没有if,for这样的控制结构的情形:

def something():  statement0( )  statement1( )  statement2( )  .......  statement63( )

这种初级程序员常写的长长的函数如何变短?如果仅仅用语法糖,或者作弊的方式可能从65行降到60行。但基本上到头了。有没有可能更短?

从纯概念的角度去思考,可以用二分法,改写成如下函数:

def something():    part_0()    part_1()def part_0():    statement0()    ......    statement31()def part_1():    statement32()    .......    statement63()

经过第一步重构,同样的功能,从65行,暂时的增加到69行。但是不着急,继续经过4次拆分,直到每个函数里面只包含两行:

def something():    part_0()    part_1()def part_0():    part_0_0()    part_0_1()........def part_0_0_0_0_0():    statement0()    statement1()........def part_1_1_1_1_1():  statement62()  statement63()

到这一步,我们的65行函数已经被我们扩展成了 189 行。

这就是代码在重构的时候会先变长的原因。

但之后会发生什么?如果在第二层一个函数的 32 个语句和另外函数的 32 个语句还找不到什么共同点的话,在第四层,第五层,第六层,一定能够找到相似的模式。因为计算机领域的新鲜事不多,能够有 32 个完全没有相似度的组合的可能性已经不大。一定有大量的两两相似性。但一旦发现有两个函数做一样的pattern,他们两个就可以合并,比如 part_0_1_1_0_1()  和 part_1_0_1_1_0() 等多个函数可能就可以复用了。这种复用,有经验的程序员可以一眼就看得出来。

如果发生这样的事情,在最下面两三层可能会出现代码坍塌性的减少。如果在第六层发现有三个函数可以复用,就可以减少两个函数(6行),如果在第五层发现有三个函数的功能类似可以复用,就可以减少6个函数(18行)。分支中,越上面发现函数的重用机会,减少的代码越多

如上只是一个纯数学模型。而实际上,代码应该不是一分二,更多的是一分三或者一分五,程序员也不会分解到最后一步再重新回来重构,而是通过经验在第二层或者第三层就已经不自觉的重构了。

这也就解释了为什么一两百很难优化,而几万行代码经常可以崩塌式的的减少总量。就是因为在初期的几百或者几千行代码基本上穷举了这个项目的大多数可能看到的模式,虽然增加了代码量,但是未来的几万行代码已经很少看到新的模式,基本上都重用了最早的那几百行代码,只是不同的层次而已。

这些思考不是今天的思考,在40-70年代的程序员已经开始用函数,封装,面向对象编程,设计模式等等各种方式来实践这些理论,只是今天,深入的思考这些工具和思想对于我们手头的工作的影响的程序员并不是主流而已。

为什么小路相比大路反而不容易堵?

观察了一阵子城市的道路, 得出这么一些经验: 道路网越密通行效率越高。不知道从专业的角度来看,这种民科的观察是否正确。

上海的很多很拥挤的地方,比如黄浦区南京路附近的街区,虽然车辆很多,但是整体还算可以通行,而北京二环或三环,或者上海的世纪大道,张扬路这样的大的道路,反而经常水泄不通。我想原因是来自于几个方面:

1. 道路总面积

虽然老城区都是小马路,大多是双向两车道的马路,但因为密集,道路的总面积占比可能都超过10%,而由宽阔的道路组成的道路,面积可能占比在10%以下,甚至到5%。道路面积的大小,直接决定了通行的难易程度。

2. 右转车道是最重要的车道

路网密度越高,交叉口就越多,右转车道就越多。

比起直行车道,右转车道有更高的通行效率。

按照现行的交通法规,右转可以在保证安全的前提下每天 24 小时不间断的通行,而直行车道每天只有一半时间,也就是最多 12 个小时(50%)的通行时间,在大路口,如果有左转的信号灯,直行分到的总时长可能小于12个小时。虽然直行速度更快,但是这2-3倍的时间差使得右转车道更大的通行能力。

比如曾经,港汇广场前华山路右转到虹桥路的一根右转车道因为施工临时封闭,虽然只占1/4的车道数量,华山路的车一直会堵一公里作用,都影响到了淮海路的十字路口,说明右转车道是最重要的一根车道。

3. 并行处理的左转车道也很重要

左转车道通行能力最差,所以是最大的瓶颈。左转车道通行速度和右转车辆一样慢,通行时长却小于直行车道,所以左转车道是三种车道中最大的瓶颈,它的数量决定了通行的整体拥堵程度。

以九江路为例,短短的从人民广场到外滩的两公里不到的路程,有十几个可以左转的机会,而世纪大道同样的距离可能只有一个到两个左转灯。你可以想象在一个绿灯周期里面,黄浦区的小路网有十几辆车同时在左转,而世纪大道只能有一到两辆。这就如同10位的总线和1位的总线的传输速度的差异一样。

总之,越密集的道路网,就如同毛细血管,虽然总觉得走走停停,到处都是红绿灯,但是实际上很难彻底的堵死。反而动辄单向4车道的宽大的马路,快的时候可以飙车,但是大多数的高峰期几乎一动不动。