# 苹果平台最强计算器 PCalc 的前世今生

- 作者：刘志鹏
- 发布时间：2016-01-13 18:43
- 原文：https://www.ifanr.com/app/602199

[![PCalc](https://s3.ifanr.com/wp-content/uploads/2015/12/PCalc.jpg)](https://s3.ifanr.com/wp-content/uploads/2015/12/PCalc.jpg)

> 本文译自 PCalc 开发者 James Thomson 的博客中 Forty Two Minus Twenty 一文，略有改动。历经 23 年，PCalc 由当年开发者一时兴起的「练手」之作，成为了如今覆盖苹果四大系统[\[1\]](#fn:1 "see footnote")的最具代表性的计算器应用。这篇文章便讲述了 PCalc 背后的故事以及 James Thomson 在此期间的开发历程。
> 
> 原文链接：http://www.pcalc.com/english/twenty.html

如今很多人在他们的各种苹果设备上使用 PCalc，却没有意识到这个 app 的年龄比他们想象中要长得多，有时甚至比他们「想象」的时间还要长。

PCalc 在 2012 年十二月时迎来了它的二十岁生日，所以我想我应该趁这个机会回顾一下它在过去二十年里的进化之路[\[2\]](#fn:1 "see footnote")。

[![PCalc-1.0](https://s3.ifanr.com/wp-content/uploads/2015/12/PCalc-1.0.png)](https://s3.ifanr.com/wp-content/uploads/2015/12/PCalc-1.0.png)

PCalc 于 1992 年诞生，但事实上，它最初只是一个中心加热控制板的设计模型。

当时我在格拉斯哥大学的计算机科学系读书，报名了一个人机交互课程，来学习如何打造优秀的用户界面。这个课程的研究课题之一就是为中心加热系统设计一个模拟控制板，可以用来设置温度，分别控制加热和水量等等。

我认为用户界面看上去必须要真实，所以自制了一套黑白的 1-bit 模拟 LCD 数字和一些可以「按下去」的小按钮，其实拟物风在那个时候就已经存在了呢。

大概在同一时期，我们开始用 THINK Pascal 来编程，我也在业余时间踏上了 Macintosh 程序接口的探索之路。

渐渐我得出了一个结论：我并不会成为下一个 Jean Michel Jarre[\[3\]](#fn:2 "see footnote"), 不过与老旧的 Atari 电脑相比，我却非常喜欢 Mac 的用户界面。所以我卖掉所有的音乐合成器和 Atari ST 电脑，入手了最新款的 Mac Classics ——配备有 4 meg 的 RAM，40 meg 的硬盘 和 512\*342 分辨率的 1-bit 显示屏。

于是我开始寻找一个小项目来学习如何在这台新的 Mac 上编程，那时我想到了之前为控制板设计的图形界面：或许那作为一个计算器界面来说也同样合适。

当时 Mac OS 自带的计算器可以说相当简陋，所以我决定做一个可以进行二进制和八进制运算的计算器来帮助我进行编程，而这也就是 PCalc 诞生的缘由。我买来 Inside Macintosh 这本书的前三册，开始仔细钻研。

那时并没有互联网，所以这几本书便是我所能依靠的全部。最终我明白了其中的内部原理，并以此为核心制作了一套用户界面。由于第七代系统刚推出不久，所以我还是买了书的第四册来了解系统上有哪些改变，开发期间这些外部资源对我来说便已然足够了。

这个应用程序（当时还没有 Apps 这个概念）还缺少一个名字，最后我选用了「PCalc」，也就是 Programmers’ Calculator 的缩写。讲真它也确实是给程序员的计算器，而那个程序员就是我，毕竟我也只是为了自己的需求而编程。

一开始我把 PCalc 分享给了课上的几个朋友，而在六个月的迭代更新后，它变得更加强大，做到的事情也比仅仅「帮助编程」要多得多了。另外尽管我的 Mac 还不能显示颜色，我依然为 PCalc 制作了一套彩色界面。

你可以点击[这里](http://www.pcalc.com/english/screens.html)来浏览更多初始版本的截图，第一份说明文档则可以在这里[查看](http://s3.amazonaws.com/tlasystems/PCalc%20-%20Read%20Me%20First.pdf)。  
  
在 1992 年 12 月 23 日，我决定免费发布 PCalc，作为送给这个美好世界的礼物。

[![PCalc-1.0-Colour-Folder](https://s3.ifanr.com/wp-content/uploads/2015/12/PCalc-1.0-Colour-Folder.png)](https://s3.ifanr.com/wp-content/uploads/2015/12/PCalc-1.0-Colour-Folder.png)

再说一遍，那是 1992 年，FTP 站点还是个新兴的热点。当时我们班发现的一个叫做 Fetch 的应用迅速传播开来，只需要运行这样一个应用，它就可以带给你更多的应用。

我迅速想起来有一个叫做 Info-Mac Archive 的全球镜像站点，我可以把我的应用发送给它，之后便能自动被传播到世界各地供人们下载。所以我仔细读了它的传送指南并将 PCalc 打包上传成功。

后来我收到了非常多不错的反馈，这也驱使我在之后的一年里不断更新优化 PCalc，1993 年的 1.0.2 那一版中我在更新内容加上了这样一段话：

[![Screen Shot 2015-12-27 at 10.17.44 PM](https://s3.ifanr.com/wp-content/uploads/2015/12/Screen-Shot-2015-12-27-at-10.17.44-PM.jpg)](https://s3.ifanr.com/wp-content/uploads/2015/12/Screen-Shot-2015-12-27-at-10.17.44-PM.jpg)

确实，我应该在 Inside Mac 绝版之前买下里面处理颜色的那几册的。

至于上面说到的彩蛋，其中之一就是如果你输入 42 到三个特定的内存寄存器，然后点击屏幕，你就会听到道格拉斯·亚当斯说的「Don’t Panic!」，屏幕上也会显示一句出自我的最爱——银河系漫游指南中的台词：

[![PCalc-1.0-Easter-Egg](https://s3.ifanr.com/wp-content/uploads/2015/12/PCalc-1.0-Easter-Egg.png)](https://s3.ifanr.com/wp-content/uploads/2015/12/PCalc-1.0-Easter-Egg.png)

多说一句，不久之后道格拉斯就成为了我另一个应用——Dragthing 的内测用户，不过我从来没问过他对于那个彩蛋的看法（如果他看到了的话）。

PCalc 的图标上总有个 42，每次截图时我也总试图把 42 这个数字摆在屏幕上。在一次 WWDC 大会上，我有幸见到了道格拉斯并与他握了手，他也认出了我并示以微笑。

我本来计划在下一次的 WWDC 中再次与他见面，但他却在这之前便匆匆离世了。而就在他去世的几周前，我们还互发过邮件，这件事带给了我深深的震撼。

总而言之，这就是 PCalc 现在还在图标上保留 42 的原因——作为对他的致敬。尽管我与他并不算深交，但他却一直热心支持我的工作，而这对于他的一个忠实粉丝来说，可谓意义非凡。

不管怎么说，在我攻读学位入世未深的时候，PCalc 就已经在世界范围内取得了不小的成功，不过在这之后我却有些分心了。首先是编写 Dragthing，之后我又在 Apple 找到了一份工作，负责 OS X 的 Finder 和 Dock 部分，这又是另外一个故事了。

2000 年辞职再次回到格拉斯哥之后，我又开始寻找另一个小项目来学习新的 Metrowerks CodeWarrior 开发环境以及 PowerPlant 应用框架。尽管 PCalc 已经七年未曾更新，但我仍然会收到 PCalc 的反馈邮件，并且旧版 PCalc 的大小对于快速打造一个有用之物来说堪称完美。

所以，PCalc 2 就此诞生。我将核心的 Pascal 运算代码手动翻译成 C 语言，新的用户界面则是用 C++ 写成。老 68K 设备上仍然能运行 PCalc 2，而它不仅能在 PowerPC 电脑上运行，更同时支持 Mac OS 以及最新的 OS X，它的用户界面对于二者也都颇为合适。

[![PCalc-2.0](https://s3.ifanr.com/wp-content/uploads/2015/12/PCalc-2.01.png)](https://s3.ifanr.com/wp-content/uploads/2015/12/PCalc-2.01.png)

鉴于 Dragthing 的备受好评，我决定或许也该为 PCalc 收点费用了，我之所以在过去整整七年里都未曾更新过它 ，原因之一就是 PCalc 初始版本的免费性质，采取收费策略也将是对我不断更新 PCalc 的激励吧。

在 2001 年的 WWDC 上，我把名片递给了当时的一个新面孔——Phil Schiller，并跟他谈了谈 PCalc。在这之后，我记得他的秘书向我发邮件为 Phil 索要一个 PCalc 的序列号，我当然很高兴地发给了她。之后我才听说 Steve Jobs 也在用 PCalc 并据称「没有彻头彻尾地讨厌它」，而 Steve Wozniak 当年也购买了很多份 PCalc。

直到 2002 一月，Apple 还是没有在 OS X 配备一个像样的计算器（有些人可能会说直到现在也是如此），而在新的 iMac G4 发布之际，Apple 联系到了我并征求将 PCalc 内置于一些发往美国的 iMac 中。虽然最后同意每卖出一台我只能获得一小笔费用，但是哪怕再小的数目乘以近百万份也是非常可观的！

[![iMac](https://s3.ifanr.com/wp-content/uploads/2015/12/iMac1.jpg)](https://s3.ifanr.com/wp-content/uploads/2015/12/iMac1.jpg)

伤感的是，合作并未持续下去。随着 Mac OS 10.2 的发布，Apple 在其中加入了自己开发的科学计算器。关于此事我也听到了种种传言，但不管怎样，PCalc 不再捆绑在 Mac 中，这件事也就告一段落了。

2005 年我再一次用全新的 Carbon HIToolbox API 重写了 PCalc。PCalc 3 采用了精致有爱的金属质感的界面，不过这一改变也激起了不少民愤。此外全新的 Dashboard Widget 部件也随之发布，虽然代码核心相同，不过它的用户界面则是用 HTML 和 javascript 写成。Widget 在那个年代可是代表着未来。

[![Dashboard30](https://s3.ifanr.com/wp-content/uploads/2015/12/Dashboard30.png)](https://s3.ifanr.com/wp-content/uploads/2015/12/Dashboard30.png)

对于这次更新我并没有重复收费，因为这么多年来都没能完成过一次更新还是让我有些心存愧疚的。

2006 年 ，PCalc 的大小能使其完美移植到 Intel 机型中，你要知道当时我拥有一台搭载 Intel 的 Mac 原型机以及在一月中旬准备推出的通用二进制代码。在这之后 Mac 版 PCalc 开始更新得愈发频繁，也加入了越来越多的新特性。

而随着 2007 年 iPhone 的诞生，2008 年 App Store 的来临，我也在思索对于移植到这个全新平台上的应用而言，到底怎样才算是理想呢？

我取出了 PCalc Dashboard Widget 版的代码，花了一两天的时间使其在 iPhone 上运行。以此为起点，这一次我又用 Cocoa 编写了一套全新的界面。

PCalc 对于触屏设备来说无疑是完美的，它也从屏幕上用鼠标点击按钮来操作的模拟计算器，变成了在你手中的一台近乎真实的计算器。

[![HorizontalBorder](https://s3.ifanr.com/wp-content/uploads/2015/12/HorizontalBorder.png)](https://s3.ifanr.com/wp-content/uploads/2015/12/HorizontalBorder.png)

PCalc 在 App Store 上架的第一天就同其他 400 余应用存在于此，而它也确实干得漂亮。最终我们的大多数收入都来自 PCalc 而不是 Dragthing，并且来自 PCalc 的 iOS 版而不是 Mac 版，我也将大多数的精力率先投入于 iOS 版，之后才将所得的成果转移至 Mac 版中。

我甚至在 iPhone 版的 PCalc 中加入了 Dragthing 的主题引擎，可以让 Mac Pro 中一个相当复杂的绘图引擎在一个手掌大小的设备上运行，这在当时似乎是一件不可思议的事情。

后来又有 iPad 和 Retina display 面世，再后来又涌现出更多的 iPad，更高的 iPhone……而即便是保险起见，我也会说：只要我还在编程，我就会一遍又一遍地重写 PCalc。我也希望你会像我一样享受于使用它的过程，在今后的又几个十年里。

---

1. 即 iOS, OS X, watchOS, tvOS。 [ ↩](#fnref:1 "return to article")
2. 原文最初作于 2012 年，作者在之后的数年间不断有所补充修改。 [ ↩](#fnref:2 "return to article")
3. 著名法国作曲家、演奏家、音乐制作人。 [ ↩](#fnref:3 "return to article")
