【尤雨溪的回答(660票)】: 謝邀。先介紹下項目吧,前端視圖層庫 Vue.js: vuejs/vue · GitHub 目前在 GitHub 上 7300+ star,issue + PR 總計 1400+,生產(chǎn)環(huán)境中使用算是有不少(應(yīng)該... 其實我也統(tǒng)計不完全),前端包管理系統(tǒng)里面只有 npm 有統(tǒng)計的,每月下載量 14k 左右,并不清楚 bower 和直接下載的量多少。 對前端熟悉的同學(xué)應(yīng)該多少有所耳聞吧。本質(zhì)上 Vue.js 做的是兩件事情,數(shù)據(jù)綁定和視圖層組件化。技術(shù)上的細節(jié)就不在這里啰嗦了,不了解但感興趣的同學(xué)可以移步這里:Vue.js:輕量高效的前端組件化方案-CSDN.NET。Vue.js 和其他庫/框架不一樣的地方主要在于 API 的簡潔和不對高層架構(gòu)做過多約束。這也是為什么我通常不把 Vue.js 叫做框架,因為它是一個很專注的工具,只解決它該解決的問題。這是我從一開始就堅持的一個理念,那就是不做大而全,只做小而美。一方面是因為個人偏好,另一方面是因為作為一個個人項目,在競爭激烈的前端庫領(lǐng)域里想要生存,最好跟那些由團隊維護的大框架有明顯的差異性。 印象深刻的事情 這個項目一開始純粹是作為練手的輪子,因為當(dāng)時想要研究 Angular 數(shù)據(jù)綁定的實現(xiàn)。研究的時候覺得臟檢查實在是個不優(yōu)雅的實現(xiàn),于是就琢磨如果只支持 ES5 能不能用 getter/setter 實現(xiàn)無縫的依賴追蹤。如果算上那時候的第一個 commit,距今已經(jīng)兩年零三個月:initial setup · yyx990803/vue@83fac01 · GitHub 正式對外發(fā)布是 2014 年 2 月的事情了。當(dāng)時也算是抱著『搞個大新聞』的念想小小策劃了一下,同時在 HackerNews、Reddit、EchoJS 等地方發(fā)了帖子,還給 DailyJS、JavaScript Weekly 等媒體發(fā)了自薦。發(fā)布后幸運地在 HN 首頁呆了一段時間,第一周后拿到了 615 個 star。我對第一周的一些數(shù)據(jù)做了些統(tǒng)計,還寫了篇博客:First Week of Launching Vue.js 當(dāng)時 Vue.js 其實非常的不成熟,但有一個公司膽子很大地把這個個人項目用在了生產(chǎn)環(huán)境里:Optimizely。這家公司國內(nèi)知道的人可能不多,但他們 B 輪融了 a16z 的 55m,其實是一家準(zhǔn)獨角獸公司。他們當(dāng)時的新前端 lead 上任做的第一件事就是把他們基于 jQuery + Knockout 的舊前端用 Vue.js 重寫了,還邀請我去過他們辦公室聊天?,F(xiàn)在回頭看來,當(dāng)時的 Vue.js 問題很多,但多虧了這家公司,讓我第一次覺得『臥槽,原來我寫的東西還真有別人用!』 另一類有趣的用戶則是一群法國的交互開發(fā)者。這些人大多是在廣告創(chuàng)意類的公司工作,主要的任務(wù)就是把網(wǎng)站做得要多酷炫有多酷炫,很多都是從 Flash 背景過來的。對于他們來說 Angular 完全是 overkill,但 Vue.js 卻正好。加上對于動畫的良好支持也算是 Vue.js 的賣點之一,所以他們用 Vue 還做了不少得獎的交互類網(wǎng)站,比如:Louis Ansa - Interactive Designer (國內(nèi)可能加載很慢) 再往后不知為什么 Vue.js 在日本也有不少人開始用了,東京一家叫 Cuusoo 的公司有個工程師把他公司的前端用 Vue.js 改寫了,翻譯了日文文檔,居然還組織了 Vue.js meetup... 然后他現(xiàn)在升任他公司 CTO 了 orz... 總之聽說 Line 和 Nintendo 也有一些項目用了 Vue.js。 今年 5 月份的時候,Laravel 的作者發(fā)了條推,大意是說『我嘗試學(xué)了下 React,覺得好難用,決定改學(xué) Vue.js 了』。然后 Laracast(一個 laravel 教學(xué)視頻網(wǎng)站)的創(chuàng)始人做了一系列 Vue.js 教程,于是 Vue.js 突然就在 Laravel 社區(qū)火了,貌似現(xiàn)在最活躍的用戶都是 laravel 社區(qū)的人... 開發(fā)中的體驗 現(xiàn)在想來,才明白為何一個項目所謂的『成熟』需要時間。今天回頭看兩年前的代碼,那就是一坨渣渣啊。這期間經(jīng)歷了很多摸索著做了個能用的實現(xiàn),然后去研究其他庫的源碼,于是恍然大悟為什么他們要這么設(shè)計,再把自己的設(shè)計改寫的過程... 為了這個幾乎所有開源的前端庫實現(xiàn)我都研究過了,很多次在做大改動的時候心里都會覺得很慌:『之前那么蠢的設(shè)計居然還有人用!』0.10 到 0.11 的升級是一次完全的重寫,實在是因為 0.10 的設(shè)計太幼稚,維護不下去了... 為了能『可持續(xù)發(fā)展』,不得不強迫自己形成代碼潔癖。每一個函數(shù),每一個 hack,每一個 edge case 都要寫上注釋,怕的就是哪一天自己都看不懂自己當(dāng)時在干嘛。為了不在修 bug 的時候?qū)е赂嗟?bug,只能強迫癥一般地保證每一個 commit 之前都是 100% 的測試覆蓋率??偟膩碚f,能自動化的東西都基本自動化了,比如發(fā)布一個新版本也是一個命令自動跑完所有測試,按照 semver 升級版本,然后 push git tag + npm publish。另外還在持續(xù)集成服務(wù)上對每一個 PR 自動檢查代碼格式 + 跑單元測試... 另一個很有意思的轉(zhuǎn)變就是從一開始完全想怎么設(shè)計就怎么設(shè)計,到今天需要考慮各種用例、穩(wěn)定性、瀏覽器兼容、向后版本兼容、社區(qū)意見等等,整體的設(shè)計過程也變得越來越社區(qū)化了。以前想做個新功能直接上就是了,現(xiàn)在基本上都會先開個帖子征求下社區(qū)意見,大家一起討論著做。比如這次 0.12 ~ 1.0 的升級,大部分 breaking change 都專門開了 issue 征求社區(qū)意見,新的綁定語法更是經(jīng)歷了漫長的幾百條評論的討論... Issue 和 PR 現(xiàn)在基本上每天起床第一件事就是看郵箱里面有沒有新 issue。我用 Inbox 把 Vue 的 issue 專門分了個類別,就當(dāng)是 todo list,修掉了就勾掉。有時候一口氣修了幾個 bug 啪啪啪勾掉一堆的時候感覺還是很酸爽的... 當(dāng)然更爽的是有時候一覺起來一個 issue 也沒有 -.- 說到 issue 的類型,實在是一把辛酸淚。剛開始的時候有人開個 issue 就覺得受寵若驚了,到后來時間緊了之后,就越來越體會到對開 issue 的方式對維護者體驗的影響。舉例來說,有些人開 issue 永遠只有一句話,甚至有些直接就是標(biāo)題:"xxx doesn't work",然后無內(nèi)容。早期碰到這種的還會記在心上,現(xiàn)在遇到這樣的就直接掛個 『請給重現(xiàn)』的 tag,如果幾天以后還是沒重現(xiàn)就直接關(guān)掉。另一種極端就是一些很認真的同學(xué),一個 issue 分幾個小標(biāo)題,『問題描述』、『重現(xiàn)步驟』、『可能的原因』,有些甚至把應(yīng)該改哪里都幫我指出來了,就差直接開個 PR 了。每次遇到這樣的 issue 我就特別想擁抱一下開 issue 的人,希望大家都向這樣的同學(xué)學(xué)習(xí)! 印象最深的一個 issue: ![]()
最奇葩的 PR: mini change: removed unnecessary spaces by Jinjiang · Pull Request #1165 · yyx990803/vue · GitHub ^ @趙錦江(勾三股四) 為了混 contribution 已喪心病狂! 對工作和生活的影響 首先,維護這個項目對于個人的技術(shù)成長顯然是有著巨大的好處的。為了保持項目的競爭力,我需要時刻關(guān)注前端最前沿的東西,研究別人的實現(xiàn);為了保持項目的可維護性,我需要進行各種工程化的實踐... 有一個有一定知名度的項目自然在很多事情上也會比較方便,比如當(dāng)時去 Meteor 面試就是做了個 Vue.js 的分享然后聊了聊天就給 offer 了,并沒有叫我翻轉(zhuǎn)二叉樹什么的... 生活上,對項目過于投入有一定的負面影響。因為 Vue.js 畢竟是個個人項目,所以經(jīng)常需要占用工作外的時間,代碼寫太晚被老婆訓(xùn)斥也不是一次兩次了... 還好我在寫 Vue.js 之前就已經(jīng)找到了老婆,各位單身的碼農(nóng)挖坑前還需謹慎! 【季索清的回答(16票)】: 尤雨溪同學(xué)介紹了一則在軟件開發(fā)領(lǐng)域比較有代表性的范例;那么我就說說一個大家不太熟悉并可能稍感神秘的領(lǐng)域中的大型開源項目:在天體物理領(lǐng)域中(目前也在逐漸擴展到多學(xué)科)的數(shù)據(jù)分析和可視化軟件:The yt Project. 這個項目(包括使用文檔)的源碼都放在BitBucket上(yt on Bitbucket),目前有約18,000的commit,2000的PR和1000+的issue。由于專業(yè)特點,我們個人有些代碼出于各種原因是不能公開的,因此提供無限免費私有倉庫的Bitbucket是一個很方便的選擇。 目前yt在天體物理領(lǐng)域取得了較大的影響力(很可惜,這一點在國內(nèi)尚不明顯;因此我也計劃在國內(nèi)通過給talk的方式做一些初步的推廣工作);yt支持天體物理中多種廣泛應(yīng)用的(數(shù)值模擬/觀測)數(shù)據(jù)格式,大量的論文是用yt進行數(shù)據(jù)處理和可視化的,其中包括一期《自然》雜志的封面。一些可視化的例子可以在The yt Project: Gallery、我個人主頁上的Visualizations上找到(部分在YouTube上視頻可能被墻)。 與軟件領(lǐng)域的開源項目相比,yt Project有其特殊性: 維護這個較為大型的開源軟件,一個人的力量是遠遠不夠的;約20人的團隊(The yt Project: Community)以及從始至今共108位contributor都為這個開源軟件做出了貢獻,其中包括像我這樣的博士生、博士后和教授。項目的維護主要有以下幾個方面:
代碼設(shè)計與debug 這個是最主要、也是最基本的工作。每隔一段時間,當(dāng)一個階段的工作比較成熟之后,我們就會推出一個新的版本號。我這周剛參加了這個項目的mini-sprint,大家針對全新設(shè)計的立體渲染模塊進行了最后的代碼沖刺,并即將推出3.3版本。 代碼測試 測試包括通過運行一系列測試腳本,檢測代碼各個模塊能否正常運行,以及改動前后的版本的輸出(數(shù)據(jù)、圖像等)是否一致等等;后者在科研中是很重要的,否則今天一個結(jié)果、明天另一個結(jié)果,論文就沒法寫了。這個本應(yīng)是一個繁重的工作,然而團隊里的一位成員為這個項目寫了一個測試機器人;每提交/改動一個PR,機器人就會自動針對變化運行測試、重新編譯使用文檔,并在PR頁面留言: ![]()
同時在團隊的Slack上的即時聊天組里也會發(fā)信息:同時在團隊的Slack上的即時聊天組里也會發(fā)信息: ![]()
話說我去年剛開始成為這個項目的成員時,還驚訝于這個人為什么每次都如此勤快,后來才覺得它應(yīng)該是機器人… 用戶支持 如前所述,由于這個項目的特殊性,我們在用戶支持上做了較為完善的工作。我們撰寫并維護了非常詳盡的使用文檔yt Docs;通過yt的使用者郵件列表,每天都能收到幾封郵件并都能得到及時的回應(yīng)。此外,第二屆使用者workshop將于明年二月初在加州理工學(xué)院舉辦(正式的通知將在最近發(fā)出),有感興趣的同學(xué)可以保持關(guān)注或者聯(lián)系我。 團隊組織 由于大部分團隊成員在不同的研究機構(gòu),我們每周會在Google Hangout上進行PR Triage集中分揀審核提交的PR;此外還有團隊會議,著重討論更宏觀的項目發(fā)展規(guī)劃(yt Enhancement Proposals)。 此外說說對我個人的影響吧。做為未出茅廬的博士學(xué)生,我更多的精力在科研工作上,在yt項目的投入與團隊中的博士后們相比并不算多;然而團隊成員評價說我的開發(fā)工作具有high impact,得到這樣的肯定也是非常開心的。由于yt項目較大的影響力,我通過這項開發(fā)工作結(jié)識了本領(lǐng)域中各個大學(xué)/研究機構(gòu)里許多優(yōu)秀的開發(fā)者和使用者,其中有些研究者向我發(fā)出了訪問或者講座邀請,這無疑是提升自己研究工作的知曉度的絕好機會。 最后,如果有同學(xué)有興趣愿意嘗試使用yt(不局限于天體物理專業(yè)),歡迎與我聯(lián)系~ 【孫飛的回答(66票)】: 曾經(jīng)用易語言開發(fā)了某百萬級網(wǎng)游外掛程序(穿越火線),獨創(chuàng)了很多新功能,都是客戶端級別實現(xiàn)的功能,不會被查出來,當(dāng)時也hack過老外早期發(fā)布的模擬版服務(wù)端,感覺這些功能官方做至少也要服務(wù)端同步才能實現(xiàn),比如一槍斃命,飛天,遁地,隱形,封包修改商城數(shù)據(jù)/游戲結(jié)束后統(tǒng)計數(shù)據(jù),后來招代理,二級代理,開CF卡盟,很是火爆,賺錢至少也超過7位了,也知道自己不能繼續(xù)下去了,想賺更多錢的代價可能是所有錢都被追回然后坐牢。為了避責(zé),賣掉源碼給幾個外掛網(wǎng)站,直接開源到github了,然后就是外掛最瘋狂的時候了,很多人二次銷售我在github發(fā)布的代碼,那時做一個外掛就是加一個殼,基本新手就能做到,然后當(dāng)年就被抓住好幾伙所謂的制作外掛團伙。 那是四五年前的事了,現(xiàn)在絕大多功能都被封掉了,但是內(nèi)存透視還是用的我的代碼。 github上已經(jīng)被騰訊舉報刪除了,網(wǎng)上能搜到很多透視源碼,基本都是無修改我11年發(fā)布的版本。 我這個項目應(yīng)該不算是大型,也不算是維護,如果說單純算收入,不論合法不合法,絕對超越此貼其他項目。 【劉彥瑋的回答(1票)】: 我也來說一個吧。babybluetooth,一個用oc寫的ios藍牙庫。現(xiàn)在只有300+星,但是已經(jīng)是github上新最多的ios藍牙庫了。 coolnameismy/BabyBluetooth · GitHub 寫這個庫的初衷是因為原生的corebluetooth藍牙庫委托太多,不斷嵌套著委托和方法的調(diào)用,代碼寫起來混亂不優(yōu)雅。所以干脆自己寫了一個。剛開始寫的時候,工作了遠遠超過了自己的預(yù)期,比較是corebluetooth庫的封裝,得兼容全部的原生方法,在按照自己的邏輯和生命周期去處理。這部分就寫了1周,接著又是寫中文文檔,英文文檔,測試等做了很多工作,終于有了第一個可以使用的版本,放到github上。 維護項目: 任何項目的第一個版本都是不成熟的,自己不停的思考有哪些好用的功能適合加進去,也寫了一些藍牙教程在blog和分享到cocoachina上(英文不好很吃虧。。)也建立了一個qq群用來討論藍牙開發(fā)的相關(guān)問題。 對生活的影響: 這個開源項目目前基本上都是自己一個人在寫。但是已經(jīng)有不少人再嘗試用babybluetooth去寫藍牙程序,babybluetooth的qq群里每天不斷的有人在討論babybluetooth的使用中的問題和解決方法,也會有人再群里或者發(fā)郵件問我一些ios藍牙開發(fā)的問題,這部分每天需要花費不少時間,但是群里都是具有開源精神的工程師,他們也會相互的回答一些問題。也有很多人標(biāo)示對我項目的支持,也很感謝這些人的支持和提出修改建議,才能讓我有更多的動力去把項目完善。 對個人的成長: github開源項目的維護能力+1 拓寬程序猿朋友圈+1 感覺自己小有成就感+1 和hr談薪資+1 。。。。 【驍波的回答(11票)】: 一點也不大型,但star1000+ https://github.com/racaljk/hosts 【知乎用戶的回答(0票)】: 等大神來答! 原文地址:知乎 |
|
來自: 星星點點燈 > 《W 網(wǎng)摘》