超级程序员神话

上周我收到了一份邮件,一份让我心绪不宁的邮件。

邮件的作者基本上认为我在博客里和Pluralsight视频节目里谈论的都是非常浅显的话题,但发现我却虚伪的倡议面试内容应该设计的复杂些,应该为“真正的程序员”或超级程序员而设计。

这份邮件基本上表达了这样一种观点:开发应用程序的都不是“真正的程序员”,“真正的程序员”编写的是有难度的东西,跟复杂的数学算法相关的东西。

真有超级程序员吗?

超级程序员

我并不认为这种对编程和软件开发的认识和理解是他独有的,或是个别现象。甚至IT精英Scott Hanselman也称呼自己并且认为自己是欺世盗名的骗子

Scott Hanselman的这篇文章让我产生了共鸣,因为有时候我也有和他相同的感觉。

有时候,我很怀疑,我是否真的有能力解决真正有难度的问题。

让我斗胆猜测一下,我猜测大部分的程序员在思想里都会某种程度的承认,承认自己只是一个普通的程序员,但这世界上确实有一些超级程序员,他们在做一些诸如控制硬盘缓存或为谷歌建立搜索索引等非常复杂的算法问题。

好吧,不否认,当然会有一些程序员正在写一些代码处理各种你我都不能理解的复杂问题,但他们跟我们这些余下的程序员究竟有多大区别呢?

在一个为企业开发应用的程序员和一个为谷歌写搜索算法的程序员之间,或和一个开发用来控制读写头从磁盘扇区读取数据的物理操作的芯片程序员之间,有真正的不同吗?

在我回答这个问题之前…

让我们花几分钟时间谈谈他们所解决的问题。

你曾经遇到过的需要去解决的最有难度的问题是什么?

你是如何着手去解决这些问题的?

到最后,当你真正的解决了这个问题时,你是否觉得好像不是那么难?

当你回顾这段经历,回头来看这个问题时,你是否会发现,现在看来,它其实是个非常简单的问题?

你有很多疑问,我知道——可是我希望你在继续往下阅读前真正花时间思考一下这些疑问。

理解“认知”和“现实”之间的差距。这是非常重要的。很多的程序员,包括我在内,都经常分不清两者之间的区别。

大家都知道,我们对一个问题的认知经常跟这个问题的真实情况有很大差距。当我们还不理解一个问题时,我们会把这个问题想象的比它本身要复杂。但是,一旦我们理解了这个问题,我们会发现这实际上是一个很容易处理的问题。

让我来给你一个现实的例子。看一看下面这个数学公式。

复杂公式

我们可以把在看这个公式的人分成两类人。

  1. 对高等数学有相当了解的人,他们能立即认出这个公式,能马上知道它是干嘛的。
  2. 从来都没见过这样一堆符号的人,他们的即时反应会认为这是某种复杂的算法,可能需要几年的时间才能弄懂。

也许我说的并不很准确,但我想说的就是,在“会的人”和“不会的人”之间有一个清晰的分界线。

我可以用你已经熟悉的知识对这些符号做一个简单的解释。

准备好了吗?

这个公式跟下面这段代码是等效的:

var total = 0;for(int i = n; i <= m; i++){   total +=  f(i)}

这说明了什么?

我想说的是,在数学算法中,在编程中,在我们的日常开发工作中,只有少数一些问题能称得上是有难度的问题,而且通常这些比较难的问题都能够分解成更小的问题(有时候需要多次分解),直到最后你需要处理的只是一个很简单的问题。

我的这个博客的目的,我的Pluralsight视频节目的目的,基本上都是告诉大家要把复杂的事情简单化。我自己的生活也是这样。

如果你想成为一个成功的程序员,你必须自己要学会如何做到这些,它会是你能学到的最重要的一门技能。

那么,现在来回答最初的问题——不,我不相信这世上存在超级程序员。我不认为在企业应用程序员和那些被视作在研究真正复杂问题或“真正的编程”的程序员之间有什么不同之处。

但不要误解我的意思,不要以为我是在说我不相信某些程序员会被其他程序员在技能高出好几个数量级。我敢大胆的说,真正优秀的程序员在效率是会比普通程序员高出10倍甚至20陪。

我想说的是,我们有一个习惯,总是忘记:当问题被分解成更小的问题后,所有的问题都变得如此简单,而且所有的问题都能这样去分解。

我想说的是,这个问题是一种能够阻挡你进步成为一个真正优秀程序员的问题,这是由于你自己的认知上错误导致的,你会把目前看上去复杂东西当作是不可理解的。

我想说的是,当你在开发一个对自己来说似乎是很容易的企业应用时,你可能忘记了,对于那些对编程一无所知的所有你的朋友和家人来说,这是一个多么困难或几乎不可能完成的事情。

仍然不赞同我的观点?

很好,你有这样思考的权利。

但我给你准备了一个难题。你想必一定是知道某位“超级程序员”了。也许你就是其中之一。如果是这样,我们要听你说说。请告诉我们一个非常有难度以至于其他的人有不可能理解的复杂问题。

我并不是在挖苦你。我是很严肃的,如果你能够证明我错了,那就证明给大家看。我至今还未遇到过一个不能分解成简单可理解的小问题的难题。

[本文英文原文链接:The Myth of the Super Programmer ]

苹果开始清理 App Store 中恶意抄袭应用

抄袭自古以来就是一个让人非常头疼的问题,在APP Store中也是如此,不知道有多少优秀的应用被垃圾应用所抄袭,从图标到名称到内容,应有尽有。

虽然苹果对向App Store提交的应用很严格,但这些恶意抄袭的垃圾应用仍然存在很长时间了。好在苹果现在终于下定决心大力整治APP Store了,这些抄袭别人的垃圾软件将会被清理出APP Store,最狠的是如果你的程序图标与其它程序类似的话,连审核都不会给你通过了。

苹果开始清理APP Store中恶意抄袭应用

福祸未知 VMware 加入 OpenStack 被延后

北京时间8月30日消息,OpenStack董事会本周聚集在一起,进行了一项令人惊讶的活动:投票是否接受VMware加入这个日益流行的云计算俱乐部,VMware曾被认为是Openstack的竞争对手。

看来VMware是否能加入该组织,仍然需要等待。

OpenStack董事会在本周二晚上会面,但并没有安排时间来考虑VMware的申请。VMware可能需要等到OpenStack的下次定期董事会议,即10月19日。在那之前,董事会可能会重新召开特别会议,但目前还没有相关的正式计划。

有些人期望看到VMware为OpenStack的两个领域带来贡献,包括虚拟网络(这是由VMware所收购的Nicira的工程师引领的)以及OpenStack与VMware的Cloud Foundry平台即服务(PaaS)工具的整合。问题在于VMware是否会进一步将其ESX管理程序整合到OpenStack项目中。这样做的话,将使VMware用户更易于访问非VMware公共云,消弱了VMware一直在建立的vCloud生态系统的“势力”。

VMware公司云服务副总裁Matthew Lodge并不完全这样认为。他表示,该公司申请加入OpenStack的目的很简单:服务于客户。Rackspace和AT&T(两个主要OpenStack贡献者)都是VMware和Nicira客户,他指出其公司将继续支持Nicira和Cloud Foundry与OpenStack的整合。对于增加的ESX支持,他表示,这还说不准,“在未来,我们可能在这个领域做更多工作。”

Diversity, Ltd.公司行业分析师兼博客作者Ben Kepes表示,他认为VMware加入OpenStack是VMware几个月前以12亿美元收购Nicira得到的剩余利益。

Lodge在其博客中,将OpenStack以及其他开源项目CloudStack和Eucalyptus描述为“丑女三姐妹(three ugly sisters)”,他表示这是因为开源公司自称比其他公司都更加“开放”。Lodge表示,VMware一直在拥护开源,其对SpringSource和Rabbit MQ通信服务以及Cloud Foundry的收购可以说明这一点。今年早些时候,VMware收购了DynamicOps,这可以帮助客户配置多个云环境。Nicira能够跨多个管理程序运作同样也是朝这个方向。但Kepes表示,VMware如果完全拥护OpenStack以及在该项目中支持ESX,这将需要该公司进行重大的转变。他表示:“我们看到了各种收购,我们看到他们在谈论,但我们并没有看到真正的行动。”

Lodge表示,即使ESX支持扩展到OpenStack中,这也并不会削弱vCloud的生态系统,“我们相信我们有一个更好的答案:更好的整合,更多的功能,”他表示,VMware和vCloud肯定会与市场上的其他产品竞争,包括OpenStack公共云。

在本周的VMware大会上,即将上任的首席执行官Pat Gelsinger在其主题演讲中强调了VMware将致力于多管理程序支持。Forrester云研究人员James Staten相信他所说的,他相信VMware将致力于鼓励在OpenStack中使用vSphere和Nicira技术。OpenStack的其他部分(尤其是vCloud)代表着核心竞争,这对于VMware而言将非常棘手,他表示:“但只要vCloud和Openstack在vSphere上运行,并使用Nicira网络,他们将会在更高价值业务进行竞争,在高科技市场的经典合作竞争。”

iPhone 5 耳机曝光 采用漏斗形设计(图)

iPhone 5耳机正面
iPhone 5耳机正面

iPhone 5耳机侧面
iPhone 5耳机侧面

北京时间9月2日上午消息,苹果将于本月12日举办发布会,外界普遍预计苹果此次将发布下一代iPhone。越南网站Tinhte本周公布了一段视频,其中显示下一代iPhone的原装耳机设计将发生变化。

苹果当前原装耳机采用的线控和麦克风于2008年推出,而耳机本身的设计则可以追溯至2006年。不过随着苹果下一代iPhone的发布,耳机的设计可能会发生较大改变。

Tinhte表示,这一耳机由越南富士康工厂制造,而耳机线上标明“由加州苹果设计。越南组装。”的字样。这款耳机漏斗形的模具设计非常新颖, 而耳机扬声器则几乎不可见。Tinhte表示,这就像是“整体集成的单个单元”。而尽管耳机看起来似乎采用了苹果的一体成型工艺,但仔细看仍能看见接缝。

值得注意的是,耳机线上并未提供线控,而此前线控对于iPhone耳机来说必不可少。这样的设计也使其他耳机厂商易于仿制,不过质量将是苹果原装耳机的一个优势。这条消息的真实性将在2周之后得到验证。