阅读更多

7顶
1踩

开源软件

翻译新闻 从开源软件开发中体会到的心得

2012-04-23 10:37 by 正式编辑 nemohq 评论(6) 有10099人浏览
Mitchell Hashimoto 是一名开源软件工程师。由他托管到 GitHub 上的开源项目 Vagrant,是一个用于创建和部署虚拟化开发环境的工具。近日,Mitchell撰文讲述了在开发 Vagrant 的过程中学到的有关开源软件开发的一些心得。

以下为原文文章

把 Vagrant 做成一个相当成功的开源项目,这花费了我不少时间。但我从中也学到很多。此前,我并没有看过很多关于开源项目学习的文章,但由于这些知识很重要,因此我想和大家分享一下我的一些关于开源软件的心得。这些心得不仅和软件开发有关,还包含了作为一个开源项目的维护者,如何做好市场推广等方面的内容。

一、和软件开发相关的心得

下面这些是关于软件开发方面的心得:

1、态度友好

这一点是最重要的。有时,你可能会听到一个糟糕的创意,收到的pull requests里面尽是劣质的代码,甚至还要忍受用户的抱怨,尽管他们没有花一分钱。当你遇到这些情况,请记住:即使用户不一定尊重你,你也要尊重用户。我曾经只因为一件事情而大动肝火,但是现在,我可以很自豪的说:无论遇到以上哪种情况,我的态度都会很友好。对用户有一个友好的态度是非常重要的。因为如果你的态度很友好,你会给别人留下平易近人的印象。而用户也会因此向你寻求帮助或参与到你的项目中来,做出贡献。这也正是开源运动的精髓所在。

2、不要为项目设置太过复杂的规则

除非你的项目很庞大,否则你不用太担心贡献者的编码风格。为你的项目设置过于复杂的规则将阻碍开发者参与到项目中来。空格、缩进等等这些编码风格所造成的问题都可以很容易的通过人工来修改。因此你无需为贡献者的编码风格不同而烦恼。相反,你应该感到高兴并接受这些真正优秀的贡献。好了,现在你该知道如何改进你的开源项目了吧?这很简单,接受这些优秀的贡献,做出改变,然后pull request。我一点都不担心编码风格、测试会带来问题。我很乐意看到这些贡献。

3、开发文档的编写是关键

虽然我没有证据证明这一点,但我可以毫不夸张的说:所有首次使用 Vagrant 的用户表示他们之所以选择Vagrant,是因为它的文档很优秀。虽然世界上最烦人的事可能就是编写开发文档,但如果你不能及时的编写文档,那么项目就会存在失败的风险。此外,别忘了开放文档的权限,以便于开发者能方便参与。

4、有明确的沟通方式

IRC(互联网中继聊天)、邮件、论坛……交流方式不限,但你需要为用户提供一个明确的、能得到及时回复(通常在48小时以内效果较好)的沟通方式用以表达他们的观点。对于Vagrant,我总是通过一个IRC频道和邮箱来和用户保持联系,并且效果很好。同时,如果用户和你沟通的方式越多,他们就会越信任你的项目。

5、你并不是什么都懂

有时候,你不可避免的会收到一些功能改进的请求,即便这些功能没有用。对于项目管理者来说,重要的工作是为这个项目指明发展方向,而不是专注于某些微观的具体的功能。这项功能是否于项目的发展相适应?它对用户有用吗?甚至是它对你有用吗?你需要思考这些问题来指导项目的发展。因此,你需要打开思路。因为你的用户比你清楚他们真正想要的功能是什么。但是,别忘了,你比其他人更清楚项目的发展方向。

二、和市场推广相关的心得

现在,你完成了一个软件项目的开发。但是如何让用户了解你的项目呢?下面是我关于市场推广方面的一些心得:

1、Hacker News

Hacker news 社区喜欢尝试新鲜事物,而且那里有很多的开发者。因此,你可以把项目提交到那里,同时标明你已经准备好回答任何问题。态度友好一些,因为你可能会被用户诘难。

2、和优秀的博客站点接触

几乎在每一个社区,特别是Ruby社区里有很多优秀的博客。它们乐于分享用某项特殊的语言或方法开发的很酷的项目。找到这些博客,并和博主联系,邀请他们参与到你的项目中来。这样做会有2个益处:如果他们愿意参与,那么你的项目不仅能得到更多的关注,而且你的想法也能得到更好地检验。

3、在聚会上做演讲(参加正式会议之前)

参加一些当地对你的项目感兴趣的聚会,并发表演讲。如果你是第一次参加,可以提前为演讲做好准备。不要通过在项目里添加手册的方法来宣讲你的项目,你应该把这个项目的发展方向当面展现给公众。如果你是第一次做演讲,就不要立即参加某些正式的会议,因为公众会记住你出丑的样子,下一次想要再做演讲就会变得困难。选择在聚会上做演讲则是一个比较好的方式。而且,在聚会上,你可以从真正关心项目的开发者那里得到一些重要的反馈。

4、在正式会议上做演讲

参加过一些聚会之后,就可以在区域会议上发言了。这些会议通常规模较小,但是主题很好,而且与会人员不会因为你糟糕的谈吐而轻视你。同时,大型会议也不可能允许你就一个新的项目发表演讲。好了,现在你有机会站在众人面前发表一场40分钟的演讲。在演讲之前,要确保你做好了准备。演讲时注意微笑,向公众展示你的理想并记下你收到的建议。

5、在大型会议上做演讲

现在,我要讨论的是像VelocityConf 或 QCon这种类型的大型会议。主办方将会让你在更多的人群前发表演讲(通常在500人以上),而且听众都是极其优秀的业内人士。如果你的项目对于听众来说较为陌生的话,你最好准备一个成功的案例来说明。而且这个案例最好来自于用户,这样才能证明项目的优秀性能。这些大型会议通常都会吸引一些重量级人士的参与(CIO、技术副总裁等等)。

三、有关软件工程方面的知识

在软件发布之前,有很多工作要做,以下是我关于软件工程方面的心得:

1、测试

我不认为这个有必要详说,但因为它是如此的重要,所以我还是要再发表一下看法。测试不是可有可无的工作。你必须及早的进行,并经常测试。此外,不要忘了集成测试。我曾做过很多的集成测试,而它们在 Vagrant 发布之前都是最有价值的测试。虽然单元测试能很快的捕获基本的错误,但是集成测试却能在版本发布之前找到最重要的错误。

2、尽快支持Windows平台

Vagrant对 Windows系统的支持非常棒。虽然 Vagrant 现在功能很强大,但之前它却是一个噩梦。因为最初有很多开发者都不在 Windows 平台上工作,代码中多处函数都无法在 Windows 上运行。当时我简直不敢想象为了支持 Windows 我们要做多少工作,因为你要在基础代码中做出大量的修改。此外,还有很多 Windows 的开发者想要使用 Linux 风格的工具。

3、避免使用外部函数调用接口(FFI)

这更多是Ruby方面的事。Ruby的FFI库没有C标准库那么简单。我曾经在FFI上花了18个月的时间。或许我是最频繁使用FFI的一员?让我头疼的是FFI库定期升级更新,甚至更行到发布的补丁版本。有时候我清醒的发现仅仅是由于FFI的编译问题,Vagrant就不能在 Windows 上正常运行了。此外,我还发现在使用FFI的时候,callback函数的运行和内存管理变得很困难。在Vagrant 0.9版本以前,都存在严重的内存泄露问题。最后,我放弃了FFI,改用其它更好的库,现在,Vagrant又可以调用C标准库了。

4、和参与维护的开发者交朋友

每一个对某个函数库了解甚深的开发者都会在那个函数库里找到Bug。纵观整个Vagrant的开发历程,我曾在每个使用过的dependency里发现过Bug。我和所有的参与维护的开发者都有良好的朋友关系,因此,当出现问题时,我能很快的问:“这是你的Bug吗?要多长时间才能修复它?”。最坏的结果可能是在一个dependency里有一个Bug,但维护者既不修复它也不发布更新后的版本。

虽然我依然有很多知识要学习,但希望这些点滴经验能帮到那些正在做开源工作的开发者。

英文原文:Lessons Learned Building Open Source Software
7
1
评论 共 6 条 请登录后发表评论
6 楼 ray_linn 2012-04-25 14:31
..汗...竟然不知道 ASAP 的缩写。。
5 楼 nemohq 2012-04-24 17:45
allenny 写道
译者: ASAP的意思是as soon as possible


“尽可能的支持 Windows ”,学习啦,小编还以为是微软的一款应用呢。谢谢您啦。小编会尽快做出修改。
4 楼 allenny 2012-04-24 15:03
译者: ASAP的意思是as soon as possible
3 楼 邪恶的喵呜 2012-04-24 15:02
毛开源项目,没听说过此地有啥开源项目,各位听说过么?
2 楼 nick.s.ni 2012-04-24 12:00
用GlassFish V3,3,3.1.2竟然同樣的代碼產生不同的錯誤,開源有時就是用time->money
1 楼 ray_linn 2012-04-23 16:30
libffi 讨厌的地方在于不但和平台相关,还和编译器相关。。基本没啥用

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Office办公软件“三剑客” 玩转表姐、Word哥、屁屁踢!

    本套Word、Excel、PPT三件套视频教程由浅入深、循序渐进地介绍了Word2016、Excel2016、PPT2016基础操作,office办公常用技巧以及一些独门绝技!

  • 《博哥玩Arduino》-蓝牙小车

    1.前言     一直对小车情有独钟,大学的时候做过一...近来兴趣兴起,又重新捣鼓一下单片机,萌发重新做一辆小车,初定手机蓝牙控制(因为蓝牙模块便宜,其实是因为穷),可以充分利用现在人手一部的android手机...

  • 《博哥玩Arduino》- 蓝牙七彩灯基础版

    文章目录1.前言 1.前言 很久以前在其他平台发布了一些帖子,趁着有时间就同步到一起。这里主要是做一个蓝牙版本的RGB灯。

  • 《博哥玩Arduino》- 蓝牙模块HC06 重命名

    最近在研究蓝牙RGB灯,因为有多块蓝牙模块,然后由于名字是一样的,导致都不知道手机蓝牙到底连接到哪一块去了。那么就意味着 我们需要一个标识来区分蓝牙模块,这就意味着每个蓝牙模块应该可以自定义自己的名字,...

  • 江哥带你玩转C语言 02- 创建第一个C语言程序

    原因是当年C语言的作者Dennis Ritchie(丹尼斯 里奇)在他的名著中第一次引入, 传为后世经典, 其它语言亦争相效仿, 以示敬意 如何创建C语言文件 C语言程序组成 手机有很多功能, “开机”,“关机”,“打电话...

  • 超哥带你玩转正则表达式连载(一)

    匹配1开头11位数字的手机号码: ^1\d\d\d\d\d\d\d\d\d\d$ 问题:你会发现如果需要匹配重复的数字或字符,我们的正则需要重复的去写,很麻烦,且重复的次数只能跟着表达式固定的个数走,比如8位只能写8个\d,如果是5-...

  • 超哥带你玩转正则表达式-连载(二)

    今天咱们讲了重复限定符和分组,这两个在正则表达式中都很常用,希望大家能够多练习,做到熟练操作,如果学习过程中有任何问题可以联系超哥,点个关注不迷路,干货看个够。 北京橙好科技,SuperTesting,测试提升...

  • 明哥手把手《闲鱼快速入门指南》电子书!!

    之前分享过几篇文章,关于闲鱼的:闲鱼选品最近的一个爆款,会玩的直接赚翻~~闲鱼选品我使用的4个网站,附赠20个流量密码关键字!闲鱼选品的6个维度,附赠35个爆款品类!收藏|闲鱼单天112w...

  • 菜鸟哥玩蓝牙Ble4.0系列 ESP32初玩篇⑤ GATT —— 连接数据通信之Server模式

    可喜可贺,终于到初玩篇最后一章,基本上到这一讲,整个Arduino ESP32 Ble核心内容都过了一遍。

  • 超哥带你玩转正则表达式-(六)

    超哥带你玩转正则 目录 (一)一句话弄明白你的疑问 (二)正则表达式啥玩意? (三)正则表达式的语法(第一招) 1.元字符 2. 重复限定符 3. 分组 4. 转义 5. 条件或 6. 区间 (四)练练手 (五)正则表达式的...

  • 微信多开设置网络代理服务器,还在玩微信双开吗?你out了,哥教你三开四开无数开...

    今天,哥偷偷告诉你一个比微信双开还牛B的方法,保证可以让你在网络世界里令人景仰。首先,你得有一台安卓手机;同时,手机上还得安装一个叫做应用市场的东东。然后,在应用市场上下载:微信多开助手、双开助手、平....

  • 小码哥-玩转【斗鱼直播APP】系列之利用青花瓷抓取数据

    利用青花瓷抓取数据 青花瓷是什么? ...注意: 手机和电脑必须在同一个网段下面(同一个Wifi环境即可)首先打开青花瓷软件打开Mac系统偏好设置—> 网络 —> 查看自己的IP地址(作为程序员找不到这个

  • 手机能打开的表白代码_小游戏推荐:打开手机就能玩的6款高分小游戏

    大家好,我是琛哥。目前最受欢迎的手游莫过于《和平精英》、《王者荣耀》、《第五人格》、《阴阳师》等了,《王者荣耀》更是一款国民现象级手游,上至中年大叔,下至三岁小孩,都在玩儿。但是这些游戏有一个缺点就是...

  • 平头哥 BeagleV-Ahead TH1520 RISC-V 高性能开发板开箱硬件评测

    平头哥的TH1520 Soc 是一款低功耗、高性能、高安全、多模态感知和多媒体AP 能力的AI 处理器芯片,可用于视频会议一体机、人脸识别考勤门禁、医学成像等AI 边缘计算应用场景。基于多核异构架构,集成RISC-V 指令架构...

  • 菜鸟哥玩蓝牙Ble4.0系列 ESP32初玩篇② Advertising ——广播发现,了解BLE广播的方方面面

    BLEAdvertising主要负责执行和管理整个广播过程 BLEAdvertisedDevice主要代表一个被扫描功能扫描出来的广播设备 回到上一讲 菜鸟哥玩蓝牙Ble4.0系列 ESP32初玩篇① Scan —— 扫描周边蓝牙 说到,Scan最终会扫描到...

  • 【C进阶】鹏哥带你玩转 · 字符串和内存函数

    前言: 前段时间状态不好,所以已经有24天没有更新了,打开手机有很多铁子的消息没有及时回复,这几天正在陆陆续续回,实在抱歉,感谢大家的支持与陪伴,现在的话我正开始慢慢追,一起加油。 一、常见字符串库函数...

  • 老宇哥带你玩转 ESP32:14 亲自动手做一个双向通讯的无线遥控器(一)

    相信每个玩电子的童鞋对无线通信都非常感兴趣,从孩童时期的无线遥控赛车,到学生时期的收音机,到长大后接触的各种无线控制的家电,手机等电子产品,无线通信让我们可以像神话小说中的某些绝技,可以做到隔空控制,...

  • 鱼哥,我怕蛇,可以搞Python么?

    这是一个后台读者给鱼哥留的言,不知道是逗我玩,还是真的因为怕蛇,不敢学Python。他说最近买了几本Python书,都是大蟒蛇封面,半夜放在桌子上,有时半夜用手机打灯路过桌子去洗手间,灯光反射到封面上,吓死他了。...

  • android双清步骤,手机双清教程

    手机双清教程对刷机感兴趣的朋友们一定看过了不少的刷机教程,不过一般刷机教程都要求刷机前要双清,很多朋友对此有疑惑刷机为什么要双清呢?感兴趣的你可不要错过了哦,希望本文对你有所帮助。方法/步骤什么是双清,...

  • Java系统源码+科研工作量管理系统

    Java系统源码+科研工作量管理系统 内容概要: 本资源包含了完整的Java前后端源码及说明文档,适用于想要快速搭建并部署Java Web应用程序的开发者、学习者。 技术栈: 后端:Java生态系统,包含Spring Boot、Shiro、MyBatis等,数据库使用Mysql 前端:Vue、Bootstrap、Jquery等 适用场景示例: 1、毕业生希望快速启动一个新的Java Web应用程序。 2、团队寻找一个稳定的模板来加速产品开发周期。 3、教育机构或个人学习者用于教学目的或自学练习。 4、创业公司需要一个可以立即投入使用的MVP(最小可行产品)。

Global site tag (gtag.js) - Google Analytics