Homebrew的诞生和历史以及他的创造者的故事
2012 年,我还是在上初中,那时的我还是兰家庄那个跑的最快的少年。在那一年,Homebrew 成为 Github 贡献者最多的开源项目,在开源社区崭露头角。今天要说的故事,开始得还要再早一些。
Homebrew
那么什么是 Homebrew 呢?man brew 说:Homebrew 是 macOS 下的软件包管理工具。
brew - The missing package manager for macOS.
Homebrew的创造者:马克斯·霍威尔
Homebrew 的创造者,马克斯·霍威尔(Max Howell)。对大部分人来说,这是一个陌生的名字,但几乎所有接触过算法的人,肯定都或多或少的听说过一个算法题。即“翻转一棵二叉树”,这道算法题之所以火得一踏糊涂,其中马克斯·霍威尔可谓是“功不可没”。
提到马克斯·霍威尔,就不得不提的一件轶事。马克斯·霍威尔曾经参加 Google 的技术面试,但是没有成功,因为他不会在白板上翻转一棵二叉树。随后,马克斯·霍威尔的一条 Twitter,引发了关于招聘程序员面试时白板编程意义的激烈讨论。
今天查资料时,我特地的又去看了一眼这条 Max Howell 的推文。
马克斯·霍威尔的推文翻译:
Google:我们 90% 的工程师都在用你写的软件(Homebrew),但是你不会在白板上翻转二叉树,所以滚出去。
马克斯·霍威尔的主页(https://mxcl.dev/),低调而伟岸。他是一个开源项目的多产者,数百万人使用着他所创造开源软件,同时还是一个 Swift 的忠实信徒以及 Homebrew 的创造者。
Homebrew 及其创造者的故事
在 Changelog 的一次访谈节目中,可以了解到关于 Homebrew 和 Swift与马克斯·霍威尔的故事,以及他在 Apple 公司时对 Swift Package Manager 的工作。文末可以获取访谈的音频下载。
马克斯提及 Homebrew 的用户数量,他的答案是:这个很难准确估计,但肯定是数百万。
It’s difficult to estimate precisely, but it’s definitely millions.
马克斯·豪威尔的启航
每个人都关注黑客的起源故事。
马克斯在他六岁的时候,拥有了自己的一台计算机 BBC Micro。这是当时英格兰的一台普通计算机,他的父亲开始指导他编程。据马克斯的描述,最初他只做了一些糟糕的游戏,比如和怪物打架,选择武器:剑,棍子等等。
这里插一句,池老师在《MacTalk跨越边界》中提到那个“一生只为寻找欢笑”的李纳斯(Linux 之父),在 10 岁的时候,就在他外公的指导下开始编写自己的程序了。他的外公是赫尔辛基大学的一位统计学教授,数学家。很多大师级的人物,很小的时候就能在某个领域内头角峥嵘,展现出一些东西,然后经过长时间的练习和创作,最终成为一代**。还有史蒂夫·沃兹(苹果的创始人之一),这位池老师眼中的伟大程序员和技术先驱,年纪轻轻就在硬件领域有极深的造诣,这肯定与他那位在 NASA 航天局研制火箭的父亲密不可分。
我们继续说回马克斯。
计算机对马克斯来说是一种爱好,直到大学结束之前,他都从未考虑过他的职业生涯。他取得了化学硕士学位。在英国,大学的大部分课程只有三年,马克斯在一年内完成了一个为期四年的课程,第三年他去伦敦的柯达工作。在伦敦的哈罗,他开始厌恶这个地方,并发现原来化学是多么的无聊。因此,他非常沮丧,决定在计算机上安装 Linux,并开始编写应用程序,尽管当时没有人真正称他它们为应用程序。
马克斯研究 KDE,一个 Linux 桌面环境。他创造其他人喜欢使用的东西,与此同时,作为实习生的他几乎被柯达解雇。
不久后他回到了大学,一年大部分时间都在做两个应用程序,Filelight 和 Amarok,一个磁盘管理工具和一个音乐播放器。
截图来自网络
截图来自网络
返回大学后,马克斯没有达到继续留在学校并获得博士学位所需的要求,所以他不得不回家。
因为 Amarok 播放器项目,马克斯在伦敦的 Last.fm(做音乐服务的一家公司)找到一份工作。马克斯在访谈中提到,加入 Last.fm,就是他进入这个行业的一个起点,他没有计算机科学学位。
马克斯是在 Last.fm 工作了两年半,Last.fm 2007 年被 CBS(Columbia Broadcasting System, 做广播电视和广播网络的) 公司收购,之后逐渐退化。几乎所有真正有才华的人都逐渐离开了,其中当然包括马克斯。马克斯继续前进,从 Last.fm 离开后,加入了 TweetDeck,他在那里编写了 Android 应用程序,并重新编写了它们的 iOS 应用程序。
不久,马克斯所在的第二家公司 TweetDeck 又被收购了(被 Twitter 给收购了)。
Homebrew的诞生
在 Last.fm 工作的马克斯正在制作跨平台软件,他不得不考虑每一个平台,并且管理软件所拥有的依赖关系。对于那时的人们来说,有几个(不是很多)但实际上没有任何好的方法。
马克斯在离开 Last.fm 前开始着手构建 Homebrew。离开 Last.fm 之后,他开始进行 iOS 的开发,与此同时,Homebrew 雏形已经完成。
有一天一个叫做西蒙·威利森(马克斯回忆)发布了一个问题,关于如何在 Mac 上管理依赖关系。马克斯的回答:“Oh, I made this new project”,并且解释了它背后的逻辑。随后,Homebrew 便在 GitHub 进行开源。
Homebrew 项目引起了 Josh Peek(在 Ruby on Rails 方面做着出色的工作,现在在 GitHub 工作。有时间再说他)的注意。他发表了一条推文:我会升级到 Leopard (macOS 10.5),并安装 Homebrew。这让 Homebrew 项目获得了第一百个 star,随后一直都在上升。马克斯每天醒来都收到一大堆的 pull 请求:“Oh, I made this formula, it’s in my fork. Won’t you merge it?”。
从一开始,马克斯设计的 Homebrew 可以简便的让大量的开发者参与贡献,因为马克斯深知他自己并不想一个人写完所有的东西。马克斯基于 Git 构建,以便在命令行上有命令来帮助开发者们看到公式、贡献并编辑它们,他将公式设计为非常易读,因此可以打开任何公式并了解如何制作自己的公式。
Homebrew这个名称的由来
在说这个主题之前,建议每一个程序员都要牢记下面这段马克斯·豪威尔说的话。优秀的代码命名习惯,记到自己的笔记本里面。
“People often don’t think carefully about their names, especially in programming for classes and functions, and they’re so important. I’m a big believer that you don’t need to comment if the name is good and the responsibility boundary is clear; I feel if I need a comment on this function or class or whatever, that I haven’t named it correctly.———MAX HOWELL”
一直非常热衷于为事物选择正确的名称的马克斯,他十分理解名称对于开源项目的营销重要性。如果如果称之为 Package Manager X,则根本没有人会谈论它。
马克斯需要的是一个鼓舞人心的东西。这个项目的雏形接近结束时,马克斯只是在 Last.fm 寻找名字。马克斯心里想的是,他需要一个主题,然后这个主题能对这个产品中的其他事物的命名起到一个引导的作用。他的同事说:“好吧,这很明显,它应该是一个啤酒????主题,马克斯。”
马克斯当时生活的伦敦,基本上都是白天工作,然后在晚上去往酒吧。当然不是每个人每天都去,但是公司的某个人每天都会前往酒吧。可能每天都不是同一个人,但马克斯知道,只要从办公室走到马路对面的酒吧里,肯定会有他认识的人。
这是英国酒吧里的一种文化。它是你可以去见到你认识的人的地方,它很友好。这一点与美国不太相同,在美国的酒吧里,可能有一些人每天都在那里,他是一个失败者,他是一个醉汉。而英国的酒吧是你常去的地方,就像自己生活中的一部分一样。
酒吧之间的差别是非常巨大的。有些人所谓的酒吧可能是一个很酷的地方,可以闲逛,观看体育比赛并可能偶遇自己的好朋友。而马克斯的 Homebrew,则更像一个小镇上的酒吧。
这样的小镇酒吧会对促进家庭的和谐美满,Homebrew 有着这样的一个愿景。
马克斯当时 28 岁,他的生活中需要大量的啤酒。所以对他而言,Homebrew 是一个很好的名字。他考虑如何让它像一个平台,可以创建自己的包,并按照个人想要的方式定制它们。Homebrew 看起来像一个伟大的名字,它启发了其他好名称的出现,如 kegs(酒桶)和 cellars(地窖)。
马克斯希望他没有提供一个愚蠢的开源项目命名。马克斯提到,人们似乎现在完全随机的命名他们的东西,只是为了有一个与众不同的名字。他吐槽了他曾经看到的一个名为 King Fischer 的图像库,为什么叫菲舍尔国王?它没有任何意义。
马克斯始终认为,名字需要有一定的目的感,要知道它是什么。人们总是说,菲舍尔国王是一个图像库。
马克斯在一周左右的时间里完成了大部分的名字。他认为拥有这些名字非常重要,这真的有助于清楚的识别产品。在他想出一个好名字之前,他不会开始任何的应用程序或工具的创造。
内容未完……
本文大部分内容来自 Max 的访谈(见参考链接),这是我的一篇笔记。
参考链接
-
Homebrew 源代码 https://github.com/Homebrew/brew
-
马克斯的第二家公司 TweetDeckhttps://zh.wikipedia.org/wiki/TweetDeck
PS:欢迎关注我的公众号「蓝本本」,和我一起学习、进修和放纵好奇心。