软件随想录(local.joelonsoftware.com/wiki)-2002年08月30日 平台 - Platforms

2002年08月30日 平台 - Platforms

 

平台

From The Joel on Software Translation Project

Platforms Joel Spolsky

Friday, August 30, 2002

A part of Joel on Software, http://www.joelonsoftware.com


词汇表 (Glossary)

  • software developer 软件开发者 人员
  • application, software application 应用软件 应用程序
  • language runtime 程序语言的执行环境
  • platform 平台
  • operating system, OS 操作系统
  • DBMS 数据库管理系统
  • server 服务器
  • ISV (Independent Software Vendors) 独立软件供应商
  • built in 内建
  • license 授权,许可执照
  • dormroom 多人合宿的房间
  • juegos casino

正文

大部分软件开发者,包括Fog Creek Software,光是撰写应用软件就能获得无上的快乐。你知道的, 就是那些能做些什么事或解决特定问题的程序。但是,在我们当中有些勇者想要更彻底地改变这个世界,于是他们选择致力于平台:就像是巨大的软件板块(译注:就像建筑业在盖房子时会先铸好一些水泥板块,到现场再组合),光是板块本身并没有什么功用,但是却能让大家组合应用,造就了一个充满了新奇有趣应用程序的世界。所以,他们撰写操作系统,或数据库管理系统,或 Java 之类的程序语言执行环境,而且他们希望能吸引独立软件开发者在他们的平台之上创造一些很棒的新应用程序。

广义而言,一套操作系统就是一个平台。许多平台必须在操作系统之上运作,Java执行环境就是。还有别忘了 Windows 一开始并不是一套操作系统,起初它是以在 DOS 上执行的一套程序现身,它(刚装好时)没有什么功能,但是却让软件开发者能在其上为便宜的 Intel 机器制作 GUI 应用程序。

判断出你的产品是不是平台真的真的很重要,因为平台需要非常不一样的行销方式才能成功。理由是,平台最初且首先需要吸引的是开发者,不是一般使用者。

我有幸可以先读到Rick Chapman 关于软件业界的蠢事的超棒新书(预测会成为最畅销的书)。身为凡事都要分析的人,我总是寻找共通的论点。软件界失败案例最大的论点之一,就是平台商并不了解他们是平台商,以至于疏远他们的重要顾客:开发者。

案例:网威 (NetWare) 太晚释出适合的NLM开发工具组,以至于当 Unix 和 Windows NT 挟带著更好更便宜的开发工具组出现之际,他们在服务器软件开发人员的心中被扫地出门。

案例:苹果电脑 (Apple) 花了数十年让他们的开发者的生活像场灾难。将近20年来,每一版新的操作系统都需要将应用软件的程序代码东修修西改改。如果你太成功了,苹果电脑就会跟你作对(不过有时会控制一个名为 Claris 的掌上傀儡来跟你竞争,然后假装跟自己无关。)

案例:想要在OS/2 1.0版上开发软件,要先投资 $3000 买 SDK ,而且,如果列印对你来说很重要的话,那你就必须撰写你自己的打印机驱动程序。列印的确重要,所以 OS/2 没有应用软件。

但反例也一样有趣:

案例:第一版的 Windows 包含了一个可以免费再次发布的执行环境,所以,如果你写了一支 Windows 软件,你可以卖给任何有 DOS 的人,而不限于那些少数有买 Windows 1.0 版的怪胎(我!)。

案例:撇开升阳 (Sun) 在 Java 上犯的错误,它的执行环境一直都是免费的,并且,好的 Java 开发工具也很便宜或免费。没有其他开发平台能如此迅速地跃升主流(就算是 Visual Basic,史上卖得最好的电脑语言,也花了几年才往上攀升。)

一个平台想要成功,需要被广泛大量的采用,那意味著你需要开发人员为它开发软件。害死一个平台最好的方式是让开发人员难以在其上建设。因为平台厂商往往要嘛不知道他们所有的是个平台(他们以为是个应用软件),要嘛就是变得贪婪(冀望所有的利益都归他们。)

贪婪的平台厂商没办法容忍所有各种的下等痞子可以从他们的平台赚钱,所以任何人要为它开发东西都近乎该死的不可能。要阐释这点,最著名的失败例子大概是 IBM 的 PS/2,挂著一大拖拉库的私有技术,例如新的 Microchannel 架构设计成确保只有 IBM 能制造扩充卡。这当然有够短视的。没人想要 PS/2,因为,呃,想要扩充卡时没得用,有得用时则太贵了。作为一个平台供应商,在其上开发的人们有多么成功,你才算那么成功。

更细微的问题是,平台供应商不认为他们所有的是一个平台,而认为他们有个应用软件。为了阐释这点,我要再次地讲到 Groove

「为什么你不断地提到 Groove,思博兄?」三个理由:

他们有个吸引人的架构,提供了重要的平台功能,可以实际用在我自己的产品中。他们使得独立软件供应商无法在他们的平台之上开发(或至少是不切实际的),于是注定了被遗忘的命运,若非出于贪婪,就是因为他们把 Groove 当作应用软件而非平台,而且 Groove 发明人 Ray Ozzie 有写部落格(weblog),所以如果他认为我错了,他可以回答我。(他回答了。)

让我说说我是怎么发现Groove的问题的。我有个简单的桌上网站内容管理程序CityDesk,可以用于部落格(Weblog),公司的网站,小型组织等等,是给那些需要内容管理却负担不起大系统,或者无法随处控制服务器,或是不打算浪费工夫在服务器上按装perl脚本系统的人。

我们的 1.0版有些弱点。最大的一个问题是:人们想要透过网际网络(Internet)在CityDesk网站上共同合作。这是很合理的要求。我们必须在下个大版本释出时做点事情来解决此限制。基本上有两个选择。传统上的选择是做成主从式架构(client-server):搞出一个CityDesk服务器,让你安装在某处,然后每个人就可以共同合作。

但另一个选择是利用安全的点对点架构,可以保持CityDesk不需要放任何东西在服务器上的优点。而这正好就是Groove所提供的。

因此我考虑著移植CityDesk到Groove上。接著发现:

1. 没有免费的Groove执行环境。我每一个客户都必须购买Groove。

2. 没人有Groove。

Groove这个点子的命运从一开始就被注定要完蛋。我向几个据称正在为Groove开发软件的Groove "合作伙伴"请教,问说"与Groove的关系有任何好处吗?" "哈!" 他们说道:"付了$1500,仅从他们网页得到每月少于10次的点阅连结(也就是经由Groove网站连过来的访客数)。真是浪费钱。我们甚至没办法要求Groove分享顾客名录。"

这不是我想用来开发的平台。虽然技术上它确实是我想用来开发的平台,但却被一家贪婪(或无知)的公司所控制。它正在切断自己的命脉:那些在 Groove 上跑的应用程序. Ray Ozzie 正热衷于酷毙的网志,但 Groove 的网志在哪里?又有谁会想帮它写一个?是 Blogger 的创造者 Evan Williams 吗?就算是 Blogger Pro 一年也只要付 35 美元,而这还不够付 Groove 一个使用者的使用许可 99 美元呢。

如果Groove执行环境是免费的又将如何?顺著Windows的轨迹,一开始以免费的执行环境出现,一次能让你跑一个GUI应用程序。最终,为了Windows的文件管理,在不同应用程序间剪贴资料等好处,很多人买下完整版,然后Windows 3.0版现身了,这么受欢迎,有著这么多的应用程序,以致于每台个人电脑都搭售Windows。如今的Windows就像英国的电视税。除了开发者以外所有人都得付钱。只要你在撰写Windows的软件,就不用再付一分钱。事实上在Windows的历史上,开发人员从来不用担心Windows本身的费用。

任何曾经是过贩卖软件元件(ActiveX 控制元件, beans等等)的人,都知道执行环境必须免权利金,否则开发者绝对是敬而远之。微软(Microsoft)甚至让你免费地再分布Jet这个完整的关联式数据库引擎,这相当于微软Access程序的十分之九。而且更夸张的是,这个引擎已经事先安装进Windows 2000了。

Groove平台想要成功就要做相同的事情。让Groove执行环境可免费再分布,意谓著会冒出上百个应用程序,进一步使得执行环境又远又广地传播出去。很多使用者会看到购买内建合作功能的Groove完整版之价值所在。如hosted reflectors之类的Groove服务,应会拥有更大的潜在观众群。

当然啦,他们可以延著Notes的轨迹,假定卖出软件的唯一途径就是,用酷酷的投影片让 CEO们发出哇噢的叫声,然后卖价值百万但无用而冷门的企业软件(corporate shelfware)授权。这样做的确是有帮莲花公司(Lotus)赚钱,因为Notes有一个吸引人的应用程序:电子邮件软件。而且还是内建的!

不过想像一下,如果Notes的执行版本是免费的,如果Notes从80年代起在这个软件之上形成一个软件产业,某些小小的新创公司很可能已经为Notes制作出令人激赏的超文件应用程序,并取代现在的Web网络了。巨大的Notes公众网络之梦或许早就实现,那么Notes在个人电脑上就会和接龙游戏一样普遍了。如今,Notes仍只不过是又一个邮件系统而已,而且是一套没什么未来的邮件系统。

我是一直在找Groove的碴,不过这只是因为在其中存在有趣的地方,因为吸引人的技术少之又少,而它是其中之一。是的,Groove工程师是架构太空人(architecture astronauts)。那并不成问题,他们正在建立一套架构。可是目前他们将它定位成应用程序,而我认为如果他们那么做的话,Groove是红不起来的。总会有某人将会带著一套P2P架构打进来,并且以元件(component)的方式来销售,或是做作开发源码的程序库形式(是的,我察觉到JXTA),而那将是软件开发者会去用的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值