分类 观点 下的文章

我正在制作一份有关计算机以二进制表示事物的小册子,有人问我一个问题 - 为什么 x86 架构使用 8 位字节?为什么不能是其他大小呢?

对于类似这样的问题,我认为有两种可能性:

  • 这是历史原因造成的,其他尺寸(如 4、6 或 16 位)同样有效。
  • 8 位是客观上的最佳选择,即使历史发展不同,我们仍然会使用 8 位字节。
  • 一些混合 1 和 2 的因素。

我对计算机历史并不是非常着迷(与阅读计算机文献相比,我更喜欢使用计算机),但我总是很好奇计算机事物今天的方式是否存在本质原因,或者它们大多是历史偶然的结果。因此,我们将谈论一些计算机历史。

作为历史偶然性的一个例子:DNS 有一个 class 字段,它有 5 种可能的值(internetchaoshesiodnoneany)。 对我来说,这是一个明显的历史意外的例子 - 如果我们今天重新设计 DNS 而不必担心向后兼容性,我无法想象我们会以相同的方式定义类字段。我不确定我们是否会使用 class 字段!

这篇文章没有明确的答案,但我在 Mastodon 上提问,并找到了一些潜在的 8 位字节原因。我认为答案是这些原因的某种组合。

字节和字有什么区别?

首先,本文中经常提到 “ 字节 byte ” 和 “ word ”。它们有什么区别?我的理解是:

  • 字节的大小 是你可以寻址的最小单元。例如,在我的计算机上,程序中的 0x20aa87c68 可能是一个字节的地址,然后 0x20aa87c69 是下一个字节的地址。
  • 字的大小 是字节大小的某个倍数。我对此困惑了多年,维基百科的定义非常模糊(“字是特定处理器设计使用的自然数据单元”)。我最初认为字大小与寄存器大小相同(在 x86-64 上为 64 位)。但是根据 英特尔架构手册 的第 4.1 节(“基本数据类型”),在 x86 上,虽然寄存器是 64 位的,但一个字是 16 位的。因此我困惑了 —— 在 x86 上,一个字是 16 位还是 64 位?它可以根据上下文而有不同的含义吗?这是怎么回事?

现在让我们来讨论一些使用 8 位字节的可能原因!

原因 1:将英文字母适配到 1 字节中

维基百科文章 表示 IBM System/360 于 1964 年引入了 8 位字节。

在管理该项目的 Fred Brooks 的一段 视频采访 中,他讲述了原因。以下是我转录的一些内容:

…… 6 位字节在科学计算中确实更好,而 8 位字节则更适合商业计算,每个字节都可以针对另一个字节进行调整,以使两种字节互相使用。

因此,这变成了一个高管决策,我决定根据 Jerry 的建议采用 8 位字节。

……

我在我的 IBM 职业生涯中做出的最重要的技术决策是为 360 选择 8 位字节。

我相信字符处理将变得重要,而不是十进制数字。

使用 8 位字节处理文本很有道理:2 6 为 64,因此 6 位不足以表示小写字母、大写字母和符号。

为了使用 8 位字节,System/360 还引入了 EBCDIC 编码,这是一种 8 位字符编码。

接下来在 8 位字节历史上重要的机器似乎是 英特尔 8008,它设计用于计算机终端(Datapoint 2200)。终端需要能够表示字母以及终端控制代码,因此使用 8 位字节对其来说很有意义。计算机历史博物馆上的 Datapoint 2200 手册 在第 7 页上说 Datapoint 2200 支持 ASCII(7 位)和 EBCDIC(8 位)。

为什么 6 位字节在科学计算中更好?

我对这条 “6 位字节在科学计算中更好” 的评论很好奇。以下是 Gene Amdahl 的一段采访摘录

我原本希望采用 24 和 48 而非 32 和 64,因为这将为我提供一个更合理的浮点系统。因为在浮点运算中,使用 32 位字大小时,你必须将指数保持在 8 位中用于指数符号,并且要使其在数字范围上合理,你必须每次调整 4 个位而不是单个位。因此,这将导致你比使用二进制移位更快地失去一些信息。

我完全不理解这条评论 - 如果你使用 32 位字大小,为什么指数必须是 8 位?如果你想要,为什么不能使用 9 位或 10 位?但这是我在快速搜索中找到的全部内容。

为什么大型机使用 36 位?

与 6 位字节相关的问题是:许多大型机使用 36 位字大小。为什么?在维基百科的 36 位计算 文章中有一个很好的解释:

在计算机问世之前,即需要高精度科学和工程运算的领域,使用的是十位数码电动机械计算器……这些计算器每位数码均有一个专用按键,操作人员在输入数字时需要用到所有手指,因此,虽然有些专业计算器有更多位数码,但这种情况是个实际的限制。

因此,早期针对相同市场的二进制计算机通常使用 36 位字长度。这足以表示正负整数最高精度到十位数字(最小应为 35 位)。

因此,这种 36 位大小似乎是基于

的,它等于 34.2。嗯。

我猜这个原因是在 50 年代,计算机非常昂贵。因此,如果您想要你的计算机支持十位十进制数字,你将设计它恰好具有足够的位来执行此操作,而不会更多。

现在计算机更快更便宜,因此,如果您想要出于某种原因表示十位十进制数字,你只需使用 64 位即可 - 浪费一点空间通常并不会有太大问题。

还有人提到,一些具有 36 位字大小的计算机可以让你选择字节大小 - 根据上下文,你可以使用 5 或 6 或 7 或 8 位字节。

原因 2:与二进制编码的十进制一起工作

20 世纪 60 年代,有一种流行的整数编码叫做 二进制编码的十进制 binary-coded decimal (缩写为 BCD),它将每个十进制数字编码为 4 位。

例如,如果你想要编码数字 1234,在 BCD 中,它会是这样的:

0001 0010 0011 0100

因此,如果你想要能够轻松地与二进制编码的十进制一起工作,你的字节大小应该是 4 位的倍数,比如 8 位!

为什么 BCD 很流行?

这个整数表示方法对我来说真的很奇怪 —— 为什么不用更有效率的二进制来存储整数呢?在早期的计算机中,效率非常重要!

我最好的猜测是,早期的计算机没有像我们现在这样的显示器,所以一个字节的内容被直接映射到开关灯上。

这是来自维基百科一个带有一些亮灯的 IBM 650 显示器的图片(CC BY-SA 3.0 许可):

因此,如果你想让人们能够相对容易地从二进制表示中读取十进制数,这样做就更有意义了。我认为,今天 BCD 已经过时了,因为我们拥有显示器,并且我们的计算机可以将用二进制表示的数字转换为十进制,并显示它们。

此外,我想知道,“ 四位 nibble ”(意为 “4 位”)这个词是不是来自 BCD 的。在 BCD 的上下文中,你经常会引用半个字节(因为每个十进制数字是 4 位)。所以有一个 “4 位” 的词语是有意义的,人们称 4 个位为 “ 四位 nibble ”。今天,“四位” 对我来说感觉像是一个古老的词汇,除了作为一个趣闻我肯定从未使用过它(它是一个很有趣的词!)。维基百科关于 “四位” 的文章支持了这个理论:

“四位” 用来描述存储在 IBM 大型计算机中打包的十进制格式(BCD)中数字的位数。

还有一个人提到 BCD 的另一个原因是 金融计算。今天,如果你想存储美元金额,你通常只需使用整数的分数,然后在需要美元部分时除以 100。这没什么大不了的,除法很快。但显然,在 70 年代,将一个用二进制表示的整数除以一个 100 是非常慢的,所以重新设计如何表示整数,以避免除以 100 是值得的。

好了,关于 BCD 就说这么多。

原因 3:8 是 2 的幂?

许多人说,CPU 的字节大小是 2 的幂次方很重要。我无法确定这是真的还是假的,而且我对 “计算机使用二进制,所以 2 的幂次方很好” 这种解释感到不满意。这似乎非常合理,但我想深入探讨一下。而且从历史上看,肯定有很多使用字节大小不是 2 的幂次方的机器,例如(来自这个来自 Stack Exchange 上复古计算版块的 帖子):

  • Cyber 180 大型机使用 6 位字节
  • Univac 1100/2200 系列使用 36 位字长
  • PDP-8 是一台 12 位计算机

一些我听到的关于 2 的幂次方很好的原因我还没有理解:

  • 一个单词中的每个位都需要一个总线,而你希望总线数量是 2 的幂次方(为什么?)
  • 很多电路逻辑容易针对分而治之的技术(我需要一个例子来理解这个)

对我更有意义的原因是:

  • 它使设计“时钟分频器”更容易,这些分频器可以测量“在这条线路上发送了 8 位”,分别基于减半进行操作 - 你可以将 3 个减半时钟分频器串联起来。Graham Sutherland 告诉我这个,他制作了这个非常酷的 分频器模拟器,展示了这些分频器的工作原理。该网站(Falstad)还有很多其他示例电路,似乎是制作电路模拟器的一个非常酷的方式。
  • 如果你有一个指令可以将字节中的特定位清零,则如果你的字节大小为 8(2 的 3 次方),你可以只使用 3 位指令来指示哪一位。x86 似乎没有这样做,但 Z80 的位测试指令 是这样做的。
  • 有人提到一些处理器使用 进位前瞻加法器,它们按 4 位分组。经过一些快速的谷歌搜索,似乎有各种各样的加法器电路。
  • 位图:你计算机的内存被组织成页(通常大小为 2 的 n 次方)。它需要跟踪每一页是否空闲。操作系统使用位图来完成这项工作,其中每个位对应一页,并且根据页面是空闲还是占用,值为 0 或 1。如果你有一个 9 位的字节,你需要除以 9 来在位图中找到你要查找的页面。除以 9 的速度比除以 8 慢,因为除以 2 的幂次方总是最快的。

我可能很糟糕地扭曲了其中一些解释:在这里,我非常超出了自己的知识领域。我们继续前进吧。

原因 4:小字节大小很好

你可能会想:好吧,如果 8 位字节比 4 位字节更好,为什么不继续增加字节大小呢?我们可以有 16 位字节啊!

有几个保持字节大小较小的理由:

  • 它是一种空间浪费 —— 字节是你可以寻址的最小单位,如果你的计算机存储了大量的 ASCII 文本(只需要 7 位),那么每个字符分配 12 或 16 个位相当浪费,而你可以使用 8 个位代替。
  • 随着字节变得越来越大,你的 CPU 需要变得更复杂。例如,你需要每个位线路一条总线线路。因此,我想简单总是更好。

我对 CPU 架构的理解非常薄弱,所以就说到这里吧。对我来说,“这是一种空间浪费” 的理由似乎相当有说服力。

原因 5:兼容性

英特尔 8008(1972 年)是 8080(1974 年)的前身,8080 是第一款 x86 处理器 8086(1976 年)的前身。似乎 8080 和 8086 很受欢迎,这就是我们现代 x86 计算机的来源。

我认为这里有一个 “如果它好好的就不要动它” 的问题 - 我假设 8 位字节功能良好,因此英特尔看不到需要更改设计的必要性。如果你保持相同的 8 位字节,那么你可以重复使用更多指令集。

此外,80 年代左右我们开始出现像 TCP 这样的网络协议,它们使用 8 位字节(通常称为“ 八位组 octet ”),如果你要实现网络协议,你可能希望使用 8 位字节。

就这些!

在我看来,8 位字节的主要原因是:

  • 很多早期的电脑公司都是美国的,美国使用最广泛的语言是英语
  • 这些人希望计算机擅长文本处理
  • 较小的字节大小通常更好
  • 7 位是你可以用来容纳所有英文字母和标点符号的最小尺寸
  • 8 比 7 更好(因为它是 2 的幂次方)
  • 一旦有得到成功应用的受欢迎的 8 位计算机,你希望保持相同的设计以实现兼容性。

有人指出 这本 1962 年的书 第 65 页谈到了 IBM 选择 8 位字节的原因,基本上说了相同的内容:

  1. 其完整的 256 个字符的容量被认为足以满足绝大多数应用程序的需要。
  2. 在该容量范围内,单个字符由单个字节表示,因此任何特定记录的长度并不因该记录中字符而异。
  3. 8 位字节在存储空间上是相当经济的。
  4. 对于纯数字工作,一个十进制数字只需要 4 个比特表示,两个这样的 4 位字节可以打包成一个 8 位字节。尽管这种数字数据包装不是必需的,但为了提高速度和存储效率,它是一种常见做法。严格来说,4 位字节属于不同的代码,但与 4 位及 8 位方案相比,它们的简单性导致了更简单的机器设计和更清晰的寻址逻辑。
  5. 4 位和 8 位的字节大小,作为 2 的幂次方,允许计算机设计师利用二进制寻址和位级索引的强大功能(见第 4 章和第 5 章)。

总的来说,如果你在英语国家设计二进制计算机,选择 8 位字节似乎是一个非常自然的选择。

(题图:MJ/3526a0d5-bee5-4678-8637-e96e9843b53c)


via: https://jvns.ca/blog/2023/03/06/possible-reasons-8-bit-bytes/

作者:Julia Evans 选题:lkxed 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

内疚通常被认为是一种消极的情绪,但通过很好地引导它,你可以取得令人惊讶的成功。

最近,一位朋友兼同事问我是否有兴趣一起在会议上发言。我很惊喜,因为我对他们展示的项目贡献不大,但我表达了兴趣。我们开会讨论演讲内容,那时我才知道我被邀请参加的真正原因:会议的 多样性、公平性和包容性(DEI) 倡议要求至少有一名发言人不是男性。我被冒犯了。感觉我被邀请参加会议只是因为我的性别,而不是基于我的能力。

我的朋友向我保证,这并不是邀请我的唯一原因。他们需要新的贡献者,因为有很多工作要做,他们希望我可以帮助填补这一空白。

我考虑了一下,并试图理解为什么会有 DEI 的举措。我还想到了硬币的另一面,想做演讲的人不能做演讲,除非他们找到一个来自少数群体的人和他们一起演讲。

当我想到大局和这个机会将给我带来的好处时,我决定放弃我的自我伤害。一旦我放下被冒犯的感觉,我就意识到,我在介绍我没有直接贡献的东西时也感到非常不舒服。我的道德观并不认同这一点。我怎么可能踏上舞台,充当我没有努力过的东西的代言人?

决心提供更多帮助

我对这个项目做了一些研究。这项技术对我来说并不完全陌生,而且我很好地掌握了它所要实现的基本原理。事实上,它的总体目标让我感到很兴奋,可以做出贡献。如果做得好,它对用户来说将是超级有用的。

我下定决心,只有当我有机会十倍地回馈社区并成为一个关键的贡献者时,我才会继续这个演讲机会。我的朋友非常愿意帮助我走上这条道路。

带着这个决心,我们提交了我们的演讲。我的共同演讲者都很支持我,让我感到很受欢迎。他们说,只要我对这个项目有兴趣,有热情,其他都不重要。

参加这次会议是一个巨大的机会,它对我产生了如此 积极的影响。我遇到了很多开源社区的有经验的人,我感到很受鼓舞!我学到了很多新的东西!我从会议上的人和各种小组、会议和讨论中学到了 很多 新东西。我们的演讲很顺利,我认为在这样一个大型会议上发表演讲是一个相当大的成就。

然而,会议一结束,我的 内疚感 就开始发作了。

内疚是一种动力

我觉得我欠这个社区和那些给我这个机会的人。我想专注于我所做的承诺,但在其他更优先的事情的阻碍下,这很难。每当我偏离我的计划时,内疚感就会让我坚持下去。它提醒我,我必须回馈给我这样一个好机会的社区。经过几个月的挣扎和折腾,我可以自豪地说,我没有放弃。今天,我是这个项目的一个积极贡献者。

我喜欢它带来的挑战,我喜欢解决项目领域中的一些关键问题。我还能够带头在我们的下游生态系统中实施这个上游项目。作为锦上添花,我再次被邀请与团队一起展示,并向社区介绍项目的最新情况。这一次,不是因为 DEI 的倡议,因为比例已经平衡了。

感到内疚毕竟不是那么糟糕!

我很高兴我抓住了这个机会,我也很高兴这对每个参与者来说都是一个双赢的局面。如果没有人找我做共同主持人,我可能永远也不会参与这个项目,那将是多么大的失误啊!我很感激这些人!我很感谢那些给我这个机会并支持我的人。

我可能不是唯一面临这种情况的女性。我想告诉所有的女性,如果这样的机会出现,没有必要感到内疚,或者你“欠”别人的,或者任何形式的压力。如果你确实感到这种压力,那么就把这种情绪变成一种武器,用它来做好事!

这样就和标题联系起来了吗?因为我说的是我如何把这种内疚感作为一种动力,但也说首先不要感到任何内疚、

另一方面,不确定我们是否应该将文章的标题改为“DEI 机会在开始时可能不舒服,但有优势”之类的东西?无论如何,我对这篇文章总体上是满意的!

(题图:MJ/19d2ee02-eaf1-4cd7-8bd2-0be83466b2fc)


via: https://opensource.com/article/23/4/guilt-motivation

作者:Surya Seetharaman 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

以下是 24 位开源技术专家分享了他们开始编程之旅的故事。

我向我们的贡献者提问了这个问题:“你的第一门编程语言是什么?”不过这个问题并不像看上去那样简单。下面的故事谈到了是谁向你建议了第一门编程语言,是什么促使你学习它。如果你是付费学习的,接下来又发生了什么。这里还涉及到你所在的阶段以及这个世界上正在发生的事情。

让我们倾听这 24 位技术专家的故事吧。


你的第一门编程语言是什么?

BASIC。

你花钱学习的吗?

并不是。

你是自己选择它的吗?

不尽然。

为什么这么说?

那是 1979 年的圣诞节,我的父母(他们分别是学校的一名维护人员和一名公共卫生护士)省吃俭用地攒下了惊人的 1000 美元买下了一台 Tandy/Radio Shack TRS-80。它随附了一份涵盖了完整的 BASIC 编程语言的活页夹。我的父亲认为让我学习开发计算机软件是一个很好的将我从困境中解脱出来的方式。

接下来发生了什么?

我的父母给我和我的兄弟买了与“自学编程”相关的书籍,也订阅了相关的流行杂志。这些资源中提供了许多游戏的打印版的源代码。我们每个星期都花费大量的时间编写程序,然后一行一行地使用电脑自带的检查程序找出我们的打字错误并调试程序。当我们厌倦了游戏以后,我们开始修改它们。我们一开始只是简单地修改零零散散的字符串将一个罗马战斗策略游戏修改为一个太空战斗策略游戏。不过后来随着我们所做修改的复杂度的增加,我们最后开始开发我们自己的恐怖游戏。此后不久,我们开始通过信件分享我们的游戏磁盘,后来也通过当时仅 110bps 网速的电子公告板(BBS)分享我们的游戏。

40 年之后,我可以同全世界共同创作,家庭网络连接性能提升了七个数量级以上,但是我仍然时常怀念那个周六,那一天,在我和我的兄弟共同创造的真实的恐怖游戏当中,我被我的弟弟击败。

—— Jeremy Stanley


你的第一门编程语言是什么?

我的第一们编程语言是 BASIC,我在 7 年级的时候开始接触它。

你是花钱学习的吗?

如果你认为允许在午餐时间在计算机实验室里玩 《 德军总部 3D Wolfenstein 3D 》、《 我的世界 Minecraft 》、《 模拟城市 Sim City 》这些游戏,是对计算机科学足够感兴趣并学习 BASIC 语言的的花费的话,那就算是吧。

你是自己选择它的吗?

我不认为我当时曾确切地认识到还有第二选择。这是当时计算机实验室中仅有的内容,而且一些学长对它的介绍足以让我参与其中。我记得它不是计算机科学课程的一部分。

为什么这么说?

当时,我学习 BASIC 仅仅是因为乐趣。我仅仅用它来创造基于文本的“选择你自己的探险之旅”风格的游戏。从源代码创建一些兼具艺术性与趣味性的东西并让计算机运行它们这件事极大地吸引了我。我此前也使用过计算机,但这是我头一次让它为我做一些事情。

接下来发生了什么?

或许并不是巧合,我后来使用“选择你自己的探险之旅”风格的游戏来学习我后来接触到的每一种编程语言。

这一经历以及在计算机游戏中的首次探索(既有商业游戏也有我自创的游戏)开始了我进一步深入计算机领域的旅程,一直到我 11 年级时我的父母买回了我们家的第一台电脑。三年后,我将这一段旅程转化为了我的第一份计算机领域的工作,我成为了一家研究公司的实习生,这家公司最终录用了我为他们的 IT 支持组的一员,这是我大学毕业后的第一份“真正意义上”的工作。

将近 30 年后,我坚信是 BASIC(以及《模拟城市》)开启了我现在成为 SRE 的旅程,每天编写代码,与计算机集群为伍。

—— Chris Collins


你的第一门编程语言是什么?

我玩过 BASIC 语言,但是我的第一门正式入门语言是 PL/I。我在我大学时的第一次编程课上学习它的。

—— Heidi Ellis


你的第一门编程语言是什么?

我的第一门编程语言是 BASIC 语言。那是在 1981 年。我学习它是因为我买了一台能够启动进入 BASIC 编辑器的家用电脑,一台 TRS-80 彩色计算机。它拥有相当出众的 4K 容量的内存(没写错),而且它还可以在盒式磁带上存储程序。我希望让电脑做一些事情,因此我开始学习如何使用它能够理解的语言向它下达指令。一旦你第一次体验到程序成功运行的欣喜若狂的感受,你会发现我还想再次体验这种感觉。你还需要知道的是,如今已经过去 40 多年了。

—— Matthew Helmke


你的第一门编程语言是什么?

我的第一门编程语言是 BASIC。它是 1977 年大学第一学期中我的计算机科学课程的一部分,因此我既没有自己花钱学习它,也不是自己选的它。不过我始终认为这是非常重大的第一步,因为它使我学会了如何像计算机一样思考(我有一个好老师)。随着我从经济学院毕业,这门课程并没有立即促成一些事情。不过,多年之后,我成为了一名 IT 项目经理。所以我没有做过程序员,不过我管理过一些。

—— Kevin O'Brien


你的第一门编程语言是什么?

BASIC

你花钱学习的吗?

不是。

你是自己选择它的吗?

它是内置在 Apple ][ 计算机里的,这台计算机是我母亲在暑假带回来的,我的选择很有限。

为什么这么说?

这台计算机里只有 BASIC 语言和 6502 汇编语言。显然,BASIC 语言看上去对六年级的我更具吸引力。

接下来发生了什么?

我去公共图书馆,找出了所有刊载了 Apple ][ 程序的源代码清单的往期的《Byte》杂志。我花了很多时间输入这些我几乎无法理解的程序,并享受调试其他人代码的乐趣(好吧,我更确定的是,大部分错误都是我带来)。我简直入迷了。几年以后,在高中毕业班的时候,当我知道可以主修某种称作“计算机科学”的课程的时候,我既惊讶又激动。剩下的就是历史了。

—— Erik O'Shaughnessy


你的第一门编程语言是什么?

Fortran IV,你应该已经知道这是多少年前的事情了。

你花钱学习的吗?

不是,这是我大学的计算机科学课程的一部分,因此我想也可以认为我是花钱学习它的。这是在大型机上,因此你在纸上写好你的程序以后,你需要带上空白的 IBM 穿孔卡,然后坐在一台键控打孔机前把你的程序打孔出来,然后将你的穿孔卡片集作为一项“作业”提交上去。然后第二天你就可以拿回你的穿孔卡片,上面带有行式打印机输出结果。如果你的程序没有成功运行,你得不到任何输出,或者如果你制造了某种死循环,你则可能拿到一页又一页的结果。

接下来发生了什么?

在我的大学生涯快结束的时候,学校开始使用 watfor 编译器,这是一款来自加拿大的滑铁卢大学的 Fortran 版本。它的优势在于你可以在终端中使用它,并在大型机中保存你的程序,而不需要使用我们曾经非常喜爱的穿孔卡。因此你可以自行运行你的程序,也可以立即创造死循环的程序。欧耶!

Fortran 之后,吸引了我的眼球的另一门编程语言是 BASIC,它与 Fortran 有很多相似之处,不过能够更好的处理字符串。Fortran 在字符串处理方面太糟糕了。我主要是在 Amiga 计算机上做这些事情的。

在转向 Linux 后,我接下来接触的语言是 Perl,奇怪的是,似乎很容易从 BASIC 语言过渡到 Perl。接着 Perl 之后,就是 Python,一门在语法上更加灵活的语言。

—— Gregory Pittman


你的第一门编程语言是什么?

我 1974/1975 年学习的 Waterloo Fortran IV,这是入学第二年时我上的第一门计算机科学课程,当时我几乎确信我想要主修计算机科学了。这一年的稍晚时间,我们还学习了一些有关 IBM 360/370 汇编器的内容。在那段时间里,在英属哥伦比亚大学的低年级课程中我们使用的是打孔机,我们可以使用一个“学生终端”来连接我们的卡片盒,并得到一张供我们的卡片盒运行一次的“蓝色凭证”,然后走到 IBM 行式打印机后面拿回我们的程序输出。即使旁边明明写了一张提示“不要将你的卡片盒放在打印机上,以免打印机(上盖)开启”,不过如果你还是不注意,将你的卡片盒放到了打印机的上面。此刻,打印机可能刚好用完了纸或者发生了卡纸,于是主动打开了上盖,你的卡片盒将会掉到地上变成一团糟。

在我主修计算机科学的第三学年,我选了一系列的课程 —— 以 PL/I 为特色的第三年主流课程、一学期的 360/370 汇编器课程、两门关于计算机理论的荣誉课程、一门数值分析课程、“密歇根终端系统上的十二种编程语言”,以及一系列数学课。

在我的第四学年,我被应用数学研究所聘为研究助理。此时,我主要为一小群主要对求解微分方程的感兴趣的数学家们编写 Fortran 程序来获取报酬。同时,也是从那时开始,我意识到计算机科学并非我的最爱,我开始转向数学。我仍然继续学习了一些计算机科学课程 —— 优化课程以及更多的数值分析课程。回过头看,这是我走上数据科学之路的第一步。

我毕业之后的第一份工作还是编程,主要是使用 Fortran、PL/I 以及 SPSS 编程,SPSS 是一种统计编程语言。此外,我也学会了如何使用 MPSX(LCTT 译注: 拓展数学编程系统 Mathematical Programming System Extended ),这是 IBM 的一种线性规划通用语言。

—— Chris Hermansen


你的第一门编程语言是什么?

在我高中的时候,作为一项实验,让一位没有任何计算机经验的教师教我们计算机编程。我的学校之前从来没有尝试过这类课程。施乐公司给我们提供了一台 Model-33 型电传打字机和一台 110 波特的声耦调制解调器,这使得我们可以访问他们运行 CP-5 分时系统的 XDS Sigma 7大型机。BASIC 是当时的主流。

你花钱学习的吗?

上学算吗?

接下来发生了什么?

一些学生开始尝试在这台机器上 “瞎戳”,看看如果我们不在提示符位置输入 “BASIC” 会发生什么,这使我们发现这台机器上还内置了 其他的 编程语言!还有其它的东西!如果我没有记错的话,这台机器上至少还有三个独立的 Fortran 编译器 —— Fortran、FLAG(Fortran Load And Go —— FLAG 的编译速度在当时称得上“快”了,简直是快如闪电)。剩下的编译器 EFFORT 则是另一个极端 —— 也可能是 EFORT,只是发 “effort” 的读音,它的编译速度—相—当—慢,不过在我们眼里,它的确看上去拥有极致的代码优化。除此之外,我也短暂尝试过 APL 编程语言(LCTT 译注:这种编程语言的全称是:A Programming Language ?)以及(用于 APL 语言编程的有各种符号的“怪异”键盘)。在 APL 语言中,退格键不是用来删除已经输入的内容,反而是重写该操作符为其他的操作符。

—— Kevin Cole


你的第一门编程语言是什么?

雅达利 PILOT 语言以及雅达利 BASIC 语言(LCTT 译注: 雅达利 Atari )。我的父母给孩童时期的我买了一台雅达利 1200XL 计算机,我开始只是用他们来玩游戏或者完成一些艺术课程。家里有两盒卡带,我父亲告诉我它们是“适合成人使用的,因为不是为小孩子设计的,我不会对他们感兴趣”。所以,显然我无比好奇。终于有一天我禁不住找出并装载了它们。刚开始的时候我一头雾水,直到我找到一本我父亲买的有关这两盒卡带的书籍。我输入了书上的样例,发现能够实现一些事情的感觉是相当酷的。我当时还不能完全独立地编写程序,不过我可以拿来书中的样例,然后仅仅更改其中的部分内容,直到我能让它完成一些其他的事情或者使之崩溃进而只能撤销这些更改。我曾经计划再次尝试一遍,看看我还能记得多少,不过我一直都没有抽出时间(来做这件事)。

—— JT Pennington


你的第一门编程语言是什么?

ELAN。这是那一时期相当优秀的编程语言。尤其需要重点说明的是它是与 EUMEL 系统紧密结合的,可以用它做并行计算。

你花钱学习的吗?

它是一项课后活动。

你是自己选择它的吗?

不是。

为什么这么说?

我想学习弹钢琴,我的父母跟我说如果我愿意参加打字课的话我就可以得到一台钢琴。打字课的隔壁就是课后计算机俱乐部,我觉得那有趣多了。不幸地是,时至今日我也不会弹钢琴,计算机使我一直忙到了现在。

接下来发生了什么?

当我上大学的时候,他们还在使用打孔卡和 Fortran。我很庆幸我的高中老师允许我使用学校的并行机编程。此间,我也尝试了 BASIC 语言,但这比不上我学习的 ELAN,而且很枯燥。后来我转向 Pascal,Pascal 也比不上 ELAN。再后来就是 C 语言、Modula-2 语言和 Ada 语言,我最后发现了 Occam,并且使用它在 晶体电脑 transputer 上完成了很多任务。这是相当激动人心的,因为我们可以做更多的并行计算。能够使用 64 台晶体电脑是一件相当酷的事情。同时,接入各种网络配置也令人兴奋。这是几十年前的事情了。我看到了往日的高中生与今日的高中生的不同点。我们当时几乎没有资源(我直到大四的时候才买得起一台电脑),而今天电脑已经习以为常了。而且,电脑与类似 FLL(FIRST Lego League)这样的机器人使得降低编程的门槛成为可能。然而,今天的学生们也被随处可及的电子游戏以及其中炫酷的图像所分心。现成产品(像电子游戏、手机以及平板电脑等)使得今天的学生能够从闲暇时间中抽出用来学习机算机科学的时间很有限。我必须承认,如果在我长大之后也接触到了今天这样的电子游戏,我可能对计算机科学拥有完全不同的看法,并且也不会被我的同学们视作“书呆子”,而是成为一个游戏玩家。

不幸的是,我没有时间玩游戏,我的 RTX3090 显卡在运行人工智能算法。我真正想要的玩具是一台 A100 GPU 以及一套我现在远程使用的 DGX 系统。我认为由于 Google colab 以及其通过 Jupyter 可访问的特点,对人工智能的接触可以下放到高中水平。然而这一切都取决于带领你入门的高中教师。如果你的编程老师只是教你乐高机器人上的块编程,而不是 Python,或者只是教你使用 Scratch 而不是 Google colab。那么我们就没有利用那些学生早年间的潜力,也没有利用这些出众的基础设施。

—— Gregor von Laszewski


你的第一门编程语言是什么?

我在一台 Apple 电脑上接触到了 Logo 编程语言。它由麻省理工的 西蒙· 佩珀特 Seymour Papert 等人在 1967 年开发。这是一种为了教育目的开发的编程语言,是 Lisp 语言的一个子集。

我学习它是当时我参与的一项毕业教育项目的一部分。作为该项目的一部分,我使用 Logo 教一名五年级学生的几何学。在教这名学生 Logo 编程语言和这门课程的时候,我发现我在数学上的麻烦与无助在于无法可视化这些材料。在完成我的研究生课程以后,我使用 Logo 语言继续以相同的课程与编程语言教其他学生们几何与数学。学生们和我在这个过程中学习了数学,并开发了一些优美的图形,我们实际上是为一个“乌龟”机器人编程,在需要放在教室地板上的巨幅纸张上绘制我们的图像。我的编程经历让我开始寻找其他的方式来将数学带入学生的生活中,这让我开始接触 Python 以及 Python 中的“乌龟”模块。后来,我开始教学生们写 Python 程序,这些程序的特点是“屏幕上的”乌龟机器人可以创建优美的图像。与此同时,我也开始向这些学生介绍 Python 编程语言与逻辑思考能力。

—— Donald Watkins


你的第一门编程语言是什么?

ZX81 BASIC。

我还在上小学的时候,大概 10 岁或者 11 岁的样子,我的一个朋友得到了一台 ZX81 计算机。于是我自学了 BASIC 并编写了一些简单的程序尝试在他的机器上运行。1982 年的圣诞节,我得到了属于我自己的 ZX81 计算机,此后不久,ZX81 的硬件跟不上硬件发展了,我于 1993 年晚些时候转向了 ZX Spectrum ,自此之后,我也使用 Z80 汇编语言编写了一些程序。

多年以后,我偶然得到一款早期型的卡西欧掌上型计算器,它可以执行 BASIC 程序。这是 PB 系列的一款设备,有可能是 PB-200,不过我已经记不清具体的型号了。16 岁时在英国,我设法说服了我的老师允许我在我的 数学普通等级考试中) 使用它。我也关注过其他的编程语言,不过直到我在大学开始学习 Ada 之前,我都没有真正学过其他的编程语言。

—— Steven Ellis


你的第一门编程语言是什么?

我的第一门编程语言是 BASIC,那是在 80 年代早期的事了。

我的一个亲戚给他们的孩子买了一台 C64 计算机用来让他们学习计算机。他们只用这台计算机玩游戏,我也被邀请一起玩。不过他们还有一本关于 BASIC 语言的书,我非常好奇并做了尝试。我写了一些简短的代码,我甚至都不知道怎么保存它,不过当我看到计算机如我告诉它的那样工作的时候那仍然令人十分兴奋。这也说明我不是花钱来学习 BASIC 编程的,也不是我的选择,它是我当时能接触到的语言。几年后当我得到我的第一台计算机,一台 XT 兼容机后,我首先用 GW-BASIC 语言写了一些代码,GW-BASIC 是 BASIC 语言在 DOS 系统下的一种方言。

接下来发生了什么?

我第一次真正选择的编程语言是 Pascal。我问了一圈,又查了一些书籍,它看上去是在功能与难度之间的一个挺好的妥协。一开始,我用的是 Turbo Pascal,我用它编写了各种简单的游戏与图形。我热爱 Pascal,因此在上大学的时候,我甚至还在用它(FreePascal 和 Lazarus)来进完成测量自动化与地下水污染分布的建模。

—— Peter Czanik


你的第一门编程语言是什么?

卡西欧 fx-7200G 的编程语言的 一个变体,我想它可能没有自己的名字。

你花钱学习的吗?

不是。

你是自己选择它的吗?

也不是。

为什么这么说?

我在 13 岁生日时得到了一台可编程计算器(包装盒上说它是“计算机”……)。

接下来发生了什么?

一年后,上高一的时候,我在甚至没有一本教科书的情况下学习了 Pascal 语言 —— 我们的老师推荐的主要的学习 Pascal 的教材还是大学程度的,他认为这些教材对我们而言还是太难了 —— 因此我们用来理论教学与练习的课程实际上都是使用 BASIC 语言的,因此我也学了一些 BASIC 语言(虽然是无意的,但是从老师的角度来看的确是这样)。

我认为我是一名后来者 —— 一些我的同班同学在家里拥有一台内置了 BASIC 的计算机(Commodore 64、Spectrum Sinclair、Amstrad 等等)。上高中之前我已经对 BASIC 有所了解,高一的一年里,我和那些对 BASIC 有点了解又无法欣赏 Pascal 的优点的学生之间关系有点紧张。

后来,我上大学了(方向是数学与计算机科学),我们这些学生可以使用 DOS 电脑或者一些苹果公司的 Macintosh,或者是主要连接到 SunOS 4 共享机的一些终端机(文本终端,如果你幸运的话,有 X 终端)。我大二的时候(1993 年),某位朋友向我介绍了 Linux,它可以在家用机器上运行。我已经给自己买了一台新电脑(一台 AMD 386SX 兼容机,直到 8 年后它退役是,我才意识到它是 AMD 的,而不是我之前一直以为的英特尔 386 机器)。得知我的 8088 电脑不适合运行更现代的系统之后,我尝试使用 Linux 系统,在仅有 2MB 内存的情况下安装好 Linux 花了我几个月的时间。此后不久,我升级到了 4MB 内存,我也几乎不再进入 DOS 系统(虽然我仍然将它作为我的第二启动项保留了好几年)。我至今仍然记得当我能够完全在家里运行一个类 UNIX 系统时我的惊讶与激动之情,即便只是 X Window(在升级到 4MB 内存以后)。

回到编程语言,在我大学期间,我们学习/使用了 Pascal 语言(第一门入门课程),C 语言(系统编程入门课程)以及一些课程专用的语言,Eiffel 语言(在面向对象课程中学习的),Matlab 语言(为了我的一项研究),等等。

我的第一份真正的工作是参与一个基于 Unix 的项目(我们主要使用运行 Ultrix 系统的 DECstation 工作站),我主要是使用 Lisp 语言(Lucid Common Lisp)和 C 语言。我就是在这时学习的 Lisp 语言,虽然我后来没有再使用过它,而且这段经历也给我留下了很多美好回忆。作为一个个人项目,我设法使该项目运行在 Linux 系统的个人电脑上,通过使用一个用于 SCO Unix 的 LCL 副本。我设法使之能在 Linux 下工作,主要是通过 ibcs2 组件,和用交叉编译器工具链重新编译的 GNU libc 库实现的(在 Linux 上使用 gcc/as/ld 生成用于 SCO 的 COFF 库)。我非常自豪地向我的领导演示这一应用,通常需要一台价值约 3 万美元的工作站,却可以在一台 5 千美元的电脑上运行。然而它从来没有被投入到生产环境中过。

—— Yedidyah Bar David


你的第一门编程语言是什么?

TI-BASIC。

你花钱学习的吗?

不是,不过我那时才 10 岁。

你是自己选择它的吗?

不是。

为什么这么说?

这是 TI-99/4A 计算机上仅有的编程语言了!嗯,这台计算机上也有 “Extended Basic” 语言,不过这只是 BASIC 的一个拓展指令集。你实际上可以在 16Kb 内存中编写像样的游戏。

接下来发生了什么?

下一步就是输入通过纸质杂志上的程序并把它们记录到录音带上。不过我与我哥哥在这一步上做得更加深入 —— 我们通过将结果的声音通过电台广播的方式让别人录制下来!由于清晰的录音和足够的纠错,在 1985 年就实现了通过无线方式分发和下载程序。

—— Thierry Carrez


你的第一门编程语言是什么?

GW-BASIC。

你是自己选择它的吗?

不是。

为什么这么说?

它是针对初学者的标准教学内容。

接下来发生了什么?

我开始在一家公司里做计算机硬件专家。

—— Hüseyin GÜÇ


你的第一门编程语言是什么?

BASIC,在 VIC-20 机器上。

你花钱学习的吗?

不是。

你是自己选择它的吗?

我只是选择了那台电脑。

为什么这么说?

我发现 VIC 计算机至少是跟我在学校里见到的 PET 机器最兼容的机器了。而且它有一个好看的键盘。

接下来发生了什么?

接下来就是编程时间了,因为这台机器也没有其他事情可以做了——我学到了很多。

—— Bob Murphy


你的第一门编程语言是什么?

如果我没有记错的话,那是 2004 年还是 2005 年。我还在上学,可能是 5 年级,我接触到了 BASIC。此前,我还学了有关 “Window Logo” 的一些知识。

你花钱学习的吗?

我父母花钱供我上学了。

你是自己选择它的吗?

根本不是。

为什么这么说?

这是由我学校学习的课程决定的。

接下来发生了什么?

它彻底燃起了我对编程的兴趣,我继续在课外学习班中学习了 C/C++ 语言。我的父母非常鼓励我,并且在设法给我提供了额外的费用。我经常是整个计算机补习机构里最后仅剩的那个“孩子”。我是唯一一个学习编程语言的人,而其他人大多学习 MS Office 或 PhotoShop 等。哈哈。好了,剩下的就是历史了。

—— Kedar Vijay Kulkarni


你的第一门编程语言是什么?

Fortran,因为那是很久之前的事了。

你花钱学习的吗?

不是的,我是通过上计算机课程学习的它。

你是自己选择它的吗?

不,那是仅有的选择。我很幸运我用的是终端而不是打孔卡片,我可怜的丈夫在学习 Fortran 程序的时候用的还是打孔卡片。

为什么这么说?

我是人文专业毕业(英语与人类学双专业),我临毕业的时候实际上必须找一份工作。我想,学一门计算机课会让找工作容易一些。事实证明,就市场需要的技能而言,这一门编程课程是我学到的最有价值的课程。它给我在后续的学习 Python、理解 Git 以及为 Red Hat 撰写和编辑文档时提供了一个很好的基础。

接下来发生了什么?

我回家后在一台我父母购买的 TI-99 计算机上自学了 BASIC 语言(我不确定他们为什么买了它,或许是为了我的弟弟)。早些年的 Fortran 基础让我在 Windows 出现之前能够更加容易使用早期个人电脑,因为我能够搞懂 DOS。这显然是一个简陋的开始。

—— Ingrid Towey


你的第一门编程语言是什么?

2001 年,我通过阅读艾迪生-韦斯利出版社的 《Goto Java》 这本书学习了 Java SE 1.2。

你是花钱学习的吗?

没有,我当时还在学校里。

你是自己选择它的吗?

是的。

为什么这么说?

我想要使用 Java Applets 制作交互式网页。

接下来发生了什么?

我上大学了,接触到了自由和开源软件(FOSS),并且学习了 ANSI C 语言。

—— Joël Krähemann


你的第一门编程语言是什么?

我准备就此写一篇文章,不过我已经写了这篇了:《参与开源软件并不必须要计算机科学学位(2020 年 8 月 6 日)》。

这篇文章中的重点如下:

我的父母买了一台 Apple II+ 的克隆版,名为 Franklin ACE 1000。我和我的兄弟自学了如何使用 AppleSoft BASIC 编程。我的父母给我们买了一些书,我们如饥似渴地吸收了这些书籍。我通过阅读书上的内容学会了 BASIC 语言的各个方面,然后写了一个练习程序。我最喜欢的娱乐就是编写游戏和仿真程序。

我停留在 BASIC 语言上很长时间。但是当我上了大学以后,我开始学习其他的编程语言。我是物理学系的一名学生,作为学习数值分析的先导条件,我们必须学习 Fortran 语言。因为已经学过了 BASIC 语言,我觉得 Fortran 相当容易学习。Fortran 与 BASIC 是非常相似的,尽管根据我的经验,Fortran 的局限性更大。

我的哥哥在另一所大学里主修计算机科学,他给我介绍了 C 语言,我立马就爱上了用 C 语言编程!它是一种简明直接的语言,给了我相当大的灵活性,让我能够编写有用的程序。但是我的学位计划里没有足够的空间让我选择一门不适用于我所选择的物理学专业的课程。为此,我转而通过读书结合图书馆的参考指南来自学 C 语言。每当我希望学习新的主题的时候,我就在参考指南中寻找相应的内容,然后实践编写一个相应的程序来锻炼我的新知识。

随着时间的推移,我利用我所学的内容来学习其它的编程语言。我编写了大量 Unix Korn 命令行脚本、Linux Bash 脚本和 AWK 脚本。我还用 Perl 写些实用小工具,后来也用 Perl CGI 以及 PHP 做网站开发。我学习了够用的 LISP 语言来调整我的 GNU Emacs 副本,也学习了够用的 Scheme 来参与一个使用 GNU Guile 的项目。

—— Jim Hall


你的第一门编程语言是什么?

我的第一门编程是 BASIC,准确地说是 雅达利 Atari BASIC 语言。

20 世纪 80 年代,我家买了一台雅达利 400 家用计算机。我用它来玩游戏,不过它也自带了一盘 BASIC 语言的卡带。它还包括一个盒式录音机(雅达利 1010)。那些年,程序可以存储在标准的录音带上。雅达利 400 没有内部存储空间,因此我也学会了如何将我的程序保存到录音带上,以及随后如何重新加载它们。除了常见的“Hello World”的程序,我还写了一些可以用操作杆来控制声音与图形的程序。我现在还记得用来设置和读取某些设置属性的 PEEKPOKE 命令,比如颜色或声音设置。

你花钱学习的吗?

不是。

你是自己选择它的吗?

是的,它是雅达利中内置的编程语言,因此我确定尝试一下——我非常喜欢用它编程。

接下来发生了什么?

一段时间之后,我可能对雅达利以及电子游戏失去了兴趣。直到 90 年代中期,当我参加计算机课程以辅修计算机科学时,我才重新对计算机和编程重新感兴趣。这些课程教会了我 C 语言、汇编语言以及很多其他的通用计算机与网络技术。作为我的硕士学位的一部分,我后来又学习了 Java。在我的职业生涯中我只进行过数量不多的正式编程工作,主要是在本世纪 10 年代中期时在 ColdFusion 环境下使用 Java 语言。从编程方面来说,命令行脚本是我的主要领域,主要是在 Bash 与 Windows 瞎,不过只要有需要,我也会进行特定目标的编程。我使用过 工作控制语言 Job Control Language (JCL)用来在大型机系统之间进行自动文件传输。我也使用过 Python 用来将 REST API 的查询结果返回给企业的监控面板。我仍然认为我早期的 BASIC 编程经历是值得的,因为我获得了对软件和编程的尊重。

—— Alan Formy-Duval

(题图:MJ/0cf8b9b0-fb92-4131-ab89-ee0880c1b4a9)


via: https://opensource.com/article/21/8/first-programming-language

作者:Jen Wike Huger 选题:lujun9972 译者:CanYellow 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Apache 软件基金会(ASF)围绕一套独特的流程和价值观构建,以确保其开放性。

 title=

作为 Apache 软件基金会 Apache Software Foundation (ASF) 的长期志愿者和导师(以及现任董事会成员)和 Apache 孵化器的副总裁,我很自豪能够提供我对 ASF 运营的独特流程和价值观的见解。

ASF 以开源 Apache 许可证 为中心,采用开放而务实的方式运作,与许多其他基金会不同,是一个为公共利益而建立的慈善组织。例如,ASF 董事会由成员选举产生。没有人可以购买董事会席位,ASF 的联属关系是与个人建立的,而不是与公司建立的。一般来说,参与 ASF 的任何个人的公司隶属关系都不会被说明,这并不重要。结果是,ASF 营造了一个供应商中立的环境,公司可以在其中舒适地协作构建有价值的项目。

让我们看一下 ASF 如何选择其项目、开源许可证的现状以及你对 ASF 未来的展望。

Apache 孵化器流程和 “Apache 之道”

潜在的 Apache 项目始于 Apache 孵化器 Apache Incubator ,在那里它们接受帮助和指导,以期望能够毕业成为顶级的 Apache 项目。任何人都可以为孵化器制定项目提案(他们只需要找到 ASF 内部愿意帮助支持它的人)。在审查潜在的项目时,ASF 更愿意看到涉及到的人和实体的多样性,而不仅仅是一个单一的法人团体。我们发现,这种更广泛的多样性会导致项目被更广泛地使用并具有更长久的生命力。

孵化器的主要目的是帮助项目学习并按照我们所说的 Apache 之道 The Apache Way 运作。这是一套为社区主导的发展提供最佳实践的价值观。“Apache 之道”的最重要方面包括严格的供应商中立性优先考虑社区,甚至优先于项目代码。开放和透明的交流也是至关重要的:ASF 要求所有项目交流都是公开可访问的,并永久归档以支持异步协作。此外,开源的 Apache 许可证附加在所有被接受的项目上,确保所有源代码也是公开可用的。

在孵化器中,我们首先会根据项目与 Apache 价值观的一致程度来考察项目是否适合。不需要百分之百的一致,但项目需要愿意适应。还将从许可证的角度讨论确保项目与 Apache 完全兼容,在某些情况下,将根据需要删除或替换依赖项。“Apache 之道”会朝构建自我维持的社区方向做准备。尽管如此,对于一些项目来说,建立社区可能很困难,有些项目无法通过孵化器。

“Apache 之道”对繁荣社区至关重要的另一个关键元素,是基于共识做出决策。根据我们的经验,开放讨论和避免单个项目负责人对该流程至关重要。我们曾经有过一些孵化项目,有一个试图保持控制权的强势人物,由于这个原因,这些项目没有成功。

开源和 Apache 许可证

开源项目有很多种。同时,使用开源许可证不会自动使项目开源。项目的社区才是释放开源的益处,并促进更大的开放和透明度的关键。

一些公司高调地从 Apache 许可转向不太宽松的许可。如果你的公司从开源许可证更改为非开源许可证,我不得不质疑你们当初为什么要选择开源许可证。这可能意味着商业模式不适合开源。我认为,企业改变开源许可证,对他们的社区和用户造成了巨大的伤害。

正如我所说,ASF 是一个非营利性慈善组织,致力于为公共利益而开发软件。这就是宽松的 Apache 许可证的目的。从软件中赚钱很好,但这不是 Apache 许可证的目的。作为一个规则,ASF 不允许任何使用领域限制。任何人 都可以以任何理由使用 Apache 项目。真正开源背后的理念是一些使用项目的人会回馈它,但绝对不能强制要求贡献。那些似乎困扰于这一点的公司需要明白,这不是开源的运作方式,也不是它应该的运作方式。

开源和 ASF 的未来

在过去的五到十年里,开源无疑得到了广泛的采用,尤其是在企业中加速采用。我可以肯定地说,地球上几乎没有哪个软件不包含或不依赖某种方式的开源项目。这种采用率只会增长。

与某些基金会不同,ASF 在项目招募方面相当放手。期待 ASF 能一如既往地坚持下去,并与那些看到 ASF 方式的价值的项目一同,阐明 “Apache 之道”的价值。随着 ASF 项目在重大行业变革中处于领先地位(最初是 Web 服务器,最近是通过 Apache Hadoop 和 Spark、Cassandra 和 Kafka 等大数据项目),这种放手的做法已被证明是成功和可持续的。

下一步,ASF 有几个大型的人工智能和机器学习项目。此外,一些物联网项目也通过了 Apache 孵化器,其中几个可能会变得相当有影响力。展望未来,期待 ASF 将一如既往,推出一些主要行业参与者使用的非常成功的开源项目,以及其他小型项目,提供至关重要的(如果有更多的利基市场的话)吸引力。

(选题:MJ/05f6689e-49df-47db-ba00-924d4fc612fd)


via: https://opensource.com/article/21/6/apache-software-foundation

作者:Justin Mclean 选题:lujun9972 译者:hanszhao80 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

开源对于数据分析非常重要,它能为用户、社区成员和公司带来长远利益。

我曾经写过介绍 Cube 社区的文章,至今已过去了一年多。随着和社区会员以及其他供应商在一起工作,我更坚信开源对于数据分析工作是很有好处的。我也认为,需要不断思考开源为什么重要,以及开源是如何为人们带来长远利益的。

开源对于用户和客户的好处

我从 Cube 社区听说的第一件事就是:他们经常可以从与其他社区成员的交流中得到技术支持,这种支持往往好于使用需要付费的专有软件获得的支持。在很多开源社区中,我发现,社区成员很乐意帮助别人(特别是帮助新手),并且把这种帮助看作回报开源社区的方式。

在开源社区,你不需要获得许可就可以加入。一个好的开源社区不但服务于开发者,而且令人们感觉到有一种信任的文化,认为与他人在聊天室、论坛和问题跟踪工具进行开放式讨论是一件愉快的事。这对于诸如数据工程师或数据分析师之类的非开发者来说也很重要。

当然,借助开源软件,还可以直接查看代码、修复错误或为项目添加新功能。以 Cube 社区为例,对于 GraphQL 的支持就是我们去年的亮点,我们的社区成员为项目 贡献了这些功能

对一个活跃的社区来说,也是很有好处的。即使当供应商不能及时地发布修复版本,你仍然可以自行修改,并可以在等待官方修复版的这段时间内使用修改后的版本。社区成员和用户也不愿意被供应商的奇思妙想所束缚,而且使用开源软件时也不存在升级的压力。

开源社区在 GitLab、GitHub、Codeberg、YouTube 等各种地方留下了很多“面包屑”,这令衡量活跃程度和社区参与度更容易,也可以衡量社区参与和文化的水平。所以,即使在试用软件前,你也可以在做决定之前了解到它的社区(以及公司)的一些情况。

开源对公司的好处

没有其他办法比开源更能降低使用软件的障碍了。在早期,开源可以提高技术受众的认知度。早期的使用者往往后来会成为你的最忠实的粉丝。

早期的使用者也是加速产品发展的催化剂。他们对于产品的反馈和功能需求(例如对问题的追踪)能实现对真实用例的洞察。另外,很多开源爱好者可以合作开发(比如通过代码仓库)新功能和进行 BUG 修复。不用说,这对于创业早期的公司来说是很重要的,因为当时缺少开发和产品相关的资源。

你对社区的关注会令它发展壮大,并且呈现多样化趋势。多样化不仅体现在人数和地域方面。你需要来自新兴行业的用户或从事各种职业的用户。以 Cube 社区为例,在一年前我常常会跟一些开发者交流,但一年后与我交流得更多的是那些数据使用者和用户。

在良好的开源社区里,合作文化降低了准入门槛,不仅对于开发者,对于其他提问者、分享观点者或愿意作出非技术性贡献的人们来说都是如此。随着公司和社区的发展,你可以更好地接触到不同的观点。

对包括社区成员在内的广大人群来说,开源使合作变得更容易。例如,你需要跟其他贡献者在同一个数据库驱动或集成上进行合作,如果可以通过开源仓库进行合作,就很方便了。

关于社区

以上这些好处都降低了使用软件和协作开发的门槛。开源模型不仅对单个软件或公司有帮助,它还能令整个生态和行业加速发展。我希望在数据分析领域看到更多开源的公司和社区,同时希望人们持续关注开源产品。

(题图:MJ/50a877f5-e0e1-4f66-91bf-f1f60b4a9023)


via: https://opensource.com/article/22/9/open-source-data-analytics

作者:Ray Paik 选题:lkxed 译者:cool-summer-021 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

有时成为开源贡献者最困难的是意识到自己能够做出多大的贡献。

在今年的北美 DrupalCon 上,EPAM 解决方案架构师 John Picozzi 发表了关于非代码贡献重要性的演讲。他谈到每个人可以参与非代码贡献,以及为什么他认为这个话题很重要。本文是 John 演讲的文本改编;在下方可以找到在 DrupalCon 上完整演讲视频的链接。

什么是非代码贡献?我问了谷歌这个问题并得到了以下答案:“任何有助于开源项目但不涉及编写代码的贡献。”谷歌,听我说谢谢你,但这点我早就懂了。如果你要我深入挖掘,我会说非代码贡献意味着你提供个人的时间、技能和资源来使项目受益。

谁能成为开源贡献者?

早期,“贡献”意味着编写代码。 最初,Drupal 的运行模式是“由开发者构建,为开发者服务”。然而,多年来,Drupal 社区已经转变了这种思维方式。我们的社区已经学会像重视代码一样重视非代码贡献:任何贡献都是贡献。

开源是在聚会、训练营和大会中建立的;它是由社区建立的,建立于社区之中。事实上,这些活动中的大部分贡献都与编程无关。要举办这些活动,你需要的是参与者、演讲者、培训师和组织者。不要误会我的意思:当然,开源社区仍然需要编写代码的人,但这并不是唯一需要的东西。如果你参与社区,分享想法、提出问题或提供帮助——恭喜你,你已经在做出贡献了!

“贡献者”是自我称号(“我是贡献者”)还是社区赋予(“我们说你是贡献者”)?可以肯定地说,每个人都是贡献者:会议参加者、创建 UI 和模块徽标的设计师、帮助市场推广模块或活动的营销人员等等。不要等待别人给你那个称号。你可以参与其中,并自信地告诉其他人你是贡献者。

有很多方法可以激励别人(或你自己)做出贡献。金钱并不总是最重要的激励因素。但是,有时贡献可以是有偿工作。许多人做出贡献只是因为他们想回馈社区。

当被问及为什么做出贡献时,每个人可能会给出与同伴不同的答案,但以下是一些最常见的回答:

  • 它让你感觉良好
  • 建立和提高技能
  • 职业发展
  • 建立人际关系/网络

这个列表无穷无尽,并且与贡献者本身一样多样化。每个贡献者都有自己的理由,没有正确或错误的回答。

为开源做出贡献的原因

为什么非代码贡献对开源很重要?

对于项目的健康运转,非代码贡献与编写代码一样有价值。它有助于让更多具有各种技能的人参与社区。每个人都可以提供一些东西,也可以分享一套独特的技能。

所有项目都有非代码要求,并不是每个人都是开发人员或编码人员。此外,不同的观点都应该得到表达。例如,营销人员可能与开发人员有不同的经验和观点。每一项努力都以某种方式推动开源向前发展——这就是为什么非代码贡献是必不可少的原因。

常见的挑战

贡献的定义可能听起来很简单:只需分享你的知识、表达你的想法并帮助社区即可。然而,贡献者面临着一些挑战。最常见的一种是“ 冒名顶替综合症 imposter syndrome ”(自我怀疑情绪)。不太有经验的贡献者可能会担心他们的贡献没有价值或没有帮助。你可以通过专注于自己的特定技能和热情来克服这种感觉。例如,如果你有组织活动的经验,你可以利用这个经验专注于组织活动和在活动中帮忙。

为了克服这些消极的想法,你可以将贡献转化为一种积极的体验。工作/生活/贡献的平衡很重要。贡献应该是愉快的,而不只是另一份工作。如果可以,请把你的贡献成果用在你的日常工作中。 许多雇主鼓励你做出贡献并从中受益,你甚至有可能基于自己做出的贡献建立职业。

不要让自己筋疲力尽,不停在晚上和周末做出贡献。你只需要在一天的开始或结束时增加 30 分钟的贡献时间,或者如果可能的话,将贡献纳入你日常工作中即可。

如何做出你的第一个非代码贡献?

看到这里,我希望你已经开始思考,“好的,我准备好了。我要做些什么?” 你该如何参与?去做就对了!你只需要开始:例如,开始在 Drupal 社区中做出贡献,去 问题队列Drupal 聊天 那儿提问,或者联系活动组织者寻求建议。整个社区都在等着支持你呢。

一张幻灯片,上面展示了许多 Drupal 社区项目徽标,包括区域性 Drupal 聚会、Drupal 咖啡、Drupal 人才和教育, 表明参与社区项目有着大量和广泛的机会。

请记住遵从自己的技能和兴趣。你已经拥有了技能和兴趣,请用它们来激发你的贡献。你的兴趣可能和你的技能不同:有些事情可能你几乎没有经验但却一直想了解更多,你也可以决定为此做出贡献。单纯地与人交谈、分享知识、提出问题、参加聚会或线下见面,并做出贡献。

我想引用玛格丽特·米德(美国人类学家)的话来结束对我的开源贡献的完美描述:“永远不要怀疑一小群有思想、有奉献精神的公民可以改变世界。事实上,世界的改变只能依靠这个了。” 米德博士并没有说“一小群代码编写者或开发人员”。 她说,这是一群有思想、有奉献精神的公民——他们有着极大的热情和许多不同的技能。这就是开源的动力,也是 Drupal 的动力。

完整视频可以在 YouTube 上观看。

(题图:MJ/2d680e28-3cb4-4644-896b-a406ba3b596e)


via: https://opensource.com/article/22/8/non-code-contribution-powers-open-source

作者:John E. Picozzi 选题:lkxed 译者:XiaotingHuang22 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出