我的 Tweet

2016.11.08用了一段时间 C# 之后,发现之前习以为常的 Java 花括号规则,把开始花括号放在语句末尾,其实并不如 C 和 C# 的规则。

        void foo(int x) {
          int y = x + 1;
          ...
          ...
        }
        

花括号放在同一行末尾,导致下一行跟这行间距太近,不容易看清楚代码,也不容易看清楚花括号是从哪里开始的。你经常需要特别打一个空行在那里,其实还不如就把花括号放在下一行的开始,这样自然就留出一个空行来,而且更加美观。
        void foo(int x) 
        {
          int y = x + 1;
          ...
          ...
        }
        

2016.11.06本来用 GitX 蛮开心的,结果 MacOS 一升级(就加了 Siri 这 sb),GitX 用不成了。不得不换了 SourceTree 这垃圾,等着 GitX 支持最新的 Siri 版 MacOS……

2016.11.04现代网络心理:古圣先贤几百年前就道出的真理,放在那里没有人提。同样的道理,被现代暴发户拿出来,似懂非懂在社交网络上一转,立马被誉为“感动无数人”……

2016.10.31那天跟微软小冰聊了几个小时之后,发现人们以为它能在某种程度上理解人类语言,其实是一种错觉。如果你相信小冰能跟你对话,由于“自欺欺人”的心理作用,你总是能“发掘出”看似有意义的对白,然而其实大部分的对话都是鸡同鸭讲,天马行空。小冰其实并没有对输入进行语法分析(parse),不知道句子的结构。它的工作方式跟十年前我放在水木清华上的聊天机器人(当时红极一时的 helloooo),几乎没有什么两样,只不过小冰的语言远不如 helloooo 那么有“人格魅力”。当年也有很多人找 helloooo 聊,甚至以为它理解他们说的话。小冰和 helloooo 其实只能对句子里的关键字或者模式做出简单的反应。只不过小冰使用了更多的数据,所以产生反应的关键字或者模式多一些。然而本质上,这两者都是一样的,完全没有任何智能可言。跟小冰对话,经常是鸡同鸭讲,天马行空,因为它本质上就是一个对于句子的搜索引擎而已…… 有人说小冰里面含有机器学习和自然语言理解的成分,然而通过几个小时的对话,我发现它完全可以用跟 helloooo 一样容易的方式(正则表达式匹配)实现。就算他们真的用了机器学习,那其实是没有必要的。简单的模式匹配,能达到一样甚至更好的效果。其他的对话系统,比如 Siri, Cortana, Google Assistant 之类还要更差一些,基本没有对话可言。
(以上内容纯属个人观点,不代表微软公司,也不包含任何确切技术细节。我完全没有看过小冰的实现方式,只是作为普通旁观者说话。)

2016.10.28微软小冰都知道我了,😓

2016.10.28跟同事讲了一下电影『Stardust』的剧情,记忆犹新,很有教育(而不是说教)意义,所以在这里简介(剧透)一下:在一个被城墙封闭起来的小城里,有个穷小子在追求一个女孩,可是女孩瞧不起他。这时候天上掉下来一颗流星,女孩甩他一句:“你去把这颗星星给我捡回来,我就嫁给你!”没想到这年轻人竟然真的出发,去找那颗陨星。他躲过看守城墙的武功高强的老头,乘坐巴比伦蜡烛的光作为交通工具,来到一个巨大的陨石坑面前,竟发现坑的中央躺着一个泛着白光的女人,昏迷在那里。“你就是那颗星星!我要把你带回去,送给我心爱的女孩!”年轻人说。于是他用一根魔法绳拴住女人,拖拖拽拽把她往家带。经过千辛万苦和各种艰险,年轻人和星星接近了家乡。一路上发生的事情,给了年轻人很多启发,星星也对年轻人产生了感情。没想到,这颗星星本来是魔法王国国王的宝石项链变成的,是王位的标志,得到它的人就可以成为国王。国王有一个女儿叫 Una,她早年被女巫抓走,变成了她的奴隶。而这个年轻人,其实是 Una 的儿子!最后,年轻人意识到,他对故乡女孩的爱,那种满足她各种刁钻条件的追求,并不是真正的爱,跟星星的感情才是真实的。消灭了女巫,解放了母亲之后,年轻人和星星结了婚,名正言顺地继承了王位,成为了魔法王国的国王。最后他和星星一起升上天空,得到了永恒的幸福……

2016.10.26今天把公司电脑升级到了最新版的 Windows 10,里面自带了一个 Ubuntu Linux。貌似 Windows 提供了一套 Linux API,使得 Linux 程序可以无缝运行于 Windows 之上。在这 Ubuntu 里面用 apt-get 装了 GCC,然后编译了 Chez Scheme。Chez Scheme 编译自己仍然只用了不到 30 秒。看来跟裸机上装的 Linux 真的没有区别…… 这玩意可比 cygwin 强多了 :)

2016.10.25Google 发布了 TensorFlow 之后,人们发现它比已有的机器学习工具还要慢很多,而且也不方便,不成熟。Google 说:“我们会改进的!” 我发现 Google 最近的开源项目都有这个特点:为了拉风发布一些还不如现有技术的东西,然后说我们会改进的!是的,Go 语言会改进的,Kubernetes 会改进的,TensorFlow 会改进的…… 你能改进,别人就不能改进了?一出来差距就如此大,你何时才能赶上呢?要知道,很多顶级的专家,都不想在 Google 工作的。Google 内部有个团队试图做一个超越 PySonar1 的东西,做了好几年,门都没有摸到。结果我后来花一个月做出 PySonar2,他们就完全没有赶上的希望了,因为基本方向都错了。Google 到目前为止已经有太多失败的项目。我总感觉 Google 发布这些开源东西,自己内部都不用的,其实是为了误导外人,拖外面人的后腿,这样大家都赶不上他们了。所以与其等 Google 去改进这些半生不熟,挂羊头卖狗肉的垃圾,还不如去跟随已经成熟,可以实用的技术。

2016.10.11继美国和中国的致命车祸之后,一辆 Autopilot 控制的 Model S 又在德国撞上旅游大巴。Tesla 公司一如既往的否认 Autopilot 负有责任,试图把责任都推到用户头上。随后,德国联邦公路研究所发布了一份报告,指出 Tesla 的 Autopilot 被认为是一种交通危险品(hazard)。Elon Musk 立即在 Twitter 上争锋相对说:“这份报告是没有科学依据的。数据显示 Autopilot 是比人类驾驶员更安全的!” 且不说他的数据根本不说明问题,他之所以张口闭口拿 Autopilot 跟“人类”相提并论,其目的就是误导群众,让人误以为 Autopilot 是一种自动驾驶系统,显示 Tesla 的“技术实力”和相对于其它汽车公司的“领先地位”。其实 Tesla Autopilot 的核心技术是一家叫 Mobile Eye 的公司提供的。Mobile Eye 有自知之明,只称自己的技术是“辅助驾驶系统”(Driver Assistance System),而不是自动驾驶系统。Mobile Eye 的技术还卖给很多其他汽车公司(BMW,GM,Volvo,VW)。这种辅助系统最终还得靠人来操作,它的作用只是防止你把车开出车道而已。Musk 的做法是自相矛盾的,一方面想推卸责任,要求用户手不离开方向盘,准备随时接管;另一方面又招揽责任,为了虚假的名声,把 Autopilot 夸大成自动驾驶系统,引起人的盲目信任,疏忽和犯错。所以 Musk 说 Autopilot 比人类驾驶员安全,就像是在说 V6 发动机比人类驾驶员更安全一样,风马不及。比起一般的误导,Musk 的误导更加严重,他散布的误导信息正在杀人!我不知道他的脑残粉们何时才能醒来 ;)

2016.10.10在 iPhone 上装了一个 Cortana,装了传说比 Siri 和 Cortana 都好用的 Hound,玩了不到两分钟之后就全都删掉了。新的 Siri 被打开,试用之后,又被恢复到关闭状态。我不明白 Apple,微软,Google,Amazon 之类的公司,为什么花这么大力气做这种语音控制的“个人助理”软件,而且很喜欢把它们放在产品“新功能”的显著位置。我发现这些东西的一个致命问题是,说话是一件比较累的事情,所以绝大部分时候我宁愿用手去控制。其次,这些东西对人类语言的理解非常不准确,它们所谓的“智能”其实是识别几个关键字而已,答非所问,让人恼火。大部分时候这些东西能做的,无非是识别语音,然后把文本输入搜索引擎给你一个结果页面而已……

2016.10.08从 Java 进入到 C# 的世界,发现 C# 某些方面是比 Java 好(比如 generics 实现更加完善),然而 C# 比起 Java 却有一个严重的缺失,那就是 C# 的函数没有异常声明(throws ...)。由于没有了异常声明,每一个 C# 函数都相当于 Java 函数加上“throws Exception”,也就是任何函数都有可能抛出任何异常!所以很多时候你就拿不准某个函数调用了会不会出现异常,所以你就经常写“try {...} catch (Exception) {...}”。这样一来,你就直接进入了 Java 编程对于异常处理的最糟情况(参考『编程的智慧』关于异常处理的部分)。

2016.10.07C# 提供的 IDisposable 接口是一个很奇怪的东西,如果不知道如何正确处理,就会像 null 指针一样,传染到很多的代码里面去,无端制造很多的麻烦。微软自己的文档对于 IDisposable 的用法比较含糊,而网络上关于 IDisposable 接口的文档,blog 和 stackoverflow 上的回答,都有很多的误解,每个人的说法都不一样…… 经过一个星期的研究琢磨,我终于弄明白了如何恰到好处地使用 IDisposable,并且把我的发现传达给微软的同事们。

2016.09.18PowerShell 总体说来是个好东西,让广大程序员和系统管理员从“Unix哲学”的桎梏下摆脱出来,不过它也有一些蹊跷的小问题。前几天发现它的 Join-Path 命令会检查被连接的每个路径名在本地机器上存在,如果不存在的话就会报错。这在有远程 PowerShell 的情况下经常出现问题,你在访问远程机器的路径之前,用 Join-Path 构造路径,Join-Path 会检查每个参数路径存在于你本地机器,不在的话就报错。这是错误的作法,Join-Path 根本不应该去检查路径存在。这是因为路径只是一个名字,只有当你需要访问(dereference)这个名字的时候才应该去检查它存在。

2016.09.18听说 iOS 10 有问题,所以先把一个旧 iPhone 5 升级到 iOS 10 试试。发现跟 iOS 9 的那次升级差不多,没看出什么差别。只不过长得更像 Android 了而已。Apple 每次更新都会在头几条提到 Siri,而我每次买到新 iPhone 的第一件事就是关掉 Siri ;)

2016.07.20Autopilot 都搞出这样的事故了,Elon Musk 在他今天公布的“Master Plan”中,却仍然在宣扬 Tesla 实现“自动驾驶车”的宏伟目标,继续迷惑不懂技术的广大群众。Musk 先生,请不要告诉我们你想要做什么,计划做什么,等真的做出来了再拿来给我们看好不好!Autopilot 的“智商”就跟 Siri 一个级别,所以请不要再提什么完全自动驾驶的计划了……

2016.07.20很多人说『Game of Thrones』好看,可我看到第一季的前四集,就再也看不下去了,觉得无聊的要死。于是有同事说,把前两季熬过去之后,第三季就开始好看了。可是前两季这么多集,怎么可能熬得过去。前几集就无聊了,要我怎么相信它将来会好看?不能相信这种鬼话……

2016.07.16出了人命,Tesla 就想推脱说 autopilot 不是自动驾驶,而只是辅助设施。问题是为什么其它牌子的车(奔驰,本田,Subaru)很多都有类似的功能,却只有 Tesla 的这个吹得神乎其神,最后闹出人命呢?这里面 Tesla 有无法推卸的责任。

2016.07.10有些人还在希望 Elon Musk 的 hyperloop 梦想变成现实。其实早就有德国工程师设想过类似的方案,最后由于各种潜在的问题而抛弃了这个想法。要让一个那么长的管子保持千分之一的真空,让人能够安全进出而不漏气进去,遇到各种天气自然灾害而不引起可怕的后果,不要说可不可能,成本上根本就不过关。有人真的在乎那么快的车吗?美国能够建好德国和中国那样的高速铁路,就已经很不错了。

2016.07.07由流浪猫的事情,联想到叙利亚难民问题。欧洲有些国家和美国的奥巴马政府都声称“欢迎难民”。诚然,出于人道主义我们应该帮助难民,然而那只是出于无可奈何。人家都飘到门口来了,总不能见死不救。没有人喜欢看到世界上产生更多的难民,没有人喜欢看见难民到自己家门口,没有人乐意难民到自己家里住。帮助难民本是一种无可奈何的感情,夸大到“欢迎难民”,就很假了。

2016.07.06一位好心的朋友去外面喂流浪猫,把一只受了重伤的猫送去医生那里,发现腿已经烂的不成样子,伤口成了苍蝇的窝…… 状况惨不忍睹,需要截肢。结果抱猫去做手术时,被那猫咬了,两只手都受伤了,需要疗伤,还需要打狂犬疫苗。我也很爱猫,很同情这只猫,然而世界上正在发生的不幸事件太多了。有时候必须要限制自己的付出,保护好自己,让别人的不幸牵连到自己的健康和幸福,就不好了。

2016.06.27很多人貌似对 Elon Musk 把“人类送去火星移民”的计划感到兴奋。我对此的反应是:“好啊,你们都移民去火星吧,把地球留给我!”

2016.06.24在48%投票人的反对下,英国决定离开欧盟,这种牵连许多人命运的决定,是否应该以“投票超过一半”这么简单的方式来决定?到底什么叫做民主?民主是否一定会带来好的结果。这些都是值得深思的问题……

2016.06.23Silicon Valley 第三季,从第8,9集开始逐渐在走下坡路了。主题越来越不好笑,倒像是严肃的“设计学”教材,就像我一直推荐的『The Design of Everyday Things』……

2016.06.21Silicon Valley 爆笑片段:两个码农约会,男的用tab缩进,女的用space,男的用VIM,女的用Emacs,然后就没有然后了……

2016.06.15这首根据 Gotye 的 Somebody I used to know 改编的歌曲 Some Recruiter I Used To Know 非常好笑。简直就是我前些年对 LinkedIn 上 recruiter 的亲身体会啊 :P 所以这些年 recruiter 找我都完全不理了。

Now and then I think of when you first called my number
And when you said you had a job that I should try
Asked myself if you were right for me
But you said that we should have coffee...

2016.06.15太爱省钱是一种非常不好的习惯,甚至是一种邪恶。世界已经快被这些美国,中国的省钱狂们给毁掉了。

2016.06.15当我批评美国的资本主义压迫和剥削的时候,有人喜欢把我当成所谓的“社会主义者”(其实那叫斯大林主义),会嘲讽我说“朝鲜人民欢迎你”之类的。很多人不理解美国社会,以为美国已经进化到超越资本主义,达到了为人民谋福利的阶段,其实它远远没有,反而对人民越来越残酷了。喜欢提朝鲜的人们不理解的是,世界上其实有很多比美国制度友好先进的国家,但朝鲜当然不在其中。很多欧洲国家,以及美国的邻居加拿大,在社会制度上都比美国要好。

2016.06.14偶然在朋友圈发现一个百度自动车项目研究员的讲座,里面出现了我在博文『我看自动驾驶技术』里面提到的自动车将会遇到的各种难题,例子都几乎一模一样。他的讲座比我的博文晚了两个月的样子,看来我的看法还是引起了自动车研究者们的高度重视的 :P

2016.06.07有人看了我最新的『Swift 语言的设计错误』,问我:“你说 Java 只有 reference type,但是根据 Java 的官方文档,Java 也有 value type 和 reference type 的区别的。” 由于这个问题相当的有趣,我另外写了一篇文章来回答这个问题。

2016.06.07有不止一个人指出我文章里有错别字,说“拥鳖”应该写成“拥趸”。可是如果你把“拥鳖”和“拥趸”输入到 Google 会发现“拥鳖”得到比“拥趸”多十倍的结果。俗话说,文字无所谓对错,错别字用的人多了,就成了对的 :P 而且我很喜欢“拥鳖”里面的“鳖”的发音和它包含的贬义,所以就留着继续用了。

2016.06.06资本主义如何阻碍技术的发展:1)由于公司都是唯利是图,在市场上胜者为王,所以可以肆意吹嘘自己本来很蹩脚的技术,甚至用蹩脚的东西统治技术领域。优秀的技术失去市场,难以抬头。 2)由于人们需要所谓“事业”来养活自己,也有些人贪得无厌,所以总想占据公司里的高层职位,然后瞎指挥。把自己不好的技术吹成好的,起一些高大空的新名词,让真正的专家为自己的想法服务。

2016.06.01一直觉得以下的格言,对于看透一个人的本质有重大的指导意义。我的一生中遇到了挺多第一类人,这类人进入领导岗位,会造成很大的危害。我希望在将来遇到更多的另外三种人。

Men are four:
He who knows not and knows not he knows not, he is a fool-shun him;
He who knows not and knows he knows not, he is simple—teach him;
He who knows and knows not he knows, he is asleep-wake him;
He who knows and knows he knows, he is wise—follow him!

2016.05.29我知道有些人在背地里议论我,说我没有“成功”。其实我根本就没有在乎过所谓的“成功”。就像爱因斯坦说的:“Try not to become a man of success, but rather try to become a man of value.” 不要试图做一个成功的人,做一个有价值的人。显然,我是有价值的。

2016.05.26等了一年多,HBO 的电视剧 『Silicon Valley』 第三季终于上映了。跟前两季一样扣人心弦。把硅谷公司的各种穷形尽相,职场纠葛,都表现讽刺得淋漓尽致,却又幽默得让人哈哈大笑。我感觉编剧和导演的价值观跟我非常接近,而且非常有才,强烈推荐这部电视剧。

2016.05.26某大银行的一个 director 发 email 跟我说:“你要想让程序员们听你说话,你必须自己首先在商业上成功。” 换句话他的意思就是让我闭嘴,因为程序员只听有钱人的话。这显然不是事实,因为虽然我的银行总资产仍然是负数,很多高明的程序员却一直在听我说什么,并且从中汲取养分和力量,他们很尊敬我。这位 director 没有明白,一个人的价值不是看他得到了多少,而是他付出了多少。

2016.05.25有时候有人问,为什么我不让人评论我的博客或者微博?我正直仗义,说的都是实话,怕谁呢?可是你想想,Knuth,Friedman 等人的书和主页,为什么他们不让你评论呢?某人甚至连 email 都不看的 ;) 所以我不开评论的原因也是类似的。

2016.05.25是谁提出了 pair programming 这种做法,是谁在某些公司推广并且强制执行它,我想揍他一顿。

2016.05.25带妹纸一起看了『美国队长』。不幸的是没有买到小场的宽敞豪华座,只好去看了大场的 3D IMAX 版。3D 电影看起来其实不如普通的,画面感觉不真实,动作快了就看不清楚。而且塑料眼镜材料很次,各种扭曲反光,眼睛挺不舒服。最后我完全不知道这个片讲了什么故事,只觉得貌似一伙超人,因为某种误会打起来了,还挺好玩的。妹纸听了我的观后感,笑了 :)