參與啟智社區(qū)開源項目心得分享——陳彥騏

開源,顧名思義,指的是開放源代碼。開放意味著任何人都可以自由閱讀每一行代碼,這給開發(fā)者無形中提出了很高的要求。

個人開發(fā)者或者小團(tuán)隊往往沒有“我的代碼是要給別人看的”的意識,而是習(xí)慣于自說自話。人們在網(wǎng)上聊天時尚且能夠注意言辭,但在將自己的代碼開源時往往忽略了別人的感受。就以往的經(jīng)歷來看,許多團(tuán)隊將開源變成了任務(wù),為了開源而開源,一手復(fù)制粘貼就把自己那套沒什么注釋和說明文檔的代碼扔到開源平臺上。這些代碼作者對于有人提問代碼細(xì)節(jié)常常不予回復(fù),而如果指出了代碼漏洞,有禮貌的尚且能感謝并修補(bǔ),更多的是石沉大海,討論也就沉寂了。

因此開發(fā)者大抵需要意識到,開源一方面是為了讓他人更好的學(xué)習(xí),另一方面也是為了吸收他人的合理意見而改進(jìn)代碼。一個代碼量稍大的項目或多或少都存在bug,被指出了問題至少說明有人在認(rèn)真閱讀代碼,這也是工作被認(rèn)可的標(biāo)志。

就SpikingJelly的開發(fā)經(jīng)歷而言,早期的框架是非常不完善的,代碼倉庫也無人問津。這時候的框架還停留在僅依靠“托管代碼”來進(jìn)行版本管理的階段。當(dāng)時的框架定位在自用,完全忽略了社區(qū)的存在。使我們態(tài)度發(fā)生轉(zhuǎn)變的是,在開源一段時間后,我們注意到了另一個功能定位完全類似的框架,其開發(fā)者是同一科研領(lǐng)域的科研人員。他們的人手非常少,只有兩個來自不同國家的開發(fā)者主導(dǎo)開發(fā),最初開源的時間也與我們很接近。不同的是,他們已經(jīng)累積了一定量的用戶,這些用戶基本也是來自同一領(lǐng)域的科研人員,以及一部分正在觀望學(xué)習(xí),想要進(jìn)入這個研究領(lǐng)域的新生血液。這讓我們開始思考:開源框架是給誰看的?亦即目標(biāo)用戶群體究竟是誰。一個基于科研用途的框架要求使用者至少擁有基本的領(lǐng)域知識,這樣的門檻實際上已經(jīng)把目標(biāo)用戶刻畫得十分清楚了。基于此,在開發(fā)時,代碼各個模塊的功能與科研中的研究對象必須有非常清晰的對應(yīng)關(guān)系,不然本領(lǐng)域人員都無法理解的話,就不可能再有人來使用了。我們重構(gòu)了代碼的層次,使得這個映射關(guān)系更清晰,同時也開始撰寫文檔,提供一些簡單的范例。

經(jīng)過這次重構(gòu)之后,的確出現(xiàn)了少數(shù)人來關(guān)注開源倉庫,不過也僅此而已。沒有人真正使用起來,同時我們也注意到,有不少研究者在關(guān)注我們的框架時,使用著國外的同期開發(fā)的框架。于是我們又提出了問題:我們的框架有什么優(yōu)勢?就問問題提出的當(dāng)時,我們無法作答。因此必須設(shè)法給框架制造一個亮點(diǎn)。這也是迄今為止我們一直在努力的方向。

對于基礎(chǔ)性的編程框架而言,不同的框架往往側(cè)重不同,框架功能的多寡往往也與領(lǐng)域自身的發(fā)展息息相關(guān)。回顧TensorFlow和PyTorch這兩個深度學(xué)習(xí)框架的發(fā)展史,我們能夠清晰的觀察到性能與編程友好性這兩個指標(biāo)之間的權(quán)衡貫穿始終。深度學(xué)習(xí)社區(qū)中不少人也同時使用兩種框架并貢獻(xiàn)代碼,這使得兩者能夠互相借鑒,吸收對方的優(yōu)秀功能。我們也大概會遵照類似的路線,在打造自身亮點(diǎn)的同時,吸收現(xiàn)有其它框架的成功經(jīng)驗。

作為一個小規(guī)模團(tuán)隊,我們的開源之路道阻且長,需要時間檢驗我們的路線是否正確并不斷修正。也期待能有同領(lǐng)域的科研工作者通過OpenI發(fā)現(xiàn)與試水,為科研領(lǐng)域傾注源源不斷的動力。

作者:陳彥騏

Share this article:

Facebook
Twitter
LinkedIn
WhatsApp