開源與創(chuàng)業(yè)需要注意的關(guān)鍵點(diǎn)有哪些
個(gè)人在開源方面算是新手,2016年初發(fā)布了一個(gè)開源項(xiàng)目,叫go-commons-pool,是一個(gè)golang的通用對(duì)象池,到現(xiàn)在快200個(gè)星。創(chuàng)業(yè)方面也算是新手,2015年初開始作為技術(shù)合伙人創(chuàng)業(yè)做團(tuán)隊(duì)通訊協(xié)作工具。一年里做開發(fā)的同時(shí)兼職做點(diǎn)產(chǎn)品的工作,也做點(diǎn)運(yùn)營(yíng)的工作。感覺創(chuàng)業(yè)和開源二者的共通之處挺多,所以和大家分享一些感悟。前面各位講的干貨比較多,我這個(gè)項(xiàng)目技術(shù)上比較簡(jiǎn)單,所以我聽從Tim的建議,多攙些雞湯吧?。?
無論是創(chuàng)業(yè)還是開源,首先面臨的***個(gè)問題是做什么?要做什么的想法從哪兒來呢?無外乎以下兩個(gè)途徑:
1.觀察
觀察周圍的人,觀察自己的生活和工作,觀察大家的習(xí)慣,看哪兒還有改進(jìn)的地方,看哪里有痛點(diǎn)。比如我這個(gè)pool的想法就是有人在群里提問,我搜索了下,發(fā)現(xiàn)golang確實(shí)沒有通用好用的對(duì)象池。再比如有人發(fā)現(xiàn)打車這么難,站路邊半天等不到,于是有了Uber。有人想在多個(gè)設(shè)備同步文件,于是有了 Dropbox。有人發(fā)現(xiàn)工作中老在做重復(fù)工作,于是有了各種框架。
2.借鑒
看看其他先進(jìn)的地區(qū),先進(jìn)的領(lǐng)域,是否有可借鑒的,將先進(jìn)地區(qū)或者領(lǐng)域的成果移植到落后地區(qū)或者新的領(lǐng)域。一直比較熱門的Copy To China創(chuàng)業(yè)就是這種模式,通過先進(jìn)地區(qū)的發(fā)展軌跡來預(yù)測(cè)落后地區(qū)的未來趨勢(shì)。那天高可用群里indigo的分享,通過日本的經(jīng)濟(jì)社會(huì)的發(fā)展來預(yù)測(cè)中國(guó)的趨勢(shì)也是這個(gè)道理。我做這個(gè)pool,其實(shí)也是分析了Java社區(qū)的情況,覺得golang在以后服務(wù)器端大有作為,肯定需要一個(gè)健壯的對(duì)象池,用來做連接池等用途。
想好了做什么,下一步就是怎么做。這一步,貌似創(chuàng)業(yè)和開源差距比較大,但二者共通之處還是有的,其實(shí)做的關(guān)鍵點(diǎn)是評(píng)估以及安排“事”的資源投入。資源包括金錢和時(shí)間。如果前面想的事情太大,和實(shí)際的資源不匹配,結(jié)果可能就是創(chuàng)業(yè)黃了,或者開源項(xiàng)目創(chuàng)建了個(gè)倉(cāng)庫(kù),寫了個(gè)readme,然后就沒有然后了。這里面考驗(yàn)的是對(duì)事情的復(fù)雜度的評(píng)估能力和對(duì)資源的把控能力。
項(xiàng)目做出來之后呢?再下一步就是怎么讓你的用戶群知道了,也就是現(xiàn)在流行的說法叫“安利”。PingCAP的黃東旭剛才也提到了他們的營(yíng)銷方式和渠道。這步的核心是你要知道你的用戶群的注意力一般在哪兒,如何以最小的成本觸達(dá)你的用戶。開源項(xiàng)目可能是通過各種開源社區(qū)或者技術(shù)人社區(qū),自己的社交網(wǎng)絡(luò),技術(shù)會(huì)議等各種方式。
初步的用戶觸達(dá)完成,用戶知道了你的項(xiàng)目,有部分人可能點(diǎn)了星,這部分人是潛在用戶。另外一部分人fork了,估計(jì)是準(zhǔn)備要使用或者做二次開發(fā)了。那如何維系當(dāng)前的用戶,并且吸引更多的用戶呢?這就是這個(gè)階段要考慮的。包括但不限于以下方面:
1.完善文檔,教用戶如何使用。不要嫌棄用戶“***”。
2.響應(yīng)用戶的反饋,處理issue。創(chuàng)業(yè)產(chǎn)品的話就是要有客服體系了。
逐漸用戶多了,然后形成社區(qū),有了自己的品牌。這一步,像我做的這樣的小工具達(dá)不到,但比如PingCAP的TiDB;像謝孟軍的beego這種框架,都已經(jīng)形成自己的社區(qū)和品牌了。
總結(jié)下這個(gè)過程中的關(guān)鍵點(diǎn):
1.點(diǎn)子沒抽象好。其實(shí)所有工具和產(chǎn)品都是在做一種抽象,對(duì)用戶需求的抽象。比如那個(gè)經(jīng)典的例子,問用戶需要什么,用戶肯定說是要更快的馬,而不是一輛汽車。汽車就是對(duì)用戶出行需求的抽象。但如何做這種抽象呢?我總結(jié)了下有三個(gè)境界。
(1)DRY原則(Don’t repeat yourself),不要重復(fù)自己,最常見的是用在代碼規(guī)范里,建議大家不要隨意復(fù)制粘貼,而是要做一定抽象。但實(shí)際上,所有的語(yǔ)言的高級(jí)功能,面對(duì)對(duì)象,模塊化,代碼生成工具,各種框架,都是在解決這個(gè)問題。也就是說,如果你發(fā)現(xiàn)你在做許多重復(fù)勞動(dòng),說明這里就有可能抽象出個(gè)工具出來。
(2)不要重新發(fā)明輪子。這個(gè)原則貌似有爭(zhēng)議,但我覺得爭(zhēng)議是沒搞清楚“發(fā)明”和“造”的區(qū)別。不要重復(fù)發(fā)明輪子,但你可以造新的輪子,或者改進(jìn)已有的輪子。這個(gè)原則說的是不要重復(fù)別人已經(jīng)完成的工作,不要閉門造車,要在前人的基礎(chǔ)上做改進(jìn)。一直覺得發(fā)明輪子的人是很偉大的,也很難的,歷史地位可以和發(fā)明取火術(shù)有的一拼。有了輪子后,人類所使用的工具和動(dòng)物所使用的工具才有了本質(zhì)的區(qū)別。
(3)前面我們做到了不要重復(fù)自己,也做到了不要重復(fù)別人,第三個(gè)境界就是“不要讓別人重復(fù)你”。將你的工具,框架,抽象分享出去,作為開源產(chǎn)品或者SaaS服務(wù),讓別人不再重復(fù)你已經(jīng)完成的工作。
2.開發(fā)速度慢了,競(jìng)品出現(xiàn),或者功能比競(jìng)品弱。
3.推廣沒做好,大家不知道,結(jié)果被后來者超越了。
4.做出來的東西沒有實(shí)際需求,比如pool,有人覺得go里用channel模擬就很簡(jiǎn)單,沒必要用個(gè)復(fù)雜的pool。比如許多Copy To China的項(xiàng)目,發(fā)現(xiàn)在中國(guó)的環(huán)境,水土不服。
5.開源后不維護(hù),沒了熱情,用戶反饋無響應(yīng),***都流失了。好多僵尸開源項(xiàng)目都是這樣了。
所以,我覺得想創(chuàng)業(yè)的工程師,可以先從開源做起,將開源做為創(chuàng)業(yè)的一次演習(xí)。體驗(yàn)一次從構(gòu)想,開發(fā),推廣的整個(gè)流程,這樣可以對(duì)創(chuàng)業(yè)過程中的關(guān)鍵點(diǎn)有些體驗(yàn),可以評(píng)估自己的長(zhǎng)處和短板。畢竟自己是工程師,開發(fā)的時(shí)間可以自己掌控,面向的用戶也是工程師,所要解決的問題是自己熟悉的領(lǐng)域,需要傳播的社區(qū)也是自己熟悉的社區(qū),這種天時(shí)地利人和的情況下做項(xiàng)目還是遇到困難,可以想象下,如果換到一個(gè)自己不熟悉的領(lǐng)域,不熟悉的用戶,不熟悉的社區(qū),困難會(huì)有多大?
另外說一句關(guān)于技術(shù)人創(chuàng)業(yè)的觀點(diǎn)。我覺得王安石一句詩(shī)非常好“春江水暖鴨先知”,我們一線的寫代碼的工程師是在水里的鴨子,江水變化我們肯定首先會(huì)感覺到,這方面是有優(yōu)勢(shì)的。如果你高升了,不寫代碼了,跑岸上去了,那可能就感覺不到江水變化了。