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