扬尼斯定律:程序员的开发效率每6年提高一倍

我不断的听到各种关于“软件危机”的警言,以及关于软件开发缺少过程规范的批评。我做编程工作超过15年,我认为这些言论基本上都是错的:我确信我能在很短的时间里用如今的开发工具复制出15年前一个不错的程序员开发出的东西。

模仿摩尔定律Proebsting定律(这个不像是预言,更像是挑唆),我要给出的定律是:程序员的开发效率每6年提高一倍。

为了证实我这个定律里的数字部分,请注意下面我的发现。在1972年的《在分解模块化系统中用到的规范(On the Criteria to Be Used in Decomposing Systems into
Modules)》这篇经典论文里,作者David Parnas写道:

KWIC索引系统接受一个有序的多行信息,每行由有序的多个词组成,每个词由有序的多个字符组成。每行信息都能通过把第一 个词挪到行尾这样“循环变换”。KWIC索引系统的输出是每行内容都通过字母顺序经过“循环变换”后的新行。这是一个小系统,如果不考虑特殊情况(海量数 据,没有软件支持),这样一个系统由一个中等水平的程序员来开发,能在一到两周时间里做出来。

现在是2003年,如果一个程序员不能在一或二个小时——而不是1972年的一至二周——做出这个系统,我会认为他是个不可接受的程序员。这就建立起了一个31年里开发效率提高40倍、或者说每年12.5%提高的公式,由此而得到每6年开发效率提高一倍的结论。

请注意,没有一个现代程序员所使用的开发工具是专门针对KWIC系统的需求的:这个问题需要“从头解决”,所以,尽管跟1972年的时代不同,我们仍然可以这样比较。

这种巨大的进步无疑是由于可复用的软件代码、更好的开发工具、更好的编程语言,更好的计算机教育等因素叠加的结果。但同时也是使用更快的机器、允许我们忽略掉底层的操作、使用更便捷但效率稍微次一点的解决方案的结果。

[本文英文原文链接:Yannis’s Law: Programmer Productivity Doubles Every 6 Years ]

iPad Mini 成真?传今年9月发布

从去年(2011年)开始,市场就不断传出苹果可能发布iPad Mini的传闻,随着Google在I/O大会上和华硕合力发布最新运行Android Jelly Bean操作系统的7寸平板电脑Nexus 7,又掀起市场对于苹果是否发布7寸屏幕iPad市场的讨论,美国投资银行太平洋皇冠证券分析师Andy Hargreaves认为7.85寸屏幕iPad Mini今年第四季就会发布,估计入门型配有8GB NAND闪存,价格初估299美金,利润可达31%。

iPad Mini或许会吞食部分现有iPad的销量,399美元的iPad 2市场最有可能受影响。同时预估2012年12月可卖出1,000万台iPad Mini,明年全年预计可卖出3,520万台,只不过每卖出4台iPad Mini,就会影响1台iPad的销售量,另外预计2013年的iPad销量可增加至9,160万台。

由于乔布斯曾对外发表不看好7寸屏幕市场,库克(Tim Cook)是否会为了持续扩大市场而推翻这个立场呢?谣传苹果已在总部测试7.85寸平板电脑,包括三星也在今年三月对媒体表示最快今年九月就会发布。

关于闰秒,你了解多少?

2012年6月30日,也就今天晚上,时间会多出现一秒,也就是我们所说的闰秒。我不知道大家对闰秒的了解有多少,所以写下这篇文章。

背景知识

闰秒是在在UTC(中文“世界标准时间”或“世界协调时间/英文“Coordinated Universal Time”/法文“Temps Universel Cordonné”)是基于Atomic Clock(原子时钟)的一种时间,向太阳时(Solar Time )对齐的一种方法,因为太阳时是根据地球公转来计算的。所以,1972年制定的UTC为了确保其时间相对于UTC的时间误差不能超过0.9秒,因此在过一段时间后需要加一秒。下图是有UTC以来闰秒的调整表(来自Wikipedia闰秒的中文词条

 

从上表中我们可以看到,从1972年到现在,在这四十年里已经进行过25次的闰秒调整。闰秒是在每年6月或12月的最后一天的最后一分钟进行跳秒或不跳秒。是否加入闰秒由位于巴黎的国际地球自转和参考坐标系统服务(IERS – International Earth Rotation and Reference Systems Service)决定。如果决定加入闰秒,那么这一秒是被加在第二天的00:00:00前的,也就是说,时间会出现23:59:60的情况,然后才是第二天的00:00:00。如果是负闰秒的话,23:59:58的下一秒就直接跳到第二天的00:00:00了。现在,所有闰秒都是正闰秒

计算机处理闰秒

那么,对于我们的电脑系统来说,怎么处理这个闰秒呢?一般来说,我们需要为我们的电脑系统配置UTC时钟,并通过NTP (Network time protocol)来进行时间同步,NTP服务器会一级一级地下发闰秒事件通知直到最边缘的NTP服务器,然后NTP服务器就会把闰秒通知发给客户端的操作系统,由操作系统来处理闰秒通知。

虽然闰秒调整对普通民众的日常生活不会产生影响。不过,这个问题将影响部分开启ntp服务的Linux操作系统——会导致Linux内核Crash!Linux kernel是在2.6.18-164.e15之后的版本中解决了这个问题。换句话说,Linux kernel低于2.6.18-164的Linux系统,无论是什么公司的Linux都将受到影响。(今晚过后大家可以查看一下你的Linux系统日志,看看闰秒有没有发生)

可以参看下面的bug描述:

那么,我们的操作系统是怎么处理正闰秒通知的?通常来说有三种实现:

  1. 后退一秒。
  2. 停止一秒。
  3. 真正的增加一秒。

懂编程的人一眼就能看出来,前两种方式是以一种Workaround或Hack的方式解决这个问题。第一种方式会导致一些基于timestamp的 消息通知乱序了,而第二种会导致出现两个一模一样的timestamp。最后一种不会出现timestamp的问题。对了,你还记得以前那篇《你确信你了解时间吗?》的文章吗?

最后,说说Windows,Windows  Time Service不支持闰秒通知,所以,当闰秒发生的时候,你的Windows上的时间会比实际时间快一秒钟,这需要等下一次的时钟同步才会完成修正。你可以查看这篇文章:http://support.microsoft.com/kb/909614/en-us

 

本文转载自:酷壳 – CoolShell.cn

国行用户有望年底入手诺基亚 Apollo

nokia_windows_phone_8_proto

Windows Phone峰会上揭示了首批四家Windows Phone 8厂商:诺基亚、华为、三星和HTC。这四家厂商中HTC已经被爆出将会上市“Rio”、“Accord”和“Zenith”三个Windows Phone 8系列,华为也被曝出将会推出Ascend系列。但由于诺基亚和三星的Apollo计划的消息却为数不多,因而也非常的令人期待。

根据WPDang探子来报,诺基亚Windows Phone 8计划已经提速,与以往在全球范围内分批上市计划不同,这一次诺基亚Windows Phone 8终端有望在今年年底,在全球范围内进行铺货,其中中国市场将会从此前的“第二”、“第三”甚至更为靠后的批次提前至首批出货的榜单当中。

那么诺基亚的首批Windows Phone 8终端到底是什么样呢?

Windows Phone峰会上,“Microsoft-Virtual”和“Juggernaut–Alpha”两款Windows Phone 8原型机登台亮相,从媒体公布的图片可以清楚地看到,Juggernaut–Alpha清楚地印有“NOKIA”的标示,而这款原型机被认为和 iPhone 4在外型上非常的相像,究竟是否是隐晦的表达诺基亚拥有堪比苹果的工业设计水平,无人知晓。

Nokia-WP8

WPDang曾于今年4月份发表了《诺基亚门下Windows Phone 8初出茅庐的1865谍照》的 文章,文章中援引了Phone Arena曝光的一张由网友提供的诺基亚Windows Phone 8的海报模板图片,海报上清楚的表示这款设备为诺基亚的Windows Phone 8设备,并且沿用了一举非常具有魄力的广告语“Breaking the Limits since 1865”(诺基亚成立于1865年)。

而更令人为之惊奇的是,这款神秘的Windows Phone 终端是为诺基亚宣布牵手微软加入Windows Phone不久之后的一段诺基亚官方视频流露出来的视频中出现的其中一款,大致时间可想而知。而这款神秘设备也已经出现在了诺基亚申请的一项专利号为US D655,698 S的专利文件中,那么是否意味着这款设备确定为Windows Phone 8设备无疑?

WPDang/苏扬 撰写

如何进行需求的分析与挖掘?

其实这个问题不应该成为一个问题,因为一个真正意义上的的项目经理是不需要去做需求分析的,而应该是让专职的需求分析人员去做。我的理 解,项目经理在工作过程中,与需求沾边的工作应该是对于项目范围的定义:确定哪些是在项目中要做的,哪些是不用去理会它的,清楚地定义项目的边界。除此之 外,其它的工作都应该交由专门的人员去进行专业的信息采集与处理。但大家都知道,在实际的工作中,项目经理往往是既当爹来又当妈,一个人做N个人的活,尤 其是当项目不大的时候,项目经理更是要一马当先地什么都做,几手都要抓,同时,老板对你的期望又是几手都要硬。因此,从现实的角度考虑,这个问题还是要探 讨一下的。

记得我刚从学校毕业到公司的时候,曾无知地告诉老板说我对需求分析还是很有经验的,老板当时就笑着对我说,其实要想成为一个有经验的需 求分析人员,起码要有十年的工作经历。当时只是觉得老板嫌我刚出道罢了,但做了一些项目之后,我对于需求分析这件工作有了更深刻的认识,也清醒地了解到需 求分析真不是一件容易做的事。

首先,是我们对领域知识的缺乏。客户所在的领域并不都是我们所熟知的,这不像是在学校里做课程设计,不是图书馆管理系统,就是学生管理 系统,连蒙带猜也能编出来。行业的多样性必然会导致需求领域知识的多样性,面对这样的困境,又怎么能要求我们在与客户短短的几次交谈中就获取足够的信息来 完成一个复杂的软件产品呢。

其次,客户对需求的理解与传达不足。需求很明显是由客户传递给项目组的。客户在解释需求的时候,有时就会带有很大的含混性,而且客户对 需求的说明不能做到完全的正确。如果是与外国人交流,那信息的损失就会更大。在与外国客户的交往中,英语国家的人可以用母语与你交谈还算是庆幸了,遇到了 母语不是英语的国家的客户与你交谈,那两个人都要非母语进行交谈,双方都够把心里想的东西表达出70%以上就算是非常成功的交流了。同样,分析人员在对需 求进行吸收的时候也会产生误解,一些信息也会被遗漏掉。靠这样获取的需求进行开发,结果是可想而知的了。

要解决上述的问题,似乎没有什么比经验更好的办法了。对于某一行业领域的熟悉,需要一定时间的积累,了解了一定的知识之后,就能更容易 得与客户进行有效的沟通,获取项目中需要的信息。需求对于项目的重要性不用多说,一个项目至始至终都是为了达到让客户满意的目的,满足客户的需求,其实是 一种对需求含混性降低的过程。为了达到这一目的,还有一些称为方法的步骤可以让我们减少对需求的误解:

1.细晰地划分项目干系人(Stakeholder):尤其是分清什么是客户,什么是使用者。在了解需求的时候,我们能从哪些人中获取信息。同时还要注意到,获取的信息是否得到负责人的确认。

2.需求分析会议:与客户的会议当然必不可少。从中尽 可能多的找出不清楚的地方,及时的提出,如果客户允许可以进行录音,不过这一招估计很难做到,大部分时候客户可不想留下自己的话柄。与项目组成员的开会是 为了在组内加深对需求的了解,集思广义,再用点头脑分暴之类的东东,可以发现更多的求知问题。

3.在初始的需求得到后,要对其进行细致的分析,划分功能块及其属性和约束条件。

更多的知识,可以参考温伯格的《探索需求——设计前的质量》。