为什么糟糕的科学代码战胜了遵循“最佳实践”的代码

我刚刚读了“科学代码的低品质”,它声称科学家写的代码比有“软件工程师”参与的代码要更糟糕些。

我所处的工作环境有十多年了,那里由具有数学或物理学背景的人统治,他们经常缺少“软件工程师”的认识。

最大的麻烦总是由大多数把自己定位成程序员的人造成的。我愿意承认我至少造成了一堆麻烦,至今没有清理完。也有一些其它的大麻烦,代码幸运地被浪费了,这意味着对我老板的伤害被限制到了浪费在我自己工资上,没有给其他人的生产效率带来负面影响。

多数情况,我承认有些忏悔。我宁可尽力保持事情足够简单,我不认为我已经做到了,在过去的5-6年里,有些事情让很多人很好笑地看着我,他们已经把一天最美好的时光花在了我的带有小聪明的产品处理上。

我认识一些没有明确忏悔过的程序员。人们觉得他们滑稽,他们却认为自己是对的,其他每个人都是疯子。

同时,那些“不是”程序员、但更多是个数学家、物理学家、算法设计者,科学家的那些人,你给他们列举了如下种类的罪状:

Google拥有我的大部分邮件,因为它拥有你的全部邮件

大约15年来,我一直运行着我自己的邮件服务器,用于我的所有非工作信函。我这样做是为了让我的邮件保持自治、控制和隐私,防止大公司拥有我的所有个人邮件的拷贝。

数年前,我非常惊奇地发现我的朋友Peter Eckersley——一名对隐私非常在意的朋友,是EFF的技术项目总监——使用Gmail。我问他为什么愿意把他的所有邮件给Google做拷贝。Peter说,如果你所有的朋友在用Gmail,那么无论如何Google就有你的邮件了。任何时候我给使用Gmail的某个人发邮件了——任何时候他们给我写邮件——Google就有了那封邮件。

有了这次谈话,我就一直想知道Google究竟拥有多少封我的邮件。本周,我写了一个遍历我个人收件箱里的、自从2004年4月(那是Gmail开始的时候)以后的、所有邮件的小程序来找出来。

回答这个问题的一个挑战是有很多人,比如Peter,用Gmail阅读、撰写和发送邮件,但是他们配置Gmail使用一个非gmail.com的“From”地址来发送邮件。为了处理这种情况,我的程序查看每个消息头,它记录了在到达我的服务器的路上都有哪些电脑处理了这条消息,然后筛选出经过了google.com、gmail.com或googleemail.com的消息。虽然我通常会过滤它们,我的个人收件箱包含了通过很多邮件列表(mailing list)发送过来的邮件。由于这些邮件列表经常“隐藏”消息的真正来源,我从列表中排除了 标记为来自于 使用了“Precedence”头(通常是不可见的)的消息。

下图,红色表示我的个人收件箱每周的邮件数量,蓝色表示来自Google的子集。因为我每周收到的邮件数量变化比较大,我包含了一个LOESS“平滑线”【注1】来显示一个基于数周的移动平均线。

邮件中的Gmail占比

目测图表,答案好像就是那样,尽管它在变化,我的收件箱有大约三分之一的邮件来自于Google!

需要注意的是,这是我的所有个人邮件,包括来自于银行和零售商的、自动的和电脑生成的邮件等。虽然Google没有这些消息,它也说明了我的真正“个人的”邮箱来自于Google的比例很可能相当高了。

...

2048,成功和我

过去的几周对我而言是一次狂野之旅。在3月份,我为了娱乐开发了一款名叫2048的游戏,在GitHub上作为开源软件发布了。在接下来几周里,它出乎意料地成为世界级的成功,它已经被2千3百万用户玩过了。

这段时间已经成为我生活当中最令人激动的一部分,也是压力最大的。知道数百万人在玩,且享受你开发的东西是一种非常棒的感受。对于很多人(包括我)来说,它给了你继续创造新发明的动力。同时,当你在世界出名时,你不得不面对一整套新的挑战。你得到的关注和人们开始期待的东西会变得巨大,如果你从来不必处理它们的话。

本文,我将分享这种体验的情况,以及在个人和专业层次上,我是如何处理的。我也要解释引导我改变去开发这个游戏移动版的历程。

真的很长,不过我希望本文能提供一些有意义的观点,希望对可能面对相似问题的人有所帮助。

如何开始的

我在一个周末开发2048,纯为娱乐。我痴迷于两款其它游戏,教1024!2048。我都爱玩,我想创造我自己的版本,有不同的视觉样式和更快速的动画,只是为了看看我能否做到。当时,我不知道Threes,所有其它游戏(包括2048)都起源于它。

Asher VollmerGreg Wohlwend,它的发明者,已经在里面倾注了大量时间和努力。他们最近就他们游戏体验克隆版的流行程度表达了他们的沮丧。我理解他们的感受,我对他们投入到开发Threes中的大量工作和热爱表示巨大的感激。2048感激它的存在。

...