Objective-C是由科学家、软件工程师Brad Cox于20世纪80年代早期编写的。它的设计方式是将Smalltalk语言的功能特性引入到C语言的编程环境中。iPhone的框架库中的大部分都是用Objective-C编写的,不过因为这种语言被设计为兼容C语言,所以你同样也可以在应用程序中使用C和C++。Objective-C的主要应用平台是Mac OS X和GNUstep(一个开源的自由OpenStep环境)。有许多编程语言,例如Java和C#,都从Objective-C这门语言中汲取了养分。Mac桌面平台上的Cocoa框架极为大量地使用Objective-C,这一框架也被移植到了iPhone上。
Tiobe今日发布了2010年2月份的编程语言排行榜,在上月的榜单中,Go语言增长最多 ;本期榜单我们关注在2009年得到蓬勃发展的另一门编程语言——Objective-C,在年度编程语言评选中,它仅以0.01%的差距落后于Google Go。
2月编程语言排行榜TOP20

2010年2月编程语言排行榜TOP20
请留意排名第12位的Objective-C,在2008年1月和2009年1月发布的年度榜单中,Objective-C分别排名第47和37位。短短三年,Objective-C何以有如此快速的成长?

2002-2009年Objective-C趋势走向
Objective-C的发展历程
与C、C++、Java这样的语言相比,我们可能对Objective-C有些陌生。其实,早在上世纪80年代Objective-C就已诞生。1980年代初,就职于Stepstone公司的Brad Cox发明了Objective-C,Brad当时想打造一门流行的、可移植的C语言与优雅的Smalltalk(关于Smalltalk的语言特性请参考Smalltalk之父的报道)的结合体。
Objective-C是C语言的一个扩展集,以C为基础,并在其中增加了一些重要的特性。Objective-C是讲究实用和效率的语言,使用过C++或者Java的开发者一定会惊叹Objective-C的程序如此简短,一般,Objective-C写成的程序通常不会比其原始码大很多。另外,Objective-C还继承了Smalltalk语言的优雅和面向对象特性,而其经过改造的函式库却不像Smalltalk那样需要过大的内存资源

Objective-C创始人Brad Cox
1985年,被赶出苹果公司的Steve Jobs成立了NeXT公司,致力于开发强大且经济的工作站。NeXT选择Unix作为其操作系统,并创建了NeXTSTEP Toolkit软件包,这个工具包用于开发用户界面,功能强大,其使用的编程语言就是Objective-C。1993年,NeXT中止了硬件业务,转为专注与OpenSTEP软件市场,并推出了一套网络程序架构WebObjects用于进行动态页面的生成。1996年,苹果公司以4亿美金收购了NeXT,NeXTSTEP被重命名为Cocoa,WebObjects则集成到Mac OS Server和Xcode中。Objective-C自然而然成为Mac平台的首选开发语言,并受到Macintosh编程人员的广泛认可;Cocoa成为苹果免费提供的开发工具,提供Mac平台应用开发的环境。
Objective-C的咏叹调
由于苹果公司的市场定位和Mac平台的特殊要求,Objective-C一直在编程语言领域保持一种低调的形象。与Windows平台下的应用开发技术和编程语言的繁盛景象相比,Objective-C更像是孤独盛开在Mac平台上的技术奇葩。

Mac平台上的应用开发
但iPhone的发布改变了这一切。基于App Store模式的iPhone软件开发不但为iPhone用户提供品类丰富的应用程序扩展,还为众多软件公司和独立开发者提供机会(详细请参考51CTO之前的报道《独立软件开发者,你准备好了吗》)。09年7月,App Store上线一周年后,软件数量已达到6万,每日新上线近千款iPhone软件。考察一门编程语言是否受欢迎,其应用场景和项目需求是最重要的一点;iPhone应用开发的火爆带动Objective-C语言的繁荣。众多软件开发者由其他语言或平台转向Objective-C开发iPhone应用程序,一时之间,Objective-C和iPhone的开发书籍持续热销。
这种热度还将持续。苹果公司最近发布了采用iPhone OS的iPad,51CTO曾就苹果iPad发布背后的意义做过报道,虽然业界对这一款产品也是褒贬不一,但是这一点也不妨碍iPad的扩展应用成为App Store的下一个热点。行业、市场需求和应用场景的广泛性将决定一门编程语言的流行程度。可以预见,Objective-C将迎来在iPad上进行应用开发的高潮,在移动开发的舞台上唱响更动听的技术咏叹调。
在本期的编程语言排行榜中,TIOBE指出,Scratch、Scala、 Erlang和JavaFX Script这几种编程语言正在向前20名挺进,让我们看看他们目前的排名。
编程语言排行TOP 21-50
请留意下表中标注红色的语言,其中,Scala和Erlang两种语言51CTO已经有过专题报道,详细请参考《Scala编程语言》专题和《因并发而生 因云计算而热:Erlang专家访谈实录》;关于Scratch和JavaFX Script两种语言我们会在后面的编程语言排行榜中为您介绍。
Position | Programming Language | Ratings |
---|
21 | Lua | 0.506% |
22 | Scratch | 0.498% |
23 | D | 0.485% |
24 | Scala | 0.459% |
25 | Erlang | 0.446% |
26 | COBOL | 0.437% |
27 | JavaFX Script | 0.435% |
28 | Transact-SQL | 0.415% |
29 | Fortran | 0.377% |
30 | Ada | 0.367% |
31 | Alice | 0.360% |
32 | RPG (OS/400) | 0.352% |
33 | Logo | 0.350% |
34 | Bourne shell | 0.342% |
35 | S-lang | 0.339% |
36 | FoxPro/xBase | 0.323% |
37 | Forth | 0.296% |
38 | NXT-G | 0.274% |
39 | Tcl/Tk | 0.266% |
40 | Groovy | 0.261% |
41 | Prolog | 0.255% |
42 | Smalltalk | 0.254% |
43 | Caml/F# | 0.244% |
44 | CL (OS/400) | 0.226% |
45 | PowerShell | 0.221% |
46 | PL/I | 0.212% |
47 | J | 0.203% |
48 | Haskell | 0.202% |
49 | VHDL | 0.194% |
50 | MAX/MSP | 0.187% |
下面是排名第51-100的编程语言
ABC, AD, Algol, APL, Applescript, Awk, Beta, Boo, C shell, cg, Clean, Clojure, cT, Dylan, Eiffel, Euphoria, Factor, Falcon, Focus, Icon, IDL, Informix-4GL, Io, LabVIEW, LabWindows/CVI, Lingo, MAD, Maple, Mathematica, ML, Modula-2, Modula-3, MOO, MS-DOS batch, MUMPS, Natural, Occam, Oz, Postscript, Progress, Q, R, Revolution, REXX, SIGNAL, SPSS, SuperCollider, VBScript, Verilog, XSLT
编程语言类型走势
Category | Ratings Feb 2010 | Delta Feb 2009 |
---|
Object-Oriented Languages | 53.8% | -2.5% |
Procedural Languages | 41.7% | +2.2% |
Functional Languages | 2.9% | -0.1% |
Logical Languages | 1.6% | +0.4% |
Category | Ratings Feb 2010 | Delta Feb 2009 |
---|
Statically Typed Languages | 59.4% | +0.4% |
Dynamically Typed Languages | 40.6% | -0.4% |

动态与静态类型语言走势
软体尚方宝剑(Silver Bullet)何在编辑本段回目录
——Fred Brooks 和Brad Cox的不同观点
欧阳进(台湾)
前言
二十年来,人们一直寻找解决软体危机的方法,包括结构化、人工智慧、物件导向等方法;但软体大师Fred Brooks 在1986年发表的文章裏预言在10年内找不到解决软体危机的尚方宝剑,历经了十年,果然不幸被他言中。1995年裏,Brooks与Cox两位大师分别再深思软体尚方宝剑,Brooks仍持怀疑态度,而Cox 则相当乐观。
本文以时间的前后,依序交叉介绍两位大师的见解,期能引起读者对软体未来的些微兴趣。由於笔者的学养和功力远不如两位大师,只能介绍他们文章裏的精华,并未添加笔者的阐释或见解以免您受到笔者有限能力的误导或局限您的思想和视野。希望您有空细读两位大师的原文著作,培养您自己的思维和创意。
介绍
二十年前(1975),IBM大型电脑之父——Fred Brooks 出版一本书:"The Mythical Man-Month"。 收集了他在1960年代领导1000多人共同发展OS/360大型软体系统的心得和经验。从实际经验中,他体会到开发大型软体过程中,难以汇集参与人员的设计理念然后提供给使用者一致的设计概念(conceptual integrity),因而导致软体的高度复杂性,使得大型软体系统往往会进度落后、成本暴涨及错误百出,就是所谓的软体危机(software crisis)。
经过了10年(1986),Brooks发表了一篇著名的论文——"No Silver Bullet: Essence and Accidents of Software Engineering"
他断言:
「在10年内无法找到解决软体危机的尚方宝剑(银弹)」 (There will be no silver bullet within ten years)。
这文章激起许多软体专家的讨论与争辩,而"No Silver Bullet"也成为脍炙人口的名词。Brooks认为软体专家所找到的各种方法皆舍本逐末,解决不了软体的根本困难——即概念性结构(conceptual structure)的复杂,无法达到概念的一致性,软体自然不亲切不好用!
到了1990年,曾首先提出"Software IC"名词的OO大师——Brad Cox针对Brooks的观点而发表了一篇重要文章—— "There Is a Silver Bullet"
说明他找到了尚方宝剑——即有些经济上的有利诱因会促使人类社会中的文化改变(culture change),人们会乐於去制造类似硬体晶片(IC)般的软体组件(software component),将组件内的复杂结构包装得完美,使得组件简单易用,由这些组件整合而成的大型软体,自然简单易用;软体危机於焉化解了。
在1995年初,Brooks的上述名著第二版出炉了,书中含有一篇关於尚方宝剑的新文章—— "No Silver Bullet Refired"。文章裏,Brooks赞扬Cox的文章,但他认为Cox误解了他的本意。
尽管历经了十年,软体开发方法也有所进展,但Brooks 仍然认为尚方宝剑仍未出现;大型软体系统的开发工作仍然困难重重,只能渐进地改善,不要奢望短期内会出现尚方宝剑,一举解决软体的困境。
在1995年底,Brad Cox发表了新文章——"No Silver Bullet Reconsidered"。这文章裏,Cox更深刻探讨文化和思维变迁(paradigm shift)的话因与效果,从人类文化的观点阐释软体危机的原因,而得到乐观的结论——软体的尚方宝剑是可能的。
过去10年,Brooks的预测是千真万确的,果真软体的困境不但未解决,反而更加严重。那麼下个十年又会如何呢?有趣的是,大家来欣赏一下两位大师的深思灼见,然后再看看您个人的见解,也许会激励出许多新创见也说不定,不是吗?
1975
Brooks在"The Mythical Man-Month"书中之看法该书是论文集,其中有一篇文章叫"The Mythical Man-Month",他就以此作为书名。在1956~1965 之间,Brooks实际领导IBM 360 大型电脑的开发计划,包括硬体结构及庞大的OS/360作业系统在内,因之他具有「IBM 大型电脑之父」之尊称。由於OS/360是多达1000位程式师共同合作的大型软体开发工作,让他深刻了解到大型软体开发的技术和管理上所面临的种种困难和挑战。於是,他就将其领导开发OS/360软体系统的经验心得收集在这本书裏。
人们常拿Man-Month (多少人,做多少个月)来计算软体的工作量,但是Brooks发现软体的开发工作是需要人与人之间密切沟通的,使得设计工作不易分割,所以Man-Month 为单位的计算方法是有问题的(mythical)。也就得出著名的Brooks法则—— 「对於进度已落后的软体开发计划而言,若再增加人力,只会让其更加落后。」(Adding manpower to a late software project makes it later)这是该书名称的涵义。
Brooks从经验中深深感觉到参与人员之间的概念一致性(conceptual integrity)是软体设计中最重要的一环(conceptual integrity is the most important consideration in system design)
。一旦软体师们有一致的设计概念,其所共同创造出来的软体才有可能达到简单(simplicity)及好用(straightforward) 之效果。
为了达到这效果,Brooks主张应注重软体的主架构(architecture),并将它与实施
细节(implementation)分开来。所谓主架构,就是:对使用者介面之完整而详细之
叙述(the complete and detailed specification of the user interface) 。
主架构汇集各软体师的不同思绪,融合成为一致的概念,然后呈现给使用者,让使用
者感觉软体是源自于单一的设计理念(single philosophy) ,而不是基於庞杂无序的
众多思绪。将主架构与施行细节分开来,是让大型软体计划获得一致性概念的有力途
径(separation of architectureal effort from implementation is a very
powerful way of getting conceptual integration on very large projects)。
1987
Brooks在"No Silver Bullet"文章中的看法
自从"The Mythical Man-Month"一书上市以来,历经了十年,尽管软体专家们努力研
究新方法来解决软体的困难;但是Brooks认为这些方法,包括高阶语言、OOP 、AI等
皆舍本逐末,只解决了一些概念的表达(representation)技巧而已,并无法解决根本
性的概念结构(conceptual structure)问题。在"No Silver Bullet"文中,他藉亚裏
斯多德(Aristotle)的用词而将软体之困难分为两种:
●Essence ——此为概念上(conceptual)的根本困难。
●Accidents ——此为将概念转换为电脑表示法时,在表达(representation)上之困
难。
例如,OOP 上的抽象资料型态(即类别)观念,只是改进了设计的表示方式而已,所
以抽象时只去除掉表达性(accidents)的复杂和困难,但并未去除掉任何根本性的复杂。
由於没办法解决这种根本性的困难,使得原本单纯可爱的软体,逐渐演变为进度落后
、成本暴涨、错误丛生等,像恶梦中的狼群般蜂踊而至,於是哀号而希望有种「银弹」
(silver bullet 又译为尚方宝剑)能即刻平息它们。然而Brooks认为:
「不仅眼前找不到尚方宝剑,由於软体的本质使然,未来也不太可能找得到。」
(Not only are there no silver bullets now in view, the very nature of
software makes it unlikely that there will be any)
Brooks列出的根本性困难包括:
●复杂性(complexity)——「复杂」是软体的根本特性,可能来自于程式师之间的沟
通不良,而产生结构错误或时间延误;也可能因为人们无法完全掌握程式的各种可能
状态;也可能来自新增功能时而引发的副作用等等。
●一致性(conformity)——大型软体开发中,各小系统之介面常会不一致,而且易於
因时间和环境的演变而更加不一致。
●易变性(changability) ——软体的所处环境常是由人群、法律、硬体设备及应用
领域等各因素融合而成的文化环境,这些因素皆会快速变化。
●不可见性(invisibility)——软体是看不见的,既使利用图示方法,也无法充分表
现其结构,使得人们心智上的沟通面临极大的困难。
这些是软体的本性,Brooks认为没有捷径可解决之(there is no royal road)。但可
以渐进式地改善之。他认为可行的方案有:
*买来装配(buy and build) ——软体的建造尽量使用现有零组件,不要一切都从头
做起。
*快速雏型(rapid prototyping) ——使用重复式的开发方法(iterative development)
来渐进地改善软体的雏型,裨逐步厘清使用者需求。
*有机成长(growing organically) ——有生命的东西皆是由小慢慢长大的,建造大型
软体的方法应该是逐渐成长,而不是一次建造完成。
*优秀设计者(great designer) ——人是软体设计的核心,良好的方法可改善人的创造
过程,但无法激励人的原本创造力,须藉重有创意的人。
1990
Cox在"There Is a Silver Bullet"文章中的看法
Cox 在文章开头就提到Brooks在"No Silver Bullet"一文中的悲观看法,Cox 写道:
And in "No Silver Bullet: Essence and Accidents of Software Engineering,"
he(Brooks) argues that the difficulties are inevitable, arising from
software's inescapable essence--not from accident, but from some deficiency
in how programmers build software today.
(在"NSB" 文中,Brooks声称这些软体的困难是无法避免的,是源自软体上无法逃避的
根本质——亦即不是来自一些旁技细节,而是今日程式师设计软体时缺点)
接著,Cox 针对Brooks所提的软体困境所在,Cox从新的观点来阐释之,而得到乐观的
结论。
Cox认为软体危机是必然会面临的(irresistible)的困境,但并非是无法克服
(immovable)的。当全球经济进入资讯时代,市场对资讯殷切需求而产生的经济诱因
(economic incentive),将促成人们社会中的文化改变(cultural change)
。加上目前遭遇的软体困境:成本过高、品质不良、以及人们无力去改善它们。使得
人们对软体的看法和思维产生巨大的变迁(paradigm shift),从过去一行一行撰写指
令的土法炼钢方法转而尝试去建立可重复使用的标准组件(standard component)以及
组件交易市场(market)。在这种新环境中,软体的价值体系(value system)、权力结
构(power structure) 、以及软体师与消费者关系重新定位;彻底从过去重视程式的
撰写过程(process) 转而重视组件价值、拥有、及买卖系统等基本文化要素、而导致
软体产业的革命(software industry revolution)。
软体组件类似於硬体的晶片(IC)一般,把组件的复杂封装起来,对使用者而言,调组
件再也不复杂了。因之,建立软体晶片市场,让人们不再受困於组件内程式撰写的复
杂,而专注在组件本身的使用、价值和买卖上,软体的复杂和困难就自然烟消云散了。
因之,文化和思维的变迁将是一把尚方宝剑,能克服软体的困境;而且这种变迁是即
将来临的,并非海市蜃楼!
1995
Brooks在"No Silver Bullet" Refired文章裏的看法
自从1987年Brooks发表"No Silver Bullet"一文之后,激发了许多人对到底有没有尚
方宝剑的讨论与争辩,例如前述的Cox 之"There Is a Silver Bullet"文章,以及Harel
的"Biting the silver bullet"文章等等。
Brooks在理解各方的反应,以及检验当今各种软体设计方法之后,他仍认为尚方宝剑尚
未出现(the magic solutions are not just around the corner)。
Brooks赞扬Cox 的"There Is a Silver Bullet"文章是一篇极佳的文章,可是他认为
Cox 误会了他的本意,误解之处有二:
《1》 如上节所述,Cox 在文章中写道:
"...but from some deficiency in how programmers build software today."
Cox 把根本性困难解释为软体建造方法上的缺失,事实上Brooks所谓的根本性困难是
指软体上概念性的复杂所导致的,无论使用什麼方法,无论在任何时刻,皆必然呈现
的软体固有特性。
《2》如上节所述,Cox 在文章中写道:
"...Brooks argues that the difficulties are inevitable..."
事实上,Brooks认为他自己只是持怀疑之态度,并非认为尚方宝剑是完全没希望的。
例如,Brooks认为软体系统的复杂是可分层次(level) 的,若软体下层的小组件
(object)组成上层的大组件,再由大组件组成更大之组件,层次分明地组织起来,则
复杂度就可以减低了。还有,当软体由小而大渐进地有机成长时,虽然复杂有系统地
增加,但可确保软体的正确性。导致这种困难的原因仍可藉渐进式地改善或去除,只
是没有捷径罢了。
Brooks认为OO是个有希望的途径,但由於牵涉到人们思维方式的转换,使得企业组织
必须先投下资金(front-loaded cost) ,才能逐渐回收其利益(down-stream benefits)
,因而OO的进展会是慢如蜗牛。既使它可解决软体危机,也不会是在眼前。
1995年底
Cox在"No Silver Bullet" Reconsidered 文章中的看法
Cox 认为Brooks所谓的根本(essential)困难——complexity、conformity、
changability 及invisibility——并非最根本,而是由一个隐藏在深处的病因(cause)
所造成的症状(symptoms)罢了。这个病因就是:
目前文化中缺乏有利的诱因来鼓励企业公司生产、买卖软体的组件(component)以及更
少的子子孙孙组件(subcomponent)。
如果买卖各层组件者皆有利可图,自然会想尽办法将组件封装得简单易用,则Brooks所
指的软体困难自然消失了。
Cox 觉得Brooks的观点是以技术为核心(technocentric) ,而他的观点则是以人为核心
(human-centric) 。由於观点的差异,对软体危机的阐释自然会获得不同的结论。他的
结论是:尚方宝剑是可能的,只是这把剑是软体思维的变迁(paradigm shift),而不是
技术(technology)。
想一想,造铅笔的公司卖掉了一支铅笔,就少了一支铅笔,亦即少了这铅笔的各小组件,
如铅笔擦、笔心等。为了要再造另一支铅笔,就得付费去购买铅笔擦和笔心,使得制造
笔心等小组件之企业公司也有利可图。因之,铅笔到铅笔擦、笔心等制造者皆会用心去
把组件包装好,使其简单易用!
但是,在软体中,制造试算表软体的公司,卖出一套试算表软体,只是个拷贝动作,并
不会少掉一个位元;不必再向小组件的制造者购买,使得小组件制造者无利可分,自然
无法进行生产、包装和买卖了;这是目前软体业的困境。
在未来新文化之中,使用者(end user)每使用一次某物件(object),就必须付一次费用
给这物件的生产者,而这生产者则必须付一次费用给其内部各次物件(subobject)
的生产者,依此类推到最小的组件为止。在此环境中,各层次物件之复杂结构皆封装得
完义无缺,使得各层物件皆简单好用,软体的复杂与困难就迎刃而解了。
结论
在前言中已提到,本文只是介绍Brooks与Cox 的文章精华,笔者因能力所限而不做推
论,当然不会有结论,盼您在细读过这两位大师的原文后,才做出您自己的结论。如
果您愿意,也盼您有所结论时,能与笔者分享,自当感激不尽!再会了。
[参考资料]
[1] Brooks, Frederick. The Mythical Man-Month. Reading, MA:Addison-Wesley,
1975.
[2] Brooks, Frederick. "No Wilver Bullet:Essence and Accidents of Software
Engineering," IEEE Computer(April 1987"), PP.10-19.
[3] Brooks, Frederick. The Mythical Man-Month, the 20th anniversary edition.
Reading, MA:Addison-Wesley, 1995.
[4] Cox, Brad. Object-Oriented Programming:An Evolutionary Approach,
Reading,MA:Addison-Wesley.
[5] Cox, Brad. "There Is a Silver Bullet." Byte(October 1990), PP. 209-218.
[6] Cox, Brad. Superdistribution "Objects as Property on the Electonic
Frontier. Reading, MA:Addison-Wesley, 1995.
[7] Cox, Brad. "'No Silver Bullet'" Reconsidered," American Programmer
(Novermber 1995), PP.2-8.
[8] Harel, D. "Biting the silver bullet:Toward a brighter future for
system development," IEEE Computer(January 1992), PP.8-20.
Fred Brooks 在1956-1965 之间领导IBM System/360大型电脑的开发计划,建立了IBM
在商业电脑市场上的盟主地位。目前任教於University of North Carolina at Chapel
Hill。
1975年他出版的"The Mythical Man-Month"一书,是软体设计方面的经典名著。历经
20年,该书第二版终於在1995年上市,一出炉就发行250000册。1986年,他发表了重
要文章——"No Silver Bullet",激起众多人士对软体危机与奇迹的好奇与争论,一
直持续到今天。
Brad Cox是著名的OO大师,他的重要著作—— “Object-Oriented Programming: An
Evolutionary Approach"
家喻户晓的「软体IC」一词就是来自他的著作。他是Objective-C 语言的创造人;目
前任教于Geoge Mason 大学。他最近出版一本新书-- “Superdistribution:
Objects as Property on the Electonic Frontier”
探讨在朝向全球性资讯密集产业过程中所面临的各种问题和困难。Cox相信化解软体
危机的尚方宝剑是文化的改变,即人类思维模式的变迁(paradigm shift),而不是
技术(technology)。