近來我一直在積極參與Google Code-in 2017,為開源組織Wikimedia作出貢獻。本文中「暢想資源」將分享一些自己所得到的啟發和感想。☺️
背景
去年我也參加了GCI 2016,但當時卻只是想著隨便玩玩,並沒有真正想要投入到社群參與中,最後草草完成四個任務拿到個T恤後便不再繼續了。比如可以看到我去年所做的其中一個任務中我連我自己修改相應的代碼都沒仔細研究,只是囫圇吞棗交差了事。
今年情況卻有所不同,我是真心希望可以借這個機會在瞭解更多開源社區的運作方式,並讓自己也嘗試投身其中來為其進行貢獻。
秉持這樣的信念,我在整個過程中增加了和其它社群成員的交流。一開始毋庸置疑十分辛苦,從最開始的如何通過Gerrit上傳修復包,如何使用Phabricator討論任務(Parent Task和Subtask到底誰先誰後😂),再到如何從現有的幾十個文件中找到自己需要的文件,再到Git如何回退commit、如何rebase、如何創建follow-up項目,每一項在一開始都是艱鉅的挑戰。
但在來自社群成員的幫助下,一切卻好像又沒有這麼難了。我希望特別感謝Fomafix最初對我格式準則、不同Change互相關係之間的提點,感謝Framawiki、zhuyifei1999、Xqt在我進行Pywikibot相關任務中的鼓勵和幫助,rafidaslam在T183663下對我所寫的maintenance的腳本進行的大量更正,以及Jonas Kress對我自己嘗試不同方法的鼓勵。
正由於今年我的目標不再單純僅是為完成任務,我沒有在因要在幾百個錯綜複雜的文件中找到正確的文件、或要嘗試一切來解決一個幾毫秒的顯示問題或萬分之一機率的Bug而苦惱,反而把這些當成一個愉快的學習過程,一個難忘的合作經歷。
工欲善其事,必先利其器
從2012年起,我就一直在使用Sublime Text,但不知為何從去年開始,總是每輸入幾個字符便卡頓,弄得我根本每次在用它編程時便焦慮無比。
好在,就在GCI開始幾天前,我發現了微軟開發的開源Visual Studio Code,功能更多也更方便,重點是流暢無比,在GCI中做任務時對我幫助很大。
創新VS修補
我們基本可以將GCI上和代碼相關的任務分為三類:修復無傷大雅的過時函數、修復小問題/漏洞和新增小功能/小測試。
第一類往往是最容易,同時也是個人認為較無趣的一類。下圖便是一個典型例子。
我們絕不能否定這些任務的重要性,甚至從某種程度上來看可以說比其它所有任務都更重要,因為只有有人來貢獻這類瑣碎的任務,我們的開源項目才能不斷被維護更新下去。
不過我個人則更加喜歡剩下兩類的項目。修復小問題/小漏洞的任務如下圖。
這類任務往往是挑戰性和趣味性最適中的任務。解決起來不是太過複雜,任務和導師本身也給予了充足的指示,但解決後卻能給人很大的成就感,看到自己也能夠為社群修復問題感到很開心。
但不得不說有時候這類的小問題解決起來還真不容易,比如一個簡簡單單的加入一個 margin-right
就理論上可解決的T178998最後卻牽扯出了數個新問題:HTML生成器生成多餘回車的T182074以及WikiTextStructure中對相鄰div無法進行分割的T182667。就解決這麼一個問題,誰又能一開始就能想到會連帶出這麼多額外問題呢?不過這這是修復這些問題的吸引之處所在。
至於最後一類則如下圖。
這類任務難度最大,往往任務介紹並沒有給予過多指示,有的甚至只有一個簡短的目標。在做的時候最需要和社群的交流以及自己的思考和創造力。比如我在T123885中一步一步對需求的探索,在T173213中對鍵盤快捷鍵的討論等。
從參賽者到(偽)導師
在完成T123885中的腳本創建之後,為解決其中問題並增加更多功能,T183663被創建了。在這些子任務中,我彷彿成為了一個導師,和其它成員一起修改任務描述,思考如何才能最好的將問題和解決方法呈現出來,成為上述第二類任務一樣,幫助其它參賽者完成任務。
但正如標題縮寫「(偽)導師」,很快我便發現到自己的力不從心。除了過多的子任務讓我根本無法即時關注其中每一個之外,我沒有類似如zhuyifei1999完整的相關知識,也沒有像Framawiki一樣豐富的社群參與經驗,最後還是只能繼續當當參賽者,盡自己所能做貢獻。😂
細節強迫症
我相信不少開源社區參與者(包括我)一定是有細節強迫症的。😂
在許多項目中,我曾看到不少參與者為幾個px的細微設計差距、幾乎毫無差別的流程設計、以至常人毫無感覺的細微問題(比如和無障礙設計相關的)吵架討論幾個月,最後才能對這些小問題達成共識。
這樣的操作我是舉雙手贊成的。只有這樣精益求精的精神我們才能設計達成這些社群最初所做成的目標:讓每個人都能享受到最好的資源。
承上:永遠解決不了的任務
但正是由於這樣追求完美的精神,我漸漸發現其實不少問題都因此根本是無法解決的。比如T18691這個想要為一個每個章節標題加入一個鏈接符號的小小任務從2008年創建後一直討論到2018年,整整十年都沒有結果,更有不少參加者不再參與討論,更加陷入停滯。類似的爛尾討論在各語言維基百科討論中也常常產生。
這樣的現象其實便是我們社會永遠所在討論的問題,我們怎樣才能在效率和民主之間取得平衡。開源社區就像是一個小小的世界,將真實世界所有的問題同樣帶入這個虛擬的世界中。
建議
1. WordPress下次也應該參加GCI。😂
2. 下次可以多加一些和代碼無關的任務(類似現在這個分享感想的任務),能夠吸引更多同學去參加。現時大部分任務的門檻依然過高,相信不少人都像去年的我那樣做了幾個任務,又看不到什麼顯著反饋,便悻悻然退出。多加一些諸如編輯維基百科文章又或設計圖標的內容可能能夠更好的吸引更多人來認識和加入社群。(但這樣好像又和「Google Code-in」的Code又沒什麼關係了😯)
3. 進一步加快反饋時間。我理解Wikimedia中的大部分參與者都是業餘時間的「雷鋒」,但現時許多任務在完成後都需要1-2天才能得到回饋,而同時又只能申請一個任務來做,對大部分參賽者都很難產生積極回饋,兩三天後收到回饋再改又似乎已經忘記當初怎麼做的,最後導致趣味消失了很多。
4. 可以創建更多分地區/語言的任務。Google Code-in其中一個優勢便是可以吸引來自世界各地的青年前來參與,其所帶來對不同地區文化的理解和認識可以很大程度上幫助維基百科和Wikimedia的全球在地化發展,比如我格外喜歡這次批量創建的包含不同語言版本的「為維基共享App製作截圖」的一系列任務(見下圖,我自己也提交了中文截圖),這系列任務不但滿足了上述「有顯著回饋和成就感」以及「容易上手」的條件,更充分利用了各個參賽者的背景和文化優勢,真正做到多樣性的貢獻和參與。
展望
沒參加的趕快去參加!☺️