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