為什麼遊戲服務端的入門難度高?怎樣規劃自學路徑?

遊資網發表於2019-08-01
經常能聽說某某策劃自學技術然後把單機遊戲做出來,但很少聽說誰自己做了個網遊,除了工作量大之外,服務端的門檻是原因之一。

比起遊戲客戶端,遊戲服務端的入門難度較高。原因在於,其一,客戶端引擎和工具相對完善和統一,學習資料眾多,而服務端至今沒有較強大的方案,都是各個專案自己的一套,且很多缺乏文件;其二,犯錯的風險較大,特別是對於線上遊戲,出bug的危害要比客戶端bug大一些;其三,服務端開發涉及到的技術領域較多,又不直觀,加大了開發難度。

跨越層次多,導致知識盲區大

從技術角度,入門服務端的難點在於需要跨越較多的技術層次。以下是服務端程式的一種分層,這裡我把它分層6層。實際專案中往往某些層的內容較少,不會單獨分出來,但邏輯上的分層大體相似。這6層分別是①基礎層②核心層③框架層④邏輯底層⑤邏輯中間層⑥邏輯上層,各層的內容如下:

①基礎層

數學庫、資料結構、緩衝區、字串處理、Json等

②核心層

網路庫、資料庫、協議編碼解碼、定時器

③框架層

分散式結構、訊息分發、熱更新、資料持久化

④邏輯底層

登入、實體、離線訊息、黑名單、AOI演算法

⑤邏輯中間層

物品、公告、郵件、聊天、稱號、成就、排行榜、簽到、首充

⑥邏輯上層

戰鬥、副本

加上一些運維知識,這6層組成了遊戲服務端技術的知識結構。對於剛畢業的同學,或者剛接觸服務端開發的同學,已有的知識結構大體如下圖所示。下圖展示了普遍的計算機相關專業畢業生可能的服務端開發知識掌握的程度,學校課程大都注重基礎,所以合格的畢業生一般基礎較好,特別對數學、作業系統、資料結構、演算法都有較好的掌握;學校一般會開設網路、資料庫等課程,而且如果參與科創類專案,也可能會用到,所以畢業生對核心層的知識稍有接觸;因為在學校會寫一些程式,或者是課程作業,對簡單的邏輯實現一般都有基礎,所以邏輯中層也算稍有接觸。但其他三個層和遊戲業務關聯較大,一般接觸不多。

1.jpg

為什麼不容易自學

經常能聽說某某策劃自學技術自己做了個好玩的單機遊戲出來,但較少聽說誰自學服務端做的很好的。除了就算做出來也無法直接拿給別人看的原因外,過長的學習流程是導致自學不易的主因。如下圖,要做好服務端開發,可能要先學socket、學網路協議,再由此基礎搭建服務端,然後實現各種功能。

2.png

但是核心層的知識,比如網路、資料庫,包含的內容比較多,而且如果要做到高效率、不出錯,需要學習很多內容。比如網路,先丟幾本書,很厚。

3.jpg

比如資料庫,再丟一本書,還是很厚。

4.jpg

這就導致了學習的流程很長。以看書學習為例,如果學客戶端,可能看到第一章就能做個五子棋,看到第二章就能做個貪食蛇,以此類推,每一步都能出點成果。而如果看服務端的,那就完了,可能先啃個200頁的基礎,啥都做不出來,等看到300頁才做個很基礎的,這對自學是非常打擊的。

遊戲公司怎樣培養人新人

如果是比較成熟的遊戲公司,會有一套帶新人的體系。一般而言,會從業務需求出發,先讓新人接觸簡單的業務邏輯,再逐步涉及複雜的業務,當熟悉業務後可能會嘗試一些改動框架底層的任務,以提升技術水平。這樣每次學習基本只需學習一個層次的知識,減少了難度。

5.jpg

如下圖,在一開始時接觸較為簡單的業務,那麼只需仿照邏輯中層的已有程式碼,稍微熟悉支撐它的邏輯底層即可。對於複雜的核心層、框架層無需學會,減少了入門難度。

但也由於業務層不太涉及核心層和基礎層,某些公司不太注重長期的人才培養,僅培養到“能開發業務”這層就停止。對於新人,核心層與基礎就要靠自己學習。業務層的編寫更多是模仿能力,仿照已有的程式碼改動,而核心層會涉及一些底層的知識。

對比於從基礎開始的自學,公司培養模式的學習曲線如下圖的橙色線,學習一點就能出一點輸出。而自學曲線如藍色線,要花上較長時間才有輸出。

6.png

另一方面,某些遊戲公司會給程式設計師評級,比如從初級程式、核心程式一直到行業專家。

7.png

其中一種等級劃分方法是根據能夠解決問題的範圍而定。如下圖,具體來說能夠解決部分業務問題的是初級程式設計師,能夠解決所有業務問題的是核心程式設計師,能夠解決所有技術問題的是副主程,能夠在解決所有技術問題並能夠管理團隊的是主程,能解決任何問題的是行業專家。

8.png

儘管要2年後才動筆,作為後續服務端書籍的調研,一套好的教程應當有好的流程,從遊戲公司的培養模式上汲取經驗,能夠讓讀者看一點就能輸出一點成果,儘量避免看到最後才能做點東西。另,筆者的《Unity3D網路遊戲實戰(第二版)》詳解了一套簡易服務端的實現,歡迎關注。

相關閱讀:拿到一套遊戲服務端原始碼,該從哪看起?

作者:羅培羽

相關文章