没有发布过产品的程序员不知道什么是真正的软件
英文原文:Become an exceptional programmer by learning to ship
看起来好的程序员似乎总是短缺;这是为什么编程是如今薪水最高的职业之一。但事实上,程序员从来不短缺的。是公司们总希望市场上有更多的资源可 用,当遇到不同的业务时,他们有更多的余地来找到合适的人。但今天我不是来说这些普通程序员的。我感兴趣的程序员是那些热爱他们的技艺,渴望创造出有意义 的东西的人。
这样的程序员,在开启他的职业生涯时,在尝试进入他中意的公司时,他需要崭露头角。有些公司在招聘是会写一些诸如“我们招聘时考察他们所做的开 源项目”等的话。在我们 Rendered Text 公司的招聘广告里,我们总是会提到这样一个要求:应聘者需要至少有一次发布产品的经验——以开源或其它的形式。这样的话没有上下文通常会让人困惑,所以我 打算把我的意思更详细的说明一下。
这里的“发布产品”指的是什么?
年轻的程序员,由于缺少经验,常常不知道这样的事实:写代码只占一个软件出品过程中很小的一部分。借用 Frederick Brooks 著名的《人月神话》一书里专业的描述:它只是一个软件程序诞生的开始。编码这部分活动很独立,这个过程中没有用户,不跟其它各种软件系统交互。这是最容易完成的一部分工作,因为基本上自己闭门工作,我们可以随时声明代码“完成了”。
而真正要开发出一个软件产品则复杂的多。作为产品,你需要把它打包装箱发布给公众。桌面应用需要方便安装。如果是一个代码 库,你需要完善里面提供的 API,重构代码提供更好的服务,附带测试程序,还有写文档,编写和发布出版说明。当所有这一切完成后,你进入了一个维护阶段:你需要和用户交流,或和一 些开源捐赠者交流。你将重新进入这种开发和发布新版本的过程。
举个例子,在 GitHub 上发布一个音频压缩算法的源代码,这不叫发布产品。而一个程序包,提供了多个版本,被成百上千的开发者下载、使用,这则是一个产品发布行为的明显特征。
大多数的软件都需要跟其它系统进行交互,以此来发挥功能和提供服务。你必须保证你的程序高效稳定。例如,一个 web 应用需要用到数据库和系统内存。起初,从远程 API 提取数据不会有什么问题;而经过一个较长的时间、系统用户增加,如何能容易的升级扩展则是另外一个问题。
好的软件是指在生产环境、在用户手中好用的软件,而发布产品动作就意味着你要开发出好用的软件。所有的软件公司都希望招聘到一个发布过产品的程 序员。但很多程序员,有些有着高超的编程技能,但却只知道闭门编码。当然,公司招聘一个程序员要看很多方面,但如果你曾经有过参与一个软件产品出品全过程 的经验,你绝对是任何一个好软件公司的优选选择。