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