互聯(lián)網(wǎng)公司和軟件工程那些事
關(guān)于軟件工程,我一直有一些零散的想法,正好@技術(shù)人攻略 這期聊這個(gè)話題,于是順手寫(xiě)了這篇「散」文。
關(guān)于延期
2004年,我大學(xué)畢業(yè)到新浪時(shí),正好參與了一個(gè)大型的互聯(lián)網(wǎng)項(xiàng)目——新浪教育頻道見(jiàn)習(xí)就業(yè)項(xiàng)目。進(jìn)度是由項(xiàng)目經(jīng)理控制的,光是需求分析報(bào)告疊起來(lái)有一個(gè)iPhone側(cè)面高。過(guò)程還算正規(guī),有ER圖,有數(shù)據(jù)結(jié)構(gòu)表,還有界面示意圖。從項(xiàng)目開(kāi)始我們就天天加班到晚上四五點(diǎn),回去睡個(gè)覺(jué),早上9點(diǎn)回來(lái)接著干。還記得我和偉平半夜3點(diǎn)出去買(mǎi)煙,回來(lái)看見(jiàn)前端的妹子一邊哭一邊嵌頁(yè)面。***項(xiàng)目還是延期了蠻久。
出于對(duì)加班的恐懼,那時(shí)候我就對(duì)軟件工程產(chǎn)生了興趣,然后讀了大量關(guān)于軟件工程的書(shū),統(tǒng)一過(guò)程、敏捷開(kāi)發(fā)、極限編程以及***期限、人月神話這些周邊。我試圖弄懂,為什么需求和開(kāi)發(fā)之間,會(huì)有如此之大的鴻溝,以至于它能成為一門(mén)獨(dú)立學(xué)科。
這個(gè)思索持續(xù)了多年,我一直沒(méi)有找到合適的答案,直到2009年我回到新浪,擔(dān)任新浪云計(jì)算產(chǎn)品經(jīng)理。
SinaAppEngine項(xiàng)目8月立項(xiàng),11月上線***個(gè)版本,整體進(jìn)度延遲3天(這就是為什么它是11月3日上線的),當(dāng)時(shí)我們就五六個(gè)人。我在新浪云負(fù)責(zé)的***一個(gè)大項(xiàng)目——新浪云商店***期上線,沒(méi)有進(jìn)度延遲。
這讓我發(fā)現(xiàn),延期最核心的問(wèn)題其實(shí)并不在于過(guò)程,而在于需求。作為一個(gè)曾經(jīng)開(kāi)發(fā)過(guò)億訪問(wèn)量系統(tǒng)的產(chǎn)品經(jīng)理,我可以異常精準(zhǔn)的控制需求和進(jìn)度。我們?cè)谛枨蠓纸鈺r(shí),可以在技術(shù)實(shí)現(xiàn)級(jí)別討論時(shí)間表。最終我們的時(shí)間表可以精準(zhǔn)在小時(shí)級(jí)別,誤差在天。這招屢試不爽,從快簡(jiǎn)歷到JobDeer.com,我們的進(jìn)度延期都最多幾天。
關(guān)于質(zhì)量
再來(lái)說(shuō)質(zhì)量的控制。
如何提升軟質(zhì)量
程序員有一個(gè)習(xí)慣,就是把自己的高標(biāo)準(zhǔn)拿去要求別的人。所以我們會(huì)發(fā)明各種高效但是一點(diǎn)都不易用的框架,覺(jué)得——如果連這個(gè)都不明白,還當(dāng)什么程序員。
我一直都是這么想的,但當(dāng)我08年自己開(kāi)工作室的時(shí)候,我發(fā)現(xiàn)我沒(méi)法招到技術(shù)特別好的人,我們新招的同學(xué)甚至搞不明白面向?qū)ο蟆?/p>
于是后來(lái)我寫(xiě)了LazyPHP框架,這是一個(gè)用面向過(guò)程封裝面向?qū)ο蟮目蚣堋U麄€(gè)框架20個(gè)函數(shù),搞定一切。它只有一個(gè)目標(biāo),讓不懂面向?qū)ο蟮娜耍部梢詫?xiě)出強(qiáng)壯的Web程序。大體來(lái)說(shuō),它做到了。
再說(shuō)一件事情。在設(shè)計(jì)SAE的時(shí)候,我們有一個(gè)最常討論的話題,就是如何讓那些寫(xiě)出不良代碼的程序員進(jìn)行自我修正。后來(lái)我們采用了云豆和配額兩個(gè)方式來(lái)進(jìn)行軟性限制。現(xiàn)在SAE上訪問(wèn)量特別大的應(yīng)用都優(yōu)化得特別好。
如何提升硬質(zhì)量
我從來(lái)不相信軟件是什么藝術(shù),藝術(shù)從來(lái)不會(huì)Done is better than perfect。所以有些核心的質(zhì)量指標(biāo)是必須的,比如單元測(cè)試,比如編碼規(guī)則,比如常規(guī)安全檢查。而這些東西,不應(yīng)該作為圣經(jīng)天天念,而應(yīng)該簡(jiǎn)單粗暴的做到代碼發(fā)布系統(tǒng)里邊,不遵守就提交不了的代碼。
關(guān)于軟件工程
坦白的說(shuō),我覺(jué)得「軟件工程」這個(gè)名字過(guò)時(shí)了,那是軟件時(shí)代的遺物,在互聯(lián)網(wǎng)時(shí)代是很詭異的。軟件不再是被定義好的大規(guī)模工程,分發(fā)到外包公司去做實(shí)現(xiàn)。它是產(chǎn)品不可分割的一部分,是受需求影響***最慘的部分。
需求分析,原來(lái)是軟件工程的起點(diǎn),現(xiàn)在已經(jīng)由專(zhuān)門(mén)的產(chǎn)品團(tuán)隊(duì)來(lái)做了,這個(gè)決定創(chuàng)業(yè)公司生死存亡的東西,居然以前是程序員在做。user story,在沒(méi)有用戶畫(huà)像、應(yīng)用場(chǎng)景時(shí)也很容易失之千里。
我們需要一個(gè)新的,產(chǎn)品整體的工程化,以天為周期進(jìn)行全產(chǎn)品流程迭代的過(guò)程。而我在這個(gè)方向找到的最接近的理論,是《精益創(chuàng)業(yè)》。它是精益開(kāi)發(fā)在產(chǎn)品全流程的實(shí)現(xiàn)方法論。
我覺(jué)得,未來(lái)「產(chǎn)品工程」會(huì)替代「軟件工程」。
大型互聯(lián)網(wǎng)公司的技術(shù)團(tuán)隊(duì)會(huì)分成兩類(lèi)人,一類(lèi)做私有云平臺(tái)——提供通用技術(shù)能力(這部分前期可以用公有云),一類(lèi)直接合并到業(yè)務(wù)團(tuán)隊(duì)做實(shí)現(xiàn)。
超大型項(xiàng)目,會(huì)被API分割成平臺(tái)和應(yīng)用,通過(guò)強(qiáng)隔離的方式有序生長(zhǎng);而以往那些依賴關(guān)系,也會(huì)在這個(gè)層面得到很好的解決。
大部分人不用關(guān)心系統(tǒng),只需要關(guān)心自己的應(yīng)用。
軟件工程本身,則浴火重生,從一個(gè)面向過(guò)程式的管理,變成一個(gè)面向?qū)ο笫降闹苇h(huán)境(有點(diǎn)像對(duì)象容器)。
具體的東西,我沒(méi)想太好,我就隨便寫(xiě)寫(xiě),您就順便看看。