從開源軟件開發中體會到的心得

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 ASAP

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451861.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451861.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451861.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

學成在線--25.課程圖片管理(圖片查詢)

文章目錄一. 需求分析二. API三. 服務端開發1. Dao2. Service3. Controller四. 前端開發1. API方法2. 頁面一. 需求分析 課程圖片上傳成功,再次進入課程上傳頁面應該顯示出來已上傳的圖片。 二. API 在課程管理服務定義查詢方法 文件位置:xcEduServic…

redux源碼解讀

背景 因為就得去實習了。所以打算開始補補坑。比如自己閱讀源碼的計劃。所以今天來聊聊redux的源碼。后續會有redux-thunk和react-redux的源碼閱讀。搞定這些的話,就開始閱讀一個node的庫的源碼了,比如eventproxy和anywhere。 開始 總覽, redux的文件結構…

sql語句update中多個case/when的寫法

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 又如: update xxxx_xxxx set xxx_typeCASE WHEN xxx_type 0 THENYXLX-0WHEN xxx_type 1 THENYXLX-1WHEN xxx_type 2 THE…

Redis-ha(sentinel)搭建

服務器描述:本次搭建是用來測試,所以是在一臺服務器上搭建三個redis服務(一主兩從) 服務角色 端口 Redis.conf名稱 sentinel配置文件名稱 sentinel端口 redis日志路徑 sentinel路勁 主(master) 6379 redis.conf sentine…

學成在線--26.課程圖片管理(圖片刪除)

文章目錄一. 需求分析二. API三. 服務端開發1. Dao2. Service3. Controller四. 前端開發1. API方法2. 頁面1.before-remove鉤子方法2.handleRemove鉤子方法一. 需求分析 課程圖片上傳成功后,可以重新上傳,方法是先刪除現有圖片再上傳新圖片;…

警惕開源代碼庫中的安全隱患

最近的一項研究發現, 在調查的31個流行庫(框架)的1261個版本中,超過三分之一存在已知的安全漏洞,大約四分之一的下載文件已經被污染。 該項研究由Aspect Security和Sonatype發起。Aspect Security是一家評估軟件安全漏…

jsp注釋

jsp注釋 <%--注釋內容--%> html注釋 <!--注釋內容-->

線程間的協作(3)——管道輸入/輸出流

2019獨角獸企業重金招聘Python工程師標準>>> 1.管道輸入/輸出流類 分為兩類&#xff0c;字節流管道類&#xff08;PipedInputStream/PipedOutputStream&#xff09;和字符流管道類&#xff08;PipedReader/ PipedWriter&#xff09;。這兩個IO流實現了可以在不同的任…

windows簡易版本 Redis 使用 demo樣例(ssm框架下)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 在網上下載 windows 版本 的Redis 。下載了直接解壓出來 &#xff1a; 2. 雙擊 redis-server.exe 啟動服務&#xff08;如下圖&#…

Redhat7.3安裝配置Telnet詳細教程

請參考&#xff1a;https://blog.csdn.net/weixin_39934520/article/details/84835949 謝謝樓主分享&#xff01;

程序員的半衰期只有15年?

曾在Google工作負責過技術工作的科技編輯 Matt Heusser總結了他在Google的生活經歷&#xff0c;得出結論&#xff1a; 作為程序員&#xff0c;你只有15年時間。Matt 寫道當我在Google工作時&#xff0c;發現Google大部分人都是20出頭的年輕人&#xff0c;他們經歷的很多事情都是…

EasyNVR、EasyDSS二次開發之:RTMP、HLS流在web頁面進行無插件播放示例Demo代碼

不管是基于EasyNVR還是EasyDSS&#xff0c;都是支持無插件直播&#xff0c;這也是未來視頻直播的一個趨勢。對于傳統的瀏覽器插件播放誰用誰知道&#xff1b; 以上是軟件自帶播放展示 背景需求 對于EasyNVR和EasyDSS的使用方式大概分為兩大類&#xff0c;一類是直接將軟件作為視…

jsp中%@ % 與% % 與%! %

<% %> 有個符號的&#xff0c;叫做指令用來提供整個JSP 網頁相關的信息&#xff0c;并且用來設定JSP網頁的相關屬性&#xff0c; 例如&#xff1a;網頁的編碼方式、語法、信息等。<% %>這個叫做小腳本&#xff0c;是寫java代碼的<%! %>這個是jsp中腳本聲明&a…

Hadoop的學習路線圖

目錄&#xff1a;.1.Hadoop家族產品2.Hadoop家族學習路線圖 Hadoop家族產品截止到2013年&#xff0c;根據cloudera的統計&#xff0c;Hadoop家族產品已經達到20個&#xff01;接下來&#xff0c;我把這20個產品&#xff0c;分成了2類。?第一類&#xff0c;是我已經掌握的?第二…

new TypeToken<List>>(){}.getType() 是什么意思

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 項目中代碼&#xff1a; List<AppVersion> redisList new Gson().fromJson(json, new TypeToken<List<AppVersion>…

11--移除重復節點

編寫代碼&#xff0c;移除未排序鏈表中的重復節點。保留最開始出現的節點。 示例1: 輸入&#xff1a;[1, 2, 3, 3, 2, 1] 輸出&#xff1a;[1, 2, 3] 示例2: 輸入&#xff1a;[1, 1, 1, 1, 2] 輸出&#xff1a;[1, 2]

信息圖:程序員/開發人員實際在用哪些工具

BestVendor.com的工作人員在全球范圍內采訪了500名重要開發人員&#xff0c;在調查詢問他們實際使用的工具后&#xff0c;制作了一張信息圖&#xff0c;如下。 這張信息圖覆蓋10個方面的工具&#xff1a;Bug 追蹤、數據庫、開發框架、集成開發環境&#xff08;IDE&#xff09;、…

class特性

每個HTML元素都可以附帶一個class特性。有時候&#xff0c;你希望有一種方法可以指定多個元素并將這些元素和頁面上的其他元素區分出來&#xff0c;而不是單獨指定文檔中的某個元素。 <!DOCTYPE html> <!-- To change this license header, choose License Headers in…

Xcode代碼提示聯想功能失效,按command鍵點不進去類庫,提示“?”

一大早電腦重啟了下&#xff0c;打開項目之后出現了一堆問號&#xff0c;懷疑是Xcode 抽風了&#xff0c;本著懷疑的態度&#xff0c;新建了項目&#xff0c;一波操作下來是正常的&#xff0c;代碼能聯想&#xff0c;command也好使。于是在網上找答案&#xff0c;終于在這里找到…