為什麼遊戲服務端的入門難度高?怎樣規劃自學路徑?
比起遊戲客戶端,遊戲服務端的入門難度較高。原因在於,其一,客戶端引擎和工具相對完善和統一,學習資料眾多,而服務端至今沒有較強大的方案,都是各個專案自己的一套,且很多缺乏文件;其二,犯錯的風險較大,特別是對於線上遊戲,出bug的危害要比客戶端bug大一些;其三,服務端開發涉及到的技術領域較多,又不直觀,加大了開發難度。
跨越層次多,導致知識盲區大
從技術角度,入門服務端的難點在於需要跨越較多的技術層次。以下是服務端程式的一種分層,這裡我把它分層6層。實際專案中往往某些層的內容較少,不會單獨分出來,但邏輯上的分層大體相似。這6層分別是①基礎層②核心層③框架層④邏輯底層⑤邏輯中間層⑥邏輯上層,各層的內容如下:
①基礎層
數學庫、資料結構、緩衝區、字串處理、Json等
②核心層
網路庫、資料庫、協議編碼解碼、定時器
③框架層
分散式結構、訊息分發、熱更新、資料持久化
④邏輯底層
登入、實體、離線訊息、黑名單、AOI演算法
⑤邏輯中間層
物品、公告、郵件、聊天、稱號、成就、排行榜、簽到、首充
⑥邏輯上層
戰鬥、副本
加上一些運維知識,這6層組成了遊戲服務端技術的知識結構。對於剛畢業的同學,或者剛接觸服務端開發的同學,已有的知識結構大體如下圖所示。下圖展示了普遍的計算機相關專業畢業生可能的服務端開發知識掌握的程度,學校課程大都注重基礎,所以合格的畢業生一般基礎較好,特別對數學、作業系統、資料結構、演算法都有較好的掌握;學校一般會開設網路、資料庫等課程,而且如果參與科創類專案,也可能會用到,所以畢業生對核心層的知識稍有接觸;因為在學校會寫一些程式,或者是課程作業,對簡單的邏輯實現一般都有基礎,所以邏輯中層也算稍有接觸。但其他三個層和遊戲業務關聯較大,一般接觸不多。
為什麼不容易自學
經常能聽說某某策劃自學技術自己做了個好玩的單機遊戲出來,但較少聽說誰自學服務端做的很好的。除了就算做出來也無法直接拿給別人看的原因外,過長的學習流程是導致自學不易的主因。如下圖,要做好服務端開發,可能要先學socket、學網路協議,再由此基礎搭建服務端,然後實現各種功能。
但是核心層的知識,比如網路、資料庫,包含的內容比較多,而且如果要做到高效率、不出錯,需要學習很多內容。比如網路,先丟幾本書,很厚。
比如資料庫,再丟一本書,還是很厚。
這就導致了學習的流程很長。以看書學習為例,如果學客戶端,可能看到第一章就能做個五子棋,看到第二章就能做個貪食蛇,以此類推,每一步都能出點成果。而如果看服務端的,那就完了,可能先啃個200頁的基礎,啥都做不出來,等看到300頁才做個很基礎的,這對自學是非常打擊的。
遊戲公司怎樣培養人新人
如果是比較成熟的遊戲公司,會有一套帶新人的體系。一般而言,會從業務需求出發,先讓新人接觸簡單的業務邏輯,再逐步涉及複雜的業務,當熟悉業務後可能會嘗試一些改動框架底層的任務,以提升技術水平。這樣每次學習基本只需學習一個層次的知識,減少了難度。
如下圖,在一開始時接觸較為簡單的業務,那麼只需仿照邏輯中層的已有程式碼,稍微熟悉支撐它的邏輯底層即可。對於複雜的核心層、框架層無需學會,減少了入門難度。
但也由於業務層不太涉及核心層和基礎層,某些公司不太注重長期的人才培養,僅培養到“能開發業務”這層就停止。對於新人,核心層與基礎就要靠自己學習。業務層的編寫更多是模仿能力,仿照已有的程式碼改動,而核心層會涉及一些底層的知識。
對比於從基礎開始的自學,公司培養模式的學習曲線如下圖的橙色線,學習一點就能出一點輸出。而自學曲線如藍色線,要花上較長時間才有輸出。
另一方面,某些遊戲公司會給程式設計師評級,比如從初級程式、核心程式一直到行業專家。
其中一種等級劃分方法是根據能夠解決問題的範圍而定。如下圖,具體來說能夠解決部分業務問題的是初級程式設計師,能夠解決所有業務問題的是核心程式設計師,能夠解決所有技術問題的是副主程,能夠在解決所有技術問題並能夠管理團隊的是主程,能解決任何問題的是行業專家。
儘管要2年後才動筆,作為後續服務端書籍的調研,一套好的教程應當有好的流程,從遊戲公司的培養模式上汲取經驗,能夠讓讀者看一點就能輸出一點成果,儘量避免看到最後才能做點東西。另,筆者的《Unity3D網路遊戲實戰(第二版)》詳解了一套簡易服務端的實現,歡迎關注。
相關閱讀:拿到一套遊戲服務端原始碼,該從哪看起?
作者:羅培羽
相關文章
- 我的 iOS 開發入門自學路徑iOS
- 遊戲AI研究(三):路徑規劃遊戲AI
- 自學 Java 怎麼入門,怎麼從入門到精通?Java
- 路徑規劃: 淺談路徑規劃演算法演算法
- 2.基於取樣的路徑規劃:RRT
- 遊戲服務端的高併發和高可用遊戲服務端
- 自學前端如何快速入門?怎麼快速入門前端?前端
- 怎樣開啟mongodb服務端?MongoDB服務端
- 策劃入門(一)什麼樣的創意是可行的(轉)
- 遊戲的留存為什麼那麼難調?遊戲
- 不止“簡單”和“困難”,遊戲難度竟然還可以這樣劃分?遊戲
- 為什麼在遊戲裡做一扇好用的“門”這麼難?遊戲
- MySQL DBA 技術難度低為什麼工資比 Oracle 高?MySqlOracle
- 從服務端視角看高併發難題服務端
- 如何設計高難度遊戲遊戲
- 全新的動態規劃入門——從維度談起動態規劃
- Java程式設計師工資為什麼這麼高?想要入門Java怎麼辦?Java程式設計師
- 簡單的路徑規劃案例分享
- 微服務的戰爭:按什麼維度拆分服務微服務
- 為什麼很多大學生認為程式設計很難?入門程式設計怎麼學?程式設計
- 怎麼自學遊戲建模?遊戲
- Nuxt.js服務端渲染入門UXJS服務端
- 【go-web服務端】入門教程GoWeb服務端
- 【IPP SWAP】為什麼熱度這麼高
- 為什麼我要使得GOLang重寫SAAS(軟體即服務)服務端Golang服務端
- 機器學習入門規劃機器學習
- 我為什麼不看好蘋果推出的遊戲訂閱服務?蘋果遊戲
- 分散式微服務為什麼很難?分散式微服務
- 10年網際網路開發者告訴你自學 Java 怎麼入門?Java
- 遊戲為何而難? 談談遊戲的難度設計遊戲
- 路徑規劃之A*演算法演算法
- RRT路徑規劃演算法演算法
- PRM路徑規劃演算法演算法
- 如何用HMS Core位置和地圖服務實現附近地點路徑規劃功能地圖
- redis自學(47)服務端最佳化Redis服務端
- 機器人路徑規劃 A*與D*機器人路徑規劃演算法詳述機器人演算法
- 什麼樣的問題應該使用動態規劃動態規劃
- 在遊戲裡“翻盤”為什麼那麼難?遊戲