分类 观点 下的文章

为什么 BASIC 是一种备受喜爱的入门语言?下一代该如何学习编程?

 title=

Command Line Heroes》 第三季的第二集今天抵达了,它对我的入门编程的怀旧让我回到了过去。

(LCTT 译注:《Command Line Heroes》 是红帽公司制作的播客,讲述了开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。其第一季制作于 2017 年,邀请到了谷歌、NASA 等重量级企业的技术专家担当嘉宾,讲述操作系统战争风云、美国航天局如何开源等等,涉及开源、操作系统、容器、DevOps、云计算等话题。)

语言会影响可访问性

这一集告诉我,BASIC 是计算机的理解力民主化的一次巨大飞跃。我很难想象,在一个不太遥远的、计算机尚且是稀罕之物的时代,是 BASIC 改变了世界。正如 Saron Yitbarek 提到的那样,“在早些年编程,你几乎得有个博士学位才行。”BASIC 是一个巨大的飞跃,它专注于可用性(适合初学者的命令)和资源共享(单个计算机的分时操作)。它使得编程不在局限于当时的“计算机玩家”(我喜欢这集中的这句话),并帮助了新一代人参与了进来。进入编程领域的壁垒得以下降。

入门编程语言

这一集的核心话题是围绕学习入门语言展开的。关于学习什么编程语言以及如何学习,有很多建议。关于这个问题在这里已经写了很多。我喜欢听到 Saron 以 Ruby 作为她的介绍的故事,以及它以一种几乎意想不到的方式变得有趣。我有一些类似的经历,因为我在一些项目中用到了 Ruby。它的灵活性让我感到开心。当我(对编程)感到紧张时,正是这种快乐让我重新回到它的身边,并且它有一些能够使语言如此充满情感的强大功能。

我第一次体验编程是用 HTML 和 CSS,但我第一个重型编程语言是 Java。我永远不会忘记在课堂的第一天被告知要记住 public static void main,但没有告知我关于它意味着什么的任何信息。我们花了很多时间在面向对象编程的上下文环境中探讨它是什么,但它从未像我在 Ruby 中使用 .each 迭代列表,或者像在 Python 中用 import numpy 做一些数学魔术那样感到兴奋。然后我听说孩子们正在学习如何使用 Python 编写 Minecraft 或使用像 Scratch 这样的可视化编程语言,我因此而悟,BASIC 的遗产正在以新的方式存在。

我从这一集中获取到的内容:

  • 请记住,没有人出生就是程序员。每个人都没有这样的背景。你并不孤单。
  • 学习一门语言。任何一种都行。如果你有选择的可能,那么请选择能带给你最大乐趣的那个。
  • 不要忘记所有语言都可以构建一些东西。请为人类创造有意义的事物。

《Command Line Heroes》整个第三季将涉及编程语言。请在此处订阅来学习你想要了解的有关编程语言的起源,我很乐意在下面的评论中听到你的想法。


via: https://opensource.com/19/7/command-line-heroes-ruby-basic

作者:Matthew Broberg 选题:lujun9972 译者:wxy 校对:wxy

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

1983 年时我还没出生,这让我略有一些遗憾。但我特别遗憾的是,是我没有经历过 8 位计算机时代的到来,因为我认为那些初次接触到还相对简单和受限的计算机的人们,拥有超过如今的我们的巨大优势。

今天,(几乎)每个人知道如何使用计算机,但是即使是在计算机行业当中,也很少有人能明白任何一台计算机内部的所有内容。现在软件分为如此多的层次,做的是如此不同的事情,没有哪个人能知道哪些是必不可少的。而在 1983 年,家用电脑足够傻大粗,努力一些的人就能了解到一台特定的计算机是如何工作的。那样的一个人可能不会像今天的我觉得操作系统那么神秘,因为如今的操作系统已经在硬件上叠加了太多的抽象层。我希望这些抽象层逐一引入以易于理解;而今天,新的程序员们不得不自上而下、按时间回溯地尝试理解它们。

很多著名的程序员,尤其在计算机游戏行业,孩童时期就在苹果 II 和 Commodore 64 这样的 8 位计算机上开始编写游戏,John Romero、Richard Garriott 和 Chris Roberts 都是这样的例子。这好理解。在 8 位计算机时代,很多游戏只能在计算机杂志和书籍中以印刷的 BASIC 程序清单方式得到。如果你想玩其中一款游戏,就必须手工键入整个程序。不可避免的,你可能遇到一些问题,所以你就得调试你的程序。等到你让它可以工作起来了,你就已经对程序是如何运行的有了足够的了解,你就可以开始自己修改它了。如果你是一个狂热的游戏玩家,你几乎必然会成为一名优秀的程序员。

在我的童年时期我也玩电脑游戏。但是我玩的游戏是在 CD-ROM 上的。我有时发现我自己必须得搜索一下如何修复崩溃的安装程序,这可能涉及编辑 Windows 注册表之类的东西。可能是这种小故障的排除让我感觉很棒,所以我才考虑在大学里学习计算机科学。但是在大学中从不教我一些计算机如何工作的或如何控制它们的关键性的东西。

当然,现在我可以告诉计算机去干什么。尽管如此,我还是不禁感到,我缺少一些根本的见解 —— 只有那些伴随着更简单的计算机编程而成长的人才有的深刻见解。我不禁在想,如果在上世纪 80 年代初就接触到计算机会是什么样子?它们与今天使用计算机的体验相比有何不同?

这篇文章将与通常的 Two-Bit History 的文章有一点不同,因为我将为这些问题尝试设想一个答案。

1983

就在上周,你在电视上看到了 Commodore 64 的广告 ,现在 M*A*S*H 播完了(LCTT 译注: 这是一部上世纪 70 年代初的电视剧),星期一晚上你可以找点新的事情做了。这个 Commodore 64 甚至看起来比鲁迪(LCTT 译注:应该是下文中拥有 Apple II 的人)的家人放在他们家地下室的 Apple II 更好。而且,广告中吹嘘说新的计算机会让你的朋友们“挤破”你家的大门。你知道学校里的几个家伙宁愿在你家闲逛,也不愿去鲁迪家里,只要他们能玩 Zork 就行。

所以,你得说服你的父母去买一台。你的母亲说,这事可以考虑,只要你不去游戏厅玩街机就给你买一台家庭电脑。虽然不太情愿,但是你还是同意了。而你的父亲则想,他可以用 MultiPlan (LCTT 译注:电子表格程序)跟踪家庭的资金状况,MultiPlan 是他曾听说过的一个电子表格程序,这就是为什么这台计算机被放在客厅的原因。然而,一年后,你仍然是唯一使用它的人。最终,他们同意你把它搬到了你的卧室的桌子上,正好位于你的警察海报下方。

(你的姐姐对这个决定表示抗议,但是,在 1983 年电脑这种东西并不适合女孩。)

你的父亲在下班路上从 ComputerLand 那里把它捎了回来。你俩把盒子放置在电视机的旁边,并打开了它。外包装上说“欢迎来到友好的计算机世界”。而二十分钟以后你就不再信这句话了 —— 你俩仍然在尝试把 Commodore 连接到电视机上,并在想电视机的天线电缆到底是 75 欧姆还是 300 欧姆的同轴电缆。但是,最终你把电视机调到了频道 3,看到了一个颗粒状的、紫色的图像。

Commodore 64 启动屏幕

计算机显示了一个 READY。你的爸爸把计算机推向了你,这意思是你是第一个尝试它的人。你小心翼翼地敲击每个字母,键入了 HELLO。然而计算机的回应是令人困惑的。

Commodore 64 语法错误

你尝试输入了一些稍有不同的单词,然而回应总是一样的。你父亲说,你最好仔细读一下手册的其它部分。这绝非易事,随 Commodore 64 一起提供的手册 是一本小一些的书。但是这不会困住你,因为手册的介绍预示着奇迹。

它声称,Commodore 64 有“微型计算机行业中最先进的图画制作器”,能允许“你设计拥有四种不同颜色的图画,就像你在街机视频游戏里看到的一样”。Commodore 64 也有“内置的音乐和声音效果,可以与很多著名的音乐合成器相媲美”。所有的这些工具都置身于你的手边,手册会引导你完成所有这些:

与所有提供的硬件一样重要的是,这本用户指南将提高你对计算机的理解。它无法在这里告诉你有关计算机的所有信息,但是它会向你推荐各种出版物,以获取有关所提出主题的更多详细信息。Commodore 希望你真正喜欢你的新 COMMODORE 64。要想真正得到乐趣,请记住:编程不是一种一天就能学会的东西。通读这个用户指南你要有耐心。

那一夜,你在床上通读了整整前三个章节:“安装”、“入门”和“BASIC 编程入门”,在你最终睡着时,手册还打开着放在了胸前。

Commodore BASIC

现在是星期六早上,你渴望尝试你所学到的新东西。手册里教给你的第一件事是如何更改在显示器上的颜色。你按照操作说明,按下 CTRL-9 来进入反色输入模式,然后按住空格键来创建了一个长长的空行。你可以使用 CTRL-1CTRL-8 在不同的颜色之间交换,这让你的电视机屏幕焕发出了新的力量。

Commodore 64 颜色带

尽管这很酷,但你觉得这不能算是编程。要对计算机编程,你昨晚已经学会了如何做,你必须以一种称为 BASIC 的语言与计算机交谈。对你来说,BASIC 看起来就像星球大战中的东西一样科幻,但是,到 1983 年时,其实 BASIC 已经快有二十岁了。它是由两位达特茅斯教授 John Kemeny 和 Tom Kurtz 发明的,他们想让社会科学和人文科学中的本科生也可以使用计算机。它被广泛使用在微型计算机上,在大学的数学课上很受欢迎。在比尔盖茨和保罗艾伦为 Altair 编写了微软 BASIC 解释器后,它就成为了微型计算机上的标准。但是这本手册对此没有任何解释,那么多年你都没学过它。

手册中建议你尝试的第一个 BASIC 命令是 PRINT 命令。你输入了 PRINT "COMMODORE 64",很慢,因为你需要花费一点时间才能在按键 2 上面找到引号符号。你单击 RETURN,这一次,计算机没有抱怨,完全是按照你告诉它做的,在下一行中显示了 “COMMODORE 64” 。

现在你尝试对各种不同的东西使用 PRINT 命令:两个数字加在一起,两个数字乘在一起,甚至几个十进制数字。你不再输入 PRINT ,而是使用 ? 代替,因为手册中告诉你 ?PRINT 的一个缩写,通常专业程序员都这么使用。你感觉自己已经像是一个专家了,不过你想起你还没有进行到第三章“BASIC 编程入门”。

你很快就开始了。该章节提示你编写你的第一个真正的 BASIC 程序。你输入 NEW 并单击 RETURN,它给了你一个干净的 黑板 slate 。然后你在其中输入你的程序:

10 ?"COMMODORE 64"
20 GOTO 10

手册里解释说 10 和 20 是行号。它们为计算机排序了语句。它们也允许程序员在某些命令中引用程序的其它行,正像你在这里使用的 GOTO 命令一样,它将程序指回到行 10。“这是一个很好的编程习惯”,手册认为,“以 10 的增量来编号行,可以防止你以后需要插入一些语句”。

你输入 RUN,并凝视充满了 “COMMODORE 64” 的屏幕,它一遍又一遍的重复。

Commodore 64 显示反复打印 "Commodore 64" 的结果

你不确定这不会引爆你的计算机,过了一秒钟你才想起来应该单击 RUN/STOP 按键来打断循环。

手册接下来的一些部分向你介绍了变量,它告诉你变量像“在计算机中许多的盒子,它们每个可以容纳一个数字或一个文本字符串”。以一个 % 符号结尾的变量是一个整数,与此同时,以一个 $ 符号结尾的变量是一个字符串。其余的所有变量是一些称为“浮点”变量的东西。手册警告你要小心变量名称,因为计算机仅会识别变量名称的前两个字母,尽管它不限制你想创建的名称有多长。(这并没有特别让你困扰,但是要是在 30 年后来看,这可能会让人们感到太疯狂了)

你接着学习 IF... THEN...FOR... NEXT... 结构体。有了这些新的工具,你感觉有能力来解决接下来手册丢给你的重大挑战。“如果你是个有野心的人”,没错,“输入下面的程序,并查看会发生什么。”该程序比你目前为止看到的程序更长、更复杂,但是,你很想知道它做了什么:

10  REM BOUNCING BALL
20  PRINT "{CLR/HOME}"
25  FOR X = 1 TO 10 : PRINT "{CRSR/DOWN}" : NEXT
30  FOR BL = 1 TO 40
40  PRINT " ●{CRSR LEFT}";:REM (● is a Shift-Q)
50  FOR TM = 1 TO 5
60  NEXT TM
70  NEXT BL
75  REM MOVE BALL RIGHT TO LEFT
80  FOR BL = 40 TO 1 STEP -1
90  PRINT " {CRSR LEFT}{CRSR LEFT}●{CRSR LEFT}";
100 FOR TM = 1 TO 5
110 NEXT TM
120 NEXT BL
130 GOTO 20

上面的程序充分利用了 Commodore 64 最酷的功能之一。当把不可打印的命令字符作为字符串的一部分传递到 PRINT 命令时,它们会执行其操作,而不是被打印到屏幕上。这允许你重新摆放你程序中打印的字符串。(LCTT 译注:上述程序中如 {CRSR LEFT} 之类的控制字符执行类似 “在行中向左移动一个位置” 的操作,因此上述程序中利用这些字符操作了一个圆点字符四处移动,如下图。)

输入上面的程序你花费了很长时间。你犯一些错误,并不得不重新输入一些行。但是,你最终能够按下 RUN,并看到了一幅杰作:

Commodore 64 反弹球

你觉得这恐怕是你见过的最酷的事了。不过你几乎转头就忘记了它,因为马上你就学到了 BASIC 的内置函数,像 RND(它返回一个随机数字)和 CHR$(它返回与一个给定数字代码匹配的字符),这个手册向你展示一个程序,这个程序有名到什么程度呢?直到许多年后,它仍然被当成了一个短文选集的标题:

10 PRINT "{CLR/HOME}"
20 PRINT CHR$(205.5 + RND(1));
40 GOTO 20

当运行时,上面的程序会生成一个随机的迷宫:

Commodore 64 迷宫程序

这绝对是你曾经见过最酷的事。

PEEK 和 POKE

现在你已经看过了 Commodore 64 手册的前四章节,包含那篇 “高级的 BASIC” 的章节,所以你感到十分自豪。在这个星期六早上,你学习到了很多东西。但是这个下午(在赶快吃了点午饭后),你将继续学习一些使这个放在你的客厅中的奇妙机器变得不再神秘的东西。

手册中的下一个章节标题是“高级颜色和图像命令”。它从回顾你今天早上首先键入的彩色条开始,并向你展示了如何在一个程序中做同样的事。然后它教给了你如何更改屏幕的背景颜色。

为此,你需要使用 BASIC 的 PEEKPOKE 命令。这些命令分别允许你检查和写入一个存储器地址。Commodore 64 有一个主背景颜色和一个边框背景颜色。每个都通过一个特定的内存地址控制。你可以把你喜欢的任何颜色值写入到这些地址,以使用这些背景颜色和边框颜色。

手册中解释:

正像变量可以被认为机器中你放置信息的“盒子”一样,你也可以认为在计算机中代表特定内存位置的是一些特殊定义的“盒子”。

Commodore 64 会查看这些内存位置来了解屏幕的背景和边框应该是什么样的颜色,什么样的字符应该被显示在屏幕上,以及显示在哪里,等等其它任务。

你编写了一个程序来遍历所有可用的背景和边界的颜色的组合:

10 FOR BA = 0 TO 15
20 FOR BO = 0 TO 15
30 POKE 53280, BA
40 POKE 53281, BO
50 FOR X = 1 TO 500 : NEXT X
60 NEXT BO : NEXT BA

虽然 POKE 命令以及它的大操作数一开始时看起来很吓人,现在你看到那个数字的实际值其实不是很要紧。显然,你必须得到正确的数字,但是所有的数字代表的是一个“盒子”,Commodore 只是正好存储在地址 53280 处而已。这个盒子有一个特殊的用途:Commodore 使用它来确定屏幕背景应该是什么颜色。

Commodore 64 更改背景颜色

你认为这简直棒极了。只需要写入到内存中一个专用的盒子,你可以控制一台计算机的基础属性。你不确定 Commodore 64 的电路系统如何读取你写入在内存中的值并更改屏幕的颜色的,但是,你不知道这些也没事。至少你知道结果是怎么样的。

特殊容器

在那个周六,你没有读完整本手册,因为你现在有点精疲力尽了。但是你最终会全部读完它。在这个过程中,你学到更多的 Commodore 64 专用的盒子。有一些盒子你可以写入来控制在屏幕上显示什么——这也是一个盒子,事实上,是控制每一个位置出现的字符。在第六章节 “精灵图形” 中,你学到可以让你定义可以移动和甚至缩放图像的特殊盒子。在第七章节 “创造声音” 中,你学到能写入以便使你的 Commodore 64 歌唱 “Michael Row the Boat Ashore” 的盒子。Commodore 64,事实证明,它和你可能以后学习到的一个称为 API 的关系甚少。控制 Commodore 64 大多涉及写入到电路系统赋予特殊意义的内存地址。

多年来,你花费在这些特殊盒子的时光一直伴随着你。甚至几十年后,当你在一个拥有大量的图形或声音 API 的机器上编程时,你知道,隐藏于其背后的,这些 API 最终是写入到这些盒子之类的东西里面的。你有时会好奇那些只使用过 API 的年轻程序员,他们肯定是觉得 API 为他们做到的这一切。可能他们认为这些 API 调用了一些其它隐藏的 API。但是,那些隐藏的 API 调用了什么?你不由得同情这些年轻的程序员们,因为他们一定会非常迷惑。

如果你喜欢这篇文章,也喜欢它每两周发布的一篇新文章的话,那么请在 Twitter 上关注 @TwoBitHistory 或订阅 RSS 源来确保你知道新的文章发布出来。


via:https://twobithistory.org/2018/09/02/learning-basic.html

作者:Two-Bit History 选题:lujun9972 译者:robsean 校对:wxy

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

我们一定不会希望用商业的方式运作我们的学校 —— 但是更加注重持续改进的教育机构是可以让我们受益的。

我们都有过那种感觉一件事情“似曾相识”的经历。在 1980 年代末期我经常会有这种感觉,那时候我刚刚进入工业领域不久。当时正赶上一波组织变革的热潮,美国制造业在尝试各种各样不同的模型,让企业领导、经理人和像我这样的工程师重新思考我们应该如何处理质量、成本、创新以及股东价值这样的问题。我们似乎每一年(有时候更加频繁)都需要通过学习一本书来找到让我们更精简、更扁平、更灵活以及更加能满足顾客需求的“最佳方案”。

这里面的很多方法都带来了巨大的改进,我至今仍然赞同它们的核心原则。像 John Kotter、Peter Drucker、Edwards Demming 和 Peter Senge 这样的思想领袖提出的某些思想和策略,还有我们采用的像 Six Sigma 以及在“丰田模式”里可以找到的一些流程优化方法,对我们改进工作都起到了十分关键的作用。

但是其他人似乎只是在同样的思想上进行了润色和调整,然后重新包装了一下 —— 所以我才会有那种 似曾相识 的感觉。但是当我成为了一名教师之后,我遇到了一个 没有 给我那种似曾相识的感觉的地方:教育界。事实上我十分惊讶地发现,在我的这个新职业里,“持续不断的改进”并 不像 在我之前的职业里那样重要了(特别是对于像我这种授课老师职级的人来说)。

为什么教育机构很少努力营造一种不断改进的文化氛围呢?我能想到几个原因,在这里我列举两个。

不再做生产线上的元件

这种不断改进的文化氛围遇到的第一个阻碍是,教育界普遍不愿意从其它行业借鉴可以为自己所用的思想 —— 特别是来自商界的思想。第二个阻碍是,主导教育界的仍然是一种自上而下的、等级制度森严的领导模式。人们往往只能在小范围内讨论这种系统性的、持续的改进方案,比如包括校长、助理校长、学校监管人(LCTT 译注:美国地方政府下设的一种官职,每个学校监管人管理一定数量的学校,接受学校校长的汇报)等等在内的学校领导和区域领袖。但是一小群人的参与是远远不足以带来整个组织层面的文化改革的。

在进一步展开观点之前,我想强调一下,上面所做的概括一定是存在例外情况的(我自己就见到过很多),不过我觉得任何一个教育界的利益相关者都应该会同意以下两点基本假设:

  1. 为学生提供高质量的、公平的教育和教学系统的工作所涉及到的任何人都应该将持续不断的改进作为思维方式里的重要部分;
  2. 如果学校领导在做决策的时候可以更多地参考那些离学生最近的工作者的意见,那么学生以及学生所在的社区都将更加受益;

那么教育界人士为什么会倾向于忽视(或者公然地敌视)教育界之外的思想呢?

比如我过去就曾经提议应该向别的行业借鉴一些思想和灵感来帮助我们更好地迎合学生的需求,并且果然遭到了批评。我经常得到的回应是:“你这是在把我们的学生当成生产线上的元件来对待呀!”但是我们的学生现在就是在被当作生产线上的元件对待,并且已经无以复加了。他们按照被年龄划分的群体考入大学,每天根据刺耳的铃声的指示去上一节又一节孤立的课程,并且由一些武断的、强调同一性而不是个性的考试来评判他们的成绩。

很多教育界人士可能不知道,生产线元件这种会让人想到流水线标准化作业的东西已经不是现代制造业里的重要组成部分了。得益于上面提到的不断改进的文化氛围,现代先进制造业已经可以做到在单个顾客产生需求的时候,以合理的价格有针对性地提供她所需要的商品。如果我们的学校也可以采用这种模式,教师们之间就更可能会进行协作,并且可以基于学生即时的需求和兴趣,不断完善每一个学生独特的成长和进步路线,而不受时间、课题或者其它传统规范的限制。

我并不是要呼吁大家像经营商业一样经营我们的学校。我所主张的是,用一种清晰而客观的态度去看待任何行业的任何思想,只要它们有可能帮助我们更好地迎合学生个体的需求。不过,如果想有效率地实现这个目标,我们需要仔细研究这个 100 多年来都停滞不前的领导结构。

把不断改进作为努力的目标

有一种说法认为教育和其它行业之间存在着巨大的差异,我虽然赞同这种说法,但同时也相信“重新思考组织和领导结构”这件事情对于任何一个希望对利益相关者负责(并且可以及时作出响应)的主体来说都是适用的。大多数其它行业都已经在重新审视它们传统的、封闭的、等级森严的结构,并且采用可以鼓励员工基于共有的优秀目标发挥自主性的组织结构 —— 这种组织结构对于不断改进来说十分关键。我们的学校和行政区是时候放开眼界了,而不应该拘泥于只听到来自内部的声音,因为它们的用意虽然是好的,但都没有脱离现有的范式。

对于任何希望开始或者加速这个转变过程的学校,我推荐一本很好的书:Jim Whitehurst 的《开放组织》(这不应该让你感到意外)。这本书不仅可以帮助我们理解教育者如何创造更加开放、覆盖面更广的领导领导结构 —— 在这样的结构下,互相尊重让人们可以基于实时数据作出更加灵活的决策 —— 并且它所使用的语言风格也和教育者们所习惯使用的奇怪的词汇库非常契合(这种词汇库简直是教育者们第二天性)。任何组织都可以借鉴开放组织的思维提供的实用主义方法让组织成员更加开放:分享想法和资源、拥抱以共同协作为核心的文化、通过快速制作原型来开发创新思维、基于价值(而不是提出者的职级)来评估一个想法,以及创造一种融入到组织 DNA 里的很强的社区观念。通过众包的方式,这样的开放组织不仅可以从组织内部,也能够从组织外部收集想法,创造一种可以让本地化的、以学生为中心的创新蓬勃发展的环境。

最重要的事情是:在快速变化的未来,我们在过去所做的事情不一定仍然适用了 —— 认清楚这一点对于创造一个不断改进的文化氛围是十分关键的。对于教育者来说,这意味着我们不能只是简单地依赖在针对工厂模型发展出来的解决方案和实践方式了。我们必须从其它行业(比如说非营利组织、军事、医疗以及商业 —— 没错,甚至是商业)里借鉴数不清的最佳方案,这样至少应该能让我们 知道 如何找到让学生受益最大的办法。从教育界传统的陈词滥调里超脱出来,才有机会拥有更广阔的视角。我们可以更好地顾全大局,用更客观地视角看待我们遇到的问题,同时也知道我们在什么方面已经做得很不错。

通过有意识地借鉴各路思想 —— 从一年级教师到纽约时报上最新的商业、管理、领导力畅销书 —— 我们可以更好地发掘和运用校内人才,以帮助我们克服阻碍了我们的学校和区域进步的制度里的惰性。

坚持不懈地追求不断改进这件事情,不应该只局限于那种努力在一个全球化的、创新的经济环境中争取竞争力的机构,或者是负责运营学校的少数几个人。当机构里的每一个人都能不断思考怎样才能让今天比昨天做得更好的时候,这就是一个拥有优秀的文化氛围的机构。这种非常有注重协作性和创新的文化氛围,正是我们希望在这些负责改变年轻人命运的机构身上看到的。

我非常期待,有朝一日我能在学校里感受到这种精神,然后微笑着对自己说:“这种感觉多么似曾相识啊。”


via: https://opensource.com/open-organization/19/4/education-culture-agile

作者:Ben Owens 选题:lujun9972 译者:chen-ni 校对:wxy

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

Jupyter 项目提供的魔法般的开发体验很大程度上得益于它的 IPython 基因。

最近刚刚写过我为什么觉得觉得 Jupyter 项目(特别是 JupyterLab)提供了一种 魔法般的 Python 开发体验。在研究这些不同项目之间的关联的时候,我回顾了一下 Jupyter 最初从 IPython 分支出来的这段历史。正如 Jupyter 项目的 大拆分™ 声明 所说:

“如果你不明白 Jupyter 是什么,这么说吧,它拥有和 IPython 同样的代码,并且是由同一批人开发的,只不过取了一个新名字、安了一个新家。”

下面这个注脚进一步说明了这一点:

“我从声明中解读出来的信息是,‘Jupyter 和 IPython 非常相似,但是拥有多种语言’,这也可以很好地解释为什么这个项目的名字已经不再需要包含 Python,因为当时它已经支持多种语言了。”

我明白 Jupyter Notebook 和 IPython 都是从同样的源代码里分支出来的,但是不太清楚 IPython 项目的现状。在大拆分™ 之后它是已经不再被需要了,还是在以另一种方式延续着?

后来我惊讶地发现,IPython 仍然不断在为 Python 使用者提供价值,它正是 Jupyter 体验的核心部分。下面是 Jupyter 常见问题页面的一段截取:

有什么语言是需要预装的吗?

是的,安装 Jupyter Notebook 会首先安装 IPython 内核。这样我们就可以在 notebook 上运行 Python 语言了。

现在我明白了,在 JupyterLab(以及 Jupyter Notebook)上编写 Python 程序仍然需要依赖 IPython 内核的持续开发。不仅如此,IPython 还充当了最为强大的默认内核的角色,根据 这份文档,它是其它语言内核之间的枢纽,节省了很多开发时间和精力。

现在唯一的问题是,IPython 本身可以做什么呢?

IPython 如今的作用

IPython 提供了一个强大的、交互性的 Python shell,以及 Jupyter 的内核。安装完成之后,我可以在任何命令行运行 ipython 本身,将它当作一个(比默认 Python shell 好太多的)Python shell 来使用:

$ ipython
Python 3.7.3 (default, Mar 27 2019, 09:23:15)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.4.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import numpy as np
In [2]: example = np.array([5, 20, 3, 4, 0, 2, 12])
In [3]: average = np.average(example)
In [4]: print(average)
6.571428571428571

这就让我们发现了一个更为重要的问题:是 IPython 让 JupyterLab 可以在项目中执行代码,并且支持了一系列被称为 Magic 的功能(感谢 Nicholas Reith 在我上一篇文章的评论里提到这点)。

IPython 让魔法成为现实

JupyterLab 和其它使用 IPython 的前端工具可以让你感觉像是在最喜欢的 IDE 或者是终端模拟器的环境下工作。我非常喜欢 点文件 快捷键功能,Magic 也有类似点文件的特征。比如说,可以试一下 %bookmark 这个命令。我把默认开发文件夹 ~/Develop 关联到了一个可以在任何时候直接跳转的快捷方式上。

 title=

%bookmark%cd,以及我在前一篇文章里介绍过的 ! 操作符,都是由 IPython 支持的。正如这篇 文档 所说:

Jupyter 用户你们好:Magic 功能是 IPython 内核提供的专属功能。一个内核是否支持 Magic 功能是由该内核的开发者针对该内核所决定的。

写在最后

作为一个好奇的新手,我之前并不是特别确定 IPython 是否仍然和 Jupyter 生态还有任何联系。现在我对 IPython 的持续开发有了新的认识和,并且意识到它正是 JupyterLab 强大的用户体验的来源。这也是相当有才华的一批贡献者进行最前沿研究的成果,所以如果你在学术论文中使用到了 Jupyter 项目的话别忘了引用他们。为了方便引用,他们还提供了一个 现成的引文

如果你在考虑参与哪个开源项目的贡献的话,一定不要忘了 IPython 哦。记得看看 最新发布说明,在这里可以找到 Magic 功能的完整列表。


via: https://opensource.com/article/19/6/ipython-still-heart-jupyterlab

作者:Matthew Broberg 选题:lujun9972 译者:chen-ni 校对:wxy

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

选择 Ubuntu 还是 Fedora?它们的区别是什么?哪一个更好?你应该使用哪一个?看看这篇对比 Ubuntu 和 Fedora 的文章吧。

UbuntuFedora 都是最流行的 Linux 发行版之一,在两者之间做出选择实非易事。在这篇文章里,我会对比一下 Ubuntu 和 Fedora 的不同特点,帮助你进行决策。

请注意,这篇文章主要是从桌面版的角度进行对比的。Fedora 或者 Ubuntu 针对容器的特殊版本不会被考虑在内。

Ubuntu vs Fedora: 哪一个更好?

Ubuntu Vs Fedora

不同 Linux 发行版之间的区别主要体现在以下几个方面:

  • 基础发行版(Debian、红帽、Arch,或者是从头做起)
  • 安装方式
  • 支持的桌面环境
  • 软件包管理、软件支持和更新
  • 硬件支持
  • 开发团队(由企业支持,还是由业余爱好者创建)
  • 发布周期
  • 社区和线上支持

下面我们来看一下 Ubuntu 和 Fedora 之间的相似之处和不同之处。掌握了这些信息之后,也许就更容易在两者之间做出选择了。

安装方式

Ubuntu 的 Ubiquity 安装器是最好用的安装器之一。我认为这是让 Ubuntu 如此流行的重要原因之一,因为在 2004 年 Ubuntu 刚刚诞生的时候,安装 Linux 还是一个很庞大的工程。

Ubuntu 安装器可以让你在大约 10 分钟左右完成安装。大多数情况下,它还可以识别出机器里安装的 Windows 系统,并且只需要几下点击就可以实现 Ubuntu 和 Windows 的双系统启动。

锦上添花的是,在安装 Ubuntu 的过程中你还可以进行系统更新,或者是安装第三方编译码器。

Ubuntu Installer

Fedora 使用的是 Anaconda 安装器,拥有简单易用的界面,同样简化了安装过程。

Fedora Installer | Image Credit Fedora Magazine

Fodora 还提供了一个可以在 Windows 操作系统上下载并创建 Fedora live USB 的写入工具。不过我在大约两年前尝试使用它的时候并不成功,最后使用了一个常规的创建 live USB 的软件。

根据我的经验,安装 Ubuntu 要比安装 Fedora 容易一些。不过这并不是说安装 Fedora 有多困难,只是 Ubuntu 更简单而已。

桌面环境

Ubuntu 和 Fedora 默认都使用 GNOME 桌面环境。

GNOME Desktop in Fedora

Fedora 使用的是原装的 GNOME 桌面,而 Ubuntu 则在此基础上做了个性化调整,让它看起来就像 Ubuntu 之前使用的 Unity 桌面环境。

GNOME desktop customized by Ubuntu

除了 GNOME,Ubuntu 和 Fedora 都提供了一些其它桌面环境的版本。

Ubuntu 有 Kubuntu、Xubuntu、Lubuntu 等版本,分别提供不同的桌面环境。虽然它们都是 Ubuntu 的官方版本,但是却不是由 Canonical 的 Ubuntu 团队直接开发的,而是由另外的团队开发。

Fedora 通过 Fedora Spins 的方式提供了一些不同桌面环境的版本。和 Kubuntu、Lubuntu 等版本不同的是,这些版本并非由独立团队开发,而是由 Fedora 核心团队开发的。

软件包管理和可用软件数量

Ubuntu 使用 APT 软件包管理器提供软件并进行管理(包括应用程序、库,以及其它所需编解码器),而 Fedora 使用 DNF 软件包管理器。

Ubuntu 拥有庞大的软件仓库,能够让你轻松安装数以千计的程序,包括 FOSS(LCTT 译注:Free and Open-Source Software 的缩写,自由开源软件)和非 FOSS 的软件。Fedora 则只专注于提供开源软件。虽然这一点在最近的版本里有所转变,但是 Fedora 的软件仓库在规模上仍然比 Ubuntu 的要逊色一些。

一些第三方软件开发者为 Linux 提供像 .exe 文件一样可以点击安装的软件包。在 Ubuntu 里这些软件包是 .deb 格式的,在 Fedora 里是 .rpm 格式的。

大多数软件供应商都为 Linux 用户提供 DEB 和 RPM 文件,但是我也经历过供应商只提供 DEB 文件的情况。比如说 SEO 工具 Screaming Frog 就只提供 DEB 软件包。反过来,一个软件只有 RPM 格式但是没有 DEB 格式这种情况就极其罕见了。

硬件支持

一般来说,Linux 在 WiFi 适配器和显卡的兼容性上容易出现问题,Ubuntu 和 Fedora 都受此影响。以 Nvidia 为例,它的 开源驱动程序 Nouveau 经常会引发系统启动时假死机之类的问题

在 Ubuntu 上你可以轻松安装专有驱动程序作为补充。在很多情况下,这样可以获得对硬件更好的支持。

Installing proprietary driver is easier in Ubuntu

Fedora 则坚持使用开源软件,所以在 Fedora 上安装专有驱动程序就比较困难了。

线上支持和用户群

Ubuntu 和 Fedora 都通过社区论坛提供了很好的线上支持。Ubuntu 主要有两个论坛:UbuntuForumsAsk Ubuntu。Fedora 主要的论坛则是 Ask Fedora

就用户群体而言,Fedora 有着庞大的用户数量。不过 Ubuntu 更为流行,用户数量甚至更为庞大。

Ubuntu 的流行催生了很多专注于 Ubuntu 的网站和博客。所以相比 Fedora,你可以得到更多关于 Ubuntu 的故障排除指导和学习材料。

发布周期

Fedora 每六个月发布一个新版本,每个版本有九个月的支持周期。也就是说,你必须在六个月到九个月之间进行一次系统升级。进行 Fedora 版本升级并不是一件困难的事情,但是需要良好的网络连接。并非所有人都喜欢每九个月进行一次 1.5 GB 的版本升级。

Ubuntu 有两种版本:常规发布版本和长期支持(LTS)发布版本。常规版本和 Fedora 比较类似,每隔六个月发布一次,有九个月的支持周期。

而长期支持发布版本则每两年发布一次,有五年的支持周期。常规发布版本探索新功能特性和新的软件版本,而长期支持发布版本则支持旧版本软件。对于不喜欢经常改变、青睐稳定性的人来说,这是一个很好的选择。

强大的基础发行版

Ubuntu 是基于 Debian 发行版的。Debian 是最大的社区项目之一,并且也是 自由软件 世界里最受尊敬的项目之一。

Fedora 则是红帽公司的一个社区项目。红帽公司是一个专注于 Linux 发行版的公司。Fedora 充当了一个“试验田”的角色(用技术术语来说叫做“上游”),用来在红帽企业级 Linux 发布新功能之前对这些新功能进行试验。

在背后支持的企业

Ubuntu 和 Fedora 都有来自母公司的支持。Ubuntu 源自 Canonical 公司,而 Fedora 源自 红帽公司(现在是 IBM 的一部分)。背后企业的支持非常重要,因为可以确保 Linux 发行版良好的维护。

有一些发行版是由一群独立的业余爱好者们共同创建的,但是在工作压力之下经常会结束。你也许见过一些还算比较流行的发行版项目仅仅是因为这个原因而终止了。很多这样的发行版由于开发者没有足够的业余时间可以投入到项目上而不得不终止,比如 Antergos 和 Korora。

Ubuntu 和 Fedora 的背后都有基于 Linux 的企业的支持,这让它们比其它独立的发行版更胜一筹。

Ubuntu vs Fedora:服务端

到目前为止,我们在 Ubuntu 和 Fedora 之间的对比主要都集中在桌面端。不过如果不考虑一下服务端的话,对 Linux 的讨论就不能算是完整的。

Ubuntu Server

Ubuntu 不仅在桌面端很流行,在服务端也有很强的存在感。如果你能够在桌面端熟练使用 Ubuntu,那么也不会对 Ubuntu 服务器版本感到陌生。我就是从使用 Ubuntu 桌面端开始的,现在我的网站都运行在 Ubuntu 服务器上。

Fedora 同样有服务端版本,并且也有人在使用。但是大多数系统管理者不会喜欢一个每九个月就需要重启升级的服务器。

学习 Fedora 可以更好地帮助你使用红帽企业级 Linux(RHEL)。RHEL 是一个付费产品,你需要购买订阅才可以使用。如果你希望在服务器上运行一个和 Fedora 或者红帽类似的操作系统,我推荐使用 CentOS。CentOS 同样是红帽公司附属的一个社区项目,但是专注于服务端。

结论

你可以看到,Ubuntu 和 Fedora 有很多相似之处。不过就可用软件数量、驱动安装和线上支持来说,Ubuntu 的确更有优势。Ubuntu 也因此成为了一个更好的选择,尤其是对于没有经验的 Linux 新手而言。

如果你想要熟悉红帽的话,Fedora 是一个很好的开始。如果你对 Linux 有一定经验,或者是只想要使用开源软件,Fedora 就是一个很棒的选择。

最终还是需要你自己来决定是使用 Fedora 还是 Ubuntu。我会建议为两个发行版分别创建一个 live USB,并且在虚拟机上体验一下。

你对于 Ubuntu vs Fedora 的看法是什么呢?你更喜欢哪一个发行版,为什么?在评论里分享你的看法吧。


via: https://itsfoss.com/ubuntu-vs-fedora/

作者:Abhishek Prakash 选题:lujun9972 译者:chen-ni 校对:wxy

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

6 月 25 日,我代表 Linux 中国社区团队参加了本次 KubeCon 2019(上海)峰会,期间有幸和安全容器 runV 的创始人王旭做了一番长谈,就云原生技术、安全容器、开源与初创企业等话题进行了深入沟通。现将这些话题整理其精要分享给大家。

互联网技术发展速度之快是所有从业者甚至非从业者都能感受到的。尤记得在世纪之交时,那时候互联网刚刚在中国开始向民用普及,不说支撑大规模的网站访问量的相关技术,就连 Linux、负载均衡甚至都没有被普遍使用。而在二十年之后,云计算已经大行其道,当今的技术人员已经言必称虚拟化、容器和 Serverless,就连刚刚准备入行互联网运维行业的新人们都已经从最初觉得考个 Linux 认证就够了到开始问询 Kubernetes 培训哪家强了。

从一届届 LC3、DockerCon 到 KubeCon,蓬勃发展的云计算与容器化似乎已经称霸了互联网领域。这次我带队参加了 6 月 24 ~ 26 日的 KubeCon 大会,对此感受尤为深刻。事实上,这次在上海举办的 KubeCon 2019 距离上次在同一地点举办的同一会议才仅仅过去半年,但是我们依旧在这次大会上看到了层出不穷的大量新技术、新动态。

云与容器的结合,引爆了这一切。

作为容器领域的资深专家,让我们来看看王旭是如何看待容器和云原生领域当前的发展态势的,以及作为这个领域的一家初创技术企业的创始人,他是如何投身到这个领域的,开源又在其间起到了什么作用。

王旭,安全容器项目 runV 的创始人,现已加入蚂蚁金服。

创立于 2015 年的 runV 项目已于 2017 年和另外一个来自英特尔的 Clear 容器项目合并为 Kata 容器项目,并由 OpenStack 基金会(OSF)进行管理,它与来自谷歌的 gVisor 项目并称为目前两大安全容器技术。

开源与初创

要么就去加强容器,要不就是引入别的安全技术来让它像容器一样。

临近 2015 年,Docker 逐渐被业界主流所接受,互联网技术已经有一个比较明显的发展趋势:第一是云,第二是容器。而云加上容器一定会产生隔离性的需求,这应该说是王旭和他的联合创始人赵鹏做安全容器最早的一个思路:要么就去加强容器,要不就是引入别的安全技术来让它像容器一样。这就是 runV 这个项目想法的起源。

runV 发布的同一个星期,英特尔Clear 容器也发布了。2016 年 8 月份,在西雅图的 LinuxCon 上,王旭和 Clear 团队见面交流,双方在一些细节上面展开合作。在 2017 年 9 月份一个会议上,英特尔软件副总裁、开源技术中心总经理 Imad Sousou 提出项目合并,然后放到基金会里管理。当时大家都觉得这是很好的一个思路。

对于 runV 和 Clear 来说,避免了重复开发以及花费精力在如何说明两者的不同上,同时合并之后可以共同推动发展一个社区,一起去寻找更多的用户。同时,两者合并还有更多的意义。

Kata 容器的意义

Kata 容器最大的意义在于推动了社区的发展。

王旭认为,Kata 容器最大的意义在于推动了社区的发展。在 2018 年之前刚开始做 Kata 容器的时候,王旭他们需要很多的附加进程来模拟 runC 容器的行为,因为 runC 是事实标准,你需要兼容它。但是当 Kata 和谷歌的 gVisor 都出来之后,上游社区就注意到这一点,开始重视,于是推出新的接口,可以语义明确地直接去对话,而不需要再去模拟 runC 的底层行为,把原来的 2N+2 个辅助进程变成了一个进程。另外,既然有了不同的容器运行时,是不是可以在不同的场景下让它们转到不同容器运行时环境上去?于是就有了“ 运行时类 runtime class ”这样的结构。Kubernetes 社区做了很多这样改进,它们也在逐步变成事实标准。这样,一个小项目的引入推动了包括从用户到上下游的整个社区相关软件的变动。

安全容器也让更多的业务使用容器变得可能。

同时,安全容器也让更多的业务使用容器变得可能。王旭在蚂蚁金服做面向金融的一些服务往云原生方向发展,需要非常严格的安全标准,这正好和 Kata 这些安全容器项目结合在一起。

增强安全性不可避免的会带来一些会性能或易用性的取舍。王旭他们的做法是,在 Kata 里面增加了一个隔离层,减少用户需要考虑的事情。举个 Docker 的例子,Docker 镜像的开发者和管理员往往不是同一个人,对于管理员来说给出的权限越少越安全,但是对于开发者来说的话,尤其开发和调试的过程中,权限的变少会让开发和调试变得非常困难。对于开发者来说,不能完全理解管理员要做的事情,所以你就会见到很多的 Docker 镜像都是要所有权限的,因为它自己也不知道需要什么权限;此外还有一些动态的情况,很难先验地用程序去完全断定它需要的权限,开发者并不太不确定到底使用了哪些能力。在这个情况下我们做的事情就是把能力整体限制到沙盒里面。在沙盒里面是完整的能力,但是实际上沙盒本身访问不到外层的系统能力,这样对应用是无感知的,操作系统就变得更安全了。确实,对于系统来说安全性和便利性是一对矛盾,你很难在同一个层面上把这个问题完全解决掉。

现在有了“运行时类”,可以指定是否需要使用安全容器。Kubernetes 社区给大家提供 了一个机制,用户可以选用或者不用安全容器,它可以是全局的配置,也可以是 pod 级别的配置。对安全性不太关键的,比如说访问一些不太敏感信息的,可以在安全性上折中一点,可以让性能更好一些。

容器的发展

从早期的 Cgroup 开始,到 LXD/LXC 这样的容器技术的出现,再到 Docker 的的诞生,一下子点燃了整个容器技术生态,紧接着在容器编排系统出现后,并发展到现今 Kubernetes 成为了事实标准。容器领域一直在快速发展。王旭的看法又是怎样的呢?

容器领域正在逐渐往上层发展。

他认为,容器领域正在逐渐往上层发展。互联网技术本身一开始是在架构层面、在底层发展,但是从 Docker 开始兴起时,给大家的感受就是减少了对底层环境的考虑,用完整的环境把应用包装起来变成容器,让它可以随地随地运行。不需要操心运行在什么样的操作系统里,把操作系统这一层干掉,或者说把它变成很窄的一层。

以发行版为例。Linux服务器发行版的核心工作有两件:一是怎么把这个系统安装上;另一个是怎么去尽量平滑管理和升级软件系统。所有的事情其实都是在围绕这两件事情。最初出现了 RPM、APT 这些包管理系统,后来是通过 Chef、Puppet、Ansible 这类配置管理系统自动化的大规模部署,再到现在的 Docker、Kubernetes,一它们都是在做软件管理的事情。原来是操作系统在做这件事情,现在是 Kubernetes 在充当操作系统的位置;对云服务来说的话,这就是无服务器模式。2014 年 AWS 在拉斯维加斯的 re:Invent 大会发布 Lambda 的时候,得到业界非常大的关注。从 Lambda 开始,每个云厂商都逐渐有了自己的无服务器服务。所以他觉得未来的发展方向,应该是向这个方向的。

除此之外,像现在中间件、服务网格也都是这样一个目的,尽量的把应用要做的事情剥离出来,和应用无关的事情全都抽象出来放到底层。

对应用开发者和使用者来说,可以不用关心底层是什么架构、怎么伸缩的,只需要知道到我需要什么服务,只要定义应用,定义 Kubernetes 配置,由它统一管理、自动伸缩和调度就好。基础设施这一层会越来越向一些少数的云厂商集中,而大家更多的精力是帮助开发者做事情,集中精力在那些业务、智能等逻辑部分。

金融与云原生

加入蚂蚁金服之后,王旭致力于将安全容器技术落地到金融级云原生的场景下。由于金融领域的特殊性,云原生实践也需要有相应的变化。

要保证安全性,不仅仅满足应用的,也要满足监管的端到端的安全性要求。

王旭举例说,金融行业不仅仅本身对安全有要求,监管对安全也有要求。所以必须要保证安全性,不仅仅满足应用的,也要满足监管的端到端的安全性要求。另一方面,他们认为安全性包括两方面,一个是应用不能破坏沙盒,泄露到外面,同时应用的底层供应商不是自己时,也可以安全的使用。这就是一个双向的安全问题。

一般而言,作为一个云服务商,会假设所有的用户都是坏人,因为所有的用户都可能去窥探基础设施,它们都可能攻击其他用户,攻击宿主机,所以要做隔离。

而金融级的要求是不光是要做这一层的隔离,而是要做更强的隔离。首先是对应用不能盲目信任,即便是内部应用也不能放任,因为内部的也有可能存在局部的破坏,也有可能会有不安全的代码或者没有被完全验证的测试代码,还有可能会有第三方的代码。反过来,应用既然是金融级的应用,它对环境也有安全要求,所以这是整体的要求。

技术创业与开源

开源对软件公司来说,是一件向死而生的事情。

在早期以开源技术为核心做创业公司时,王旭认为开源是市场推广的一个很好途径。因为软件是有人买才能赚钱,有人用才有人买,所以你如果不开源,就要一家一家地找人去试用,但是你开源了之后大家就可以免费尝试。不过,开源并不是没有缺点,开源对软件公司来说,是一件向死而生的事情。你把最核心的技术开源了,赌的是别人跟不上你的发展速度;或者说别人相信你才有能力把它做到更好,别人才会用你;或者说你给别人看到的当前版本,让他相信下一个版本他也做不到你这么好,所以才愿意跟着你来走,以至于当他维护不了的时候才会愿意来给你掏钱。这应该说是一个在市场背景下的选择。

反过来说,如果说你现在做了一个基础设施领域的软件特别好用,但是你不开源,这个时候就一定会有人做一个一样的开源替代品。那你就看能不能比它做得好,你能不能拿更多的支持、拿到更多资源。这是很困难的。

所以在这个情况下,你不得不去做这种这种极致的推广手段,就是这种不买先送的这种开源式的市场推广手段。目前来看,纯软件实现的、跟硬件没关系这种项目基本上都是采用了开源或者半开源的方式,就是说至少给你一个开源的演示版或基础版。这种方式,从商业上说是迫不得已的一种推广方式。如果你不做,你的用户们用不到的话,他们会去寻找替代品,也一定会有开源替代品出现。

技术创业还会面临一个挑战,就是当你做出来产品以后,很快会有更大的对手入场,对于初创公司来说,面临的压力是颇大的。王旭面临的情况稍微有些不同。

幸运的是,推出和 runV 类似项目的公司是英特尔,在这件事情上并没有很强的盈利导向,这也是双方最终能够合作的前提。王旭认为尽量避免无用的竞争,而是一起来教育和开拓市场,是更有建设性的做法。

做初创公司,做有价值的东西是最重要的。

经历了开源技术为核心的技术创业之后,王旭对如何做技术创业也有一些自己的看法。他认为,对于初创公司来说,很大程度上来说都在赌别人没有做过的事情,因为你重复别人做的事情,还要比别人做的好,是一件很困难的事情。对于项目来说,取决于你想的是什么东西,你的项目想得越多,想出来和别人有什么不同,别人怎么需要你的项目,其实它就越有价值。

做初创公司,做有价值的东西是最重要的,而不是说做一个很好看的架构,最重要的还是要有价值,大家才会用。此外,还要考虑相关的项目,就是你要和谁一起配合工作,你的用户群是谁,你的用户需要去引用的已有项目是哪些,怎么和它们共存,因为完全从零开始造轮子不太可能,你会用到很多已有的成果。

新做一个项目,要考虑很多相关的东西、上下游的东西,各种的兼容性、支持性,要在生态里面去找到你自己的位置。除此之外,还要明白什么是项目最重要的指标,比如开始做 runV 的时候,第一个考虑事情就是安全容器的启动时间,并且不间断的去关注和优化。

最后,做开源项目也并不是说把代码开源出来就行了,还要注重社区的建设。

作为一个开源项目来说,它的社区是非常重要的,有社区才是开源项目。

王旭认为,作为一个开源项目来说,它的社区是非常重要的,有社区才是开源项目,没有社区的项目只是拿出代码给大家看看而已,那样不会有人真的严肃的去使用你的代码。

无论是在 runV 的时期,还是后面 Kata 容器的时期,社区都是王旭和团队非常注重的一环,有很多在早期关注和参与的开发者和组织,到现在王旭也和他们保持着很好的关系。

结语

作为国内少数的基础设施方面的开源软件初创项目的领军人物之一,王旭无疑在这个领域的技术和商业方面拥有独到的经验和感悟,这些思考可以给更多在前沿领域的技术人员和开源初创项目一些启示。

“穿山甲专访”栏目是 Linux 中国社区推出的面向开源界、互联网技术圈的重要领军人物的系列采访,将为大家介绍中国开源领域中一些积极推动开源,谙熟开源思想的技术人,并辨析其思考、挖掘其动因,揭示其背后所发生的事情,为关注开源、有志于开源的企业和技术人标出一条路径。

取名为“穿山甲”寓意有二:取穿山甲挖掘、深入之意来象征技术进步和表征技术领袖的作用;穿山甲是珍稀保护动物,宣传公益。