代码的兔子理论


曾经和我一起共事的人都知道,我把源代码库的签入工作摆在非常高的位置。这样做的理由很简单:一旦代码被签入了,代码就有了它自己的生命。签入代码类似于你和其他人分享代码,一旦分享出去,就难以预测这些代码会发挥什么作用。很难,但不是不可能,因为有一种现象实际上是我保证要出现的。

多年来,我和朋友、客户分享过我所谓的、代码的兔子理论。这个理论是指,当你没有留意时,代码会繁殖,同样,当你没有留意时,兔子也会繁殖,二者没有什么不同。这不是说繁殖代码是好的,还是坏的——不管质量如何,这是所有代码的特点。使其优劣的是那些被繁殖的代码。

支撑 代码的兔子理论 的原因在于软件工程师的工作方式。我们很少,倘若有的话,从一个完全空白的文件开始写代码。我们通常从拷贝一个现有文件开始,随后修改以得到我们想要的结果。重申,这和好与坏无关,它仅仅是创建类似于其它代码的某种代码的、最有效方式。

那么,你从哪里去寻找能拷贝的已有代码呢?在同一个源代码库里。你的源代码库虚假的承诺是,它包含的每处代码都是“好的”。为了完成你的任务,就找到类似的代码、拷贝、修改,然后搞定。深入同一个代码库,貌似是代码质量的一种安全机制,但是实际上,这是无法保证的。

当你签入一个文件时,另一个相似文件的出现是不需要太长时间的。一旦出现了同样代码的两个例子,那么第三个文件出现的机会就增加了。一旦第三个出现了,代码就在你的代码库建立了基础,并被视作一种认可模式。毕竟,如果我们在很多地方都在用这种方法做着同样的事情,那么它一定是做这种事情的正确方法……对吧?

...

Amazon 机器学习回顾-机器学习初体验


我拥有丹麦最好的技术大学的软件工程学士学位,我还拥有商业硕士学位。

我把自己看成是相当技术型的人才。我的工作是确保公司的开发人员写出优秀的代码,以及我们选用合适架构方面的决策。我们做着优秀的工作,客户貌似喜欢我们(是的,他们坚持买我们的东西!)。

不过我是一名商人。在商言商,我对机器学习和人工智能(由于某种原因,我认为它是一样的——好吧,换句说法,过去认为是一样的)感到非常激动。我相信这就是未来,我完全想开发下一代应用了“机器学习”的产品,以此来统治世界。

但是我在机器学习、人工智能、深度学习或我看过的、任何其它奇特的术语方面,没有相关经验。

当 Amazon...

为什么是 Lisp?

原文地址(original source):http://blog.rongarret.info/2015/05/why-lisp.html


关于昨天我在 Hacker News 上的一条评论,很多人联系到我,要求我详细解释一下,比如:

我的印象是,Lisp “只是”一种不同的记号表示法。这是正确的,还是我漏掉了什么?我没有看到 Lisp 代码匹配数据结构(我的假设就是,这种匹配就是“为什么是 Lisp”的答案)为什么是重要的------我忽视了宏的重要性,或者还有我没注意到的地方吗?

这个问题的答案太长了,因此我打算写成一篇博文。

答案的简短版本是,Lisp 不只是一种不同的记号表示法,对于思考编程是什么,它是一种本质上不同的方式。主流模式是一种设计,由输出独立构件的、称之为程序(program)的东东组成,它操作其它的构件,称之为数据(data)。当然,每个人都理解程序就是数据,但主流模式是围绕这两种概念之间的、人为的区别。的确,程序就是数据,不过它们只是为某种特别的程序准备的,它叫编译器。编译器编写起来难度高,对于它们而言,这是一个研究领域。大部分人不写他们自己的编译器(偶尔的教学练习除外),使用少数人写的编译器,而这些人玷污了需要编写一个不只是玩具的编译器所需要的精通程度。

Lisp 的模式是,编程更像是和一台机器所产生的一种更宽泛的交互。对于你想让机器做什么的描述,这种行为就是,机器实际上做着你已经描述的步骤、观察结果、然后根据观察去修改你想要机器做什么的描述。在程序被完成和程序本身成为一个构件之间,没有明确的分界线。当然,在...