我眼中的軟體工程(一)

開會無聊,就想寫一篇「我眼中的軟體工程」這篇文章。我本科在南京大學學了四年的軟體工程專業,研究生在北京大學學了三年的軟體工程管理專業。實際項目經驗已經超過六年(在學校的時候就瘋狂做項目了),基本可以說在軟體開發領域也算一個老司機了。做過的項目涉及到Android,iOS,web,遊戲(cocos2d,unity3d,白鷺引擎都做過一遍),推薦系統,NLP,嵌入式。大大小小的項目不下於十個。目前本人在做遊戲方面的創業,還有也在做很多外包項目。

在這裡先聲明一下,我這裡說的軟體工程不是書本上的軟體工程,而是我真真實實在實際項目中體會到的軟體工程。軟體研發大體上分為這麼幾個階段:軟體需求獲取與分析,技術架構設計,編程,以及最後的測試部署之類的,在過程中會涉及到軟體項目管理。個人認為,最重要的三件事情是:軟體需求獲取與分析對應的崗位是產品經理,在遊戲中就是主策;技術架構設計對應的崗位是CTO或者架構師;軟體項目管理對應的崗位是項目經理。在實際的項目中,往往這三個角色是由CEO或者CTO承擔,或者一起承擔。

軟體需求獲取與分析大體上又分為兩個階段:原始需求和需求細化,原始需求更多地就是指創意本身有的時候我們稱之為初心,需求細化就是指把這個創意細化成一個軟體產品功能需求,最後形成一份產品需求文檔。

CTO拿到這份需求文檔進行技術選型和軟體架構設計,我自己做技術也非常多年了,現在軟體技術發展已經和10年前有本質區別了,對於一個創業型公司來說開源框架和雲服務已經變得非常重要了。我自己對Java還有阿里雲系的產品非常熟悉,所以就用這個舉例子了。對於互聯網產品來說,首先需要定義客戶端和伺服器的通訊協議,從大的方面來說分為長鏈接和短鏈接。對於短鏈接來說非常簡單,就是使用restful服務就好了,伺服器端的框架現在一般使用spring boot。對於長鏈接來說比較麻煩一點,一種方式是裸寫socket,當然Java也有一些框架比如netty,但由於各種性能問題,本人強烈建議使用mqtt協議,阿里雲上有現成的mqtt雲服務。通訊協議說完之後,我們來說說客戶端的通常架構。客戶端從類型上來分有APP,web前端,遊戲引擎還有一些嵌入式系統等等。端的技術類型比較多,通常會分為這麼幾個模塊,UI層,通訊層,數據層等等。通常會使用MVP或者MVC模式。還有就是雲端架構,一般來說雲端架構會複雜很多。通常來說,我們會設計一個調度模塊,還有一大堆業務模塊。每個模塊一個進程,每個進程做集群。技術架構這件事情非常複雜,我也只是在這邊簡單說明一下。有興趣可以私信我,在架構設計方面我還是有很多心得的。

未完待續。

推薦閱讀:

TAG:互聯網 | 軟體工程 | 信息技術IT |