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

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

Zagrev 在 Flickr 上。 CC BY-SA 2.0

展望科技世界令人兴奋。它有很多运转的部件,而且似乎你越深入挖掘,它就变得越深奥,然后就像 层层叠叠的乌龟 一样。正因如此,科技也令人感到不知所措。如果你热衷于参与并帮助塑造现代世界运作的方式,你该从哪里开始呢?第一步是什么?第二十步是什么?

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

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

你现在有了目标,但后勤保障呢?

技能树

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

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

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

脚本编写

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++。

但归根结底,不要被所有可用的选择淹没。语言叠加得很好。一旦你学会了一种编程语言,并且足够熟练到可以在需要完成某件事时求助于它,你就会发现学习另一种语言容易得多。毕竟,“语言”只是一组语法和规则;学习一种,然后将新规则叠加在相同的理论之上就相当容易了。

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

开源什么?

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

声称软件是开源的是一些软件供应商正在使用的最新营销手段。不幸的是,一些供应商只是意味着他们发布了一个公共 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 工程师,我非常喜欢我的工作。我曾考虑过进入开发领域。我真的很喜欢软件开发,但我发现很难将我的知识从 intermediate 提升到 higher,因为对我来说,达到更高的水平似乎是一个障碍。例如,我读过很多关于 Python 的入门书籍,并且我对这些概念很熟悉(我甚至每天都使用 Python 进行脚本编写),但是高级书籍仍然让我感到难以理解。此外,脚本编写很好而且有用,但我很难组织新的应用程序。我可以毫无问题地创建一个脚本,但是启动一个包含模块和其他组件的实际程序是具有挑战性的。你的文章确实很有帮助。

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

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

回复 作者 Dudley (未验证)

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

Matt

谢谢,Matt!太喜欢 Creative Commons 许可了!

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

回复 作者 Matt - Future …

© . All rights reserved.