我基本上是一名自学成才的程序员。 20 世纪 70 年代末我在成长过程中,我们的小学有一个资源室,里面有一台 Apple II 计算机。 我和我哥哥加入了喜欢计算机的朋友群体,我们都互相帮助学习系统。
我们表现出了这样的潜力,我们的父母给我们买了一台名为 Franklin ACE 1000 的 Apple II+ 克隆机。 我和我的兄弟自学了 AppleSoft BASIC 编程。 我们的父母给我们买了书,我们狼吞虎咽地阅读。 我通过阅读书中的内容,然后编写一个练习程序,了解了 BASIC 的每个角落。 我最喜欢的消遣是编写模拟和游戏。
我在 BASIC 上停留了很长时间。 我们的下一台计算机是一台装有 BASIC 版本的 IBM PC 克隆机。 很久以后,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 和 Big Unix 上的数十个开源项目。 我的第一个贡献是修复 GNU Emacs,以便它可以在 DomainOS Unix 系统上正确编译。 我还向早期特定于 HP-UX 的开源 C 编译器、一个带有卡通坦克的有趣的炮兵游戏、一个在 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 编写和分享开源游戏、应用程序、实用程序和工具。
随着我编写的代码越来越多,我的编程水平也越来越高。 即使在今天,我仍然不断学习新东西,并通过 教别人 来加强这些课程。 我一直在尝试新事物。
这就是我的教训。 您不必接受计算机科学方面的正规培训或拥有计算机科学学位才能为开源软件做出贡献。 找到你的激情,你就可以自己弄清楚剩下的事情。 重要的是你热爱你所做的事情,并且你愿意与他人分享你的贡献。
2 条评论