苹果开发环境和开发者的历史
苹果开发环境和开发者的历史
一 OS X的诞生和几次翻天覆地的变化
对于苹果公司这个个人电脑时代的开创者,要讲述其20多年的故事相当困难。(那可以写本书了)就我个人而言,更愿意将苹果公司划分成3个不同的阶段。划分这三个阶段的明显标记,就是OS X的出现和iOS的出现。基于这个划分方法,我们可以只讨论OSX出现之后的事情,在此之前,那是另外一个故事了。
2001年是一个重要的年份,这一年中,苹果发布了OS X 10.0和10.1两个版本,后一个版本的OS X解决了性能问题,成为一个真正可用的系统。为了让软件商容易从旧的OS 9版本移植他们的软件,新的Carbon API也随之发布,这让几年前态度坚决,不肯为OS X系统开发软件的软件商们态度开始软化,最终决定使用Carbon把软件移植到OS X上。除了苹果自己,Adobe和Microsoft,他们应该是在OS X上最早开发者。
除此之外,OS X还带来了另外一套全新的名为Cocoa的API。所谓全新,是对于OS X的新,至于Cocoa的前身,则早在80,90年代就存在于 NeXTSTEP中,这是一套历史悠久的API。Carbon使用C,而Cocoa使用Objective-C。
这时候的OS X开发者,就来自这两者:一部分是Mac OS Classic(8/9)时代迁移过来,他们主要使用c/c++和Carbon API,另外一部分从NeXTSTEP迁移过来,他们使用Objective-C和Cocia API。OS X开发的时代开始了。
苹果并不像微软一样频繁的改变开发工具或api或提出更多新概念,苹果开发的世界更加沉稳,api和开发工具稳定的生命周期更长。但苹果一旦决定改变,就是斩钉截铁的。对于开发者,改变总是痛苦的,因此苹果改变的时候,总是会伴随硬件的变化或平台的迁移,这样的变化让开发者更加乐于跟随。但事实上,变化本身仍然是翻天覆地的。这10年中,有以下几次大的变化:
1、 OS X 替换掉 Mac OS classic ,提供了Cocoa和Carbon两套API
2、 OS X 10.6,在提供64位系统支持的同时,Carbon地位被严重降低,Cocoa成为最重要的原生开发框架。
3、 iOS,在提供移动设备所需的iOS时,对原有系统进行大量裁减,利用这个机会在iOS中去掉了Carbon和一些较老的API,重写了部分接口,让使用变得更容易。
这三次变化,形成了现在我们看到的开发者生态:iOS为主,少量使用Cocoa的OS X开发者,Carbon开发者几乎已经没有了。
二、 从iPhone 到 iOS
2008年,无论对于开发者还是苹果自己,这又是一个重要的年份。这一年中,iPhone OS SDK第一次出现,随后的一年多中,这个SDK以前所未有的快速几乎每月都会升级着新版本,推出新特性。开发者对于在iPhone这样一个移动设备上进行开发期盼已久。于是,更多人开始尝试接触有些陌生的Objective-C语
言,试图进行iPhone开发。
同年7月,App Store发布,开发者一拥而上,通过这个平台销售自己的软件。App Store中的软件数量和下载量都在快速上升。这两条陡峭的上升曲线趋势基本一致,对照tiobe发布的编程语言排行,会发现Objective-C语言一改之前6年的不温不火,也开始划出一条向上的曲线,同样,这条曲线的上升趋势和App Store的那两条也是一致的。于是,我们可以知道,从那个时候开始,苹果相关平台开发者的好日子到来了。2008年,美国次贷危机正在演变为经济危机,各经济指数暴跌,AAPL(苹果在Nasdaq股票代码)也不能免俗,同样呈现跌势,看起来这和开发者的热闹不太成比例,不过在随后的两年中,这种不成比例的情况再也没有出现过。
2008年的iPhone OS还没有被改名为iOS。在那个年代的iPhone上,应用领域是空白的,iPhone的CPU还比较慢,内存也不大,也无法承载太复杂的应用。所以很多App只是利用HTML和JS对数据内容做一些简单的包装,放到iPhone上,让用户可以随身携带,就顿时产生了新的魅力。这样的开发实在太简单了,于是很多其他平台的开发者开始尝试转向iPhone开发。他们一些是经验丰富的嵌入设备开发者,另外一些完全是新手,甚至有从JS程序员转行而来的。这些程序员是Objective-C和iOS开发者的第三种来源。对比之前的两种程序员,他们的基础相对弱了很多,不过人数实在太多了。在08和09年所增加的iOS开发者,比以往所有使用Objective-C的开发者总数还多出了数十倍。他们并不能进行OS X开发,但他们至少成为了苹果开发者的一部分。这是苹果从01年之后花费大量力气培养游说都没能获得的成功。
iOS上软件的成功,又影响了OS X软件的开发,很多软件需要在移动设备之外拥有另外一个全功能的客户端,于是也有部分开发者开始开发OS X上的产品。虽然OS X开发难度远远大于iOS,但类似的系统架构,同样的语言,非常相似的API和数据结构,让开发者的过渡很简单。这些开发者在iOS开发中先学会了OS X开发的精髓,再反过来扩展自己的视野,这是很好的入门道路。这样的案例并不算多,也并没有带来OS X程序员的增加,相比之下,OS X平台用户量仍然很少,主流的计算机平台仍然是Windows,这和iOS是完全相反的状况。tiobe的语言排行中,从2008年之后,Objective-C语言上升的陡峭曲线,基本是iOS开发火爆带来的,所增加的用户也多是iOS开发者,OS X开发者仍然很少。
就算到了本文写作时,各种企业对OS X客户端需求明显增加,而OS X开发者仍然是相对较少的。整体看来,iPhone开发者最多,iPad其次,OS X开发者最少。
三、 设备和开发难度
如前面所
说,iPhone开发者最多,iPad其次,OS X开发者最少。有几个数据可以证实这个推测: (数据来源:apple.com/appoftheday.com/wikipedia http://www.buzzingup.com/2010/12/apple-app-store-statistics-for-2010-infographic/)
1、 App store总共软件数量超过30万
2、 iPhone 占85%,Universal占8%,总共加起来约为27.9万个
3、 iPad 占7%,Universal占8%,总共加起来约为4.5万个
4 、OS X软件没有找到具体的数量(原因复杂,随后会提到),所以用macupdate.com和apple.com的downloads页面到google用site搜索结果做为参考,分别为2.1万和9200。
OS X软件数量难以判断,因为其构成复杂。除了部分原生应用,还有通过X11运行的Linux应用,通过Java虚拟机运行的Java应用,通过QT编译的跨平台应用,甚至还有一些命令行工具。又经过了较长的时间变化,于是难以统计每一个分类到底有多少个。换个角度看,这也是OS X当初迁移到Unix平台的好处,在原生应用不能满足应用需求的情况下,还有大量的跨平台应用可用。
为什么不同设备上的应用数量差距这么多?因为设备的不同直接影响了开发难度。
前面提到过,很多iPhone app只是把html和js进行了简单的包装。但由于iPhone的随身特性,只要拥有独特的信息,这种简单包装之后的app也会很有用。对于屏幕更大的,移动性不那么好的设备,这类应用就不够有意义了。现代软件工程中,除去极其复杂的业务逻辑和对之前版本的兼容性,界面(或者叫做用户交互)就是最大的工作量了。如果没有界面,就不太需要面向对象编程语言(至少没有今天这么需要)。
iPhone了非常简单的界面,简单到大部分iPhone应用模式都是类似的(游戏除外),界面只有4,5种基础结构,之后都是在此之上的组合和变化。这样的界面所需的工作量很少,iPhone app的操作模式就是页面的切换和导航切换。这样的交互方式既是对想象力的限制,又是对工作量的简化。在这种先天的设计下,不可能产生复杂的界面,如果设计一个复杂的界面,那么用户体验就会很差。这样简单的交互方式,也很难承载一个包罗万象,功能繁多的产品,因此app的功能也就随之变得单一化。简单,单一,但是体验最好,这是大部分iPhone app的选择。这样的选择也就使开发工作更加节约时间和成本,也降低入门门槛。
iPad虽然仍然是iOS系统,但因为屏幕更大,也就需要在界面中容纳更多的内容,提供更多交互方式,App也需要提供更多的功能。一切都变得更复杂,开发难度相对也高一些。不过既然仍是iOS系统,比起来OS X开发,仍然是简单很多的。
到了Mac上的OS X就复杂的太多了。OS X不是剪裁过的系统,也不会在当前状态下只显示一
个正在运行的程序。各应用程序之间有交互,各种视图都可以改变大小,移动位置,数据可以在不同的应用程序之间被拖拽…界面和交互都远不是iOS系统可以相比的。另外虽然Mac硬件也只有有限的几种规格,无论是屏幕尺寸还是系统配置都是规范的,但仍需要比iOS考虑更多的适配问题。一个OS X应用程序提供的功能也会复杂的多。这样的程序需要更多的产品设计和开发。所需要的开发周期更长,难度也大的多。
iOS和OS X仅在界面设计上的差距,比较一下HIG(Human Interface Guidelines)的厚度,就会得到一个不怎么科学但直观的印象。目前版本的OS X HIG厚达394页,而iOS HIG只有150页。
四、 技术,设计和产品
苹果把交互设计和程序开发一并重视,同时放在文档中提供,并建议开发者阅读。(Windows vista之后微软也有提供,但重视程度不够)。Human Interface Guidelines是一份从2000年发布之后,一直到今天仍然不停维护的文档。
这里可以看到从2000年开始的版本变化记录。
对于OS X系统上运行的软件,其美观和功能同等重要。用户也习惯挑选”更美观“的软件购买和使用。(iOSq情况类似,但iOS整体上简单很多)。挑选更美观的软件,听起来是一种非常不慎重的决定,但这办法其实非常有效。一个好的软件,花在界面和交互上的时间于代码量,往往会超过功能本身。对于开发者来说,提供一个功能通常有两中选择,一种是没有界面的命令行程序,给程序员或专业人员用,另外一种是有界面的,给一般用户用。既然决定提供给一般用户用,那么提供更流畅的用户体验显然是产品的重要部分。所以完成功能本身并没有提供更好的界面有挑战性。换言之,在苹果平台上,好看的软件大多数情况也是好用的。
这对于OS X开发者的要求更高,除了需要能够编写代码,还需要对产品和设计有一定考量。能够开发出成熟软件的开发者数量很少(相对Windows平台而言),这样的坏处是软件数量不够多(前文列举过数据),好处是避免了恶性的同质竞争。
HIG讲软件设计过程的开篇就在讲要根据用户需求设计,并且要最重要的是了解用户(Know Your Audience)。要完成一个好的OS X的应用程序,在产品和设计上要花费大量的精力。程序员也不愿意去简单克隆一款产品,而是希望设计出自己认为最好的产品。
整个OS X系统的应用环境,和现有软件的精致,对于开发者有潜移默化的影响。很多开发者有过这样的历程:发现自己做出来的程序,放在这样的环境中怎么都觉得不对劲。于是推翻重来,直到能和整个系统的设计水平接近才敢发布。