学习的力量,改变的自由,以及创新的推动。开源软件有什么理由不让人喜爱呢?开源世界由一群充满激情的个人组成,他们在各自的家中辛勤工作,都对编程的未来抱有相同的愿景:开放和协作。
一旦你开始参与开源软件,你将永远不想停止。你将遇到的人,你将学到的技能,你将共同开发的惊人产品——所有这些都促成了一种伟大的成就感。凭借开放协作的力量,一切皆有可能。
我是如何开始进入开源世界的
几年前,在我大学修完第一门编程课程后,我在那门课上学习了 Ada 编程语言,并在 Ubuntu 上使用 Vim 作为我的文本编辑器进行编程,我被介绍到一个我从未见过的全新世界。我之前听说过 Linux,但我和许多其他人一样,对这个操作系统的印象是可怕的命令行。
这门入门课程在很多方面都让我大开眼界,因为我不仅第一次学习编程,还学习了如何使用 Linux、Vim 和 GNU Make。每周有几次熬夜完成课程的编程作业后,我觉得最好让自己更舒适地使用我的编程环境,这样我可以更多地专注于 struct 是什么,而不是如何在 bash 中将文件移动到新目录。
我开始在网上阅读一些小文章,尽可能地获取信息,以便入门。我会搜索“为什么要使用 Linux 而不是 Windows”、“什么是 Ubuntu”、“什么是 Vim”以及其他一些问题,作为回报,我得到了论坛、维基百科文章和 ISO 镜像下载。我发现的一个网站是Why Linux is better,我立刻被吸引住了。多年来,我对 Windows 总是有很多不满,而这个网站向我展示了,只需在我的机器上安装 Linux 操作系统,所有这些不满都会得到解决。不再需要磁盘碎片整理,不再需要每隔几个月重新格式化/重新安装,不再需要昂贵的缓慢臃肿的软件,不再需要病毒软件会员资格,不再需要将速度太慢而无法运行最新操作系统版本的废旧电脑扔进垃圾填埋场。这一切对我来说都是悦耳的声音... 然后我发现它是免费的,它是安全的,而且它是快速的。它是开源的!
“我长大后想成为一名开源开发者。”
开源?什么是开源?经过更多的搜索,我很快发现 Linux 的开发和维护不是来自一家为了盈利而构建平台的公司,而是来自世界各地相信 Linux、相信经济实惠的计算理念、相信一个开放的世界,所有代码都公开供其他人审查、学习、保护和发展成为比原来更好的东西的个人的协作。
开源软件让计算的未来掌握在人民手中,而不是营销策略手中。开源软件鼓励创新,创造出始终优于以前版本的产品。开源软件让生活贫困的年轻学生能够受到他们创造力的影响,而不是他们为了购买一台带有文字处理器的电脑来写下一部伟大小说而必须支付的价格。开源软件是一种将充满激情的人们聚集在一起,共同提出未来伟大创意的理念。
你可以理解为什么我立刻爱上了开源世界,并且只想积极参与这个社区。
我的第一个拉取请求让我着迷
我开始积极参与开源软件的第一步是创建我的 GitHub 帐户。我浏览了 GitHub 上的trending list(我现在仍然这样做)好几个月,为我希望有一天能贡献的项目加星标。我总是期待着有一天我感觉自己有足够的知识和技能为这些项目编写代码。我很失望我无法立即加入并开始。我害怕维护者会把我写的代码撕成碎片,并说我的新手技能在他们的项目中是不需要的,或者说这个项目一开始就太复杂了,我无法理解,更不用说添加功能了。由于这些恐惧,我继续等待,直到我获得更多经验。
我在网上阅读了关于开源软件的力量以及驱动它的社区的故事。我了解了编程大会,例如 LinuxCon、RacketCon、Strange Loop 和 AnDevCon——仅举几例——以及 Linux 用户组 (aka LUG),在那里你可以与为开源项目做出贡献的鼓舞人心的人们面对面交流。我开始参加当地 Linux 用户组的会议,最终我成为了执行团队的一员。但我仍然处于所有行动的幕后。我想成为行动的一部分,所以我决定,为了开始编写开源软件,我必须编写开源软件。
直到我决定鼓起勇气并真正开始编写代码的那一刻,我才意识到这真的就那么简单。当时我正在阅读 Dennis Ritchie 和 Brian Kernighan 的《C 编程语言》,以便为我的网络和操作系统课程以及我自己的兴趣学习 C 语言。我需要一份该语言的参考表,以便将来快速查找,我在那里找到了learnxinyminutes.com,一个网站,正好托管了我正在寻找的内容。在阅读我的书时,我注意到这份珍贵的参考表缺少一些我认为重要的 C 语言部分,所以我进行了探索,希望能找到作者的联系方式,但我发现的是Learn X in Y Minutes 是开源的!
由于我在 Banno 的实习和几个课堂项目,我对 git 相当熟悉,而且我的 GitHub 帐户孤零零地坐在那里,渴望得到一些行动,所以我决定添加一些内容并创建一个拉取请求。在为 C 文档添加了相当多的材料后,我屏住呼吸,点击了按钮...
然后我的心脏开始砰砰直跳(真的),我好几个小时都无法集中注意力,因为我满脑子想的都是我的代码会被标记为毫无价值,或者我会受到项目维护者的骚扰,嘲笑我的新手天赋。所有这些都是为了发现社区实际上非常友善。我编写并请求合并到项目中的代码确实有一些错误(我很快发现始终在提交拉取请求之前仔细阅读一遍)。但是,它并没有受到丝毫的批评。每个人最终都评论了我所有的错误,并帮助我朝着将我的代码合并到主项目而努力。开源项目维护者希望你的源代码进入主项目,无论你有多丰富的经验!因此,在修复了我所有的错别字和一些小的语法错误后,我的拉取请求被合并到主分支中,供全世界看到。我去了我贡献的参考表,看到了我的代码在线并可供所有人学习。我感动了,我受到了鼓舞,我着迷了。
在接下来的几个月里,随着我学习更多语言,我最终为 Learn X in Y minutes 贡献了相当多的代码。随着我的经验和贡献的增长,我的最初恐惧开始消退,我的错误自然而然地减少了。最终,我成为了 Learn X in Y Minutes 的贡献者,可以阅读来自世界各地其他开源贡献者的拉取请求,他们希望帮助该项目。仅仅为这一个项目做出贡献就让我非常兴奋,每天都登录 GitHub,因为我们的社区充满了感激的开发者,他们相信 Learn X in Y Minutes 是提高或刷新你的编程语言知识的最佳网站。这让我希望有一天我的项目也能发展出一个像它一样的社区。
攻读计算机科学学位
再过一个学期,我就要在北爱荷华大学完成计算机科学理学学士学位。开源软件是我从几乎没有编程知识到对软件工程产生永无止境的热情的一个重要原因。凭借互联网上活跃的大型编程社区,我能够找到我的常见问题的解决方案,这反过来帮助我成为课堂上更好的计算机科学家,同时也帮助其他人做到这一点。
当我开始大学第一年时,我拥有一家网站开发业务,专门为当地小型企业从头开始创建网站。在大学里,我参与了创业讲习班,并加入了校园企业孵化器,在那里我有机会在优秀的员工和免费办公空间的帮助下进一步发展我的业务。作为一家初创公司,同时也是一名大学生,我没有资金来支付昂贵的软件或硬件设备来开发客户的网站。幸运的是,我人生的这个阶段与我对开源软件的发现不期而遇。
在用Gimp替换我的 Photoshop 软件,用GnuCash替换我的 QuickBooks,以及用 Xubuntu替换我的 Windows 7 安装后,我能够以经济实惠的方式为我的客户创建网站,而没有业务费用的压力。然后,我决定让我的业务 100% 开源,服务器上运行的所有软件都将是开源的,每一行代码都将仅使用开源软件以开源语言编写,并且所有创建的图形都将使用开源软件完成。我把自己宣传为一家开源公司,即使我的大多数客户都不知道这意味着什么,所有这些都是为了传播开源软件以及我的业务将提供的开放性。不幸的是,对于这项业务来说,我最终终止了它,因为我对网站开发失去了兴趣,并爱上了软件开发,但我仍然希望在未来看到更多这样的企业来支持。
在大学二年级期间,我选修了一门软件工程课程。我和四名队友一起,花了一个学期与一位客户(实际上是我们的教授)会面,并为他的需求构建了一个定制的软件应用程序。我们每隔几周与客户会面一次;他会要求我们提供新功能、进度更新,有时他会改变主意,让我们保持警惕。我们必须创建的软件是一个个人监控软件,用于:在网络摄像头检测到运动时录制视频片段,将视频片段上传到在线托管服务,然后向客户发送电子邮件,其中包含有关检测到的运动事件的详细信息。
团队中的每个人都刚刚完成我们的第二个学期编程课程,并且只有非常基础的编程知识和经验。在第一次与客户会面后,我们陷入了恐慌,因为我们当时的知识范围是如何创建链表或二叉堆,而不是功能齐全的运动检测软件。但幸运的是,我有一个游戏计划帮助我们完成了项目!我的计划当然是开源软件。
我们的项目VSAS software(视频监控警报系统),是用 Python 2.7 编写的,并借助了以下开源库
由于这些开源库,我们的紧张情绪得到了缓解,我们能够实现所需的运动检测和视频录制功能。在完成所有文档、客户会议、研究和开发之后,我们将 VSAS 软件交付给了我们的客户(我们的教授)。他的反馈是,这是他在这门课程中见过的最好的项目。
在开始这个项目之前,我们所有人只有一年的编程经验。因此,完成这个软件让我感觉我可以创造任何东西!
从我开始探索开源,到我的编程入门课程,再到我大学生涯的其他冒险经历,我已经爱上了开源软件开发。它给了我机会获得更多的知识和经验,与他人一起构建非常酷的软件应用程序,为学生的开销省钱,并参与到一个由才华横溢的软件工程师组成的全球社区,他们每天都在激励着我。最令人兴奋的是,这仅仅是开始!
1 条评论