Intel 发布 8 核处理器 Xeon E5-2600

Intel 发布了最新的服务器 8 核处理器 Xeon E5-2600,Intel 称该处理器比起现在的 Xeon 5600 处理速度提升了 80%,提供四条内存通道,支持高达 768G 的内存和 PCI Express 3.0,数据传输速度提升三倍。Xeon E5 处理器的缓存也增加到 20兆。

Xeon E5 兼容 Intel 的 Socket 2011,运行频率 2.9G,并可根据需要再提速 900 兆。

Xeon E5 包括 20 个不同型号,从 E5-1620(四核、3.6G、10兆缓存,大约200欧元)到 E5-2690(预计1300欧元),最划算的应该是 E5-2650,8核处理器,2G 以及20兆缓存,大约700欧元。

via pcadvisor

I want to fix programming – 编程改革

本文的作者Jon Beltran是一个西班牙程序员,作家,企业家,大学时辍学专职做游戏开发,他目前主要经营Symnum Systems公司,开发 ViEmu
Codekana 这两个开发工具。

软件编程出问题了。出大问题了。如今的这种编程方式让人如此不堪忍受,以至于让人想吐。数年来我一直在说我痛恨编程。过去的20年,我一直是个全职的软件开发者,目前也是,我没后悔过,我仍然热爱着我可以用编程来做的事情。可仍然,我痛恨编程。

现在的编码方式是一种让大脑自残的方式。编写过程中的每一步,你都可能使程序崩溃——耗尽了内存,访问了错误的指针或引用,或进入了死循环。毫无疑问,编程给人的感觉就像赤脚走在到处是碎玻璃的地板上。一小寸误差的落脚距离,喀嚓,你就损失了半个脚趾头。

这种编程方式的每一步,在每一个语句里,每一行代码里,函数调用或过程里,如果你想写出能用的代码,你必须要考虑整个程序中所有的不同的、可能的状 态。这些状态是不可见的,你不可能给它们明确的定义。事实就是这样。一直是这样。包括现存的所有的语言。这就是为什么100%的代码测试覆盖率也不能保证 代码里没有bug,永远也不可能。这也是为什么差程序员不能变好的原因:根本没有一个结构化的方式让他们考虑到所有这些可能的情况。

(顺便提一下,当遇到了多线程程序时,这种情况会恶化1000倍——不是变得更好,而是更坏。)

问题的原因就在于,代码被写出来的基本方式就是错误的。完全是错误的。你写出了一行行的指令,一步一步,看起来你把程序驱动到了一个想要的状态。但每一步都是相互独立的,只有编译器/解释器能独自的理解它们,你基本上是很容易把事情做错,而不是做对。

函数式编程也许是一种解决方案,我思考了很长时间,做了认真的研究。Lisp,Haskell。Lambda计算。函数式的编程方式确实给常规的命 令式或面向对象的编程方法带来了不少改进。但这仍不能根本解决问题。它仍然是由很多无联系的简单步骤组成,痛苦的计算出输出结果。

这种编码方式关键是什么地方出了问题?关键地方就在于,你不是在表达你想要什么。你表达的是需要采用什么步骤。试想一下,你让朋友从冰箱里拿出一瓶啤酒,一步一步来,每一步都如机器人般的刻板,每一步都不关系到下一步做什么。这是在折磨一个人。极有可能造成灾难性的失败。这跟现在的编程方式是完全一样的。

程序库(lib)能带来有用的帮助,但它们只是为应付上层特定需求的快捷方式。它们解决不了真正的问题。

最近出现了一篇非常有趣的John Carmack所写的文章,讲的是静态代码检查,他引用了一条说的非常正确的微博,是Dave Revell写的关于代码检查的:

“我越用静态代码分析来检查代码,我越发现计算机的强大之处。”

一种观点

那么,应该如何编程?让我们来举个简单的例子:排序。假设你有一个输入序列,让我们称它,呃哼,输入值。假设它有几个元素。现在我们要计算出一个新的序列,称它为输出值,里面要包含有相同的元素,但元素是经过升序排序过的。我们如何去做?

传统的方法有冒泡排序,快速排序,shell排序,插入排序,等。这些都是能够让我们对一个序列进行排序的方法。例如,冒泡排序:

def bubble_sort( input, output ):  output = input    # start with the unsorted list  swapped = True  while swapped:    swapped = False    for i = 1 to length(output) - 1:      if output[i+1] > output[i]:        swap( output[i+1], output[i] )        swapped = True

非常的直接。但如果打算去写出这种排序的代码,你仍然会犯错误!你可能会在交换两个元素时忘记了把“swapped”参数设置成true,或者更典型的,你可能在循环计数时犯下忘记减一的错误。

这就是我为什么要说这种编程方式有问题的原因:排序是一种很简单的可以掌握和描述清楚的概念,可是,用代码去实现它却是复杂的,充满了陷阱,随时造成程序的崩溃,或输出错误的结果。一件难事!

有人可能会写出一种函数式的上面的算法,但相似之处会是非常明显的:没有副作用,可仍然包含完成这个任务所需的很多步骤。递归也许会比迭代更优雅(呃哼),但它并不是本质上更好。

那么,对于一个排序操作,它真正的代码应该是什么样的呢?这多年来,我慢慢总结出,它应该是一种类似这样的东西(请原谅,这些是只是一些伪代码,一种不存在的编程方式):

def sort(input[]) = output[]:  one_to_one_equal(input, output)  foreach i, j in 1..len(output):    where i < j:      output[i] <= output[j]

让我对它做一些解释:这第一行对sort的定义是说,在输出序列和输入序列之间已经存在一种1对1的“关系”。我们下文中会介绍在one_to_one_equal的定义中如何实现这个。这样一来输入和输出序列中确保了相同的元素。它在空间上定义出来可能的答案

第二,关键点,这下面的行指明,对于输出序列中的每一对元素,当第一个的索引低于第二个的索引时,它的值也是较小或相等。这本质上就指明了输出序列上排序过了。它定义了解决方案中的一种可能的答案

这是如此的简单。排序函数只是说明排序的结果,而不是如何做。它描述了输出数据,以及相关的输入数据的特征,它把如何能达到这个结果的任务交给了编译器。

无庸置疑,这存在两个关键问题:

  • 首先,编译器如何能完成这个任务?真的有这种可能吗?在将来的文章里,我将会告诉你这是可能的,真的可能,编译器甚至能知道采用什么样的算法来获得这样的结果。
  • 第二个问题是,如果把它应用到更复杂的情况中?我还是能向你展示,这种方式完全可以应用到任何的所有的编程和计算任务中,它只是一种更简单,更有效,更能避免错误的编程方式!

我曾经想不公开这种技术,将来成立一个公司来实现这种思想,但多种环境因素使我重新思考这个计划。现在我向大家分享了我的认识,想看看事情会如何发展。请关注本系列中的下几篇文章。

尾注

在本系列的后续文章中我会做深入讲解,这里只稍微提一点。这个one_to_one_equal函数在这种理想化的语言中将会是一个“标准库函数”,它多少看起来应该像这个样子,像下面这个基本逻辑:

   def one_to_one_equal(output[], input[]) = c:     c = relations(input[i], output[j])     foreach x = input[i]:  len(c(x,)) = 1     foreach x = output[i]: len(c(,x)) = 1     foreach x(a,b)=c[i]: a == b

让我来解释一下:这第一行的定义是说,在输入和输出序列中的元素间有一个1对1的“关系”集合。

这第二和第三行指明,对于每一个输入和输出序列的元素,在集合“c”中都有一个单一的关系从属于它们,确保了它们的关系是一对一的。这最后的一行指明每个关系上的两个元素都是相等的,确保这两个序列是相同的,只是排序过。

[本文英文原文链接:I want to fix programming ]

工作3.0:雇佣关系新模型

互 联网的崛起令世界的许多方面都发生了深刻的改变,其中就包括了工作。它不仅能够为我们提供工作所需的各种信息,令沟通更加便利,其所带来的更加深刻的变化 是,企业招聘和组织的形式都有可能发生革新性的变化,这种变化,在oDesk的CEO Gary Swart为TechCrunch的撰文中被称为是Work 3.0模式。

背景

传统观念认为,相对稳定的雇佣关系是最好的。但是哥伦比亚商学院的教授Rita McGrath却提出质疑:大家的想法老套,看不到新的现实。新的现实是什么?雇佣关系正在发生急剧变化。是什么样的原因导致这一急剧变化呢?我们在《劳动效率:互联网的下一场大颠覆》中 曾经提到过:一是技术,技术的发展使得物理空间差别失去意义。二是衰退,衰退导致大家不再那么坚定地认为传统工作就是铁饭碗了。“常规”工作市场将一去不 复返。新的现实是全球性的人才可以以快速、精益的方式获得,其规模可伸缩自如。一种新的雇佣模式正在显现:工作3.0。

什么是工作 3.0?

工 作3.0描绘的是这样的一个世界:轻轻点击鼠标,雇主可以接触到全球最好的人才。雇员则更像是自由人,可以随时随地随心所欲地工作。在这个世界里,企业是 根据需要来招聘员工的,无需担心复杂的薪酬组合、冗长的招聘周期以及昂贵的日常开支。在这个世界里,人们不再受限于呆坐在小格子里,只能跟有限的人交流, 而是可以跟世界各地的人沟通互动。

简而言之,就是按需工作、虚拟化、远程化。

机会无限

以 Thumbtack.com为 例。这是一个提供本地服务的工作场所。公司只有少数的全职人员,由于当地的顶级人才需要高额薪水和津贴才能吸引过来,所以他们不招这样的人。相反,他们选 择内部员工轻量化,并从网上雇佣了120名分散在世界各地成员组成在线团队。这种方式使得其业务规模增长了150倍!而且成本非常低。

对于企业来说:在线工作的惊人增长改变了企业招聘人才和组织劳动力的方式,使其可以跨界、跨时区、跨技能组建团队。

对于个人来说:Work 3.0模型之下,工作不在受限于地理距离,在乡下种地的业余程序员也有机会跟北京上海的白领一争高低。可以挖掘到全球性的需求,这个市场要比本地乃至本国的都要大得多。

此外,该模式还可以塑造出一只更快乐更具生产力的全球劳动力队伍。根据Harris Interactive的一项调查,美国虽然现在也有不少的远程办公雇员,但是他们做出的牺牲不小:34%要放弃社交媒体, 25%要放弃智能手机 ,17%需放弃加薪,甚至有5%连配偶也放弃了!工作3.0则不会存在这些限制。

就这一点而言,这一模式对于劳资双方都是双赢的。

工作3.0的未来

在线工作每年以70%的速度持续递增,支撑技术也不断改善,2012年预计会发布600万份在线工作,这 相当于有价值10亿美元的工作是在web上执行的。

从 技术层面来说,过去是宽带接入与协作技术的改进,这些技术使得我们发展到今天的程度。而现在是在线工作机制的深入改进—包括互联网接入和速度的改善,用先 进算法帮助企业和劳动力实现最佳的匹配结对,增强的全球支付系统扫除结算障碍等等。这些都会令在线工作更加普及,也会令后期的接受者也会更加容易适应。一 旦这种接受程度到达某个临界点,在技术有了极大改进的情况下,在线工作将会成为日常生活无缝、集成的组成部分。那时候,一有任务就会想到在线去雇人,其自 然程度就好比是一想了解信息时就“Google”“百度”一样。

传统工作也许再也恢复不回衰退前的水平了,但是在线工作会填补这一空缺,其所提供的就业机会甚至比传统工作还要多。工作3.0才刚刚开始。

问题棘手

前 途是光明的,道路是曲折的。在我看来,工作3.0起码还有以下两个问题需要解决。一是人员培训问题,完成工作,技能、经验、熟悉流程都是不可或缺的,这些 的养成和培训应该由谁负责,由谁来承担相应的成本?二是福利保障,企业不承担的话,由谁去相应承担?还有就是一个开放的工作市场,永远都是那些技高价低者 得,那些新人是否机会均等?

这一切,时间会告诉我们答案。

开源手术机器人

目前主流的机器人辅助手术设备是达芬奇手术系统(da Vinci Surgical System),它每年执行大约20万例手术,大部分是常见的子宫切除和前列腺去除。但达芬奇系统远不完美,它不能移动,重达半吨,成本昂贵(180万美 元)。它使用的是私有软件,即使能负担得起,研究人员也难以修改操作系统去尝试新方法。开源机器人Raven将改变这一切。 Raven最初是加州Santa Cruz分校研究人员为美国陆军研发的,是一款战场手术机器人原型,十分紧凑,轻便而廉价(25万美元)。但更重要的是,它使用的是开源软件,基于 Linux的操作系统允许任何人修改和改进原始代码。美国多所大学的研究人员正在Raven的基础上创造各种新用途:哈佛研究人员尝试让Raven在跳动 的心脏上做手术,UCLA试图增加新传感器让机器人与手术者通信。

文/Solidot