展望科技世界令人兴奋。它有很多运转的部件,而且似乎你越深入挖掘,它就变得越深奥,然后就像 层层叠叠的乌龟 一样。正因如此,科技也令人感到不知所措。如果你热衷于参与并帮助塑造现代世界运作的方式,你该从哪里开始呢?第一步是什么?第二十步是什么?
首先要理解的是,开源是开放的。这似乎是显而易见的,但“开源”这个词现在被如此频繁地使用,以至于有时人们会忘记它只是一种文化现象的描述,而不是一家财富 500 强公司的名称。与其他工作或群体不同,你无需面试或填写注册表或登记表即可成为一名开源程序员。你成为开源程序员所要做的就是编程,然后分享你的代码,理想情况下要保证代码保持开放,无论它如何被使用。
就是这样。你就是一名开源程序员了!
你现在有了目标,但后勤保障呢?
技能树
你玩过角色扮演游戏吗?在这些游戏中,有线性“技能树”的概念。当你玩游戏时,你会获得基本技能,你在此基础上“升级”并获得新技能,你使用这些技能来获得新的技能并再次“升级”。以此类推。
成为一名程序员有点像添加到你的技能树。你获得一些基本技能,你练习它们直到成为第二天性,然后你获得新技能,依此类推,然后你在你选择的技能树上进步。
你会发现你会遇到不止一个技能树。开源有许多入口点,并且有许多拥有自己独特优势、才能和兴趣的个人。然而,某些可定义的技能有助于成为一名伟大的程序员,而发展这些技能是成功参与开源项目的重要组成部分。
脚本编写
像 Linux 或 BSD 这样的 POSIX 系统最大的优势之一是,每次你使用电脑时,你都有机会练习一点编程。如果你不知道从哪里开始编程,那么就从你的工作方式开始。找到你每天执行的重复性任务,并开始自动化它们。这一步可以是一些简单的事情,比如转换或调整批量照片的大小、检查电子邮件,甚至只是让你每天使用的五个应用程序一键启动。无论是什么任务,花时间为自己自动化一些事情。
如果你可以从终端执行某些操作,那么它就可以被编写成脚本。学习 bash
或 tsch
,让系统脚本编写成为你编写代码以及了解系统如何工作的入门。
系统管理员
从这一点出发,你可以继续成为一名程序员,或者你可以跨越到完全不同的技能树:系统管理。这两个职业有一些重叠(一位优秀的系统管理员应该有一些编程经验,并且应该准备好使用 Python、Perl 或类似的语言来开发独特的解决方案),但程序员是日复一日用代码构建东西的人。
程序员
开源是学习编程技能的好方法;你可以查看其他人的代码,借鉴想法和技术,从他们的错误中学习,获得对自己代码的评论,如果你使用 Linux 或 BSD,整个 堆栈对你都是开放的——只要你的目光所及,一切都供你取用。
无论如何,旅行手册上是这么说的。现实情况是,你可能不会开始深入研究项目的源代码,然后从另一边出来,突然意识到你意外地学会了编码。编程是艰苦的工作。如果不是这样,每个人都会去做。
幸运的是,编程是合乎逻辑且结构化的,因此它会自我构建。你可能不会偶然爱上编程,但你越是尝试它,你就越开始理解它。
了解如何控制和自动化计算机是一回事,但知道如何编写其他人想要自动化的东西是你跨入编程领域的关键。
多语言
所有编程语言的目标都是做同样的事情:让计算机计算。选择一种语言是将你认为你想做什么、你所针对的行业中(如果有)常用的语言以及你碰巧最容易理解的语言(考虑到你可用的材料和你的学习风格)混合在一起。
通过一点研究,你可以很好地了解一种语言的复杂性,然后根据你自己的舒适程度决定先尝试什么。
选择语言的另一种方法是查看你的目标,找出是否有人在朝着相同的目标努力,然后查看他们正在使用什么。如果你的目标是开发桌面工具,你可能会学习 C 和 Vala,或者 C++。
但归根结底,不要被所有可用的选择淹没。语言叠加得很好。一旦你学会了一种编程语言,并且足够熟练到可以在需要完成某件事时求助于它,你就会发现学习另一种语言容易得多。毕竟,“语言”只是一组语法和规则;学习一种,然后将新规则叠加在相同的理论之上就相当容易了。
主要目标是学习一种语言。选择对你来说有意义的语言,或者最吸引你的语言,或者你的朋友正在使用的语言,或者你最容易理解其文档的语言,但专注于一种并学习它。
开源什么?
无论你只是在学习编程,还是只是刚开始接触开源的老手,在头脑发热地投入这个勇敢的新世界之前,你需要了解是什么让开源成为“开源”。
声称软件是开源的是一些软件供应商正在使用的最新营销手段。不幸的是,一些供应商只是意味着他们发布了一个公共 API,或者他们对用户的建议持接受(“开放”)态度。“开放”这个词没有商标,也没有委员会管理如何或何时使用这个词。然而,由已故的 Debian Linux 的 Ian Murdock 共同创立的 开源促进会 定义了 开源的含义(“允许软件被自由使用、修改和共享的许可证”),并正式批准和 跟踪 被认为真正“开放”的许可证。
将这些许可证之一应用于你的代码,你就是一名开源程序员了。恭喜你!
社区
询问任何一位开源爱好者,他们都会告诉你,关于开源软件最重要的事情是人。没有积极的贡献者,软件就会停滞不前。计算机需要用户、错误报告者、设计师和程序员。
如果你想加入或培养全球开源社区,你需要成为社区的一部分,即使你不是一个善于交际的人。这通常包括订阅邮件列表、加入 IRC 频道或进入论坛,并从最底层开始。任何成熟的社区都已经存在足够长的时间,见证了有希望的成员来来往往,所以你必须明白,当你昂首阔步地走进社区,准备改变他们的世界时,在他们都同意你的宏伟计划之前,你必须证明你不会在三个月后当互联网另一端的闪光点吸引你的眼球时消失。如果你渴望成就大事,就要做好长期奋斗的准备。
如果你只是想伸出援手,那也是可以接受的。我自己也向项目提交过小的补丁,有时项目负责人认为这些补丁很好,有时他们会拒绝它们。如果被拒绝的补丁对我来说很重要,我会为自己和客户维护它,否则我会继续前进。
这是过程的一部分。
这些社区存在于哪里?这取决于项目。有些项目有专门的社区经理,他们帮助将每个人聚集在公共空间,供所有人看到。其他项目围绕论坛形成,使用邮件列表,甚至问题跟踪器。寻找社区,你就会找到它们。
但同样重要的是,也要查看代码!他们称之为开源“源代码”是有原因的,所以一定要找到代码并看一看。即使它仍然超出你的完全理解水平,它也会让你了解软件项目如何组织自身,以及他们可能需要在哪里获得帮助。代码是如何组织的?代码有注释吗?它的风格是否整洁一致?查看文档,特别是 README、LICENSE 或 COPYING 文件。
不要低估信守开放代码承诺的重要性。这是你参与其中的原因,所以从各个角度批判性地审视它,看看你能从中学习到什么以及你可能如何做出贡献。
找到最佳社区很像约会,但具体来说,它就像在 土拨鼠日 中约会。这需要时间,最初几次尝试可能会失败。你经历的过程越多,你就越开始感到似曾相识。但最终,你会对自己和自己的兴趣了解得足够多,你会找到合适的其他人的组合,然后你在某个地方安顿下来。要有耐心,让它自然发生。
行动 > 言语
成为一名开源程序员是关于代码的(开源的“源代码”部分),而想法一文不值。真正有说服力的是产出。你需要展示你知道自己在做什么,愿意亲力亲为,将你的时间投入到项目中,并且可以用可以编译的东西来支持你的想法。
当然,为了有效地做到这一点,你应该对项目本身做功课,包括了解项目喜欢如何接收提交以及哪些分支是稳定分支和开发分支。
接近入门的方法
- 熟悉一个项目及其开发文化,并尊重它。
- 编写补丁、错误修复或小的、请求的功能,并提交它们。
- 如果你的工作被拒绝,不要气馁。你不是被个人拒绝,而是你的工作被评估了,开发团队做出了决定。
- 如果你的工作被接受了,但被改得面目全非,也不要气馁。
- 冲洗,重复,并尝试新的和更大的更改。
开源中没有排行榜。有些网站试图让它看起来好像他们有这样的东西,但实际上并没有。参与、贡献、添加到想法池中、添加到提交存储中,你就做对了。
发展
在任何环境中编程,最终总是关于个人发展。无论你是在寻找解决问题的新方法,寻找优化代码的新方法,学习一种新语言,还是学习如何更好地与他人相处,你永远都不想停止成长。你越发展自己,项目就越受益。
成长,无论是个人方面还是职业方面,都是列表中的最后一个,但它实际上贯穿了整个过程。成为一名开源程序员不像获得一份政府工作;这是一个过程。你学习,你分享,你不断学习,你分心并编写一个 生命游戏 的实现,然后你学到更多。
这个过程就是开源的意义所在:在各个方面的发展自由。所以去寻找你的技能树,选择你的超能力,支付你的会费,升级,并参与进来。
8 条评论