分类 观点 下的文章

你们好!我一直在编写一本关于调试的杂志(这是 目录的初稿)。

作为其中的一部分,我认为阅读一些关于调试的学术论文可能会很有趣,上周 Greg Wilson 给我发了一些关于调试学术研究的论文。

其中一篇论文(《[建立一个调试教学的框架[付费墙]](https://dl.acm.org/doi/abs/10.1145/3286960.3286970)》)对我们有效调试所需的不同种类的知识/技能进行了分类,我非常喜欢。它来自另一篇关于故障排除的更一般性的论文:《学会排错:一个新的基于理论的设计架构》。

我认为这个分类对于思考如何更好地进行调试是一个非常有用的结构,所以我把论文中的五个类别重新规划为你可以采取的行动,以提高调试的效率。

以下是这些行动:

1、学习代码库

要调试一些代码,你需要了解你正在使用的代码库。

这似乎有点显而易见(当然,不了解代码的工作原理,你就无法调试代码!)

这种学习随着时间的推移会很自然地发生,而且实际上调试也是 学习 一个新的代码库如何工作的最好方法之一—— 看到一些代码是如何崩溃的,有助于你了解它是如何工作的。

该论文将此称为“系统知识”。

2、学习系统

论文中提到,你需要了解编程语言,但我认为不止于此 —— 为了修复 bug,往往你需要学习很多更广泛的环境,而不仅仅是语言。

举个例子,如果你是后端 Web 开发者,你可能需要的一些“系统”知识包括:

  • HTTP 缓存如何工作
  • CORS
  • 数据库事务是如何工作的

我发现我经常需要更有意识地去学习像这样的系统性的东西 —— 我需要真正花时间去查找和阅读它们。

该论文将此称为“领域知识”。

3、学习你的工具

现在有很多工具,例如:

  • 调试器(GDB 等)
  • 浏览器开发工具
  • 剖析器 profiler
  • strace / ltrace
  • tcpdump / wireshark
  • 核心转储
  • 甚至像错误信息这样的基本东西(如何正确阅读它们)

我在这个博客上写了很多关于调试工具的文章,并且肯定学习这些工具给我带来了巨大的变化。

该论文将此称为“处理性知识”。

4、学习策略

这是最模糊的一类,在如何高效调试的过程中,我们都有很多策略和启发式方法。比如说:

  • 写一个单元测试
  • 写一个小的独立程序来重现这个错误
  • 找到一个能工作的版本的代码,看看有什么变化
  • 打印出无数的东西
  • 增加额外的日志记录
  • 休息一下
  • 向朋友解释这个错误,然后在中途发现问题所在
  • 查看 GitHub 上的问题,看看是否有匹配的问题

在写这本杂志的时候,我一直在思考这个类别,但我想让这篇文章简短,所以我不会在这里多说。

该论文将此称为“战略知识”。

5、获得经验

最后一个类别是“经验”。这篇论文对此有一个非常有趣的评论:

他们的研究结果并没有显示出新手和专家所采用的策略有什么明显的区别。专家只是形成了更多正确的假设,并且在寻找故障方面更有效率。作者怀疑这个结果是由于新手和专家之间的编程经验不同造成的。

这真的引起了我的共鸣 —— 我遇到过很多第一次遇到时非常令人沮丧和困难的 bug,而在第五次、第十次或第二十次时就非常简单了。

对我来说,这也是最直接的知识类别之一 —— 你需要做的就是调查一百万个 bug,反正这就是我们作为程序员的全部生活 : ) 。这需要很长的时间,但我觉得它发生得很自然。

本文将此称为“经验知识”。

就这样吧!

我打算把这篇文章写得很短,我只是非常喜欢这个分类,想把它分享出来。


via: https://jvns.ca/blog/2022/08/30/a-way-to-categorize-debugging-skills/

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

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

操作系统是计算机的灵魂所在,更是现代社会数字经济转型的关键。随着国内科技力量的壮大,当出现如 CentOS 停服等机遇时,会进一步助推国内操作系统发展。如今国内开源操作系统遍地开花,我们到底有没有角力国际舞台的实力呢?在 2022 开放原子全球开源峰会上,讨论了“中国操作系统到底有没有角力世界舞台的实力”这一话题,以下为内容实录:

本次圆桌主持人及嘉宾如下:

王兴宇(主持人):Linux 中国开源社区创始人

杨勇:龙蜥社区技术委员会主席、阿里云操作系统技术总监

杨继国:龙蜥社区理事、Intel 技术总监

王洪虎:龙蜥社区技术委员、龙芯中科操作系统研发总监

陈鲍孜:龙蜥社区技术委员、飞腾操作系统负责人

王戍靖:中科方德高级副总裁

(图从左到右依次为:王兴宇、杨勇、王洪虎、杨继国、陈鲍孜、王戍靖)

王兴宇:

如今国内的各个开源操作系统百花齐放,但是与国际厂商相比,大家认为我们目前的强项在哪里,弱项在哪里?

王戍靖:

近年来国内操作系统开源社区发展迅速,但发展时间短,与国际社区相比有一定差距。操作系统社区基于大量基础技术,包括芯片、编译、开发工具等基础技术领域,也包括大数据、人工智能、云计算等新兴技术方向,需要长期培育积累和技术创新。

有利条件是中国开源处于快速发展阶段,中国开发者数量增长快,据 GitHub 2021 年数据统计,中国开发者数量已增至 700 多万,排名全球第二,贡献了 550 万个开源项目;另外,我国数字经济转型升级推动信息产业持续增长,新兴技术领域也在迅速发展。以上都为国内开源操作系统社区发展提供了坚实的基础和动力。

陈鲍孜:

从主导具体的开源项目看,国内操作系统社区的发展还是有欠缺的,毕竟我们参与的时间比较短。但国内的开发人员不管从数量还是活跃程度方面,在国际上即使不是最好的,也算处在了第一梯队之上。我和国外开发者进行过一些交流。他们有一个观点,即如果一个国家制造业强大,那么制造业就是做操作系统或者系统软件的动力。从这个层面来看,我认为我们的潜力和需求动力并不比国际差

杨继国:

中国现在的操作系统社区处于高速发展的时期,说到不足的地方,第一点:因为我们的发展时间没有那么久,所以缺乏创新积累。一个操作系统社区能够长期发展的很重要的一点就是原创,需要有自己的特色。中国有一个很大的优势就是开发者很多,对开源来说开发者是一个整个社区开源创新的基石。我看过相关报道,中国开源开发者从数量上来讲在世界上处于一个比较领先的地位,我们怎么样把这些开发者转化成开源社区持续创新的动力,这是很重要的一个问题,我觉得还需要时间。

第二点:国际上游社区对我们的影响。因为操作系统有上游和下游的关系,上游社区会带动一些科技的发展包括创新。同时下游社区不仅仅兼容上游的技术,很多时候也能反过来影响上游社区,像国际上大的厂商有能力能够去影响上游开源,中国的操作系统开源社区也可以通过不断创新去扩大影响力。因为我们有能源、电力、金融等各行各业的参与,有非常强而切实的需求,所以我相信我们能把这些需求的影响代入到上游社区。

王洪虎:

我觉得这个问题应该从两个方面来看,首先,相对国外来说我们的时机和发展历程确实相对短一些,客观来讲确实存在一些差距。但是另一方面,我们也应该看到一些希望,比如今天演讲中讲到我们提升了原创的东西,国内的社区已经具备这种创新能力还不止是局部一个点,而是各个层面都有。说明我们至少在有短板的前提下,在有差距的情况下也能够发现一些局部的创新。随着国内多元化市场的不断实践,在这个过程中会产生大量的创新基石和土壤。未来,我相信随着国内各行各业的蓬勃发展,我们在上游社区的声音和力量会越来越强大。

杨勇:

我简单说一下观察到的一个现象,CNCF 中国人孵化的项目非常多,比如说国内 PingCAP 这样优秀的项目,包括阿里也有一些项目在 CNCF 中,包括像龙蜥社区参与的 Nydus 项目和 Confidential Containers 项目。所以新的领域、新的机会、新的需求不断出现的时候,这是我们难得的机会,也是一个很好的突破点。但在内核领域或者编译器等发展比较成熟的领域,我们的顶尖人才保有量确实是不够的,原因是历史积累造成的,因为过去这个产业基本上发展得不够,但是今天国内无论对芯片还是操作系统整体产业的投入是比前几年要大得多的。“板凳要坐十年冷的精神”要坚持下去,我认为新一代程序员会快速成长起来。

王兴宇:

感谢各位老师的发言,总结下来我们确实在有些地方还发展得比较慢,但是长处在于我们确实有大量的程序员,根据调查来看中国在 GitHub上的注册用户比例相当高。同样我们拥有更广阔的用户市场,就会有更多的行业需求,这样的发展趋势下我国的规模优势就会发挥出来。目前来看确实如几位老师所说,我们在尖端的项目上还缺少足够有影响力的话语权,但是现在已经在逐渐多点开花,多点释放,未来可期。

杨勇:

吸引国际厂商合作,我觉得对龙蜥社区来说是一个很大的命题。我们能看到龙蜥把芯片、云厂商、OSV 厂商等拉到一起去发生合作,最近又把服务器厂商拉了进来,实际上这是一个滚雪球的过程。这件事情本质上是需求和供给,合作的本质也是双赢,社区需要思考清楚几个问题世界领先厂商加入到社区他想要获得什么,以及我们社区能给到什么”,这是一个很重要的话题。我认为社区合作一方面要有自己的商业本质在里面,因为今天这个市场里的开发者以机构为主,以组织为主;另一方面是社区文化,社区还是要有一个比较开放透明的机制,整体社区的运作是非常开放平等的,这个很重要。总结来说,第一点是内在的驱动力,第二点是阻力摩擦力小。

王洪虎:

从芯片角度讲,能够吸收国际厂商的参与,一方面需要对方对我们的创新感兴趣,并且从我们这儿能得到他想要得到的东西,这是吸引力。另外一方面,从龙芯角度讲,我们提供一个新的架构支持,这本身就是创造一个新的需求,要在龙蜥社区有支撑的架构,这里面方方面面的事情是非常多的。随着将来龙蜥架构走向国际,自然会有更广范围的爱好者和机构参与,这里面也会产生对国际爱好者开发者的需求。

杨继国:

像龙蜥社区能吸引国际参与者保持比较强的兴趣,有几个方面原因,第一个我们能继续保持透明、开放、公正的原则,这点是非常重要的,无论从技术发展还是从社区的推广治理角度来说,这点是能保持和国际社区接轨,吸引众多人参与的重要原因。当然龙蜥社区做得非常好,第一次参加理事会就发现这个社区保持非常好的传统,一直发扬下去。

第二点中国开发者的人群非常大,我们希望通过努力能把更多的开发者吸引到社区里来,能保持这个社区的多样性,鼓励大家多多创新。

第三点我想对于这个社区的开发者来说,我们在做这个社区的开发包括架构设计,一定要有一个社区文化,比如在 Intel,我们在做架构设计的时候应该考虑到用户的架构设计应该能适应更多的架构,而且有更多的包容性,不仅仅只做芯片。对整个社区发展来说,更加中立更加有包容性的社区是很重要的,这一点我觉得是国际社区发展的成功关键,实际上能对中国社区也是如此。

陈鲍孜:

我认为社区的发展,本质上在于参与社区的开发者解决自己的问题。每一个社区项目都是由社区的开发者驱动。开发者首先自己要能够长期地生存并发展下去。只有当社区开发者在解决自己问题,他才有源源不断的动力来维系这个项目。当社区开发者解决的自身问题是共性问题的时候,自然就能吸引到那些有着相同兴趣爱好或者相同诉求的人一起参与到这个项目里来。这时候,如果我们的社区有比较好的机制、比较开放的文化、比较好的规则的话,我认为无论开发者是来自国际还是国内,社区自然会自发地运作起来。实现这个目标,我觉得一方面是需要有过程,另一方面也取决于当前需要做的事情自身的难点和所解决的痛点,取决于当前事情是否具有普适性。从时间的角度,如果项目能做得足够长,那总有一天会解决大家共有的痛点,届时开发者自然会参与进来。

王戍靖:

大家都提到社区开放和公正,这是运营社区的一个基础条件。一个开源社区能获得包括国际开源社区在内的各界广泛关注,我认为不仅在于社区自身影响力大,SIG 组的技术创新方向的设立也是一个关键因素。社区如果基于产业和市场需求,关注有哪些重要的技术问题亟需解决,主动引导、推进 SIG 组设立,这样参与社区的机构和个人会有内在驱动力去投入,为技术创新做贡献。

王兴宇:

感谢各位老师的意见分享。我觉得如何吸引国外的开源社区,国外的厂商参与我们,首先,固然我们要有开放包容的状态。其次,我们要更加的接纳国外开源社区人员的习惯,比如他们用的语言,我们是不是有更国际化的语言。最后,还有刚才王戍靖老师说的 SIG 组情况,我们一般把 SIG 翻译成“专门兴趣”,但是也有另外一种说法是“特别利益”,第二种说法这里面确实关乎他的利益,如果我们能给他提供关乎他利益的东西,他自然会参与。

除了要“请进来”还要“走出去”,中国的操作系统要有中国的特色,但也应该是一个国际的操作系统,不仅能满足国内的用户,而且也能满足东亚地区人群需求,甚至中欧地区人群需求。这种情况下,我们如何能让中国开源社区发展起来,具有国际影响力,并得到国际市场的欢迎呢?

王戍靖:

中国处于数字经济转型升级阶段,信息产业蓬勃发展,涌现了大量行业需求和市场空间,给国内操作系统开源社区提供了发展特定技术方向并引领技术发展的机遇。比如,龙蜥社区定位在要打造云计算的原生生态社区,以此为目标,可以聚拢大批软硬件生态厂商,逐步形成社区特色、并推动形成有影响力的软硬件行业标准,实现与国际相关标准接轨、兼容。随着中国开源社区持续发展,社区开源版本以及针对特定地区需求衍生的操作系统商业发行版在国内、国际市场上不断推广应用,中国操作系统开源社区在国内、国际上影响力会不断提升。

陈鲍孜:

我觉得走出去这件事可分几步看。一方面,当社区吸引了足够多海外开发者时,它基本就能算走出去了。从另一个角度看,我们的衍生发行版是不是能走出去,取决于我们衍生出来的发行版所在行业是不是能够有效地走出去。我们所说的操作系统大多数时候是一个宽泛的概念。如果我们不专门讨论操作系统内核或者操作系统其他某个特定的技术模块时,操作系统更多时候是泛指支撑应用的载体。如果我们的应用能走出去,同时我们的衍生版本能够贴合应用场景,满足应用需求,那么届时我们的基础软件社区也就走出去了。

杨继国:

我想我们中国的操作系统包括社区能走出去,我想有三点,第一点我们要有自己的特色,取代 CentOS 只是第一步,顺应环境的发展,本身社区要有自己的长远发展,包括操作系统的架构设计、能够解决一些痛点的业务等。

第二点是生态,因为国外生态和中国生态有很多不一样的地方,如果我们想走向国际舞台,很重要的一方面是要能吸引更多的国外厂商参与,比如 OSV,因为欧洲和美国都不一样,每个地区都有自己的 OSV 也好,SV 也好,包括 VEM,这些国际化厂商的生态伙伴的加入,对于国际化很重要,因为每一个生态伙伴都覆盖了相当大的范围,只不过是不同类型的。

第三点与国际上游社区的紧密合作,这个也是非常重要的一点。因为国家的科技发展对第三社区有很大的依赖性。

王洪虎:

关于走出去,我想有三个方面要重点考虑,第一要能走出去首先要具备走出去的能力,第一个操作系统是社区发行版,这个发行版应该具备发行版所应该具备的基本能力,比如稳定性,因为我们做一个面向云计算的操作系统社区版,稳定性和长期维护性对用户来说是非常重要的一项。

第二个方面我们要走出去,实际上要落实到一个一个的软件包,以一个的具体软件的形式走出去。像刚才杨总讲地要往上游社区贡献相当多的自己的原创性的优化的补丁,自己原创性的软件,要走到国际性的像内核这样的社区去,随着这个进程走出去的软件包越来越多,自然发行版社区也就走出去了。走出去是为了要解决用户的需求,我们走出去用户发现没有任何作用,实际上也是走不出去的。我们走出去首先要考虑用户对我的需求是什么,用户的痛点是什么,比如 CentOS 停服全世界面临同样的问题,我们既然能在国内解决这个问题,国际上也能解决这个问题,从我们自己的发展来讲,我们能满足用户的需求能力。

第三方面还要考虑刚才上一个话题里聊到的开放协作、创新、平等,这正好也是龙蜥社区的理念,我们以这种理念走出去,世界才能接受我们。

王兴宇:

其实说起“走出去”的话题,我印象中比较深刻的就是龙芯,龙芯近一两年不断向上游向内核,比如向 GCC 提交自己的补丁,也得到了国际社区的认可,能支持、能理解、能看到你的东西,这是很好的。另外像王戍靖老师说的,我们确实要针对它的需求做下游的发行版,可能中国人对这方面的需求或者认知跟其他国家不一样,能不能给它做不同的下游发行版。

下面最后一个问题,对于如今中国开源操作系统市场大家又竞争又合作,这种情况称之为“竞合”,如何能开展良性竞争生态?

杨勇:

如果是没有竞争的市场,要么你是新进来的先驱者,要么这个市场里已经看不到机会了。我觉得有竞争不是坏事。国内操作系统的生态都是 Linux 的生态,大家在这个大的生态里面有一些共同的合作基础。我相信不管有多少社区,我们要做的事情是让我们的生态伙伴和开发者,以更低的成本接入到这个大的生态合作中来。我认为龙蜥社区在合作方面将来要把标准和有利于大家共同利益的东西推到上游,或者变成一个行业标准。这方面是一个非常的的合作机会。我认为因为云计算存在很多的不确定性,就必然带来竞争,竞争就带来大家高水平的成长和发展。在这种不确定性下我觉得多一种的竞争对整个产业是有利的,因为谁都不知道未来会演进向哪里。

王洪虎:

竞争在各行各业都存在着,IT 行业尤其激烈,竞争可以使行业内取长补短,相互促进,假如说没有竞争会怎样,估计肯定不会发展到现在这个样子。

从龙蜥社区本身来讲,我们是一个技术社区,并不是一个商业组织,更多是从技术层面考虑问题。怎么样解决技术层面能解决的问题,这是龙蜥社区要考虑的,比如解决行业云计算领域或者 CentOS 停服这类的技术问题。从这个角度讲技术本身没有限定一家使用,刚才杨总讲的是提交到内核社区里的,我们龙芯也是提交到内核社区里的,提交出去之后并不是说这个补丁仅限于某个社区使用,其他不能使用,没有那么狭隘。再一个从龙芯开放协作的发展理念讲,我们发展竞争合作关系都是从局部来讲,但是在大的方向上我们在共同推进技术的进步,这是一个更大的格局。

杨继国:

现在从中国的操作系统来看更多推动这个市场进一步扩大。因为我自己做操作系统做了二十几年,我们都是做这行做了很久,我们刚开始做这个行业的时候很多的工作,包括做了很多的开发也好,大家对技术管线没那么关注。现在突然赶上这个时期,行业的需求突然增加了,大家对操作系统、基础软件各行业关注非常大,我们在无论是互联网行业还是政企,还是运营商电信行业,操作系统处在非常快速的发展时期。有些标志就是会有投资公司给你递名片,说明资本已经关注这个行业,这个行业处在一个起飞的前沿。当下,我们社区应该怎么样把蛋糕做大,能把 Linux 操作系统基础软件精准推广是重中之重。回到竞争的话题,其实技术上永远有竞争,国际上也是这样的。从 Linux 的发展来看技术竞争,本质是共同推动技术的发展,以前技术受到时代局限性,新的技术会取代旧技术,不同公司通过不断演进合作和竞争都能促进发展,这个对整个的操作系统发展是有利的。

陈鲍孜:

开源软件不仅是技术架构,其发展模式也存在层次。不同的发行版会根据自身定位以及需求选择不同层面的重点。社区的发展是以技术驱动为主的。不同发行版之间在发展技术上并没有太大的矛盾。大家目的都是为了把整个 Linux 大生态做好。所以从技术方面说,我不认为国内存在很多排他性竞争。更多情况大家是在相互促进。从市场竞争结果来看,不同发行版的发展也会根据所处行业及需求去进行选择,从而提供更丰富的多样性,而不是产生排他性。现在几乎行行业业都在使用 Linux 发行版,我们不能要求每一个用户都采用相同的平台或者相同的技术路线。那样不太现实。这就给大家留出了足够的空间去开发多样性的内容,在宏观上也能促进整个 Linux 大生态的发展。

王戍靖:

目前国内处在操作系统开源社区快速发展阶段,竞争和合作必然存在。国内开源操作系统社区基于不同定位逐步形成社区特色,社区基础版的发行版本在满足用户需求和服务用户过程中,也会进一步发展出社区的技术优势。通过社区之间的相互借鉴、交流合作,可以共同推动国内操作系统技术和产业进步。

王兴宇:

经过多年的努力,这些问题确实能得到完善,能看到以当前为主的操作系统已经很完善了,目前已经覆盖很多的行业,逐渐摆脱了对国际的依赖,我们现在在服务器上有相当多的进步,距离国际舞台还是有一段的距离。像前面提到的,我们在一些基础性的尖端性的重要的地方还是有一些欠缺,还需要国内各大操作系统厂商和社区形成合力,更多的厂商加入到发展行业中,共同上演中国操作系统技术逆袭世界的创举。

(本次圆桌访谈内容到处结束)

Wii U 模拟器 Cemu 的开发者上周二宣布了一个重要的 2.0 版本发布,首次交付了 Linux 上的二进制文件,并开源了他们八年的成果。Cemu 是一个 Wii U 模拟器,并于 2017 年创造了历史 —— 每个月可以通过 Patreon 获得支持其发展的数千美元赞助。Cemu 以其在 Patreon 上曾短暂达到 25,000 美元的最高收入而为人所知,这引起了人们对“仿真是否道德”的关注,特别是它被用来换取金钱,而项目却是“闭源的”而不是“开源”的 —— 也就是说源代码没有向公众开放。

仿真社区保护自己免受法律诉讼的主要方式之一是向公众提供其源代码,允许像任天堂这样的“诉讼公司”检查它,并验证在反向工程过程中没有使用他们的专有代码。

据 Exzap 称,Cemu 对 Linux 的支持“仍然相当粗糙”,但他相信随着更多的模拟器开发者熟悉 Cemu,并开始为该项目做出贡献,这种情况将迅速改变。Cemu 以前只兼容 Windows,但现在支持 Linux,可以在 Steam Deck 上快速安装。在 Cemu 引入 Flatpak 支持一键安装之前,在 Deck 上使用它并不那么简单,不过这个话题已经在 GitHub 上讨论过了。

Cemu 的作者利用 2.0 发布公告简要地讨论了该模拟器的历史;在该模拟器的大部分历史中,他们是唯一的开发者,他们声称过去两年对项目的压力特别大。

Exzap 将继续做出贡献,但预计拥有其他开发者将有助于创建几个重要的功能,如暂停和恢复仿真的能力,以及提高在旧硬件上的性能。

“我已经在 Cemu 上工作了近 8 年,看着这个项目从一个似乎不可行的实验,发展到在其高峰期有超过一百万人使用的东西,”Exzap 在上周二的公告中写道,“即使在今天,当 Wii U 已经被大部分人遗忘的时候,我们每个月仍然有 25 万次下载。仍然有这么多人在用 Cemu 享受 Wii U 游戏,我将永远感激让我有机会以积极的方式影响这么多人的生活,哪怕只是一丁点。”


via: https://www.opensourceforu.com/2022/08/wii-u-emulator-cemu-going-open-source-is-significant-for-emulation-heres-why/

作者:Laveesh Kocher 选题:lkxed 译者:wxy 校对:wxy

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

任何考虑在开源领域发展的人都具有无限的可能性。下面是我的故事。

当人们问我最喜欢开源的什么时,我的回答很简单:那就是 开放性 。在开源中,社区开发者和贡献者所做的工作是在公共领域的,所有人都能看到并从中受益。我对这一理念爱不释手。

有多少人可以对他们的劳动成果这样说?有多少人,也许在 50 年后,可以回过头来说:“看看我那天写的代码,有几百/几千/几万人从中受益。”我觉得这比从事那些对世界上大多数人来说都是隐秘的软件工作更令人无比兴奋。

我很幸运,我的工作使我置身于一个开源和企业交叉的有趣领域中。如今,我是 OpenNMS 集团 的首席技术官,这家公司负责维护 OpenNMS 项目。OpenNMS 是一个领先的开源网络监控和管理平台。

虽然我现在的角色让我牢牢扎根于开源领域,但我是以用户和贡献者身份开始的。

2007 年,我得到了我的第一份真正的技术工作,在加拿大蒙特利尔的电信服务提供商 Datavalet 技术公司从事网络分析。在五年的时间内,我成长为解决方案架构师,任务是帮助公司选择网络管理解决方案。我们选择了 OpenNMS,正是通过这次经历,我认识到了开源的真正力量。

在平台上线时,我们发现了一些缺失的功能,这些功能将有助于优化我们的体验。一位来自 OpenNMS 集团的代表在现场帮助我们进行部署,并建议我参加社区即将举行的 DevJam,与核心开发人员一起建立我们需要的功能。

在 DevJam 期间,我很快就融入了团队和社区。我们卷起袖子,开始编码,以创建 Datavalet 所需的增强功能。在几天之内,这个附加的功能就准备好了。这是一次令人惊叹的变革性经历,让我真正看到了开源的力量。

一年后,我离职了,在康科迪亚大学全日制学习数学。正是在那里,我再次有机会与 OpenNMS 团队合作,这一次是在该年的谷歌代码之夏的一个项目上。在这个年度计划中,参与者的目标是成功完成开源软件开发项目。

代码之夏对我来说是一次改变职业生涯的经历。OpenNMS 的两位负责人参加了我们的项目演示,一年后,OpenNMS 团队邀请我作为一名全栈开发人员加入。

我努力工作,迅速晋升,并在 2015 年被任命为首席技术官。我认为这是一项个人成就,也再次验证了开源世界的特别之处。如果你喜欢与社区合作,热爱你所做的工作,你的贡献很快就会得到认可。

开源精神也影响了我从个人贡献者到首席技术官的发展,我现在领导着一个由 50 多人组成的产品开发团队。社区本质上是平等的,我与社区贡献者一起工作的经验教会了我如何在环境中领导,而不是控制。

我经历了一段奇妙的开源旅程,从用户到贡献者,再到一家开源公司的高管。开源方法超越了技术,因为专有开发环境中经常存在的障碍的进入和增长可以通过协作、透明和社区来克服。因此,对于任何考虑在开源领域工作的人来说,可能性是无限的。我就是证明。

我们生活在一个人们正在深刻审视自己的生活及其对世界的影响的时代。在开源公司工作特别有意义,因为我可以直接与用户社区互动并影响他们。终端用户和开发人员之间的经典屏障被打破了,我可以确切地看到我的工作如何改变人们的日常生活,或者激励人们为项目做出贡献。通过对一个项目的共同热爱来建立社区,建立持续一生的联系。

我知道这对我来说都是真实的,这也是为什么我对我的工作如此热情。我是一个彻头彻尾的开源极客,并以此为荣。


via: https://opensource.com/article/22/8/my-open-source-career-story

作者:Jesse White 选题:lkxed 译者:aftermath0703 校对:wxy

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

根据 Aiven 的一份新报告,谷歌已经提高了其对开源软件的投入,并在活跃贡献者方面超过了微软。

根据 Aiven 的报告(LCTT 译注:我没有找到这份报告),谷歌目前的活跃贡献者多于微软,这要归功于对开源代码库 GitHub 的每月提交量同比增长 20%。根据开源贡献者指数(OCSI)的数据,谷歌 7 月份有 5421 名活跃贡献者,而微软的活跃贡献者为 5268 名。

Aiven 联合创始人兼首席技术官 Heikki Nousiainen 说,谷歌超过微软“特别令人惊讶”。

“这其中的一个因素是微软对开源项目的提交逐年下降,”Nousiainen 说,“然而,微软对开发者自由和创新的投入是一致的,该公司是开源的主要参与者,甚至在 2018 年收购了 GitHub。”

Aiven 指出,亚马逊已经开始更加重视开源计划,其对 OpenSearch(ElasticSearch 的复刻)的支持以及 GitHub 上项目数量的增加就是证明。Nousiainen 认为,亚马逊对 OpenSearch 和 ElasticSearch 的支持代表了“该公司方向的重大改变”,以及对重大开源项目掌舵的愿望。据 Aiven 介绍,这些科技巨头正在迅速扩大对开源软件的使用。根据数据,现在来自亚马逊、微软和谷歌的活跃 GitHub 贡献者比六年前多了 300%。

“这项研究的总体信息是积极的,”Nousiainen 说,“在开源社区有大量的创新在继续发生,其结果使我们所有人受益。数不清的人正在为其他人树立一个榜样。”


via: https://www.opensourceforu.com/2022/08/google-surpasses-microsoft-in-terms-of-open-source-contributors-says-a-study/

作者:Laveesh Kocher 选题:lkxed 译者:wxy 校对:wxy

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

做一个高效的、充满好奇心的问题解决者吧!这会帮助你成为一名成功的程序员。

你是否曾经遇到过这样一种情况:你想解决一个问题,并且你在 YouTube 或 Google 中找到了相关的教程。嗯,你觉得看会了,可真做起来,却止步不前,大脑一片空白。你感觉自己每一行代码都看懂了,可一旦离开了那个教程,就步履维艰。如果你在 HackerRank 或 LeetCode 上看过别人的解题过程,你就能体会到,一个有追求的程序员第一次看到这些挑战时,他会是何种感受。举例来说,假设你正在学习一门新语言,在你刚开始理解这门语言的基础知识的时候,你看了一个教程,摩拳擦掌,结果发现自己无法独立应用学到的知识,这反过来可能会导致你怀疑自己的知识和能力。

把教程付诸于实践

你应该从头开始吗?如果你这么做,你可能很快就会发现自己重复学习了很多次相同的知识点。虽然从头开始并不一定是种浪费,但是,你该如何变得更高效呢?

死记硬背在编程中完全是行不通的。话虽如此,但你也不能够忽视熟悉语法的重要性。因为,死记硬背和养成习惯之间是有明显区别的。习惯是很难打破的。要养成多使用编程语言的常规语法、函数、方法、模式、范式和构造的习惯,这样你才能掌握它。掌握一门编程语言需要大量的创造力和练习。练习语法是非常必要的,直到它们能在你的脑海中自然地浮现,就像血液在血管里流动一样。

“问题解决”的工作原理

那么,你该采取什么样的方案呢?这实际上取决于许多因素。这些因素可以是任何东西,下至技术限制,上至用户需要。世界上有无数的问题,每个问题都有许多解决方式。如何选择一个最好的?这就需要 “问题解决” problem-solving 的技巧了。

下面是一个简单的例子。你需要把两个数相加,让它们等于 6。显然,你有多种方式可供选择:

3 + 3 = 64 + 2 = 65 + 1 = 6

同理,如果你需要让两个数字,经过一次减法、乘法或除法运算后,得到的结果为 6。你仍然有很多选项,包括:

8 - 2 = 612 / 2 = 63 * 2 = 6

每种方案都有它固有的限制,且各不相同。当你在现实生活中尝试做出一个高效的方案时,你必须要考虑到所有的限制。这个方案可行吗?有什么障碍吗?有可操作性吗?是否可扩展呢?而如何最小化约束,并做出一个最优方案,就取决于问题类型和业务需要。

练习很重要

编程的目标不仅仅是解决问题。因此,从工程视角理解代码如何工作始终是一个优势。这就是代码审查在企业级开发中发挥作用的地方。编程的最低要求是具备基本的编码知识,包括语言的语法、函数和方法。归根结底,“写代码”是需要你去的,所以练习总是有助于提高你的技能。流畅的写作和复杂方案的开发都来自于持续的学习和训练。

学习编码

我撰写和分享这篇文章,是为了鼓励新程序员去探寻自己的内心,寻找那个“优秀的问题解决者”。请不要停止相信自己。

要成功编码,你需要培养许多习惯。下面是我在学习编码时保持高效的方法:

  1. 一个包含语法、方法和函数 速查手册 总能应付不时之需。
  2. 将问题分解成更小的部分,便于追踪。
  3. 尝试理解代码运行的核心概念。
  4. 构思解决方案时,大可发挥你的创造力 —— 但刚开始还是要注重基础。
  5. 在练习时,创建尽可能多的应用和组件。
  6. 永远不要从 Stack Overflow/Exchange 等开放平台上复制/粘贴代码,特别是在不了解上下文的情况下。
  7. 跟着教程做了一遍后,尝试从头开始构建所有内容。即使你只能独立完成一半,那也仍然是一个成就。

祝我们所有人好运!


via: https://opensource.com/article/22/8/coding-advice-new-programmers

作者:Sachin Samal 选题:lkxed 译者:lkxed 校对:wxy

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