2023年5月

以下是 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中国 荣誉推出

谷歌新推出几个顶级域,招致批评

两周前,谷歌在互联网上增加了八个新的顶级域名,使顶级域名的总数达到 1480 个!其中两个新域名 .zip 和 .mov 可能成为网上骗子的福音,他们会欺骗人们点击恶意链接。许多安全从业者警告说,当这两个顶级域名在电子邮件、社交媒体和其他地方显示时,会造成混乱。人们担心当提及 setup.zip 或 vacation.mov 等文件的电子邮件和社交媒体帖子会自动将它们变成可点击的链接,而骗子会抓住这种模糊性。

消息来源:Ars Technica
老王点评:链接没有个链接的样子,各种新的顶级域泛滥之后,我们需要一个更有辨识度的方式来识别什么是链接。或许谷歌利用新顶级域的方式看起来颇为有趣,但是应该有更好的用户体验方式来避免可能的安全风险。

谷歌计划明年用隐私沙盒取代第三方 Cookie

谷歌在浏览器广告技术上进行了许多次尝试,均受到了不同的利益方的抨击。谷歌最新的计划是,从 2024 年开始,将把 1% 的 Chrome 用户迁移到隐私沙盒,禁用第三方 Cookie,并在 2024 年底完全淘汰第三方 Cookie。隐私沙盒跟踪用户的兴趣,允许广告商根据兴趣展示广告,而用户可以管理他们的兴趣并对其归类分组。隐私沙盒标志着广告行业的一次巨大变化。虽然从 Chrome 101 开始就已经可以测试,但今年七月发布的 Chrome 115 将使隐私沙盒 API 普遍可用,开发者可对其进行测试,之后将不会对该 API 进行重大改变。谷歌最初计划最早在 2022 年逐步淘汰跟踪第三方 Cookie,但之后因为种种原因反复修改改计划时间。

消息来源:Tech Crunch
老王点评:其实,广告技术本身就是一种对隐私的破坏,无论这种技术有多么先进。所以,即便看起来现在替代第三方 Cookie 技术似乎有所进步,但是,广告经济的本质决定了,你在广告商眼中是一定被清晰画像的。

三星不会将其手机上的默认搜索引擎换成必应

据报道,世界上最大的智能手机制造商三星已经暂停了一项内部审查,该审查曾探讨过在其移动设备上用必应取代谷歌。这个潜在的转换将取代谷歌成为预装在三星的智能手机的 “互联网” 网页浏览应用程序的首选搜索引擎。

消息来源:华尔街日报
老王点评:看来必应想要在默认搜索引擎市场上攻城略地,谷歌不会坐以待毙。

回音

  • 之前我们 报道 过,由于 CAN 总线的安全缺陷以及缺乏发动机电子防盗器,在病毒性传播的视频推动下,大量的起亚和现代的汽车成为盗窃目标。现在两家汽车厂商与用户达成了 2 亿美元的和解协议。

各位读者,我们将在本文中介绍如何在 Linux 或 UNIX 系统中入门 Shell 脚本编写。

什么是 Shell 呢?

Shell(交互界面)是类 UNIX/Linux 操作系统中的一个解释器。它将用户输入的命令解释成操作系统的系统调用来执行这些命令。简单来说,Shell 形式上是操作系统的包装。比如,你可能使用 Shell 命令来列出目录中的文件,如 ls 命令,或使用命令复制,如 cp 命令。

$ ls
Desktop Documents Downloads Music Pictures playbook.yaml Public snap Templates test5 Videos

在上方的例子中,当你输入 ls 并按下回车键。$ 符号是 Shell 的提示符,意味着 Shell 等着命令的输入。下面的一行就是当前目录下的文件名。

什么是 Shell 提示符?

提示符,即 $,被称作命令提示符,是由 Shell 发出的(LCTT 译注:这个概念,可能有误。请参看:https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Controlling-the-Prompt )。当提示符出现后(LCTT 译注:此处提示符并不特指 $ 符号),你就可以输入命令了。Shell 将会在你按下回车键后读取你的输入。它会通过查看你输入的第一个单词来确定你希望执行的命令。“单词”指的是一组连续的字符。空格和制表符作为分割单词的标志。

不同类型的 Shell

由于没有限制只能有一个 Shell,你可以按照自己的意愿来自由选择运行任何一种 Shell。这当然挺好的,但是在不清楚其它替代方案的情况下选择一种 Shell 没有多大益处。下面列出了一些 UNIx/Linux 下常见的 Shell。

Sh(Bourne Shell)

最初的 Unix Shell 通常被称作 Sh,是 Shell(或 Bourne Shell)的简写,以其作者 Steven Bourne 命名。它在几乎所有的类 UNIX 操作系统下都可以找到。基本的 Bourne Shell 仅支持相当有限的命令行编辑。你可以输入字符,使用退格键删除字符,还有就是按下回车键来执行命令。当命令行出现异常了,你可以按下 Ctrl-C 组合键来终止整个命令。

Csh(C Shell)

它是由加利福尼亚大学伯克利分校的 Bill Joy 设计的,由于它的语法和 C 语言相似,所以被命名为 C Shell。这种 Shell 在 Bourne shell 的基础上增加了一些实用功能,尤其是可以重用之前的命令来帮助创建之后要执行的命令。当你去完成一项专门任务的时候,大多数的情况下需要执行不止一条命令,这样 C shell 的能力就相当有用了。

Ksh(Korn Shell)

它是由贝尔实验室的 David Korn 创造的,Korn Shell 提供了和 C Shell 相同的增强,其中有一项重要的不同:Korn Shell 提供了对旧的 Bourne Shell 语法的向后兼容。在 Unix 下,如 AIX & HP-UX 上,Korn Shell 是默认 Shell。

Bash(Bourne Again Shell)

Bash 提供了像 Korn Shell 一样的命令行编辑,像 C Shell 一样的文件名补全和许多其它的高级功能。许多用户认为 Bash 集 Korn Shell 和 C Shell 的优点于一身。在 Linux 和 Mac OS X 系统下,Bash 是默认的 Shell。

Tcsh(T C Shell)

Linux 系统推广了 Tcsh。Tcsh 扩展了传统的 csh,增加了命令行编辑、文件名补全和其它功能。例如,当你按下 Tab 键后,Tcsh 会补全文件和目录名(与 Bash 中的按键相同)。旧的 C Shell 不支持这项功能。

什么是 Shell 脚本呢?

Shell 脚本是包含一条或多条命令的文本文件。在 Shell 脚本中,Shell 程序假定文本文件的每一行是一条不同的命令。这些命令的大部分就和你在 Shell 窗口手动输入的一样。

为什么要使用 Shell 脚本呢?

Shell 脚本被用来自动化管理任务、简化复杂的配置细节,并且充分运用操作系统的性能。有了组合不同命令的能力就可以创造新命令了,从而增加操作系统的价值。此外,结合使用 Shell 与图形化桌面环境,可以兼得二者之长。

从系统管理员的角度看,日复一日的重复工作可以使用 Shell 脚本来实现自动处理,那就可以节约时间从事其它高质量的工作。

创建第一个 Shell 脚本

在当前工作目录下创建一个名为 myscript.sh 的文本文件,所有的 Shell 脚本都有 .sh 的扩展名(LCTT 译注:Linux 下根本没有扩展名一说,没有这个扩展一样是可以执行的)。脚本的第一行是 #!/bin/sh#!/bin/bash,因为 # 符号被称作 “hash” 并且 ! 符号被称作 “bang” 故被称为 shebang(释伴)。至于 /bin/sh/bin/bash 则指出了命令将被 Sh 还是 Bash shell 执行。

以下就是 myscript.sh 的内容:

#!/bin/bash
# Written by LinuxTechi
echo
echo "Current Working Directory: $(pwd)"
echo
echo "Today' Date & Time: $(date)"
DISK=$(df -Th)
echo
echo "Disk Space on System:"
echo "$DISK"

上方的脚本将会展示当前工作目录、今天的日期与时间,还有磁盘空间。我们需要用到 echo 命令 和其它 Linux 命令 来实现这个脚本。

使用如下的 chmod 命令 来给文件增加执行权限:

$ chmod a+x myscript.sh

现在来执行脚本:

$ sh myscript.sh
或
$ ./myscript.sh

注意:在当前目录下执行当前目录下的 Shell 脚本,须使用 ./<脚本名> 方式,如下所示:

在 Shell 脚本中获取用户输入

read 命令用来获取用户的键盘输入,并且将之赋值给一个变量。echo 命令用来展示内容。

让我们更改上方的脚本以使之获取输入:

#!/bin/bash
# Written by LinuxTechi
read -p "Your Name: " NAME
echo
echo "Today' Date & Time: $(date)"
echo
read -p "Enter the file system:" DISK
echo "$(df -Th $DISK)""

现在,再执行脚本试试,这回应该会有输入信息的提醒:

$ ./myscript.sh
Your Name: Pradeep Kumar

Today' Date & Time: Sat 15 Oct 05:32:38 BST 2022

Enter the file system:/mnt/data
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/volgrp01-lv01 ext4 14G 24K 13G 1% /mnt/data

完美,上方的输出表明脚本有输入提醒,并加工处理了相应的数据。

本文结束。希望对你是有用的。非常欢迎任何的疑问、反馈。

(题图:MJ/f83b771e-a70d-4c62-a169-ec42e9004a14)


via: https://www.linuxtechi.com/get-started-shell-scripting-linux/

作者:Pradeep Kumar 选题:lkxed 译者:cyberwaddle 校对:wxy

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

使用 GUI 和 CLI 方法从 Fedora 37 工作站版升级到 Fedora 38 的完整步骤。

Fedora 38 已发布,没有任何延误。此版本带来了令人惊叹的 GNOME 44 工作站版桌面、KDE Plasma 5.27(最后一个 Plasma 5 系列)等。你可以在 此页面 上阅读我写的 Fedora 38 功能指南。

如果你尝试从 Fedora 37 升级到 Fedora 38,请遵循以下推荐步骤。

注意:如果你运行的是 Fedora 38 beta 版本,则无需按照以下步骤进行升级。你可以从终端运行 `sudo dnf update && sudo dnf upgrade 以获取正式版本。

如果你运行的是旧版本的 Fedora,例如 36 或 35,你不应该跳版本直接升级到 38。你可以先升级到 37,然后再升级到 38; 或者进行全新安装。根据我的经验,如果你在升级期间跳过版本,一些应用和扩展程序会崩溃,还包括内核相关问题。

升级到 Fedora 38

在你进入更新之前,这里有一些你应该做的事情。以防你遇到问题。我们总是建议这么做。

升级到 Fedora 38 之前要遵循的步骤

首先,打开 GNOME “软件” 应用并检查是否有任何待处理的更新。或者,打开终端并运行以下命令以确保你的系统是最新的。

sudo dnf update

完成上述命令后,重新启动系统以确保应用所有更新。

其次,将你的重要文件(例如图片、文档或视频)从主目录备份到安全的地方(可能是单独的分区或 U 盘)。Fedora 升级过程不会失败,但如果你使用英伟达或任何具有双引导系统的特定硬件,我建议你进行备份。

第三,安装 Extensions Flatpak 应用 并禁用所有 GNOME 扩展(用于 GNOME 桌面)。主要原因是并非所有扩展都已移植到 GNOME 44。因此在升级之前禁用所有扩展是安全的。你可以稍后在完成升级过程后启用它们。

此外,看看官方论坛,看看 Fedora 38 任何可能影响升级过程的 已知的重要问题。不要在这上面花太多时间。

最后,升级过程需要一些时间(以小时为单位),因此请确保你有足够的时间和稳定的互联网连接。

如何升级到 Fedora 38 工作站

图形化方法(GUI)

在 Fedora 38 正式发布后,你应该会在 GNOME “软件” 应用中看到有升级可用的通知。如果你没有看到任何通知,请不要担心。等一两天,你应该就可以了。

Fedora 38 is available in Software

此外,你可以访问 GNOME “软件” 应用中的更新选项卡,看看它是否可用。

单击该通知并单击 下载 Download 以开始升级过程。升级程序将下载所需的软件包并提示你重新启动。点击重新启动以继续升级过程。

Fedora 将在重启期间应用升级。

命令行方法(CLI)

如果你熟悉命令行,则可以使用 dnf upgrade 命令来执行升级过程。

打开终端并运行以下命令:

sudo dnf upgrade --refresh

此命令将刷新为 Fedora 38 准备的新升级软件包。

接下来,通过运行以下命令安装 DNF 升级插件。这是升级过程所必需的。

sudo dnf install dnf-plugin-system-upgrade

通过运行以下命令并安装任何必要的待定更新来确保你的系统是最新的。再做一次(如果你已经通过升级前的步骤完成了)。

sudo dnf --refresh upgrade

通过运行以下命令启动下载过程。此命令将获取所有必需的包并在升级前将它们保存在本地。

sudo dnf system-upgrade download --releasever=38

如果你手动安装了许多软件包和应用,并且不确定 Fedora 38 是否正确支持它们,请使用 --allowerasing 标志运行上述命令。当你提供此选项时,dnf 将删除阻止系统升级的软件包。

上面的命令显示将被替换、更新、升级或降级的内容。如果你想查看列表,请仔细浏览列表。或者,你可以检查红色标记的项目并开始升级过程,如下图所示。

Fedora 38 升级流程 1

Fedora 38 升级流程 2

请记住,下载大小一般以 GB 为单位,因此根据你的网速可能需要一些时间。

上述命令完成后,运行以下命令开始升级。

sudo dnf system-upgrade reboot

系统将自动重启,并等待整个升级过程的完成。正如我前面提到的,这可能需要几个小时的时间,这取决于你的系统硬件。因此要有耐心。

如果一切顺利,迎接你的将是一个全新的 Fedora 38 系统。

祝你好运!

(题图:MJ/1fbeb9e2-ba9c-48ec-912f-78be9cfefcf3)


via: https://www.debugpoint.com/upgrade-fedora-38-from-fedora-37/

作者:Arindam 选题:lkxed 译者:geekpi 校对:wxy

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

Gartner:多云并不是必要的

分析公司 Gartner 本周表示,企业既不应该假设他们需要多云,也不应该急于使用它们。Gartner 高级主任分析师 Hassan Ennaciri 说,“忘记使用多个云可以提高弹性的想法吧,因为应用程序的可移植性在很大程度上是一个神话”。他建议,企业应该选择一个主要供应商,并且只允许在有需要或业务理由的情况下使用次要供应商。有趣的是,80% 的组织已经在使用多云,但他们只是意外地走到了这一步,所以需要管理这种混乱。另外,多云还有一个阻碍是,云的种类非常多,使用多个云很困难,很难找到具有跨多个云工作技能的人。

消息来源:The Register
老王点评:所以,工程界总是会造一些看似漂亮的概念,但是往往要么是生不逢时,要么是脱离实际。比如,国内的某个“中台”概念。

Bluesky Social 按计划开源了

5 月 15 日,Bluesky Social 在 GitHub 上开源了其应用程序的代码库,采用 MIT 许可证。Bluesky 的客户端代码是为任何想要改进代码或将其作为自己社交网络基础的人准备的。此外,它还包括 AT 协议的相关实现,这个协议支持一个去中心化的社交网络。它的特点包括与支持 AT 协议的服务器上的任何人连接;通过一个开放的算法市场控制用户如何看待世界;以及使用户能够在不丢失其内容、粉丝或身份的情况下更换主机。与之相比,Twitter 开源的推荐算法是基本无法使用的。

消息来源:ZDNet
老王点评:相比之下,这才是真开源,而不是像 Twitter 那样只是自曝其短。随着 Bluesky 的开源,去中心化社交网络可能会引来一波发展黄金期。

美国联邦通信委员会支持了 Starlink 频段占用

美国联邦通信委员会(FCC)今天在 Starlink 与 Dish Network 的斗争中支持了 Starlink,决定不批准在 12.2-12.7GHz 频段的高功率地面移动服务,该频段已被 Starlink 客户终端用于下行。Dish 公司也将该频段用于卫星电视,并希望将该频段可用于蜂窝电话服务。这次投票 “确保了该频段的卫星服务的现状和未来”。

消息来源:Ars Technica
老王点评:频段之争就是资源之争啊。对 Starlink,我是一方面支持,另一方面忧虑。不能说更多了。

在这里,我们列出了最好的 Linux 远程桌面工具,以及它们的优点和缺点。

远程连接计算机有诸多好处。也许你想帮助朋友在其台式机上解决问题,或者可能需要远程使用另一个桌面会话进行工作。

无论你是什么场景,Linux 上的远程桌面工具可以让你轻松连接。当然,这里列出的每个工具都是独立开发的。因此,你可以选择最适合你个人或专业需求的工具。

非自由软件警告! 这里提到的某些应用程序不是开源的,但出于 Linux 的应用场景,它们也被包含在内。此类应用程序已经做了相应标注。

以下是适用于 Linux 的 8 款最佳远程桌面工具:

1、Remmina

Reminna

Remmina 是一款功能强大的自由开源的远程桌面客户端,支持多种协议,包括 RDP、VNC、SPICE、X2GO、SSH 和 HTTP(S)。

如果你需要一款功能全面的开源远程桌面工具,Remmina 是一个不错的选择。

除了各种协议的支持外,它还具有一些功能,比如轻松截图、恢复连接、缩放质量、配置分辨率等等,并且这些功能可以通过插件进行扩展。

优点:

  • 使用 GTK 编写,原生支持 Linux。
  • 通过服务器地址设置快速连接。
  • 可以保存连接配置。
  • 支持多种协议。
  • 使用插件扩展功能,如信息亭模式、代理支持、终端仿真器等等。

缺点:

  • 仅支持 Linux。
  • 对新用户来说可能使用起来不太容易。

安装 ?

Remminna 可以在大多数发行版的存储库中获取。但是,为了保证你获得最新版本,你可以通过 Flatpak(如果不使用“软件中心”)或 Snap 安装它,具体安装方法可以参考我们的 Flatpak 指南

对于 Flatpak,你可以使用以下命令进行安装:

flatpak install flathub org.remmina.Remmina

2、GNOME “连接”应用

GNOME “连接”应用 是一款简单易用的应用程序,可以使用 RDP/VNC 协议快速连接到远程桌面。

它不支持其他协议,也没有高级功能。你只需要简单地单击该应用程序,就可以使用缩放、带宽调整和一些其他选项。

优点:

  • 简单易用。
  • 专为 GNOME 定制而设计,但也可以在其他桌面环境上使用。

缺点:

  • 它不支持多种协议。
  • 对大多数用户来说,可能没有其他功能,也不支持插件扩展。

安装 ?

你可以通过 Flathub 安装 GNOME “连接”应用,这适用于你选择的任何发行版。

如果你已经安装了 Flatpak,则可以使用以下命令通过终端安装它:

flatpak install flathub org.gnome.Connections

3、X2Go

X2Go Client

X2Go 是一款开源的跨平台远程桌面客户端,采用客户端-服务器架构。远程计算机必须安装 X2Go 服务器,这一般是一个 Linux 系统。然后,你可以在你选择的任何平台上安装 X2Go 客户端,然后使用它连接到 Linux 远程系统。

你也可以使用客户端软件连接到 Windows,其他平台没有可供安装的服务器。

因此,对于频繁连接到 Linux 计算机的用户来说,X2Go 是一个很好的选择。

优点:

  • 支持 Linux 服务器。
  • 支持跨平台客户端。
  • 支持 SSH 访问、打印机共享、剪贴板模式和音频。

缺点:

  • 它使用修改过的 NX 3 协议,不支持其他协议。

安装 ?

X2Go 客户端在 Ubuntu 的 “软件中心” 中可用。或者,你可以在基于 Debian 的 Linux 发行版中使用以下命令:

sudo get install x2goclient

要安装 X2Go 服务器,请使用以下命令:

sudo add-apt-repository ppa:x2go/stable
sudo apt update
sudo apt install x2goserver x2goserver-xsession

你可以在其 官方文档 中了解更多信息。

4、KRDC

KRDC

KRDC 是一款由 KDE 开发的自由开源的远程桌面工具。你可以在一些采用 KDE 的发行版中找到它的预安装版本,也可以在任何发行版上安装它。

它支持两种协议,包括 RDP 和 VNC。你拥有缩放和远程会话管理等所有基本选项。

优点:

  • 简单易用。
  • 可以记忆连接历史记录。
  • Linux 原生支持。
  • 缩放支持。

缺点:

  • 没有跨平台可用性,仅限于 Linux。

安装 ?

你可以在 KDE 的 “发现” 应用中找到 KRDC ,也可以使用 Flathub 或 Snap 安装它。

如果你想要通过终端安装 Flatpak,请使用以下命令:

flatpak install flathub org.kde.krdc

5、TigerVNC

TigerVNC

TigerVNC 是一款自由而开源的远程计算机连接工具,采用客户端-服务器架构。

换句话说,你需要在远程计算机上安装服务器,并安装客户端程序进行连接。

客户端程序非常简单,提供诸如显示设置和多种压缩调整的基本选项。与其他选择相比,TigerVNC 可以为你提供快速的远程连接体验

优点:

  • 跨平台。
  • 快速的性能。

缺点:

  • GUI 外观陈旧。
  • 它不支持多种协议。

安装 ?

你可以从 GitHub 的发布区 找到 TigerVNC 的软件包,或者在 SourceForge 上下载二进制文件。如果需要帮助,可以参考我们的 deb 文件安装 文章。

6、TeamViewer(非 FOSS)

TeamViewer

TeamViewer 是一款跨平台的流行工具,甚至可以通过移动设备进行连接。有趣的是,它还提供了一个 Web 客户端。因此,要连接到其他系统,你不需要在计算机上安装客户端。

它是可以找到的最古老的远程桌面共享工具之一。虽然它提到存在实验性的 Wayland 支持,但 TeamViewer 建议使用 Xorg 会话

人们经常使用 TeamViewer 进行远程支持和协作。虽然个人用途可以免费使用,但企业和大型组织需要商业许可证。

与其他一些软件不同,你不需要 IP 地址。只需在远程计算机上安装 TeamViewer,你就可以获得一个唯一 ID,将其共享给你想要授权远程连接的用户,就可以了!

优点:

  • 直观的用户体验。
  • 适合初学者。
  • 支持移动端。

缺点:

  • 需要创建帐户才能启用桌面共享。
  • 不是轻量级工具。
  • 非开源软件。

安装 ?

TeamViewer 为 Linux 发行版提供了二进制文件以进行轻松安装。你可以获取 Ubuntu 的 .deb 包或参考我们的 TeamViewer 指南 获取帮助。

7、AnyDesk(非 FOSS)

AnyDesk

AnyDesk 是业界领先的远程桌面工具之一,具有完整的功能集和安全访问。

它支持安卓和 iOS 平台的移动端。你可以免费使用它,但你需要购买许可证以解锁其所有功能。

优点:

  • 跨平台支持。
  • 移动支持。

缺点:

  • 免费的功能有限。
  • 非开源软件。

安装 ?

你可以在其 下载页面 上找到适用于各种 Linux 发行版的二进制文件,支持 Ubuntu、openSUSE 和 RHEL。

8、Apache Guacamole

Apache Guacamole 是一款用于云系统(或服务器)的特殊远程桌面工具。

你可以在服务器上安装 Apache Guacamole,并通过 Web 浏览器从任何其他平台访问。因此,它自称为无客户端远程桌面网关。

优点:

  • 专为云计算设计。
  • 自由而开源。

缺点:

  • 一种特殊的工具,不适合所有人。

总结

还有一些其他的开源选项,如 FreeRDPXRDP。FreeRDP 我没有运行成功,但它有活跃的维护。所以,你可以尝试一下。

XRDP 需要从源代码安装。如果你想要从 源代码编译,可以参考它。

? 告诉我们你更喜欢列表中的哪个或者你有其他建议。我们可能会更新列表以包含你的建议。

(题图:MJ/bf5f2b07-db9a-416f-b5d7-857d3b8e5b1a)


via: https://itsfoss.com/remote-desktop-tools/

作者:Ankush Das 选题:lkxed 译者:ChatGPT 校对:wxy

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