硬核观察 #1121 人工智能正在大量“喝水”，你的每个问题都会用掉一瓶水
人工智能正在大量“喝水”，你的每个问题都会用掉一瓶水对人工智能工具的需求不断增长会带来高昂的成本，这不只是昂贵的半导体，还会增加数据中心的耗水量，因为所有这些计算都需要耗费大量电力并产生大量热量。OpenAI 的 ChatGPT 是在微软的数据中心训练的，这导致微软消耗了更多的冷却水。微软在其最新的环境报告中披露，从 2021 年到 2022 年，它的全球耗水量激增了 34%（达到近 17 亿加仑，超过 2500 个奥林匹克规格的游泳池）。有研究估计，每当你向 ChatGPT 提出 5 到 50 个提示或问题时，ChatGPT 会消耗 500 毫升的水来冷却。同期，谷歌的用水量也增长了 20%，这在很大程度上也归功于其人工智能工作。消息来源：AP News老王点评：人工智能也需要不断补充水分才能跑啊。?2023 年顶级编程语言：Python 和 SQLIEEE Spectrum 发布了第 10 届年度顶级编程语言排行榜。它从三个类别中各选出一种顶级语言：光谱榜：在软件工程师使用最多的语言职位榜：雇主需求量最大的语言趋势榜：流行的语言Python 在光谱榜（使用最多的语言）中保持第一，它已成为万金油语言，也是某些领域的高手，如人工智能领域。而在职位榜（雇主需求最多）中，SQL 排到了榜首，但具有讽刺意味的是，纯粹的 SQL 程序员是很难找到工作的。相反，雇主们喜欢看到 SQL 技能与其他语言的结合。而在趋势榜上，Python 仍然居首。消息来源：IEEE老王点评：Python 登顶并不意外，但是 SQL 能够登上工作需求排行榜首位，还是有点吃惊。所以，你知道该学习什么编程语言了吗？Meta 计划训练与 GPT-4 相当的人工智能模型Meta 公司已经购买了更多的英伟达 H100 人工智能训练芯片，以便不需要依赖微软的 Azure 云平台来训练新的聊天机器人。该公司计划在 2024 年初开始训练新的大型语言模型，目标似乎是传闻中 Meta 已经在开发的生成式人工智能功能的自然延伸，预计其功能将与 OpenAI 提供的最先进模型一样强大。据称，Instagram 正在测试一个拥有 30 种性格的聊天机器人，这听起来很像该公司本月即将推出的未公布的人工智能 “personas”。消息来源：The Verge老王点评：我比较看好 Meta 在 AI 方面的进展，尤其是他们使用伪开源打破 OpenAI 和谷歌的护城河的做法，颇有影响，虽然我腹诽他们的伪开源。
以下是 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中国 荣誉推出
硬核观察 #966 希望替代 C 的 Zig 语言进入 TIOBE 指数前 50 名
希望替代 C 的 Zig 语言进入 TIOBE 指数前 50 名在 TIOBE 2023 年 4 月的最受欢迎的编程语言榜单中，一种它有望成为 C 的现代替代品的通用编程语言 Zig 排名第 46 位，尽管其评分仅为 0.19%。相比之下，谷歌推广的 Carbon 语言，被定位为 C++ 的实验性继任者，仅排名第 168 位。Zig 拥有 C 和 C++ 各种好特性，如用选项类型增强的显式内存管理，并放弃了不那么好的特性，如可怕的预处理。Tiobe 指数建立在课程、第三方供应商和工程师的搜索引擎结果之上。消息来源：Info World老王点评：虽然取代 C 语言看起来遥遥无期，但是至少是一个值得感兴趣的选项。ChatGPT 因撒谎被起诉澳洲赫本郡的市长 Brian Hood 曾帮助揭露与澳大利亚国家储备银行有关的丑闻，但是，如果你问 ChatGPT 关于他在丑闻中的作用，你会得到相反的事件版本。ChatGPT 谎称 Hood 本人因向外国官员行贿而被定罪，已承认受贿和腐败，并被判处监禁。Hood 打算对 ChatGPT 背后的公司提出诽谤诉讼，这将是第一次有人对 ChatGPT 的内容提出诽谤诉讼。消息来源：MSN老王点评：AI 的“事实幻觉”一直是个问题，虽然 AI 已经一再做出免责声明，但是法律似乎对此并无实践。多款 Wi-Fi 路由器能被 ICMP 嗅探突破安全机制国内安全专家发现，至少在 55 款 Wi-Fi 路由器中发现的一个漏洞可被不法分子利用，在通过无线网络发送数据时偷窥受害者的数据。这些设备采用了高通或海思的网络处理单元（NPU），该缺陷使得设备无法阻止伪造的 ICMP 重定向信息，从而规避了 Wi-Fi 的 WPA 安全措施，劫持和观察受害者的无线连接。这说明链路层的无线帧加密的设计功能，可以被 IP 层的 ICMP 错误处理的正常执行所干扰。在他们测试的 122 个 Wi-Fi 网络中，有 109 个（89%）容易受到这种攻击。消息来源：The Register老王点评：总之不要完全依赖网络层的安全性，应用层的 HTTPS 还是很有必要的。
硬核观察 #820 英伟达采用形式验证来验证软件安全性
英伟达采用形式验证来验证软件安全性英伟达软件安全副总裁说，“面向测试的软件验证对安全来说根本不起作用，你可以对提供给用户的功能的质量有一个衡量标准，但对于安全问题，就没有什么作用，……很难知道你是否已经完成了。”幸运的是，有可能用数学方法证明你的代码的行为与它的规范精确一致。这个过程被称为“形式验证”。英伟达采用软件形式验证行业解决方案 SPARK 来证明软件的安全性。在几年前进行过概念验证后，现在许多英伟达产品在使用 SPARK 组件发布。消息来源：AdaCore老王点评：形式验证是个好方法，但是不是那么容易掌握和推行。JavaScript、Java、Python、Kotlin 和 Rust 开发者增长惊人根据 SlashData 去年夏天从 163 个国家的 26000 多名开发者调查统计而成的第 23 期《开发者国家报告》，JavaScript 仍然是最大的编程语言社区，全球估计有 1960 万开发者每天都在使用 JavaScript；在过去的两年里，Java 社区的规模已经从 830 万增加到 1650 万，而同期开发者只增加了 50%；Python 在过去两年中增加了约 800 万新的开发人员；Kotlin 和 Rust 社区的规模在过去两年里都翻了一番。消息来源：ZDNet老王点评：开发人员越来越倾向于使用主流开发工具，所以流行的越发流行，但是这样就会扼杀一些创新。密码学家建议考虑非晶格的后量子密码算法目前许多密码学系统的安全性是基于大数的因数分解的，但因数分解的一个怪癖使其容易受到量子计算机的攻击。因此人们对上世纪 90 年代提出的“晶格密码学”寄予厚望，美国 NIST 选择的四个后量子密码学标准有三个采用晶格密码学。RSA 算法名称中的 S，Adi Shamir 对此表示担忧，“从某种意义上说，我们是把所有鸡蛋放在同一个篮子里”。今年夏天早些时候，一个有前途的后量子密码学方案不是用量子计算机，而是用一台普通的笔记本电脑破解的。消息来源：Slashdot老王点评：确实如此，只有一种抗量子的密码理论，很难说会不会被发现潜在的弱点。
硬核观察 #708 程序员奶爸用 AI 解决婴儿喂奶难题
程序员奶爸用 AI 解决婴儿喂奶难题国外一位程序员喜得贵子之后，颇受婴儿喂奶之苦 —— 我想养过孩子的人都有过这种体验。但是作为 AI 工程师，他花费了 50 个小时开发了一套 AI 系统，通过识别婴儿状态来判断是否该喂奶了，并通过手机发送通知给他去喂奶 —— 而不是给他老婆，从而可以让老婆有个良好睡眠。甚至，他还进一步开发了一套全自动喂奶装置，虽然还不太尽如人意，但是已经让全世界奶爸们感到了希望，纷纷催促他开源。消息来源：Reddit老王点评：真是技术解救程序员，如果你觉得你的编程技术没帮到你，那只是你的技术还不够好。国内 Go 语言爱好者发起新编程语言：凹语言国内三位 Go 语言爱好者发起了一种实验性的新编程语言：凹语言™（读作“Wa”）。但从其官网看，这个语言似乎从 2019 年就开始设计了。目前代码已经发布在 Github，并且提供了简单可执行的示例，不过该项目采用了“保留所有权利”的版权声明（可能是还没来得及确定许可证）。在语言设计中遵循了 Go 语言克制的风格，大量借鉴了 Go 的设计思想和具体实现。比较有趣的特性包括：披着 Go 和 Rust 语法外衣的 C++ 语言；其 WaGo 语法是 Go 的真子集；支持中文/英文双语关键字，任一关键字均有等价的中文及英文版。消息来源：凹语言老王点评：一个好玩的业余项目，不够最让我印象深刻的反而是这个语言的名字。大多数开源开发者都在关注新的工作机会根据一份基于面向全球 1400 名应用开发者、IT 管理人员、运营和业务管理专业人才的问卷报告显示，尽管还算满意，但 44% 的开发者仍在关注工作选择；另外 10% 的受访者对他们目前的工作不满意。2/3 的受访者声称分配给他们的工作量增加。调查还显示，1/3 的受访者会考虑离开目前的职位，以便有机会使用更尖端的技术，比 2021 年仅 16% 的比例高出一倍。消息来源：Info World老王点评：程序员嘛，要么少干活多拿钱，要么可以学技术，你总的至少满足一样。
硬核观察 #645 JavaScript 和 Python 继续统治编程语言，但 Rust 在崛起
JavaScript 和 Python 继续统治编程语言，但 Rust 在崛起根据 SlashData 去年年底的对 166 个国家的 20000 多名开发者的调查，目前最受欢迎的编程语言是 JavaScript，其次是 Python。仅在过去半年，Python 就净增加了 330 万开发人员。而 Rust 的采用在过去两年里几乎翻了两番，达到 220 万开发者。PHP 的增长最少，在 2021 年第三季度和 2022 年第一季度之间，净增加了 60 万名新开发者。但 PHP 是仅次于 JavaScript 的网络应用程序中最常见的语言。Go 和 Ruby 是后端开发中的重要语言，Go 在过去一年中的增长速度超过了两倍，现在有 330 万开发者。消息来源：InfoWorld老王点评：所以，现在该去学什么语言了？其实我看，不论什么语言，能用的上的语言就是好语言。但是如果只是泛泛的使用，那无论是学那种语言都没什么用。Linux 5.18 释出Linus Torvalds 在内核邮件列表上宣布释出 Linux 5.18。新版的主要新特性包括：C 语言标准从 C89 切换到 C11；改进了随机数生成器；英特尔即将推出的软件定义芯片驱动，可以通过付款解锁处理器附加功能；内存管理接口 DAMOS；严格 memcpy() 边界检查；支持英特尔 CPU 的间接分支跟踪；改进 AMD Zen CPU 进程调度性能等等。消息来源：KernelNewbies老王点评：这个版本其实有很多特征值得关注，之前我们也陆续提到了一些，比如使用的 C 语言标准的升级，比如随机数生成器和软件定义芯片功能。科学家正在修改蚊子的基因以减小雌蚊数量一个名为“目标疟疾”的组织已经开发出基因驱动，以阻止蚊子产生雌性后代。这很重要，有两个原因：只有雌性才会咬人，而没有雌性，蚊子的数量就会骤减。其核心目的是大大减少死于疟疾的人数，根据世界卫生组织的数据，2020 年有 627,000 人死于疟疾，估计疟疾每年会使非洲大陆的经济产出减少 120 亿美元。不过该技术还没有允许公开使用，目前只是在实验室进行实验。消息来源：BBC老王点评：虽然消灭蚊子是一件好事，我天天被蚊子咬，但是我担心贸然破坏自然界可能有意想不到的结果。
不同的编程语言是如何读写数据的
每种编程语言都有其独特的完成任务的方式，这也说明了为什么有这么多语言可供选择。在 Jim Hall 的《不同的编程语言如何完成相同的事情》文章中，他演示了 13 种不同的语言如何使用不同的语法来完成同一个任务。经验是，编程语言往往有很多相似之处。一旦你了解了一种编程语言，你就可以通过理解它的语法和结构来学习另一种。本着同样的精神，Jim 的文章比较了不同编程语言如何读写数据。无论数据来自配置文件还是用户创建的文件，在存储设备上处理数据都是程序员的常见任务。以这种方式涵盖所有编程语言是不切实际的，但最近的 Opensource.com 系列文章提供了对这些编程语言采用的不同方法的深入了解：CC++JavaGroovyLuaBashPython读写数据用计算机读写数据的过程和你在现实生活中读写数据的过程类似。要访问书中的数据，你首先要打开它，然后阅读单词或将生词写入书中，然后合上书。当程序需要从文件中读取数据时，你向程序传入一个文件位置，然后计算机将该数据读入内存中并解析它。同样，当程序需要将数据写入文件时，计算机会将新数据放入系统的内存写入缓冲区，然后将其同步到存储设备上的文件中。下面是这些操作的一些伪代码：在内存中加载文件。读取文件内容，或将数据写入文件。关闭文件。从文件中读取数据从 Opensource.com 系列文章的语言中，你可以看到读取文件的三种趋势。C在 C 语言中，打开文件可能涉及检索单个字符（直到 EOF 指示符，表示文件结束）或一个数据块，具体取决于你的需求和方法。根据你的目标，它可能感觉像一个主要是手工的过程，但这正是其他语言所模仿的。FILE *infile; int ch; infile = fopen(argv[1], "r"); do { ch = fgetc(infile); if (ch != EOF) { printf("%c", ch); } } while (ch != EOF); fclose(infile); 你还可以选择将文件的某些部分加载到系统缓冲区中，然后在缓冲区外工作。FILE *infile; char buffer[300]; infile = fopen(argv[1], "r"); while (!feof(infile)) { size_t buffer_length; buffer_length = fread(buffer, sizeof(char), 300, infile); } printf("%s", buffer); fclose(infile); C++C++ 简化了一些步骤，允许你将数据解析为字符串。std::string sFilename = "example.txt"; std::ifstream fileSource(sFilename); std::string buffer; while (fileSource >> buffer) { std::cout << buffer << std::endl; } JavaJava 和 Groovy 类似于 C++。它们使用名为 Scanner 的类来设置数据流或对象，这样就会包含你选择的文件内容。你可以通过标记（字节、行、整数等）扫描文件。File myFile = new File("example.txt"); Scanner myScanner = new Scanner(myFile); while (myScanner.hasNextLine()) { String line = myScanner.nextLine(); System.out.println(line); } myScanner.close(); Groovydef myFile = new File('example.txt') def myScanner = new Scanner(myFile) while (myScanner.hasNextLine()) { def line = myScanner.nextLine() println(line) } myScanner.close() LuaLua 和 Python 进一步抽象了整个过程。你不必有意识地创建数据流，你只需给一个变量赋值为 open 函数的返回值，然后解析该变量的内容。这种方式快速，最简且容易。myFile = io.open('example.txt', 'r') lines = myFile:read("*all") print(lines) myFile:close() Pythonf = open('example.tmp', 'r') for line in f: print(line) f.close() 向文件中写入数据就写代码来说，写入是读取的逆过程。因此，将数据写入文件的过程与从文件中读取数据基本相同，只是使用了不同的函数。C在 C 语言中，你可以使用 fputc 函数将字符写入文件：fputc(ch, outfile); 或者，你可以使用 fwrite 将数据写入缓冲区。fwrite(buffer, sizeof(char), buffer_length, outfile); C++因为 C++ 使用 ifstream 库为数据打开缓冲区，所以你可以像 C 语言那样将数据写入缓冲区（C++ 库除外）。std::cout << buffer << std::endl; Java在 Java 中，你可以使用 FileWriter 类来创建一个可以写入数据的对象。它的工作方式与 Scanner 类非常相似，只是方向相反。FileWriter myFileWriter = new FileWriter("example.txt", true); myFileWriter.write("Hello world\n"); myFileWriter.close(); Groovy类似地，Groovy 使用 FileWriter，但使用了稍微 “groovy” 的语法。new FileWriter("example.txt", true).with { write("Hello world\n") flush() } LuaLua 和 Python 很相似，都使用名为 open 的函数来加载文件，writer 函数来写入数据，close 函数用于关闭文件。myFile = io.open('example.txt', 'a') io.output(myFile) io.write("hello world\n") io.close(myFile) PythonmyFile = open('example.txt', 'w') myFile.write('hello world') myFile.close() File 模式许多语言在打开文件时会指定一个“模式”。模式有很多，但这是常见的定义：w 表示写入r 表示读取r+ 表示可读可写a 表示追加某些语言，例如 Java 和 Groovy，允许你根据用于加载文件的类来确定模式。无论编程语言以何种方式来确定文件模式，你都需要确保你是在 追加 数据，除非你打算用新数据覆盖文件。编程语言不像文件选择器那样，没有内置的提示来警告你防止数据丢失。新语言和旧把戏每种编程语言都有其独特完成任务的方式，这就是为什么有这么多语言可供选择。你可以而且应该选择最合适你的语言。但是，你一旦了解了编程的基本结构，你可以随意尝试其他语言，而不必担心不知道如何完成基本任务。通常情况下，实现目标的途径是相似的，所以只要你牢记基本概念，它们就很容易学习。via: https://opensource.com/article/21/7/programming-read-write作者：Alan Smithee 选题：lujun9972 译者：MjSeven 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
硬核观察 | Python 之父对 Rust、Go、Julia 和 TypeScript 的看法
Python 之父对 Rust、Go、Julia 和 TypeScript 的看法Python 之父 Guido 在最近一次新采访中分享了他对其它编程语言的看法，其中有些很有趣：Rust 在一个特定的领域真正改进了 C++，它使绕过编译器的检查变得更加困难。当然，它以一种近乎完美的方式解决了内存分配问题。在所有的新语言中，Go 可能是最像 Python 的 —— 或者至少是在通用的新语言中。Julia 有太多的细节看起来与 Python 非常相似。Julia 会在某个小众的地方是优越的，因为它的编译器为你优化了代码，而 Python 可能永远不会这样。TypeScript 做了一些 Python 仍在等待解决的事情。我们正在向TypeScript学习。听起来 TypeScript 也在向 Python 学习，就像 JavaScript 在一些领域向 Python 学习一样。嗯，作为目前顶级的编程语言神级人物，Guido 的一些看法挺有意思的。如果有机会得到完整的采访脚本，我们会翻译分享给大家。Linux 5.13-rc3 发布，主要是撤销明大的提交Linus Torvalds 如期发布了 Linux 5.13-rc3 内核。他 说，“这是一个非常平静的 RC3 周，至少在纯提交数量上，这是我们在 5.x 系列中最小的 RC3。”Linux 5.13-rc3 最主要的工作是，撤销了明尼苏达大学研究人员三十几个有问题的补丁，以及因他们的“伪君子提交”研究而引起的清理工作。过去一个月里审查了明尼苏达大学对 Linux 内核的所有补丁，虽然有些补丁部分地解决了真正的问题，但在许多情况下，它们可以进一步改进，或者作用有限。终究明大还是丧失了 Linux 内核社区的所有信任，即便是有些补丁属于可撤销也可不撤销的。此事的是非曲直大家各有不同的看法，但是我觉得 Linux 内核社区或许应该考虑如何建立更健壮的代码审核机制。安全研究人员艰难攻破了波音 747 的机上娱乐系统信息安全公司 PTP 的研究人员在利用了一个可追溯到 1999 年的漏洞后，在一架波音 747 客机的机上娱乐系统上建立了一个持久的 shell。PTP 说，“攻破它比我们预期的要困难得多，主要是因为这个机上娱乐系统已经有 25 年的历史了，缺少许多我们认为在最近的系统上理所当然的功能。”该系统是如此古老，其管理服务器运行在 Windows NT4 SP3 上。许多现代工具和技术都不起作用，甚至连 Kali Linux 的前身 Backtrack 也没有成功。最终，研究人员使用 Metasploit 的 TFTP 服务器模块进入机器，获得了命令行访问权，并从那里获得了管理密码的哈希值并将其破解。虽然说系统越老漏洞越多，但是过于老的系统，你可能都没有足够工具去破解它。
只需一点编程经验，你就可以在短短几天内（有时更少）学会一种新编程语言。有些人喜欢学习新的编程语言，也有一些人觉得学习一种都是可望不可及的事情。在本文中，我将向你展示如何像程序员一样思考，这样你就可以自信地学习任何一门你想要学习的编程语言。事实上，一旦你学会了如何编程，你使用的编程语言就不再是一个障碍，而更像是一种形式。实际上，这就是教育家们倡导 让孩子尽早学习编程 的众多原因之一。不管他们的入门语言有多简单，这种编程的逻辑和儿童们（或成人学习者）以后可能遇到的其他语言的逻辑有着想通之处。只需有一点编程经验（你可以从我们这里的几篇介绍性文章中获得），你就可以在短短几天内（有时更短）学习任何编程语言。这并不是魔法，你也确实要为此付出一些努力。诚然，学习一种编程语言每个的可用库，或者学习打包代码以及进行交付的细微差别，需要的时间远远不止几天。但是，就入门来说，比你想像中的要容易许多，剩下的则要通过不断练习来完成。当有经验的程序员静下心来学习一门新的编程语言时，他们会寻找五样东西。只要你知道了这五件事，你就可以开始编码了。1、语法语言的语法描述了代码的结构。这包括如何逐行编写代码，以及用于构造代码语句的实际单词。例如，Python 以使用缩进来指示一个代码块在哪里结束以及另一代码块在哪里开始而闻名：while j < rows: while k < columns: tile = Tile(k * w) board.add(tile) k += 1 j += 1 k = 0 Lua 只是使用关键字 end：for i,obj in ipairs(hit) do if obj.moving == 1 then obj.x,obj.y = v.mouse.getPosition() end end Java、C、C++ 之类的编程语言使用花括号：while (std::getline(e,r)) { wc++; } 编程语言的语法还包括包括库、设置变量和终止行等内容。通过练习，你将学会在阅读示例代码时下意识地识别语法需求（和惯例）。实践当学习一门新的编程语言时，要努力理解它的语法。你不需要去记住它，只需要知道如果忘记了以后去哪里查找。使用好的 IDE 也很有帮助，因为很多 IDE 在出现语法错误时会提醒你。2、内置函数和条件就像自然语言一样，编程语言可以识别的合法单词是有限的。这个词汇表可以使用其他库进行扩展，但是核心语言知道一组特定的关键字。大多数语言并没有你想的那么多关键字。即使在像 C 语言这样非常低级的语言中，也只有 32 个关键字，比如 for、do、while、int、float、char、break 等等。了解了这些关键字，你就可以编写基本的表达式，也就是构建程序的代码块。许多内置的关键字能帮助你构建条件语句，这些条件语句影响整个程序的流程。例如，如果你想编写一个允许单击和拖动图标的程序，那么你的代码就必须检测用户的鼠标指针何时位于图标上。只有当鼠标光标位于图标外部边缘相同的坐标时，才执行导致使鼠标抓取图标的代码。这是一个经典的 if / then 语句，但不同的语言可以用不同的方式表达。Python 使用 if、elif和 else 的组合来实现条件语句，但是并不显式的关闭语句：if var == 1: # action elif var == 2: # some action else: # some other action Bash 使用 if、elif、else，并且使用 fi 来结束语句：if [ "$var" = "foo" ]; then # action elif [ "$var" = "bar" ]; then # some action else # some other action fi 然而 C 和 Java, 使用 if、else 和 else if，用花括号把它们括起来：if (boolean) { // action } else if (boolean) { // some action } else { // some other action } 各种编程语言虽然在关键字的选择和语法上有细微的变化，但基本是相同的。学习如何在编程语言中定义条件语句，包括 if / then、do...while 和 case 语句。实践要熟悉编程语言能够理解的关键字集。在实践中，你的代码将不仅仅包含编程语言的关键字，可以肯定的是，有包含很多简单函数的库来帮助你做一些事情，诸如将输出打印到屏幕或显示窗口之类。然而，驱动这些库的逻辑始于编程语言的内置关键字。3、数据类型代码是用来处理数据的，因此你必须学习编程语言如何识别不同类型的数据。所有编程语言都能理解整数，大多数的语言能理解小数和单个字符（a、b、c 等等）。它们通常被表示为 int、 float、double 和 char，当然，语言的内置词汇表会告诉你如何引用这些实体。有时候，在编程语言中内置了一些额外的数据类型，也有时是通过引用库来启用复杂的数据类型。例如，Python 可以识别关键字为 str 的字符串，但是 C 语言的代码中必须包含 string.h 头文件才能实现字符串特性。实践库可以为你的代码解锁各种类型的数据，但是学习编程语言中包含的基本数据类型是一个明智的起点。4、运算符和解析器一旦你理解了编程语言可处理的数据类型，就可以学习如何分析这些数据了。幸运的是，数学这门学科是相当稳定的，所以算数运算符在许多语言中通常是相同的（或至少非常相似）。例如，两个整数相加通常用 + 符号完成，而测试一个整数是否大于另一个整数通常用 > 符号完成。测试是否相等通常使用 == 来完成（是的，是两个等号，因为通常一个等号用来赋值）。当然也有一些例外，比如像 Lisp 和 Bash 语言算数运算符就不是如此，但与其他语言一样，这只是一个心理翻译的问题。一旦你了解了表达方式有何不同，很快就可以适应它。快速浏览一下一门编程语言的算数运算符通常足以让你了解算数操作是如何完成的。你还需要知道如何比较和操作非数值数据，比如字符和字符串。这些通常是通过编程语言的核心库来进行的的。例如，Python 提供了 split() 方法，而 C 语言需要引入头文件 string.h 来提供 strtok() 函数。实践了解用于处理基本数据类型的基本函数和关键字，并寻找可帮助你完成复杂操作的核心库。5、函数代码不只是计算机的待办清单。通常情况下，在编写代码时你往往希望向计算机提供一组理论条件和一组操作指令，当满足每个条件时计算机就会采取这些操作。尽管使用条件语句以及数学和逻辑运算符进行流控制可以做很多事情，但是引入了函数和类之后，代码会变得更加高效，因为它们使你可以定义子程序。例如，如果应用程序非常频繁地需要一个确认对话框，那么将其作为类的实例编写一次要比每次需要它时重新编写实现起来要容易得多。你需要学习如何在编程语言中定义类和函数。更准确地说，你首先需要了解编程语言中是否支持类和函数。大多数现代语言都支持函数，但是类是面向对象的编程语言中所特有的。实践学习语言中可用的结构，这些结构可以帮助你高效地编写和使用代码。你可以学到任何东西学习编程语言，就其本身而言，是一种编码过程中的子程序。一旦理解了代码如何工作，你所使用的语言就只是一种传递逻辑的媒介。学习一门新编程语言的过程几乎都是一样的：通过简单的练习来学习语法，通过学习词汇来积累进行复杂动作的能力，然后练习、练习、再练习。via: https://opensource.com/article/20/10/learn-any-programming-language作者：Seth Kenlon 选题：lujun9972 译者：xiao-song-123 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
代码英雄讲述了开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。什么是《代码英雄》 代码英雄 Command Line Heroes 是世界领先的企业开源软件解决方案供应商红帽（Red Hat）精心制作的原创音频播客，讲述开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。该音频博客邀请到了谷歌、NASA 等重量级企业的众多技术大牛共同讲述开源、操作系统、容器、DevOps、混合云等发展过程中的动人故事。本文是《代码英雄》系列播客第二季（2）：Hello, World的音频脚本。导语：每一种新的编程语言的诞生，都是为了做一些以前无法完成的事情。如今，有非常多编程语言可以选择，但哪些才是你真正需要了解的？本集将深入探讨编程语言的历史。我们将会了解到被称为 “神奇葛丽丝” 的天才 —— 海军少将葛丽丝·哈伯。多亏了她，开发者不再需要数学博士的学历就能使用机器代码编写程序。参与录制的还有 Jupyter 项目的 Carol Willing，她是 Python 基金会的前理事；以及《 纽约时报杂志 New York Times Magazine 》和《 连线 Wired 》的撰稿人 Clive Thompson，他最近正在撰写一本关于程序员如何思考的书。00:00:07 - 各种语言：“你好，世界。”00:00:12 - Saron Yitbarek**：你好，世界。现在我们发出的是信号还是噪音？我们日日夜夜无休止地写代码，做测试工作，我们追求的事情只有一个：我们是否传递了我们的信号？00:00:29 - 各种语言：你好。00:00:29 - Saron Yitbarek：或者我们的信号是不是丢失了？难道我们一直在制造无意义的杂音吗？00:00:40：我是 Saron Yitbarek，这是代码英雄第二季，来自红帽原创播客。今天的话题将在“翻译”中挖掘。这关于编程语言的故事：它们是怎么来的，如何选择其中一个语言来学习。我们将深入研究如何与机器对话。探究这些语言是如何演化的，以及我们如何用它们来让我们的工作变得更好。00:01:08 - Sari：Daisy，daisy，来告诉我你的正确回答。00:01:11 - Saron Yitbarek：如果你像我一样是一个开发者，你可能也经受着去精通多种语言的压力。最起码你得会 Java，更好一些得懂 Python、Go、JavaScript、Node，甚至能够用 C++ 思考。也许为了增加可信度，可能你还要熟悉古典的 COBOL。甚至你还得学点新东西，比如 Dart。实在太累了。00:01:36：奇怪的是，我们正在讨论的计算机只讲一种语言：机器语言，以二进制形式飘过的 1 和 0。说到底，我们学习的每个语言都是殊途同归。不管有多抽象，它都是用来简化我们工作的道具。00:02:03：这就是我希望你们记住的，故事开始了，从那一刻，那一个经典辉煌的时刻，一个女人说：“你知道么？我是人类，我不想用二进制来讨论思考，我就想用英语去编程。”00:02:22：在今天可能看来是一个简单的概念。但曾几何时，使用人类的方式与计算机对话这个主意 —— 说轻点是一个笑话，严重点就是亵渎。00:02:37：代码英雄第二季，将讲述成就我们基础的螺丝钉展开。这一讲的英雄是一个女主人公，如果你想要进一步了解故事，你必须知道她的经历。在此给你们隆重介绍：软件界的第一夫人。00:02:58 - 发言人：尊敬的先生们和女士们，我非常荣幸的给你们介绍 葛丽丝·玛丽·哈伯 Grace Mary Hopper 准将，谢谢。00:03:02 - 葛丽丝·哈伯：我曾到加拿大的圭尔夫大学演讲，那时候我必须在多伦多的机场办理入境手续。我把护照递给移民官，他打量了护照和我说：“你是在哪里工作的？”00:03:17：然后我说，“美国海军。”00:03:20：她再次深深的打量我一下。然后他说：“你一定是海军里最老的。”00:03:28 - Saron Yitbarek：她就是 1985 年担任海军少将的葛丽丝·哈伯。在麻省理工学院发表了著名的演讲时，她 79 岁。即使在那时，她也是一个传奇人物。她是独立编程语言之母，实现通过编译器，用人类语言替代数学符号编程这一伟大成就的女性。00:03:51：她获得了国家技术奖章，她去世后（1992 年），被追授国家自由勋章。以上记录纯属真实，他们称她w为“神奇葛丽丝”。00:04:03 - Claire Evans：如果有人能够被称为天生的程序员，那么这个人一定是葛丽丝。00:04:06 - Saron Yitbarek：这是 Claire Evans，一个科技记者和《 宽带 Broad Band 》一书的作者，而这本书讲述了科技领域的女性先锋。Evans 描绘了早期的计算机世界，在 1940 年，当葛丽丝·哈伯还是一个年轻的女孩时，她加入了美军的海军预备役部队。当时的电脑有一个小房子那么大。00:04:25 - Claire Evans：早期的那些程序员，他们就像一个圣职者。他们是一群擅长做枯燥乏味事情的人，因为那会儿没有编译器，没有编程语言，人们是确实是一个比特一个比特地对机器编程。00:04:42：想要改变这种现实，你真的必须是一个特别的人，而葛丽丝真的就是那种人。00:04:49 - Saron Yitbarek：现在，她意识到让人类使用机器语言的是一种多么疯狂的限制。就像走路的时候，去告诉你身体的每个原子该怎么做。这是可能的吗？是，效率呢？不高。00:05:06：在程序员的意图和计算机的行为之间一定有一条捷径。自从有了算盘，人类一直在将数学思维机械化。一定有一种方法可以在计算机上再次实现这一点。00:05:19 - Claire Evans：在过去，数学家必须做出所有的步骤。所有这些枯燥的，一步一步的工作都是为了得到一个真实而有趣的答案。然后有了计算机后，它尽可能地承担了这些机械的运算。所以解放了数学家去进行高层面的、更智慧的、面向系统的思考。00:05:39：只不过，事实并没有如此发展。有了计算机，数学家就变成了程序员。他们又一次被这些枯燥无味的编程所束缚，做着这些一点一滴的繁琐的规则导向的小计算。00:05:53：因此，我认为，葛丽丝的期望是，她希望计算机能够辅助数学家，然后数学家就可以去更进行宏大的思考，做更伟大的事情，而不至于让他们陷入细节之中。00:06:12 - Saron Yitbarek：葛丽丝也加入了思想家的行列。我们都知道， 帕斯卡 Pascal 在 17 世纪发明了第一台计算器。 巴比奇 Babbage 在 19 世纪发明了分析机。这些伟大的杰作是发明家们解放人类的大脑的创作。这些发明让我们处理数据的能力空前绝后。这就是葛丽丝踏入的领域，发明了所有人都认为不可能的东西。00:06:42 - Claire Evans：我觉得，葛丽丝的想法是，人们应该用人类语言与计算机沟通。这个语言必须独立于机器的，因此不同计算机可以交互操作，这在当时是革命性的。00:06:59：早期她称这个为 “自动化编程”，在程序员和计算机人的群体中，被认为是像太空学员一样。00:07:12：而那些迟迟不上岸的人们被看成了尼安德特人，这在当时是计算机界的一个巨大的分歧。00:07:21 - Saron Yitbarek：葛丽丝要说服她的上级跨越这个分歧并不容易。但她认为这是她的责任，她必须尝试。00:07:30 - 葛丽丝·哈伯：这里总是有一条线，那条线代表了你的老板在那个时候会相信什么。当然，如果你过线了是得不到预算的。所以你对那条线有双重责任：不要踩过它，但也要不断教育你的老板，让你把这条线移得更远，这样下次你就能走得更远。00:07:52 - Saron Yitbarek：她推动的那个未来，就是我们的现在。几乎你我依赖的每一种语言都归功于她和她的第一个编译器。因此太空学员们活了下来，尼安德特人灭亡了。00:08:07：写代码不用数字，而是用人类风格的语言是她的观点。你敲下“执行操作 8”，或“关闭 文件 C”的精简操作，才是符合人类习惯的编程。00:08:21 - Claire Evans：葛丽丝独特地意识到，计算将成为改变世界的事情。但是如果没有人知道如何接触并使用计算机，那么它就不会成为改变世界的事情。因此她想确保它对尽可能多的人开放，尽可能多的人可以使用。00:08:37 - Claire Evans：这就需要编程在可理解性和可读性上做一些妥协。因此最终创造一个编程语言的目标就是给机器提供更多切入点，让它脱离这个神职，让它的开发面向大众和未来新一代。00:08:59 - Saron Yitbarek：我想在这里打断并强调下 Claire 的说法：现在我们所已知的编程语言，都来源于科技开放的愿望。这让计算机不再是数学博士们的专属玩具，让编程开发变得更容易。00:09:14：编译器所有工作的本质，是让程序变得更好理解，更有人性。00:09:21：Claire 有一个猜测，为什么葛丽丝是做出改变的那个人，这与她在二战期间的工作有关。00:09:29 - Claire Evans：她的工作是解决扫雷问题、弹道问题和海洋学问题。她用很多不同的、交叉的学科来模拟战争里的所有的暴力、混乱和现实的灾难，并将他们转化成在 Mark I 计算机上运行的程序。00:09:45：她知道如何在语言之间去做翻译转换。我的意思不是说计算机语言，是人类语言。她知道如何倾听一个提出复杂问题的人的意见，并尝试理解问题的背景，其信息和所涉及的专业规律，然后将这些转为计算机可以理解的程序。00:10:06：从这个角度看她如同早期的编译器。就像一个人类版本的编译器，因为她知道你必须理解他们才能满足他们的需求。00:10:17 - Saron Yitbarek：编译器干的事情就是一个解释和理解。我觉得我们应该在学习新语言，或想知道为什么有一些东西根本不能编译的时候牢记这个理念。编译器的工作就是满足你使用生活中说的语言来编程。00:10:32：葛丽丝知道人类一旦可以学会讲编程语言，而编译器可以将我们的意图转换为机器语言，就像为洪水打开了大门一样。00:10:43 - Claire Evans：她知道如果计算机太孤立和太具体，就不会发展为一个产业，从而成为改变世界的力量。也就是说计算机的从业者，可以让提出问题的人跟机器直接沟通。00:11:00：因此她真的是一个善于人类语言翻译的专家，至少我是这么想的。这使她有独一无二的机会，去思考和创建编程语言。00:11:15 - Saron Yitbarek：葛丽丝对英文式数据处理语言的研究最终演变成了 COBOL，它在某种意味上很不错。因为它不浮华，很适合商务用途，葛丽丝·哈伯也是这样的人。00:11:28：从某种角度看，她给了我们一个很像她的语言。像葛丽丝一样，COBOL 语言也很长寿，它现在已经 60 多了。00:11:50：葛丽丝的编译器就像一个 巴别鱼 babelfish ，在程序员和机器之间充当翻译，不过它们翻译的都是高度概括性的语言。00:12:03：然后，几十年之后，另一个重要的思潮在语言界兴起。想象下画面：自由软件社区在 1980 年出现，但是 Unix 的替代品 GNU 被开发出来后，却没有任何自由开放的编译器随之出现。00:12:22：为了让 GNU 给我们提供一个真正的开源 UNIX 替代品，为了让编程语言在开源世界蓬勃发展，社区需要找来一个格蕾丝·哈伯 —— 我们需要一个开源编译器。00:12:38：这是 Langdon White，红帽的平台架构师，来讲讲他对这个事情的理解。00:12:45 - Langdon White：在 80 年代，你要买一个编译器很轻松就要花上上万块钱。费用是最大的问题，我没有多余的钱去给自己买编译器。再一个事实是，我必须为所有我想要的目标平台买一个对应的编译器。那个时代大部分是 Unix 平台，但是细节和风格各不相同。00:13:06：因此你就不能买一个，你需要为不同的架构，不同的供应商购买多个编译器。00:13:14 - Saron Yitbarek：Langdon 指出这不仅仅是成本问题，在一些情况下，对编码工作也带来了问题。00:13:21 - Langdon White：大家都没有意识到，你如何用很特殊的方式来组织你的代码是很重要的。做嵌套 for 循环或者做嵌套 while 循环之类的事情可能是可以的，这取决于编译器。00:13:38：因此，大家都应该明白，如果你不知道编译是如何优化你的代码的，就很难知道如何写出最优的代码。00:13:49 - Saron Yitbarek：必须要提的是，我们需要一个免费的、可获得的、可值得信赖的编译器。这就是 GNU C 语言编译器：GCC。它横空出世在 1987 年，它是格蕾丝·哈伯的编译器革命和自由软件运动的结合。00:14:12：它是使编译更标准化，从而让所有人可以编译别人写的代码。我们编程语言的丰富性要归功于它。00:14:22 - Carol Willing：GCC 是开放的，可以说将编程语言推向一个更高的层次。00:14:29 - Saron Yitbarek：这是 Jupiter 项目成员 Carol Willing，她是 Python 软件基金会的前理事。00:14:35 - Carol Willing：人们开始意识到，专有的语言会在特定时间内被服务于一个目的，但并不能得到开发者社区的认可和热爱。因为如果你是一个开发者，你希望学习最常用的，以及未来最流行的东西。00:14:59：我没必要去发展一种将我锁定在一种技术上的技能。我想 Python 成功的一个原因是因为它是开源的，它有非常简洁的语法。00:15:11：它的特点就是允许人们用常见的方法，快速高效地解决问题，也允许大家合作解决问题。我想这就是好的程序和代码库的标志：如果你可以用最小的工作量完成你的工作，并且与他人分享，这是确实很棒的事情。00:15:35 - Saron Yitbarek：这么多年过去了，GCC 逐渐的支持了 Java、C++、Ada 和 Fortran 语言，我还可以继续说说它的进步。00:15:43 - Carol Willing：通过像 GCC 这样的通用底层接口，人们可以根据自己的特殊需求来定制语言。例如，在 Python 的世界里，有大量的库，甚至具体到科学 Python 世界里，我们有 numpy，还有 scikit-image、scikit-learn 这样的东西。00:16:08：每个库都是为一个特定目的而工作。因此，我们也看到了生物信息学和自然语言处理之类的东西。而人们可以在一个共同的基础上，做出很多不同的事情。而且可以把它们放到编程语言或库里，使他们能够在他们特定的行业或领域中优化问题的解决。00:16:42 - Saron Yitbarek：因此，这就是编译器技术一头撞进开源运动的结果吧？随着时间的推移，这种不同技术的碰撞，爆炸般地创造了一个新的、被社区支持的语言，大家都可以学习和完善它。00:16:58：现在有成百上千的编程语言存活着。00:17:03 - Carol Willing：随着开源软件越来越流行和被广泛接受，我们看到了编程语言的大量激增。现在有大量围绕着手机技术的编程语言，不同的编程语言也让游戏开发更加简单快速便捷。各种用途的语言，如 Python 和 Ruby，它们算是现代网页开发和交付网页应用和网站的基础。00:17:34 - Saron Yitbarek：这个队伍还会继续壮大。是的，我们建造的这个巴别塔在未来会更加拥挤。但是你可以把它当作一个聚宝盆，一个语言的盛宴。下面我们将会帮你们梳理这个盛宴。00:17:55：现在我们已经知道编程语言泛滥的原因了。但是这些对我们有什么具体的意义？我们如何选择对我们重要的语言呢？这是个大问题，因此我们找了一些人帮忙：Clive Thompson，是最好的作家之一，他能让科技世界变得更有意义。他是《连线》的专栏记者，《纽约时报》杂志的特约撰稿人，他现在正在写一本关于计算机程序员心理学的书。00:18:24：当我们挑选我们想要学习的编程语言时，我们需要知道我们到底想要什么。00:18:31：这是我和 Clive 反复讨论得出的结论。00:18:35：当我作为一个开发新人第一次入手的时候，我就说：“让我选一个最好的编程语言，然后掌握并熟练运用它，不就完事了么。”00:18:44：不过事情不会这样简单，否则为什么有那么多的编程语言呢？00:18:49 - Clive Thompson：每个语言都有那么点它的特长。因此通常来说，有人创造一个新语言是因为现有的语言满足不了他们的需求。JavaScript 就是一个典型的例子。00:19:03： 网景公司 Netscape 曾经在 90 年代中开发了一款浏览器，所有的网站管理员想做一些更具交互性的事情。他们希望有一种方法，使其可以在网站上运行一些脚本。00:19:16：当然这些需求都提给了网景。然后他们说：“好吧，现在我们没有可以做到这一点的办法，我们需要一个可以集成到我们浏览器的脚本语言。”00:19:25：于是他们雇佣了 Brendan Eich，一个被认为很资深的家伙。他当时 32 岁，其他人 21 岁的样子。00:19:32 - Saron Yitbarek：这在开发者圈里就很资深了00:19:35 - Clive Thompson：他们给他 10 天时间开发 JavaScript。因此他真的就 10 天没有睡觉，然后疯狂地捣鼓出一个脚本语言。它看起来有点挫，有点糟，但是可以运行。它允许人们做一些简单的事情，它还有按钮，对话框，弹框和其他东西。00:19:54：这就是造一个编程语言的例子，用来做在当时没有办法完成的事情。00:20:01 - Saron Yitbarek：是不是很有意思。00:20:03 - Clive Thompson：这就是为什么存在这么多编程语言，人们不断进取，去做别人做不到的事。00:20:11 - Saron Yitbarek：这也是为什么我对开发者和编程语言之间的关系很感兴趣，我们对这些工具有很强的依赖性。为什么呢？00:20:22 - Clive Thompson：有几个原因。一个是有时你学习你的第一个编程语言完全是一场意外，有点像你的初恋。00:20:30：我觉得不同性格的人，也会匹配不同类型的编程语言。例如 Facebook 是用 PHP 设计的。PHP 是有点像毛球，它很不规则，它的成长断断续续，Facebook 也有点这种感觉。00:20:49：与此相反，来自谷歌的伙计决定：“我们想要一个超高性能的语言，因为在谷歌我们的东西都高速运行着，维护着万亿级的用户吞吐。”00:21:02：因此他们决定开发一个 Go 语言，Go 非常适合高性能计算。00:21:08 - Saron Yitbarek：让我们深入一点。作为一个开发者，我有自己的个性，我是不是对一部分编程语言有天然的喜欢呢？或者我工作用的编程语言可能会影响我的个性？00:21:25 - Clive Thompson：两者肯定都存在。但我确实认为当你遇到你喜欢的编程语言的时候，有一种强烈的共鸣感。你上计算机课程时学习了必修语言：他们都教 Java，有时会多教一门 JavaScript 或 Python。00:21:46：问题是，你被强制要求，所以你学了它。但当你有选择余地时会怎么样呢？这就是你真正看到一个人的那种情感或心理风格是如何倾向于一门语言的地方，因为我和一个人谈过，他试着学了一堆 JavaScript。00:22:03：这是个看起来有点丑的语言，它简直是花括号的噩梦。所以他试了又试，试了又试，失败了又失败。直到有一天他看到朋友在用 Python。在他看起来，这是多么的纯净和美妙的语言。因为他是个作家，而 Python 被认为是一个书写型的编程语言，缩进使一切都易于阅读。00:22:28 - Clive Thompson：它和他一拍即合，主要在于 Python 的工作方式和外观，漂亮的排版打动了他。00:22:39 - Saron Yitbarek：和 Clive 的交流让我意识到，有一些编程语言是硬塞给我们的。我说的是那些古老的编程语言，已经类似于拉丁语了。00:22:53：其实我们也有很多选择，去选择适合我们个性的编程语言。如果你想知道最新的东西有哪些，你去问问开发者们周末在用什么就知道了。00:23:05：下面是我们对话的更多内容：00:23:08 - Clive Thompson：当我问人们：“你闲暇的时候做什么？”回答肯定是些稀奇古怪的东西。我想实际上其中一个好的，最值得称颂的开发者的特点，就是他们是富有好奇心。00:23:22：我知道有人会说，“我要学习 Erlang了，就是为了好玩。”00:23:26 - Saron Yitbarek：我尝试想象人们在周末开发这些项目，项目不是最重要的，他们在学习工具，编程语言才是重要的事情。这才是他们真的想要的状态。00:23:41 - Clive Thompson：确切的说，你将看到为什么大家不停的重复迭代开发这些日历和待办事项，因为这是一个快速的学习方法。但需要指出的是，编程语言做了什么以及如何工作都与我们没关系，我只需要尽可能的构建我的东西。00:23:56：他们想知道用那样的编程语言思考是什么感觉。是不是会感觉很轻松、刺激、游刃有余？我目前的使用的语言没这个感觉，是不是入门之后一切事情都变得简单了？00:24:13 - Clive Thompson：很有可能你遇到一个新语言后会非常兴奋，想起来都很兴奋。00:24:20 - Saron Yitbarek：我是一个 Ruby 从业者，作为 Ruby on Rails 开发者我非常自豪，我想大概是两年前，另一个非常著名的 Ruby 开发者，Justin Serrals 做了一个非常好的演讲，倡导编程语言从实用角度出发，没有必要那么性感。00:24:41：他的观点是，Ruby 之所以是一个令人兴奋的编程语言的原因在于它很新，而且差不多几年前都已经得到印证了，它已经不需要更新什么了。它已经是一个稳定、成熟的编程语言了。不过因为它的成熟，开发者对它也就不那么兴奋，我们逐步把目光转移到新的花样来了。00:25:05：从某个意义上说，很有可能我们的好奇心会扼杀了一个编程语言，或者让它变得庸俗，而这与编程语言本身的好坏没有关系。00:25:18 - Clive Thompson：我认为这是完全正确的。事实上，你看到的开发者这个极度好奇心和自学欲望的特点，会让他们不断地寻找新鲜事物。并用这种语言去复制其他语言已经基本做得很好的东西。00:25:37 - Saron Yitbarek：是的。00:25:37 - Clive Thompson：就是这样，好奇心有好处，同时也是一个陷阱。00:25:43 - Saron Yitbarek：是的，说的很好。00:25:49：有时我们的好奇心可能是一个陷阱，但是它也是编程语言革命的动力。开发每个新编程语言的时候他们会说，“有没有别的可能？”它们出现的原因在于，开发人员想要做不一样的事情。00:26:06：我们想要全新的表达方式。00:26:08 - 葛丽丝·哈伯：我向你们承诺一些事情。00:26:11 - Saron Yitbarek：我想葛丽丝·哈伯想在这儿最后讲两句。00:26:15 - 葛丽丝·哈伯：在未来 12 个月里，你们谁要是说我们一直都是这么做的，我将会瞬间实质化在你的旁边，然后我 24 小时围绕着你。我倒是要看看我能不能引起你的注意。我们不能再相信那句话，这是很危险的。00:26:34 - Saron Yitbarek：葛丽丝的故事和第一款编译器提醒我们，只要能可以找到表达方法，我们总有更好的办法做事情。00:26:43：不管编程语言有多抽象，不管我们在机器的 1 和 0 高位还是低位浮动，我们都需要确保它是一个明智选择。我们选择一个语言，是让它帮助我们的想法更容易表达出来。00:27:03：如果你想更深一步学习编程语言和和编译器，你不会很孤独，我们收集了一些很有用的文档帮你深入学习。敬请在我们节目下面留言。请查看 redhat.com/commandlineheroes00:27:20：下一期节目，我们将关注开源贡献者的艰辛之路。那些维护者的真实奋斗生活是什么样的？我们如何提出第一个拉取请求？00:27:32：我们将带你们简单认识开源贡献。00:27:39：代码英雄是红帽的原创播客。你可以在苹果播客、谷歌播客以及其他可能的地方免费收听这个节目。00:27:48：我是 Saron Yitbarek，坚持编程，下期再见。什么是 LCTT SIG 和 LCTT LCRH SIGLCTT SIG 是 LCTT 特别兴趣小组 Special Interest Group ，LCTT SIG 是针对特定领域、特定内容的翻译小组，翻译组成员将遵循 LCTT 流程和规范，参与翻译，并获得相应的奖励。LCRH SIG 是 LCTT 联合红帽（Red Hat）发起的 SIG，当前专注任务是《代码英雄》系列播客的脚本汉化，已有数十位贡献者加入。敬请每周三、周五期待经过我们精心翻译、校对和发布的译文。欢迎加入 LCRH SIG 一同参与贡献，并领取红帽（Red Hat）和我们联合颁发的专属贡献者证书。via: https://www.redhat.com/en/command-line-heroes/season-2/hello-world作者：Red Hat 选题：bestony 译者：guevaraya 校对：acyanbird，wxy本文由 LCRH 原创编译，Linux中国 荣誉推出