以下是 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”的程序，我还写了一些可以用操作杆来控制声音与图形的程序。我现在还记得用来设置和读取某些设置属性的 PEEK 和 POKE 命令，比如颜色或声音设置。你花钱学习的吗？不是。你是自己选择它的吗？是的，它是雅达利中内置的编程语言，因此我确定尝试一下——我非常喜欢用它编程。接下来发生了什么？一段时间之后，我可能对雅达利以及电子游戏失去了兴趣。直到 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中国 荣誉推出
开源爱好者们对他们所喜爱的 Linux 内核模块进行了评价。Linux 内核今年就要满 30 岁了! 如果你像我们一样对此特别重视，那么让我们本周用几个特别的文章来庆祝 Linux。今天，我们先来看看来自社区对“你不能没有哪个 Linux 内核模块？为什么？”的回答，让我们听听这 10 位爱好者是怎么说的。1我猜一些内核开发者听到我的回答后会尖叫着跑开。不过，我还是在这里列出了两个最具争议性的模块：第一个是 NVIDIA，因为我的工作笔记本和个人台式机上都有 NVIDIA 显卡。另一个可能产生的仇恨较少。VMware 的 VMNET 和 VMMON 模块，以便能够运行 VMware Workstation。— Peter Czanik2我最喜欢的是 zram 模块。它在内存中创建了一个压缩块设备，然后它可以作为交换分区使用。在内存有限的情况下（例如，在虚拟机上），还有如果你担心频繁的 I/O 操作会磨损你的 SSD 或者甚至更糟糕的基于闪存的存储，那么使用基于 zram 的交换分区是非常理想的。— Stephan Avenwedde3最有用的内核模块无疑是 snd-hda-intel，因为它支持大多数集成声卡。我可以一边听音乐，一边在 Linux 桌面上编码一个音频编曲器。— Joël Krähemann4如果没有我用 Broadcom 文件生成的 kmod-wl，我的笔记本就没有价值了。我有时会收到关于内核污染的信息，但没有无线网络的笔记本电脑有什么用呢？— Gregory Pittman5我不能没有蓝牙。没有它，我的鼠标、键盘、扬声器和耳机除了用来挡住门板还有啥用？— Gary Smith6我要冒昧地说 全 都是。 说真的，我们已经到了随机拿一块硬件，插入它，它就可以工作的地步。USB 串行适配器能正常工作显卡可以使用（尽管可能不是最好的）网卡正常工作声卡正常工作所有这些模块整体带来大量可以工作的驱动程序，令人印象深刻。我记得在过去那些糟糕的日子里，我们曾经大喊 xrandr 魔法字符串才能来使投影仪工作。而现在，是的，当设备基本不能正常工作时，才真的罕见。如果我不得不把它归结为一个，那就是 raid6。— John 'Warthog9' Hawley7对于这个问题，我想回到 20 世纪 90 年代末。我是一家小公司的 Unix 系统管理员（兼任 IS 经理）。我们的磁带备份系统死了，由于“小公司”预算有限，我们没有急于更换或现场维修。所以我们必须得把它送去维修。在那两个星期里，我们没有办法进行磁带备份。没有一个系统管理员愿意处于这种境地。但后来我想起了读过的 如何使用软盘磁带机，我们刚好有一台刚换下来的塔式电脑，它有一个软盘磁带机。于是我用 Linux 重新安装了它，设置了 ftape 内核驱动模块，进行了一些备份/恢复测试，然后将我们最重要的备份运行到 QIC 磁带上。在这两个星期里，我们依靠 ftape 备份重要数据。所以，对于那些让软盘磁带机在 1990 年代的 Linux 上工作的无名英雄，你真是太厉害了！— Jim Hall8嗯，这很简单。是 kvm 内核模块。就个人而言，我无法想象在没有虚拟机的情况下完成日常工作。我愿意相信我们大多数人都是这样。kvm 模块在使 Linux 成为云战略的核心方面也发挥了很大作用。— Gaurav Kamathe9对我来说，是 dm-crypt，它是用于 LUKS 的。参见：https://www.redhat.com/sysadmin/disk-encryption-lukshttps://manpages.debian.org/unstable/cryptsetup-bin/cryptsetup.8.en.html知道别人无法看到你的磁盘上的内容是非常棒的，例如，如果你的笔记本丢失或被盗时。— Maximilian Kolb10对于密码学基础，很难超越 crypto 模块和它的 C API，它是如此简洁明了。在日常生活中，还有什么比蓝牙提供的即插即用更有价值的吗？— Marty Kalin在评论中与我们分享。你的生活中不能没有什么 Linux 内核模块？via: https://opensource.com/article/21/8/linux-kernel-module作者：Jen Wike Huger 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
在结束了一天的远程会议、邮件往来、写代码和其他协作工作后，你在晚上如何放松自己呢？这个奇怪的时代一方面给我们放慢脚步的机会，但另一方面来说，却比以前更忙了，尤其是当你除了照顾自己还要照顾家人的时候。俗话说，空杯子倒不出酒。所以，让我们看看在关上电脑或者完成最后一件工作之后，能为自己做些什么？1、走出家门，做几次深呼吸，不要在乎是不是下雪天，让新鲜的空气从肺部充满全身。如果可以的话，在院子里走走，或者去街上逛逛。2、如果有时间的话，给自己沏杯茶，红茶含有咖啡因，最好不要晚上喝，可以喝绿茶或者花果茶，然后在你穿上鞋（或许还有外套）时让它稍微凉一下。把茶倒在保温杯里，在小区周围散散步。不用设置目标或者目的地，就随便走走。如果你时间不充裕的话，可以定一个 15 分钟的闹钟。3、放一首突然想到的歌，或者听之前想听但是一直没机会听的歌。4、如果你有时间的话，别在椅子上继续坐着，可以站起来跳一段舞活动活动，或者到床上平躺着，躺着的时候什么也不要想，放空自己，让大脑休息休息。研究表明，给大脑一段空白时间后可以更好的思考。5、打开你的 电子书应用 或者拿起一本纸质书，看纸质书相对来说对眼睛好点。享受轻松的阅读，如果不能长时间阅读的话，起码给自己留出能阅读一个章节的时间。6、制做一些美食。享受把从杂货店买到的基本的食材按照菜谱做成一份美味佳肴的成就感和兴奋感。你也可以在晚上把其中一些综合起来做，好好放松。如果你是 IT 人，那么无论是在 早上、中午、晚上用这些方式放松都很有效，因为现在我们都是在家工作，远程办公，没有和同事面对面交流时的闲暇。那么，你的晚上放松方式是什么?via: https://opensource.com/article/20/11/evening-rituals-working-tech作者：Jen Wike Huger 选题：lujun9972 译者：Arzelan 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
喜欢列表？看看这个便捷的开源应用程序列表，以管理你所有的列表！奇妙清单（Wunderlist）是一款清单应用，受到很多人的喜爱，但从 2020 年 5 月 6 日起，它就永远停止了。它的网站鼓励现有用户下载并使用“微软待办”来代替它。这很诱人，因为它可以轻松导入你多年来制作的所有这些列表。不过话又说回来，也许这是个机会，可以“近藤麻理惠”一下这些列表，并削减一些事务。（你真的需要 30 个列表吗？很显然，我觉得我需要，所以我不做评判。）我有各种各样的清单，从“2020 年花园的植物”到“给丈夫的礼物”。有些是清单，有些是待办事项清单，有些是为了清单而清单。对我和我丈夫来说，最有用的清单是我们共享的杂货清单。我们都有手机上的应用程序，我们都把东西添加到列表中，但在他去购物之前，我们分别在手机上审查它（是的，你没看错），他把东西放进购物车时，他就会勾掉它。这让整个过程变得出奇的高效，我想我们节省了一些钱，因为我们喜欢坚持按清单购物。虽然奇妙清单的用户很喜欢它，但它并不是完全独一无二的。还有无数的列表应用。对于奇妙清单，我特别喜欢它将简洁性和设计感结合在一起，而且它成功实现了一些有用的功能，比如与他人分享和协作，列表的动态复选框，以及在移动和网页界面上的良好用户体验。我也很喜欢用它来做一个不“活跃”文档的列表：一个我不会每周都回顾或定期进展的列表，就像我用来进行头脑风暴的许多列表一样（包括我一直想写的小说...）。从这些年来我们发表的许多精彩文章中，我整理了一系列奇妙清单的开源替代方案，从简单的任务管理和待办事项清单到复杂的笔记记录和流程管理，这些列表工具可能会满足你的需求。或者，如果你是那个在丢得到处都是的纸条和便签上书写任务和备注的人，这可能是尝试这些数字工具之一的好时机。Tasks：可与 OwnCloud 配合Tasks 是一款自由开源的应用，你可以从 F-droid 安装。Tasks 是一款只适用于手机的应用，但它可以同步到各种地方，非常灵活。你可以将你的列表保存到 NextCloud 或 OwnCloud、Google Tasks、Apple Reminders 以及几乎所有你有账户的 CalDAV 服务器上。Tasks 的默认视图是每日视图，所以你输入的任何任务都被假定为从今天开始的任务。如果你像我一样，想维护几个不同的列表，你可以用标签来实现。当你创建一个标签时，你就为任务创建了一个类别。你可以为它指定一种颜色和一个图标，这样每个任务列表都是独一无二的。这需要一点时间来适应，但标签有很多优点。因为所有的任务都是有标签的，你可以通过点击你想过滤的标签来查看任务组，但你也可以按天甚至按地点过滤。这意味着，当你去采购杂货时，你的杂货列表会成为活跃的默认列表，而当你回到家时，你的日常生活列表又会成为活跃的列表。通过将你的数据同步到你的一个在线账户，你可以与亲人、合作者和同事分享列表。另一个伟大的功能是，如果你每天早上上班时都有相同的任务，或者每周杂货清单中有 20 个相同的项目，你可以创建定期重复的任务。评测者：Seth KenlonOpenTasks：适于长列表OpenTasks 是一款优秀的任务管理工具，可以创建带有各种设置的个人任务。它在创建任务时支持多种字段，从基本的东西，如名称和描述，到更复杂的项目，如选择任务是私人、公共还是机密。OpenTasks 与其他替代品最大的不同之处在于它在应用的主屏幕上使用了选项卡。这些选项卡可以让你快速看到到期的任务、即将开始的任务、按优先级排序的任务，以及按当前完成进度排序的任务。许多其他应用程序支持做这样的事情，但 OpenTasks 很快就能轻松访问这些列表。阅读完整的 OpenTasks 评测，作者：Joshua Allen Holm。Mirakel：嵌套列表的绝佳之选Mirakel 是一款任务管理应用，它拥有现代化的用户界面，并支持你在这样一款程序中可能想要的几乎所有格式。Mirakel 在基础层面上支持多个被称为“元列表”的列表。创建一个单独的任务有大量的选项，有截止日期、提醒、进度跟踪、标签、备注、子任务和文件附件，所有这些都构成了任务条目的一部分。阅读完整的 Mirakel 评测，作者：Joshua Allen Holm。Todo：简单有效，随处可用Todo.txt 是我不断反复推荐的两个待办事项和任务管理应用之一（另一个是 Org 模式）。而让我不断推荐的原因是，它简单、便携、易懂，而且有很多很棒的附加组件，即使一台机器有这个程序而其他机器上没有，也不会破坏它。而且由于它是一个 Bash shell 脚本，我从来没有发现不支持它的系统。阅读更多关于如何安装和使用 Todo.txt。阅读完整的 todo.txt 评测，作者：Kevin Sonney。Joplin：最佳私人列表Joplin 是一个 NodeJS 应用程序，它可以在本地运行和存储信息，允许你加密任务，并支持多种同步方法。Joplin 可以作为控制台或图形应用程序在 Windows、Mac 和 Linux 上运行。Joplin 还拥有 Android 和 iOS 的移动应用，这意味着你的笔记随处可用，而不需要大费周章。Joplin 甚至允许你用 Markdown、HTML 或纯文本来格式化你的笔记。阅读完整的 Joplin 评测，作者：Kevin Sonney。CherryTree：最好的 Evernote / OneNote / Keep 替代品CherryTree 是一个 GPLv3 许可的应用程序，它以节点的形式组织信息。每个节点都可以有子节点，让你轻松组织你的列表和思想。而且，子节点可以有自己的子节点，具有独立的属性。阅读完整的 CherryTree 评测，作者：Ben Cotton。附赠：Wekan，给看板粉丝 看板 kanban 是当今敏捷流程的主流。我们中的许多人（包括我自己）不仅用它们来组织我们的工作，还用它们来组织我们的个人生活。我认识一些艺术家，他们使用 Trello 这样的应用程序来跟踪他们的委托清单，以及正在进行和已经完成的工作。但这些应用往往与工作账户或商业服务挂钩。让我们看看 Wekan，这是一个开源的看板，你可以在本地或你选择的服务上运行。Wekan 提供了与其他看板应用相同的功能，比如创建面板、列表、泳道和卡片，在列表之间拖放，分配给用户，给卡片贴标签，以及做几乎所有你在现代看板中期待的事情。阅读完整的 Wekan 评测，作者：Kevin Sonney。via: https://opensource.com/article/20/5/alternatives-list作者：Jen Wike Huger 选题：lujun9972 译者：wxy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
这些主意都用到了有关的开源技巧。人们可以做些什么来拯救地球？这个问题可能会让人感到压抑，因为有时我们感觉个人可以做的贡献太少了。但是作为地球公民，我们从来不是一个人。所以，我向我们的作家社区征集了一些开源软件或硬件可以帮助改变现状的方法。以下是他们的回复。九种利用开源的方法来拯救地球的方式1、在你的终端禁用闪烁的光标这听起来可能有点傻，但是那个无关紧要的闪烁的光标可能导致每小时两瓦特的额外电力开销。如果要禁用光标闪烁，可以通过更改终端设置： 编辑 Edit > 偏好设置 Preferences > 光标 Cursor > 光标闪烁 Cursor blinking > 禁用 Disabled 。由 Mars Toktonaliev 推荐2、减少有关动物产品和加工食物的消费这样做的一种方法是在你的手机中添加这些开源的 App：Daily Dozen、OpenFoodFacts、OpenVegeMap 和 Food Restrictions。这些 App 可以帮助你准备一份健康的素食饮食计划，为你找到素食主义者和严格素食主义者可以就餐的餐厅，还可以帮助你把你的饮食需求告诉别人，即使他们不和你讲同一种语言。如果想要了解更多有关这些的 App 的信息，你可以阅读《4 款“吃草”的开源应用》。由 Joshua Allen Holm 推荐3、让旧电脑重焕新生怎么做？当然是用 Linux。通过给那些自己得不到新电脑的人创造一台新电脑来传递爱心，同时也可以避免让这台电脑进到垃圾填埋场。可以在 The Asian Penguins 看看我们是怎么做的。由 Stu Keroff 推荐4、在你不使用设备时关闭它们你可以使用带有主插座和控制插座的“智能插座板”。把你的电脑连接到主插座上，这样的话当你打开电脑时所有你连接到控制插座上的设备如显示器，打印机等也都会打开。一个更简单的、技术含量更低的方法是使用一个带有计时器的插座板。我在家里就是用的这个。你可以用计时器上的开关设定一个定时开关电源的时间表。这样可以在没有人在家时自动关闭网络打印机。或者以我的用了六年的笔记本电脑为例，我通过一个交替使用外接电源（插座打开）和使用电脑电池（插座关闭）的电源计划延长了电脑电池的寿命。由 Jim Hall 推荐5、减少供暖通风系统（HVAC）的使用在夏天，透过窗户的阳光可以为室内提供很多热量。使用 Home Assistant 可以基于一天中的时间的，甚至是基于太阳高度角自动调节窗帘和遮阳棚。由 Michael Hrivnak 推荐6、出门就把恒温器关闭或调低如果你的家用恒温器具有“离开”功能，你很容易忘记在出门时启用它。借助自动化，任何连接到网络的恒温器都可以在你不在家时自动节省能量。Stataway 就是一个这样项目。它通过调用你的手机的 GPS 坐标来决定是将你的恒温器设置为“在家”还是“离开”。由 Michael Hrivnak 推荐7、为未来储蓄算力我有一个主意：创建一个可以读取可选的能量阵列（如风能或太阳能）的输出的脚本。这个脚本应该将计算集群中的服务器从睡眠模式更改为激活模式，直到过量的电能（超出可以储存的部分）被用尽。然后在高产能时段使用这些过量的电能来进行需要大量计算的项目，比如渲染。这个过程本质应该是免费的，因为使用的能量无法被储存起来挪作它用。我相信现有的监控、能量管理和服务器阵列工具一定可以实现这个功能。那么剩下的只是一些整合上的问题，就可以让整个系统工作起来。由 Terry Hancock 推荐8、关掉你的灯根据 人工夜空亮度图集 World Atlas of Artificial Night Sky Brightness 的说法，光污染影响了全世界超过 80% 的人口。这一结论在 2016 年（遵循 CC-NC 4.0 协议）发表在公开访问的期刊《 科学进展 Science Advances 》上。关闭外部照明是一个可以使野生生物、人类健康受益并让我们享受夜晚的天空的快速途径，而且可以减少能量消耗。访问 darksky.org 来查看更多减少外部照明影响的方法。由 Michael Hrivnak 推荐9、减少你的 CPU 数量就我个人而言，我记得我以前有很多在地下室运行的电脑作为我的 IT 游乐场/实验室。我现在对于能源消耗更加注意了，所以确实大大地减少了我的 CPU 数量。我现在更喜欢利用虚拟机、区域和容器等技术。另外，我很高兴有小型电脑和 SoC 电脑这种东西，比如树莓派，因为我可以用一台这样的电脑做很多事情，比如运行一个 DNS 或者 Web 服务器，而无需使整个屋子变热并积累昂贵的电费账单。P.S. 这些电脑都运行于 Linux、FreeBSD，或者 Raspbian 系统！由 Alan Formy-Duvall 推荐via: https://opensource.com/article/19/4/save-planet作者：Jen Wike Huger 选题：lujun9972 译者：MFGJT 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
Linux 爱好者们分享了他们犯下的一些最大错误。终身学习是明智的 —— 它可以让你的思维敏捷，让你在就业市场上更具竞争力。但是有些技能比其他技能更难学，尤其是那些小菜鸟错误，当你尝试修复它们时可能会花费你很多时间，给你带来很大困扰。以学习 Linux 为例。如果你习惯于在 Windows 或 MacOS 图形界面中工作，那么转移到 Linux，要将不熟悉的命令输入到终端中，可能会有很大的学习曲线。但是，其回报是值得的，因为已经有数以百万计的人们已经证明了这一点。也就是说，这趟学习之旅并不是一帆风顺的。我们让一些 Linux 爱好者回想了一下他们刚开始使用 Linux 的时候，并告诉我们他们犯下的最大错误。“不要进入[任何类型的命令行界面（CLI）工作]时就期望命令会以合理或一致的方式工作，因为这可能会导致你感到挫折。这不是因为设计选择不当 —— 虽然当你在键盘上敲击时就像在敲在你的脑袋上一样 —— 而是反映了这些系统是历经了几代的软件和操作系统的发展而陆续添加完成的事实。顺其自然，写下或记住你需要的命令，并且（尽量不要）在事情不是你所期望的时感到沮丧。” —— Gina Likins“尽可能简单地复制和粘贴命令以使事情顺利进行，首先阅读命令，至少对将要执行的操作有一个大致的了解，特别是如果有管道命令时，如果有多个管道更要特别注意。有很多破坏性的命令看起来无害 —— 直到你意识到它们能做什么（例如 rm、dd），而你不会想要意外破坏什么东西（别问我怎么知道）。” —— Katie McLaughlin“在我的 Linux 之旅的早期，我并不知道我所处在文件系统中的位置的重要性。我正在删除一些我认为是我的主目录的文件，我输入了 sudo rm -rf *，然后就删除了我系统上的所有启动文件。现在，我经常使用 pwd 来确保我在发出这样的命令之前确认我在哪里。幸运的是，我能够使用 USB 驱动器启动被搞坏的笔记本电脑并恢复我的文件。” —— Don Watkins“不要因为你认为‘权限很难理解’而你希望应用程序可以访问某些内容时就将整个文件系统的权限重置为 777。”—— Matthew Helmke“我从我的系统中删除一个软件包，而我没有检查它依赖的其他软件包。我只是让它删除它想删除要的东西，最终导致我的一些重要程序崩溃并变得不可用。” —— Kedar Vijay Kulkarni你在学习使用 Linux 时犯过什么错误？请在评论中分享。via: https://opensource.com/article/19/4/linux-rookie-mistakes作者：Jen Wike Huger 选题：lujun9972 译者：wxy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
Git 为软件开发所带来的巨大影响是其它工具难以企及的。在 Linus Torvalds 开发 Git 后的十四年间，它为软件开发所带来的影响是其它工具难以企及的：在 StackOverflow 的 2018 年开发者调查 中，87% 的受访者都表示他们使用 Git 来作为他们项目的版本控制工具。显然，没有其它工具能撼动 Git 版本控制管理工具（SCM）之王的地位。为了在 4 月 7 日 Git 的十四周年这一天向 Git 表示敬意，我问了一些爱好者他们最喜欢 Git 的哪一点。以下便是他们所告诉我的：（为了便于理解，部分回答已经进行了小幅修改）“我无法忍受 Git。无论是难以理解的术语还是它的分布式。使用 Gerrit 这样的插件才能使它像 Subversion 或 Perforce 这样的集中式仓库管理器使用的工具的一半好用。不过既然这次的问题是‘你喜欢 Git 的什么？’，我还是希望回答：Git 使得对复杂的源代码树操作成为可能，并且它的回滚功能使得实现一个要 20 次修改才能更正的问题变得简单起来。”— Sweet Tea Dorminy“我喜欢 Git 是因为它不会强制我执行特定的工作流程，并且开发团队可以自由地以适合自己的方式来进行团队开发，无论是拉取请求、以电子邮件递送差异文件或是给予所有人推送的权限。”— Andy Price“我从 2006、2007 年的样子就开始使用 Git 了。我喜欢 Git 是因为，它既适用于那种从未离开过我电脑的小项目，也适用于大型的团队合作的分布式项目。Git 使你可以从（几乎）所有的错误提交中回滚到先前版本，这个功能显著地减轻了我在软件版本管理方面的压力。”— Jonathan S. Katz“我很欣赏 Git 那种 底层命令和高层命令 的理念。用户可以使用 Git 有效率地分享任何形式的信息，而不需要知道其内部工作原理。而好奇的人可以透过其表层的命令，而发现其为许多代码分享平台提供了支持的可以定位内容的文件系统。”— Matthew Broberg“我喜欢 Git 是因为浏览、开发、构建、测试和向我的 Git 仓库中提交代码的工作几乎都能用它来完成。它经常会调动起我参与开源项目的积极性。”— Daniel Oh“Git 是我用过的首个版本控制工具。数年间，它从一个可怕的工具变成了一个友好的工具。我喜欢它使你在修改代码的时候更加自信，因为它能保证你主分支的安全（除非你强制提交了一段考虑不周的代码到主分支）。你可以检出先前的提交来撤销更改，这一点也是很棒的。”— Kedar Vijay Kulkarni“我之所以喜欢 Git 是因为它淘汰了一些其它的版本控制工具。没人使用 VSS，而 Subversion 可以和 git-svn 一起使用（如果必要），BitKeeper 则和 Monotone 一样只为老一辈所知。当然，我们还有 Mercurial，不过在我几年之前用它来为 Firefox 添加 AArch64 支持时，我觉得它仍是那种还未完善的工具。部分人可能还会提到 Perforce、SourceSafe 或是其它企业级的解决方案，我只想说它们在开源世界里并不流行。”— Marcin Juszkiewicz“我喜欢内置的 SHA1 化对象模型（commit → tree → blob）的简易性。我也喜欢它的高层命令。同时我也将它作为对 JBoss/Red Hat Fuse 的补丁机制。并且这种机制确实有效。我还喜欢 Git 的 三棵树的故事。”— Grzegorz Grzybek“我喜欢 自动生成的 Git 说明页（这个页面虽然听起来是有关 Git 的，但是事实上这是一个没有实际意义的页面，不过它总是会给人一种像是真的 Git 页面的感觉…），这使得我对 Git 的敬意油然而生。”— Marko Myllynen“Git 改变了我作为开发者的生活。它使得 SCM 问题从世界上消失得无影无踪。”— Joel Takvorian看完这十个爱好者的回答之后，就轮到你了：你最欣赏 Git 的什么？请在评论区分享你的看法！via: https://opensource.com/article/19/4/what-do-you-love-about-git作者：Jen Wike Huger 选题：lujun9972 译者：zhs852 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
以及，对于 无服务器 Serverless 架构，什么时候该用，什么时候不该用呢？如果将如今互联网体验中最方便实用的那一部分去掉，那么留下来的基本就是 客户端-服务端 client-server 模式了。这一个模式在互联网建立初期就已经在使用了，直到目前都没有太大的变化，也就是说，这个模式仍然在为我们服务。那么，当人们谈论 无服务器 Serverless 架构的时候，到底是指什么呢？其实，无服务器架构并不是说不使用服务器了。恰恰相反，客户端-服务端模式仍然在其中发挥着重要的作用。无服务器架构实际上指的是能够让开发者在不需要关心服务器上架、为操作系统打补丁、创建容器镜像这些工作的情况下，就能够完成编码、部署和创建应用这一整套流程的架构。无服务器架构的三个重要意义一些缺乏开发经验的人员现在要参与到开发工作中来了。无服务器架构能够让他们尽量只学习必要的工作内容，把更多的时间放在更具创造性的开发工作中。开发者不再需要重复造轮子。运行和维护服务器、为操作系统打补丁、创建容器等这一系列工作，都可以由更专业的无服务器架构提供商来完成。最现实的一点是，如果不使用无服务器架构，那么在服务器管理方面，总需要有一个作最终决策的人。当服务器发生崩溃时，或是需要在服务器上执行某些操作时，总是需要这样一个统领全局的人来作出决策。因此最佳的方案是使用无服务器架构。什么时候该用或者不该用无服务器架构？听起来无服务器架构是个好东西。但事实上，无服务器架构并不是万能的，在使用之前还需要考虑以下这些因素：成本使用范围时间控制方式其中值得注意的是控制方式。现在已经有一些项目为开发者提供了操作和控制无服务器架构计算环境的工具了，Apache OpenWhisk 就是其中之一。为什么要将无服务器架构开源？关于这方面的更多内容，可以观看无服务器架构方面的专家 Saron Yitbarek 在 Command Line Heroes 节目中的访谈。via: https://opensource.com/article/18/12/serverless-podcast-command-line-heros作者：Jen Wike Huger 选题：lujun9972 译者：HankChow 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
以及，还有三本是给宝宝的。在工作之余，我听说不少技术专家透露出让他们自己的孩子学习更多关于 Linux 和 开源知识的意愿，他们中有的来自高管层，有的来自普通岗位。其中一些似乎时间比较充裕，伴随其孩子一步一步成长。另一些人可能没有充足的时间让他们的孩子看到为何 Linux 和 开源如此之酷。也许他们能抽出时间，但这不一定。在这个大世界中，有太多有趣、有价值的事物。不论是哪种方式，如果你的或你认识的孩子愿意学习使用编程和硬件，实现游戏或机器人之类东西，那么这份书单很适合你。面向儿童 Linux 和 开源爱好者的 15 本书《零基础学 Raspberry Pi》，作者 Carrie Anne Philbin在对编程感兴趣的儿童和成人中，体积小小的、仅信用卡一般大的树莓派引起了强烈的反响。你台式机能做的事情它都能做，具备一定的基础编程技能后，你可以让它做更多的事情。本书操作简明、项目风趣、技能扎实，是一本儿童可用的终极编程指南。（Joshua Allen Holm 推荐，评论节选于本书的内容提要）《Python 编程快速上手：让繁琐工作自动化》，作者 Al Sweigart这是一本经典的编程入门书，行文足够清晰，11 岁及以上的编程爱好者都可以读懂本书并从中受益。读者很快就会投入到真实且实用的任务中，在此过程中顺便掌握了优秀的编程实践。最好的一点是，如果你愿意，你可以在互联网上阅读本书。（DB Clinton 推荐并评论）《Scratch 游戏编程》，作者 Jon Woodcock本书适用于 8-12 岁没有或仅有有限编程经验的儿童。作为一本直观的可视化入门书，它使用有趣的图形和易于理解的操作，教导年轻的读者如何使用 Scratch 这款流行的自由编程语言构建他们自己的编程项目。（Joshua Allen Holm 推荐，评论节选于本书的内容提要）《用 Python 巧学数学》，作者 Amit Saha无论你是一名学生还是教师，只要你对使用 Python 学习数学感兴趣，不妨读读本书。在逻辑上，本书带领读者一步一步地从基础到更为复杂的操作，从最开始简单的 Python shell 数字运算，到使用类似 matplotlib 这样的 Python 库实现数据可视化，读者可以很容易跟上作者的思路。本书充分调动你的好奇心，感叹 Python 与 数学结合的威力。（Don Watkins 推荐并评论）《编程女生：学习编程，改变世界》，作者 Reshma Saujani作者是 Girls Who Code 运动的发起人，该运动得到 Sheryl Sandberg、 Malala Yousafzai 和 John Legend 支持。本书一部分是编程介绍，一部分女生赋能，这两部分都写得很有趣。本书包括动态艺术作品、零基础的编程原理讲解以及在 Pixar 和 NASA 等公司工作的女生的真实故事。这本书形象生动，向读者展示了计算机科学在我们生活中发挥的巨大作用以及其中的趣味。（Joshua Allen Holm 推荐，评论节选于本书的内容提要）《Python 游戏编程快速上手》，作者 Al Sweigart本书将让你学会如何使用流行的 Python 编程语言编写计算机游戏，不要求具有编程经验！入门阶段编写 刽子手 Hangman ，猜数字， 井字游戏 Tic-Tac-Toe 这样的经典游戏，后续更进一步编写高级一些的游戏，例如文字版寻宝游戏，以及带音效和动画的 碰撞与闪避 collision-dodgoing 游戏。（Joshua Allen Holm 推荐，评论节选于本书的内容提要）《Lauren Ipsum：关于计算机科学和一些不可思议事物的故事》，作者 Carlos Bueno本书采用爱丽丝梦游仙境的风格，女主角 Lauren Ipsum 来到一个稍微具有魔幻色彩的世界。世界的自然法则是逻辑学和计算机科学，世界谜题只能通过学习计算机编程原理并编写代码完成。书中没有提及计算机，但其作为世界的核心存在。（DB Clinton 推荐并评论）《Java 轻松学》，作者 Bryson PayneJava 是全世界最流行的编程语言，但众所周知上手比较难。本书让 Java 学习不再困难，通过若干实操项目，让你马上学会构建真实可运行的应用。（Joshua Allen Holm 推荐，评论节选于本书的内容提要）《终身幼儿园》，作者 Mitchell Resnick幼儿园正变得越来越像学校。在本书中，学习专家 Mitchel Resnick 提出相反的看法：学校（甚至人的一生）应该更像幼儿园。要适应当今快速变化的世界，各个年龄段的人们都必须学会开创性思维和行动；想要达到这个目标，最好的方式就是更加专注于想象、创造、玩耍、分享和反馈，就像孩子在传统幼儿园中那样。基于在 MIT 媒体实验室 Media Lab 30 多年的经历， Resnick 讨论了新的技术和策略，可以让年轻人拥有开创性的学习体验。（Don Watkins 推荐，评论来自 Amazon 书评）《趣学 Python：教孩子学编程》，作者 Jason Briggs在本书中，Jason Briggs 将 Python 编程教学艺术提升到新的高度。我们可以很容易地将本书用作入门书，适用群体可以是教师/学生，也可以是父母/儿童。通过一步步引导的方式介绍复杂概念，让编程新手也可以成功完成，进一步激发学习欲望。本书是一本极为易读、寓教于乐但又强大的 Python 编程入门书。读者将学习基础数据结构，包括 元组 turple 、 列表 list 和 映射 map 等，学习如何创建函数、重用代码或者使用包括循环和条件语句在内的控制结构。孩子们还将学习如何创建游戏和动画，体验 Tkinter 的强大并创建高级图形。（Don Watkins 推荐并评论）《Scratch 编程园地》，作者 Al SweigartScratch 编程一般被视为一种寓教于乐的教年轻人编程的方式。在本书中，Al Sweigart 告诉我们 Scratch 是一种超出绝大多数人想象的强大编程语言。独特的风格，大师级的编写和呈现。Al 让孩子通过创造复杂图形和动画，短时间内认识到 Scratch 的强大之处。（Don Watkins 推荐并评论）《秘密编程者》，作者 Gene Luen Yang，插图作者 Mike HolmesGene Luen Yang 是漫画小说超级巨星，也是一所高中的计算机编程教师。他推出了一个非常有趣的系列作品，将逻辑谜题、基础编程指令与引入入胜的解谜情节结合起来。故事发生在 Stately Academy 这所学校，其中充满有待解开的谜团。（Joshua Allen Holm 推荐，评论节选于本书的内容提要）《想成为编程者吗？编程、视频游戏制作、机器人等职业终极指南！》，作者 Jane Bedell酷爱编程？这本书易于理解，描绘了以编程为生的完整图景，激发你的热情，磨练你的专业技能。（Joshua Allen Holm 推荐，评论节选于本书的内容提要）《教孩子编程》，作者 Bryson Payne你是否在寻找一种寓教于乐的方式教你的孩子 Python 编程呢？Bryson Payne 已经写了这本大师级的书。本书通过乌龟图形打比方，引导你编写一些简单程序，为高级 Python 编程打下基础。如果你打算教年轻人编程，这本书不容错过。（Don Watkins 推荐并评论）《图解 Kubernetes（儿童版）》，作者 Matt Butcher, 插画作者 Bailey Beougher介绍了 Phippy 这个勇敢的 PHP 小应用及其 Kubernetes 之旅。（Chris Short 推荐，评论来自 Matt Butcher 的博客）给宝宝的福利书《宝宝的 CSS》、《宝宝的 Javascript》、《宝宝的 HTML》，作者 Sterling Children's这本概念书让宝宝熟悉图形和颜色的种类，这些是互联网编程语言的基石。这本漂亮的书用富有色彩的方式介绍了编程和互联网，对于技术人士的家庭而言，本书是一份绝佳的礼物。（Chris Short 推荐，评论来自 Amazon 书评）你是否有想要分享的适合宝宝或儿童的书呢？请在评论区留言告诉我们。via: https://opensource.com/article/18/5/books-kids-linux-open-source作者：Jen Wike Huger 选题：lujun9972 译者：pinewall 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
看看我们现在在读什么？最近我在作者社区征集分享大家正在读的书。大家生活阅历和工作岗位各不相同，共同点是每天都与 Linux 和开源打交道。享受这份不可思议的书单吧，其中大部分是免费的，可以下载。在书单中，你可能发现一直想读的书、完全陌生的书以及像老朋友一样的已经读过的书。我们期待你给出对书单的看法，可以在分享在下方的评论区，也可以通过 #Linuxbooks 和 #opensourcebooks 主题词分享在 Twitter 上。加入你书单的 17 本书文末，还附赠了一篇科幻小说作品。FreeDOS 的 23 年岁月，作者 Jim Hall从去年起，FreeDOS 项目已经 23 岁了。虽然在 23 年中并没有什么特殊事件，但该项目决定庆祝这个里程碑，形式为分享不同人群使用 FreeDOS 或对 FreeDOS 做出贡献的故事。这本以 CC BY 协议开源的书籍收录了一系列短文，描绘了 FreeDOS 从 1994 开始的历程，以及人们现在如何使用 FreeDOS。（Jim Hall 推荐并评论）JavaScript 编程精解，作者 Marijn Haverbeke这本书基于无处不在的编程语言 Javascript，教你编写制作精美的程序。你可以学习语言的基本知识和高级特性，学习如何编写可在浏览器或 Node.js 环境中运行的程序。本书包含 5 个有趣的项目，例如制作游戏平台，甚至编写你自己的编程语言，在这过程中你会更加深入理解真实的编程。（Rahul Thakoor 推荐并评论）使用开源打造未来，作者 VM (Vicky) Brasseur如果你希望在开源领域做出贡献但无从下手，这本书会教会你。内容包括如何确定要加入的项目，以及如何做出你的首次贡献。（Ben Cotton 推荐并评论）Git 团队协作，作者 Emma Jane Hogbin WestbyGit 是一款版本管理系统，被个人和团队广泛使用；但其强大的功能也意味着复杂性。这本书指导你如何在团队环境中有效地使用 Git。想了解更多信息，请参考我们的深入点评。（Ben Cotton 推荐并评论）谈判力，作者 Fisher, Ury 及 Patton 哈佛谈判项目 The Harvard Negotiation Project 成立于 20 世纪七十年代，是一个经济学家、心理学家、社会学家和政治学者共同参与的学术项目，目标是建立一个让谈判各方都受益更多的谈判框架。他们的框架和技巧已经在各类场景发挥作用，其中包括 1978 年埃及与以色列之间的签订的 戴维营协议 Camp David Accords 。 原则式谈判 Principled Negotiation 包括理解谈判参与者的真实需求，以及基于该信息达成各方都可接受的条款。同样的技巧可以在处理人与人之间的纠纷、关于车辆与房屋的谈判以及与保险公司的商讨时发挥作用。这与开源软件开发有什么联系呢？在某种意义上，开源领域中的一切都是谈判。提交漏洞报告就是指出某些代码工作不正常，让某些人放下手头工作并优先处理该漏洞。邮件列表中对完成某些工作的正确方式的激烈讨论或对功能请求的评论，都是一种关于项目范畴和目标的谈判，通常是在信息不充足情况下进行的。将上述对话视为一种探索，试图理解为何其它人提出来某些需求，让其明白你为何持有另外的观点，可以让你在开源项目中显著地改善人际关系和提高工作效率。（Dave Neary 推荐并评论）只是为了好玩：Linux 之父 Linus Torvalds 自传，作者 Linus Torvalds 等Linux 是一款令人惊奇的、强力的操作系统，引发了关于透明和开放的运动。驱动 Linux 的开源思潮对传统商业和资本增值模型造成冲击。在本书中，你会了解到 Linus 本人及 Linux 操作系统的过人之处。洞悉那些改变 Linus 命运的经历，这些经历让他从一个喜欢折腾他祖父钟表的怪人，转变成编写全球主流操作系统 Linux 的大师。（Don Watkins 推荐并评论）1 个月速成 Linux，作者 Steven Ovadia这本书用于教会非技术领域的用户如何使用桌面版 Linux，读者每天花费一小时即可。这本书覆盖面比较很广，包括选择桌面环境、安装软件以及如何使用 Git。阅读完这本书，你可以完全使用 Linux 替换掉其它操作系统。（Steven Ovadia 推荐并评论）Linux 实战，作者 David Clinton这本身介绍了不少 Linux 管理工具的干货，适用于想提升技术水平的人群，包括 IT 专家、开发者、DevOps 专家等。本书不是割裂地介绍各种技术，而是按照真实项目组织内容，例如异地备份自动化、Web 服务器安全加密以及搭建可以安全连接公司资源的 VPN 等。更多内容可以参考作者的另一本书。（David Clinton 推荐并评论）创客丛书： 为创客准备的 Linux，作者 Aaron Newcomb对于想通过 树莓派 创造和创新的人来说，这本书是必读的。这本书将领你入门，让你玩转你的树莓派，同时帮你理解 Raspbian Linux 操作系统（与传统 Linux ）的细微差别。书中文字巧妙又浅显，可以让任何阅读本书的创客解锁树莓派的潜力。文字简洁，编写精良，包含大量极好的阐述和实战案例。（Jason Hibbets 推荐，Don Watkins 评论）人性管理：一个软件工程经理刺激诙谐的经历 by Michael LoppMichael Lopp 是热门博客 Rands 在休息的作者，他的笔名 Rands 更为人熟知。这本书是在博客帖子的基础上修订集结而成，内容为软件开发团队的管理。Rands 的工作哲学为“软件开发中最复杂的部分是人际交往”，这是我对于本书和博客内容最欣赏的一点。本书涵盖一系列主题，包括分析一个团队，理解每个团队成员的个性以及设计如何让每个人都各尽所能。这些主题适用面很广，作为一个开源社区管理者，我一直和这些事情打交道。如何得知某个成员已经精疲力尽？如何组织一个好的会议？如何在项目和团队扩大时形成项目和团队文化？如何判断流程是适度的？在开发之外，这类问题一直涌现出来；Rands 的不羁、诙谐的看法让人受教的同时给人感到快乐。（Dave Neary 推荐并评论）开源：来自开源革命的呐喊 (O'Reilly, 1999)对于开源狂热者而言，这本书是必读的。Linus Torvalds、Eric S. Raymond、Richard Stallman、Michael Tiemann、 Tim O'Reilly 等开源运动中的领军人物分享他们对发展迅猛的开源软件运动的看法。（Jim Hall 推荐，Jen Wike Huger 评论）创作开源软件：如何运营一个成功的自由软件项目，作者 Karl Fogel这本书面向人群包括，期望建立或已经正在建立开源社区，或更好的理解成功开源项目社区的开发趋势。Karl Fogel 分析研究了成功开源项目的特点，以及它们如何围绕项目发展成社区。对于如何围绕项目发展社区，这本书为社区管理者（或致力于成为社区管理者的人）提供了建设性的建议。鲜有书籍可以（像本书这样）深入观察开源社区的发展并给出大量成功点子，但你仍需要结合你的项目和社区因地制宜的行动。（Justin Flory 推荐并评论）机器人编程，作者 Albert W. Schueller这本书介绍乐高头脑风暴 NXT 编程的基础。并不需要读者编写复杂的程序，而是通过编程让设备可以感知并与真实世界进行交互。通过完成传感器、电机实验，以及编程制作音乐，你可以了解软硬件如何协调工作。（Rahul Thakoor 推荐并评论）AWK 编程语言，作者 Alfred V. Aho, Brian W. Kernighan 和 Peter J. Weinberger这本书的作者就是 awk 语言的发明者，本书风格类似于 20 世纪 70 至 90 年代贝尔实验室 Unix 小组出版的类 Unix 工具书籍，使用简明、紧凑的文字介绍了 awk 的原理和目标。书中包含不少示例，从简单的开始，后面会结合描述详尽的问题或前沿案例，示例也变得复杂。本书刚出版时，典型的读者需求如下：处理和转换文本或数据文件，以及便捷地创建查询表、使用正则表达式、根据输入调整结构、对数值执行数学变换并便捷设置输出格式等。上述需求依然存在，现在这本书也可以给人们提供一个回顾那个只能使用终端交互的年代的机会。在那时，通过“模块化”可以使用多个单一用途的程序编写 shell 脚本，用于管道处理数据，最终计算机给出人们预期的结果。在今天，awk 被视为运维工具，在处理配置文件和日志文件方面效果不错，这本书也介绍了一些这方面的内容。（Jim Hall 推荐，Chris Hermansen 评论）像计算机科学家一样思考 Python，作者 Allen Downey这本书是作者系列图书中的一本，介绍 Python 编程语言，系列中还有其它编程语言，包括 Java 和 Perl 等。介绍完基础的编程语法后，本书进入主题环节，着重介绍问题解决者如何构建解决方案。本书概念层次清晰，对编程初学者是很好的入门读物；对于希望在课堂等地方提高编程技能的新手，本书也适用；本书的若干章节配有例子和习题，可供测试已学的技能。（Steve Morris 介绍并评论）认识开源和自由软件协议 (O'Reilly, 2004)“这本书填补了开源理念与法律基础上的真实意义之间的空白。如果你对开源和自由软件协议感兴趣，那么本书可以帮忙加深理解。如果你是一名开源/自由软件开发者，这本书显然是必须的。“（Jim Hall 推荐，评论来自 Amazon）Unix 文本处理，作者 Dale Dougherty 及 Tim O'Reilly本书写于 1987 年，用于介绍 Unix 系统及作家如何使用 Unix 工具帮助其工作。对于希望学习包括 vi 编辑器、awk、shell 脚本在内的 Unix shell 基础及 nroff/troff 排版系统的初学者而言，本书仍然是有用的资源。原版已绝版，但 O'Reilly 将本书制作为电子书，可在其网站上免费获得。（Jim Hall 推荐并评论）福利：科幻小说11 号太空站，作者 Emily St. John Mandel故事时间设定为不远的未来，地球人口随着神秘而致命的流感爆发而锐减，故事发生在 20 年后。主人公 Kirsten Raymonde 是一名年轻女性，坚信“仅仅活着是不够的”，为此她在后世界末日时代带着一个游牧剧团在五大湖区域附近勇敢地旅行。这是个精彩的故事，很值得一读。这本书让我震惊的是我们与技术之间实际上那么脆弱的关系。Douglas Adams 的 《Mostly Harmless》 书中有一句话很经典：“仅靠双手，他无法制造一个面包机。但他可以制作三明治，就是这样”。在 Kristin Raymonde 的世界中，每个人仅能靠自己的双手。这里没有电，因为电力网络无法运作；没有汽车，因为炼油厂无法运作。书中有一个有趣的桥段，一个发明家使用自行车组装了一台发电机，试图启动一台笔记本电脑，尝试查看是否还存在互联网。我们看到旧世界留存的、无用的东西堆成的文明博物馆，内容包括护照、移动电话、信用卡和高跟鞋等。世界上的全部技术都变得无用。（Dave Neary 推荐并评论）via: https://opensource.com/article/18/5/list-books-Linux-open-source作者：Jen Wike Huger 选题：lujun9972 译者：pinewall 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出