如何开始成为一名开源程序员

396 位读者喜欢这篇文章。
Best of Opensource.com: Programming

Zagrev on Flickr. CC BY-SA 2.0

展望技术世界是令人兴奋的。它有很多活动的部件,而且似乎你越深入挖掘,它就越深,然后就变成了 层层叠叠的乌龟。正因如此,技术也令人感到难以承受。如果你热衷于参与并帮助塑造现代世界的功能方式,你该从哪里开始呢?第一步是什么?第二十步是什么?

首先要理解的是,开源是开放的。这似乎是显而易见的,但“开源”这个词现在被如此频繁地使用,以至于有时人们会忘记它只是一种文化现象的描述,而不是一家财富 500 强公司的名称。与其他工作或团体不同,你无需面试或填写注册表或注册表格即可成为一名开源程序员。你成为开源程序员所要做的就是编程,然后分享你的代码,最好保证代码保持开放,无论它如何被使用。

就是这样。你就是一名开源程序员了!

你现在有了目的地,但后勤方面呢?

技能树

你玩过 RPG 游戏吗?在这些游戏中,有线性“技能树”的概念。当你玩游戏时,你会获得基本技能,你在此基础上“升级”并获得新技能,你使用这些技能来获得新的技能并再次“升级”。以此类推。

成为一名程序员有点像添加到你的技能树。你获得一些基本技能,你练习它们直到它们成为第二天性,然后你获得新技能,等等,然后你就在你选择的技能树上进步了。

你会发现你会遇到不止一个技能树。开源有很多入口点,也有很多拥有自己独特优势、才能和兴趣的个人。然而,某些可定义的技能有助于成为一名伟大的程序员,而发展这些技能是成功参与开源项目的重要组成部分。

脚本

Scroll--How to program

像 Linux 或 BSD 这样的 POSIX 系统最大的优势之一是,每次你使用电脑时,你都有机会练习一点编程。如果你不知道从哪里开始编程,那么就从你的工作方式开始。找到你每天执行的重复性任务,并开始自动化它们。这一步可以是一些简单的事情,比如转换或调整批量照片的大小、检查电子邮件,甚至只是让你每天使用的五个应用程序一键启动。无论任务是什么,花时间为自己自动化一些事情。

如果你可以从终端执行某些操作,那么它就可以被脚本化。学习 bashtsch,让系统脚本成为你编写代码以及系统如何工作的入门。

系统管理员

Caesar head

从这一点出发,你可以继续成为一名程序员,或者你可以跨越到完全不同的技能树:系统管理。这两种职业有一些重叠(优秀的系统管理员应该有一些编程经验,并且应该准备好使用 Python、Perl 或类似的语言来开发独特的解决方案),但是程序员是日复一日用代码构建东西的人。

程序员

Wizard hat--How to program

开源是学习编程技能的好方法;你可以查看别人的代码,借鉴想法和技术,从他们的错误中学习,获得对你自己的代码的评论,如果你使用 Linux 或 BSD,整个堆栈对你都是开放的——就你所能看到的,一切都供你取用。

无论如何,旅行手册上是这么说的。现实情况是,你可能不会开始深入研究某个项目的源代码,然后突然意识到自己不小心学会了编码。编程是艰苦的工作。如果不是这样,每个人都会去做。

幸运的是,编程是合乎逻辑和结构化的,所以它是建立在自身之上的。你可能不会爱上编程,但你越是研究它,你就越开始理解它。

了解如何控制和自动化计算机是一回事,但知道如何编写其他人想要自动化的东西是你跨入编程领域的关键点。

多语言者

Parrot--How to Program

所有编程语言的目标都是做同样的事情:让计算机计算。选择一种语言是你认为你想做什么、你所针对的行业中(如果有的话)常用的语言,以及考虑到你可以获得的材料和你的学习风格,你恰好最理解的语言的混合。

通过一点研究,你可以很好地了解一种语言的复杂性,然后根据你自己的舒适程度决定先尝试什么。

选择语言的另一种方法是查看你的目标,找出是否有人正在朝着同样的目标努力,然后看看他们在用什么。如果你的目标是开发桌面工具,你可能会学习 C 和 Vala,或者 C++。

但归根结底,不要被所有可用的选择搞得不知所措。语言可以很好地叠加。一旦你很好地掌握了一种编程语言,可以在你需要完成某件事时依靠它,你就会发现学习另一种语言要容易得多。“语言”毕竟只是一组语法和规则;学习一种,然后在同一理论之上叠加新规则就相当容易了。

首要目标是学习一门语言。选择对你来说有意义的、最吸引你的、你的朋友正在使用的、或者你最容易理解其文档的语言,但专注于一门并学习它。

开源 Whazzit?

无论你只是在学习编程,还是只是刚接触开源的老手,在头脑发热地投入这个勇敢的新世界之前,你需要了解是什么让开源成为“开源”。

声称软件是开源的,是一些软件供应商正在使用的最新营销手段。不幸的是,一些供应商只是意味着他们发布了一个公共 API,或者他们对用户的建议持接受态度(“开放”)。“开放”这个词没有商标,也没有委员会管理这个词的使用方式或时间。然而,由已故的 Debian Linux 的 Ian Murdock 共同创立的 开源促进会 定义了开源的含义(“允许软件被自由使用、修改和共享的许可证”),并正式批准和 跟踪 被认为是真正“开放”的许可证。

将其中一个许可证应用于你的代码,你就是一名开源程序员了。恭喜你!

社区

Community--How to program

询问任何开源爱好者,他们都会告诉你,关于开源软件最重要的是人。没有积极的贡献者,软件就会停滞不前。计算机需要用户、错误报告者、设计师和程序员。

如果你想加入或培养全球开源社区,你需要成为社区的一份子,即使你不是一个善于交际的人。这通常包括订阅邮件列表、加入 IRC 频道或跳上论坛,并从最底层开始。任何成熟的社区都存在了足够长的时间,见证了潜在成员的来来往往,所以你必须明白,当你昂首阔步地走进来准备改变他们的世界时,在他们都同意你的宏伟计划之前,你必须证明你不会在三个月后当互联网另一端闪闪发光的东西吸引你的眼球时就消失得无影无踪。如果你渴望成就一番大事,就要做好长期奋斗的准备。

如果你只是来帮忙的,那也是可以接受的。我自己也向项目提交过小的补丁,有时项目负责人认为这些补丁很好,有时他们会拒绝它们。如果被拒绝的补丁对我来说很重要,我会为自己和客户维护它,否则我会继续前进。

这是过程的一部分。

这些社区存在于哪里?这取决于项目。一些项目有专门的社区经理,他们帮助将每个人聚集在公共空间,让所有人都能看到。其他项目围绕论坛形成,使用邮件列表,甚至问题跟踪器。寻找社区,你就会找到它们。

但同样重要的是,也要看看代码!他们称之为开源“源代码”是有原因的,所以一定要找到代码并查看一下。即使它仍然超出你的完全理解水平,它也会让你了解软件项目是如何组织自身的,以及他们可能需要在哪里获得帮助。代码是如何组织的?代码有注释吗?它是否整洁且风格一致?查看文档,特别是 README、LICENSE 或 COPYING 文件。

不要低估信守开放代码承诺的重要性。这是你参与其中的原因,所以从各个角度批判性地看待它,看看你能从中学习到什么,以及你可能如何做出贡献。

找到最佳社区很像约会,但具体来说,它就像 土拨鼠日 中的约会。这需要时间,最初的几次尝试可能会失败。你经历的过程越多,你就越开始感到似曾相识。但最终,你对你自己和你的兴趣了解得足够多,你找到了合适的人群组合,并在某个地方安顿下来。要有耐心,让它自然发生。

行动 > 言语

Wingfoot--How to Program

成为一名开源程序员是关于代码(开源的“源代码”部分)的,而想法一文不值。真正有价值的是产出。你需要展示你知道自己在做什么,愿意亲力亲为,把时间花在项目上,并且可以用可以编译的东西来支持你的想法。

当然,为了有效地做到这一点,你应该对项目本身做功课,包括了解项目喜欢如何接收提交,以及哪些分支是稳定分支和开发分支。

接近入门

  • 熟悉一个项目及其开发文化,并尊重它。
  • 编写补丁、错误修复或小的、请求的功能,并提交它们。
  • 如果你的工作被拒绝,不要气馁。你不是被个人拒绝,你的工作经过了评估,开发团队做出了决定。
  • 如果你的工作被接受,但被改得面目全非,也不要气馁。
  • 冲洗、重复,并尝试新的和更大的更改。

Leaderboard--How to program

开源中没有排行榜。一些网站试图让它看起来像他们有这样的东西,但实际上没有。参与、贡献、添加到想法库、添加到提交库,你就做对了。

发展

Treasure Map--How to Program

在任何环境中编程,最终总是关于个人发展。无论你是在寻找解决问题的新方法,寻找优化代码的新方法,学习一门新语言,还是学习如何更好地与他人相处,你都永远不想停止成长。你越发展自己,项目就越受益。

成长,无论是个人还是专业方面,都是列表中的最后一个,但它实际上贯穿整个过程。成为一名开源程序员不像获得一份政府工作;这是一个过程。你学习,你分享,你不断学习,你分心并编写一个 生命游戏 实现,然后你学到更多。

这个过程就是开源的意义所在:在各个意义上自由发展。所以去找到你的技能树,选择你的超能力,缴纳你的会费,升级,并参与进来。

标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,而且经常同时从事这两个行业。

8 条评论

好文章,Seth。其中一些内容几乎概括了我如何入门。主要只是弄清楚如何自动化我需要定期完成的事情,深入研究事物的工作原理以便我可以自动化它们,并做更多相同的事情。乐趣 + 完成工作。

我肯定会强调与项目建立联系的想法。这不仅仅是订阅邮件列表,不仅仅是加入 IRC,你应该互动。需要一些时间来弄清楚项目中的人物是谁,因为 IRC 上或邮件列表中互动的很多人都只是旁观者。
你想弄清楚你的想法是否对团队有吸引力,这样你就可以贡献一些对别人有用的东西,而不仅仅是对你自己有用。确保你知道你在说什么——如果你认为你知道答案,试着回答邮件列表上别人的问题。在许多情况下,你的答案可能是错误的,或者可能不是最好的答案,但纠正误解是你学习的方式。
被动永远不会有任何进展。

这是一篇很棒的文章。我目前是一名 DevOps 工程师,我非常喜欢我的工作。我曾考虑过进入开发领域。我真的很喜欢软件开发,但我发现很难将我的知识从中级提升到高级,因为对我来说,达到下一个级别似乎是一个障碍。例如,我读过很多关于 Python 的初学者书籍,我对这些概念很熟悉(我甚至每天都使用 Python 进行脚本编写),但高级书籍仍然让我感到困惑。此外,脚本编写很好而且有用,但我很难组织新的应用程序。我可以毫无问题地创建一个脚本,但启动一个包含模块和其他组件的实际程序具有挑战性。你的文章绝对有帮助。

我已经尝试学习 Python 几次了。学习曲线似乎非常陡峭。我对我在我读过的每篇文章中看到的才华印象深刻,我今年 66 岁,并将再次尝试 Python,...签名...."印象深刻的人"。我只想说一点,我认为开源的最大优势之一是它提供了如此多的免费学习机会。

从小处着手。对我们许多人来说,学习像 Python 这样的东西的关键是频率或重复。你使用得越多,你就会越冒险超越你的简单脚本,最终你会修复别人应用程序中的错误,或者构建你自己的应用程序!

回复 ,作者 Dudley (未验证)

嗨,Seth,
每个月,我都会整理网络上最好的内容。我想让你知道我喜欢这篇文章,并将其收录在“2017 年 1 月最佳开源、网络安全和 Web 开发内容”中。感谢这篇精彩的文章。我很高兴与我们的读者分享它。

Matt

谢谢,Matt!真爱 Creative Commons 许可!

你的综述在哪里出现?它是公开的吗?听起来像是我会感兴趣的内容,无论我的文章是否被收录!

回复 ,作者 Matt - Future …

© . All rights reserved.