你不需要计算机科学学位也能参与开源软件工作

开源使软件知识对所有人开放,因此正规培训不是技术职业的唯一途径。
74 位读者喜欢这篇文章。
Stack of books for reading

Opensource.com

我基本上是一名自学成才的程序员。在 1970 年代后期我成长的过程中,我们的小学有一个小型资源室,里面有一台 Apple II 电脑。我和我的兄弟加入了一个喜欢电脑的朋友小组,我们都互相帮助学习系统。

我们表现出了这样的潜力,以至于我们的父母给我们买了一台 Apple II+ 克隆机,叫做 Franklin ACE 1000。我和我的兄弟自学了如何用 AppleSoft BASIC 编程。我们的父母给我们买了书,我们如饥似渴地阅读。我通过阅读书中的内容,然后编写练习程序,学会了 BASIC 的每一个角落。我最喜欢的消遣是编写模拟程序和游戏。

我长期坚持使用 BASIC。我们的下一台电脑是一台 IBM PC 克隆机,上面安装了一个 BASIC 版本。很久以后,MS-DOS 5 推出了 QBasic,这是一个现代版本的 BASIC,最终取消了行号。

当我进入大学时,我开始学习其他编程语言。我是一名物理专业的学生,作为我们的数值分析先修课程的一部分,我们必须学习 Fortran。由于已经学会了 BASIC,我认为 Fortran 很容易上手。Fortran 和 BASIC 非常相似,尽管以我的经验来看,Fortran 的局限性更大。

我的哥哥在另一所大学读计算机科学专业,他向我介绍了 C 编程语言。我立刻爱上了用 C 语言工作!这是一种直接的编程语言,它给了我编写实用程序的大量灵活性。但是我的学位课程中没有空间来学习与我的物理专业无关的课程。所以,相反,我通过阅读书籍和梳理图书馆参考指南自学了 C 语言。每次我想学习一个新主题时,我都会在参考指南中查找它,并编写一个练习程序来练习我的新知识。

我早期使用 C 语言是为了编写新的实用程序来扩展 MS-DOS。我在校园里使用 Unix,但我在家里的电脑主要运行 MS-DOS。我希望 MS-DOS 具有类似于 Unix 提供的增强型命令行功能,所以我编写了自己的实用程序来为我提供额外的功能。

我想我的第一个工具是非常简单的编程练习。我使用像 Unix cat 或 DOS TYPE 这样的程序来显示文本文件的内容,带有额外的命令行选项来添加行号、将制表符转换为空格等等。或者我会使用像 Unix clear 或 DOS CLS 这样的程序来清除屏幕,但也将颜色设置为不同于通常的白底黑字的文本。我还编写了一些新的实用程序来帮助我学习,例如一个程序来查找 Fortran 源文件中的常见错误,一个实用程序来组织目录中的文件,一个过滤器来将 nroff 文件转换为 LaTeX 格式,以及一个程序来拟合穿过 x 和 y 数据点的直线。

凭借这种有限的 C 编程经验,我着手我的第一个大型开源项目。事实证明,如果你不知道你不知道什么,并且对一个项目充满热情,你就可以完成很多事情。这就是我在 1994 年创建 FreeDOS 项目 的方式。

从那时起,我编写、维护或以其他方式贡献了 FreeDOS、Linux 和大型 Unix 上的数十个开源项目。我的第一个贡献是修复 GNU Emacs,使其可以在 DomainOS Unix 系统上正确编译。我还向早期的开源 C 编译器提交了补丁,该编译器专门用于 HP-UX,一个有趣的卡通坦克炮战游戏,一个用于组织 iPod 上音乐的实用程序,以及其他 Unix 和 Linux 程序。在 FreeDOS 上,我编写了当时我们使用的大部分底层代码库,包括 Unix catgets 的实现,因此 FreeDOS 程序可以支持不同的口语语言,而无需重写。

随着时间的推移,我利用我所学到的知识来学习其他编程语言。我编写了大量的 Unix Korn shell 脚本、Linux Bash 脚本和 AWK 脚本。我用 Perl 编写了小型实用程序,后来又为网站编写了 Perl CGI 和 PHP 页面。我学习了足够的 LISP 来调整我的 GNU Emacs 副本,并学习了足够的 Scheme 来处理一个使用 GNU Guile 的项目。我继续为 Linux 和 FreeDOS 编写和分享开源游戏、应用程序、实用程序和工具。

随着我编写越来越多的代码,我的编程水平也越来越高。即使在今天,我仍然在不断学习新事物,并通过 教别人 来巩固这些经验。 我总是尝试新事物。

这就是我的教训。你不需要接受过正规的计算机科学培训或拥有 CS 学位也能为开源软件做出贡献。找到你的热情,你就可以自己弄清楚剩下的事情。重要的是你热爱你所做的事情,并且你愿意与他人分享你的贡献。

接下来阅读什么
photo of Jim Hall
Jim Hall 是一位开源软件倡导者和开发人员,最出名的是 GNOME 中的可用性测试以及 FreeDOS 的创始人和项目协调员。

2 条评论

喜欢这篇文章,继续努力!

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.