最近剛跳槽,到新公司已經(jīng)干了有兩周時間了,這兩周時間是過得比較充實(shí)的,因?yàn)檫@家新公司是個小公司,以前以單機(jī)開發(fā)為主,服務(wù)器方面我一個人,做兩個游戲的服務(wù)器開發(fā)工作,當(dāng)然,一個很簡單,另一個就相對復(fù)雜點(diǎn),簡單的那個是個弱聯(lián)網(wǎng)游戲,服務(wù)器只需要做好數(shù)據(jù)存檔和登錄支付驗(yàn)證就好了,而另一個,則是相對復(fù)雜的slg游戲,我感覺這是又一款cok,而公司目前并不打算再招服務(wù)器了,所以估計(jì)這個項(xiàng)目我會一個人干到明年吧,等第一款上線賺錢了,可能會再招服務(wù)器。
老實(shí)說,面試的時候,我就覺得這份工作對我而言是一個挑戰(zhàn),而當(dāng)我清楚的了解了公司狀況之后,我依然決定接受這個挑戰(zhàn)。說說我之前的經(jīng)歷吧,大四的時候,學(xué)校安排來北京培訓(xùn)java(培訓(xùn)沒什么丟臉的,出來找工作我也用的真學(xué)歷真背景,不像某峰互聯(lián)),之后我去了培訓(xùn)機(jī)構(gòu)推薦的公司實(shí)習(xí),那個時候,工資2k,然而工作也干得很開心,跟著前輩學(xué)到了不少東西,當(dāng)時是做微信公眾號開發(fā)的,我跟著前輩做微信后臺開發(fā),當(dāng)時使用SpringMVC+MyBatis框架,剛接觸的時候,我自己學(xué)了挺久才弄明白,后來弄明白之后想想,其實(shí)挺簡單,對于邏輯開發(fā)的程序員來說,你只需要弄懂工作流程就好了,頁面怎么跳轉(zhuǎn),跳轉(zhuǎn)怎么傳值,數(shù)據(jù)怎么處理,這些足夠了,當(dāng)然我是個不滿足的人,我會去弄明白,為什么用這個框架、為什么不用別的、用這個有什么好處、如果讓我自己來做這個后臺、我會怎么搭建?帶著這些問題,我會試著自己搭建一下后臺框架(雖然前期大部分是復(fù)制粘貼)。除了框架部分,微信高級接口也是我研究的重點(diǎn),我會去官方文檔看看微信是怎么接入的,然后研究研究前輩的代碼是怎么寫的,所謂的干一行愛一行大概就是這樣吧,當(dāng)時我覺得,微信開發(fā),是很有前途的,而我們公司用的框架,也是最先進(jìn)的(后來看來,確實(shí)這個框架組合是當(dāng)前最流行的框架,而當(dāng)時,微信公眾號也確實(shí)是當(dāng)時互聯(lián)網(wǎng)行業(yè)的一個風(fēng)口,微信后來把h5帶起來了,導(dǎo)致現(xiàn)在一個好的h5前端都是供不應(yīng)求的,薪資很高)。說了這么多,為什么后來又轉(zhuǎn)行做游戲了呢?其實(shí)是這樣的,當(dāng)時在第一家公司,我的上級打算跳槽走了,帶走整個下面的技術(shù),而不帶實(shí)習(xí)生,有那么一兩個月,實(shí)習(xí)生就一直閑著沒事做,對于我來說,這樣過著就太無聊了,我喜歡挑戰(zhàn),于是我投簡歷,重新找了份實(shí)習(xí)工作,在一個游戲公司做java服務(wù)器開發(fā),公司挺大的,幾年前憑借一款slg頁游稱霸游戲行業(yè)(什么游戲我就不說了,說了就知道什么公司了),后來游戲行業(yè)往手游發(fā)展,這款slg也出了手游版,這一款游戲,幾乎支撐了整個公司,再加上后來出的幾款手游,公司發(fā)展挺好的,我所實(shí)習(xí)的部門做的是一款mmorpg手游,從實(shí)習(xí)做到了轉(zhuǎn)正,做了近一年了,然而這款rpg手游的數(shù)據(jù)卻不是太好,第一次封測次日留存23,第二次26(現(xiàn)在這家公司的游戲能達(dá)到80多次日留存),七日就更不用說了,而我也能感覺到,作為一款mmo游戲,玩家之間的交互實(shí)在太少,從頭玩下來,我覺得這是一款單機(jī),失去了mmo的本質(zhì),在項(xiàng)目組準(zhǔn)備進(jìn)行第三次封測的時候,我選擇了離開,原因很多,不僅僅因?yàn)橛螒驍?shù)據(jù)不好,也有一些個人原因吧,不過說實(shí)話,是這家公司帶我走進(jìn)了游戲行業(yè),我很感謝,我覺得游戲行業(yè)是一個非常有前景的行業(yè),甚至比之前我認(rèn)為最好的微信開發(fā)還要好,游戲行業(yè)非常暴利,在這家公司工作就能感受到,策劃文檔中,充滿了挖坑預(yù)留的計(jì)費(fèi)點(diǎn),這一塊可以正常玩兒,但你如果充錢,你就比別人牛逼。網(wǎng)絡(luò)游戲,最重要的,就是控制好平民玩家跟普通玩家的占比以及游戲平衡(當(dāng)意識到公司的游戲如此處心積慮想要坑錢的時候,我突然明白為什么公司的游戲大多被騰訊代理了,為什么騰訊控股,原來如此,沒錢玩兒你**,哈哈)。由此也可以看出,游戲的商業(yè)化,已經(jīng)把游戲公司帶入了一個固定的模式——無條件坑錢,我覺得已經(jīng)失去了游戲的本質(zhì),我看過一本書,叫《游戲人生》(當(dāng)時在cocos2014年開發(fā)者大會上買的。覺得挺值的),書已經(jīng)送人了,但內(nèi)容我看了一大半,從游戲的產(chǎn)生,到玩家的心理,到為什么需要游戲,這本書都詮釋的熱別好(我覺得游戲策劃都應(yīng)該看看這本書,做良心游戲,拒絕一味坑錢)。啊,突然發(fā)現(xiàn)這一段說的有點(diǎn)偏了,說到底,我也只是做游戲服務(wù)器開發(fā)的,我也改變不了游戲行業(yè),我只要做好我做的。其實(shí)大的游戲公司,就應(yīng)該走這種商業(yè)化路線,憑借幾款長生命周期的游戲,支撐公司流水。從轉(zhuǎn)行做游戲之后,我倒是覺得,游戲開發(fā)比web開發(fā)有趣多了,當(dāng)然技術(shù)上也比web難多了,之前發(fā)過一篇討論,web開發(fā)何和游戲開發(fā)的區(qū)別,http://gad.qq.com/content/wendetail/7082370,我把我的答案再粘貼一遍(實(shí)際上是別人要求我上他的號去回答的,于是我就自己回答了我自己的問題):
1. 從第三方支持來說,web后臺有很多成熟的第三方框架,開發(fā)者不需要關(guān)心底層控制器跳轉(zhuǎn)的實(shí)現(xiàn),只需要一個或幾個配置文件,就能完成核心控制器的部分,而開發(fā)者只需要關(guān)注web自身的業(yè)務(wù)邏輯,將邏輯與框架融合即可,使用框架一方面簡化控制層代碼,一方面很好的實(shí)現(xiàn)了業(yè)務(wù)邏輯的分層。而游戲后臺開發(fā)中,因?yàn)楦鞣N游戲的需求差異性很大,從網(wǎng)絡(luò)層,到業(yè)務(wù)邏輯層,各方面都必須根據(jù)自己游戲需求搭建適合自己的框架,因此很難有一些通用的東西能提煉出來一款成熟的框架,游戲后臺開發(fā)基本上需要自己搭建適合自己的框架。
2. 從業(yè)務(wù)邏輯層面來說,web后臺基本上邏輯都是大同小異的,或許這一套系統(tǒng),稍微改改,另一套系統(tǒng)就能用,而游戲就不同了,每個游戲都有自己的特色,根據(jù)策劃的不同需求而實(shí)現(xiàn)不同的邏輯,不過也會有一些通用的模塊,但整體上差異性還是很大的。
3. 從數(shù)據(jù)持久化來說,web的數(shù)據(jù)基本上是很規(guī)整的,表與表之間關(guān)系很明確,并且以后也不會有太大的變化,而游戲中的數(shù)據(jù)多種多樣,隨著開服之后,數(shù)據(jù)的變化也是多種多樣,甚至傳統(tǒng)的關(guān)系型數(shù)據(jù)庫根本無法滿足游戲數(shù)據(jù)持久化的需求,游戲中有很多狀態(tài)和數(shù)據(jù)是需要服務(wù)器來保存的,我個人認(rèn)為,在游戲開發(fā)中,nosql比關(guān)系型數(shù)據(jù)庫更實(shí)用。
4. 從通信層來說,web中的用戶都是一個個獨(dú)立的個體,而游戲中是多人在線的一個游戲世界,在這個游戲世界中,玩家與玩家之間需要進(jìn)行交互,這就需要服務(wù)器實(shí)時的向所有在線玩家進(jìn)行消息廣播,這一點(diǎn)很損耗服務(wù)器性能的,在這方面,游戲后臺要比web做更多的處理,游戲服務(wù)器是一個IO密集的服務(wù)器類型。以上便是我當(dāng)時的答案,或許我的見解尚淺,畢竟我做游戲不到一年,不過對于后臺開發(fā)這塊,我還是有一點(diǎn)話語權(quán)的,從實(shí)習(xí)游戲開發(fā)開始,我便經(jīng)歷了一個轉(zhuǎn)換的過程,幾乎又是一個從零開始的學(xué)習(xí)過程,從mina框架到protobuffer,這些東西,我相信web開發(fā)很少接觸(mina作為網(wǎng)絡(luò)通信框架,web中幾乎只有http通信,protobuffer作為通信協(xié)議,web最多用json,其實(shí)二者形式上差別不大,但數(shù)據(jù)大小千差萬別)。而游戲的邏輯,也是比web復(fù)雜得多,不得不說,web后臺成熟的第三方框架是做的真的很好。經(jīng)歷了上家公司的洗禮,我想我對游戲后臺開發(fā)有了足夠的了解,于是我找到了我現(xiàn)在這家公司,這家公司目前只有我一個服務(wù)器后臺,做兩款游戲,一款是塔防類,準(zhǔn)備由單機(jī)改成弱聯(lián)網(wǎng),服務(wù)器存檔,并做登錄支付驗(yàn)證,另一款,是比較龐大的slg手游,是準(zhǔn)備帶領(lǐng)公司走上巔峰的項(xiàng)目,說一款slg帶領(lǐng)一個公司走上巔峰一點(diǎn)兒不為過,我上家公司就是這樣的,憑借一款《xxxx》(哈哈,名字不透露),走上人生巔峰。我之所以接受這份工作,是因?yàn)槲医邮芴魬?zhàn),從底層寫起,從架構(gòu)寫起,這是作為一年工作經(jīng)驗(yàn)的我想都不敢想的,不過這是一個挑戰(zhàn)自我,證明自我的機(jī)會,我愿意接受這個挑戰(zhàn),人生總會有很多爬坑的時候,但爬過了坑,就真的是人生巔峰了。我接受這個工作的另一個原因,就是公司發(fā)展確實(shí)不錯,以前做的單機(jī),都是很火的(雖然我認(rèn)為我自己一個人也能做,我也是學(xué)過cocos的),而現(xiàn)在公司也準(zhǔn)確的把握了游戲行業(yè)的風(fēng)口——slg,coc和cok的成功案例就能證明一切,mmorpg也不一定能做起來了,moba倒是有可能,但你要跟lol做不到80%的相似,我估計(jì)沒人愿意在手機(jī)玩兒moba,slg或許是性價比最高的了。這么有挑戰(zhàn)的工作,還要從架構(gòu)寫起,這樣的挑戰(zhàn),我喜歡!說說互聯(lián)網(wǎng)業(yè)的書吧,我認(rèn)為這個行業(yè)的書,分為兩種,理論型的和技術(shù)型的,所謂理論型,就是長篇大論互聯(lián)網(wǎng)發(fā)展,行業(yè)模式等,而技術(shù)型,就是類似技術(shù)的工具書,是從技能入手的書,這兩種書,我家里都有,但我發(fā)現(xiàn)買了之后,我很少有時間看,下班沒多少時間,北京上班,大多數(shù)時間都浪費(fèi)在地鐵上了,上班時間,看看理論型的吧,覺得啰嗦,浪費(fèi)時間(后來我發(fā)現(xiàn),做這行,除了會技術(shù),你還是需要去看看牛人眼中的互聯(lián)網(wǎng)的,你需要透過前輩的眼光看世界,不要做IT民工,要做互聯(lián)網(wǎng)從業(yè)者),看看技術(shù)型的吧,讓別人看見了感覺你太low,所以我大多數(shù)時間還是能在網(wǎng)上down到pdf就在電腦看,down不到百度谷歌我要研究的技術(shù),畢竟從事這行,還是用電腦學(xué)技術(shù)好點(diǎn),主要是電腦看久了眼睛會疲憊,偶爾看看紙質(zhì)的書也不錯的。而以前面試的時候,面試官經(jīng)常問,除了大學(xué)課本,你還看什么書???(如果是你們,恰巧又沒看什么書,你們怎么說?),我一般會說,我會自學(xué)其他技術(shù),如cocos2dx,然后買一些技術(shù)指南之類的書看。我覺得這已經(jīng)算最大夸張化了,因?yàn)榇髮W(xué)我真的很少看書,我記憶中就看過一本C++技術(shù)類的,一本C#的,一本Android,還有其他幾本是什么都不大記得了,大學(xué)畢竟十幾層的圖書館,除了英語四六級的時候進(jìn)去復(fù)習(xí),其他時間感覺都浪費(fèi)了這十幾層的圖書館。說說成長過程中遇到的問題吧,如果遇到我解決不了的,以前是先自己百度谷歌,看看有沒有辦法解決,不行就問老大,而現(xiàn)在,先百度谷歌,看有沒有辦法解決,沒辦法在百度谷歌,實(shí)在不行還要看框架源碼如何實(shí)現(xiàn),上國外論壇看外國友人如何解決,問題總能解決的,總會有辦法的。當(dāng)我開始學(xué)習(xí)寫架構(gòu)的時候,我會開始關(guān)心游戲的網(wǎng)絡(luò)層使用什么框架,mina還是netty,數(shù)據(jù)怎么存儲mysql還是mongo,是否需要緩存redis存什么,memcached存什么,緩存什么數(shù)據(jù),數(shù)據(jù)傳輸用什么協(xié)議,json還是protobuffer,怎么寫效率高,最高支持多少并發(fā)等等,我想這些都是我現(xiàn)在需要考慮的問題,當(dāng)然這些都需要根據(jù)游戲具體的需求來決定的,最終服務(wù)器能否高效穩(wěn)定的運(yùn)行,都是取決于我的架構(gòu)是否高效穩(wěn)定,所以這個過程我要不斷學(xué)習(xí),不斷吸取別人的經(jīng)驗(yàn)。剛到新公司的時候,我才體會到,自己寫代碼其實(shí)也是一種挑戰(zhàn),整個后端我自己一個人實(shí)現(xiàn),代碼是否規(guī)范,數(shù)據(jù)如何存儲,都是我說了算,我想我的代碼不僅要高效,還要讓別人看得懂,后來的人能接著我的代碼繼續(xù)寫下去。最后說說Java的題外話,語言之爭,從未停過,為什么有人擁護(hù)Java,有人擁護(hù)PHP,有人喜歡C#,有人喜歡C++,各個語言各有各的優(yōu)勢,業(yè)余時間,我也了解了不少其他語言,go,node.js我都有了解,我覺得go的語言層面支持協(xié)程并發(fā)以及node.js的異步,都是很適合游戲服務(wù)器的,我特別看好node.js,異步io真的是對游戲服務(wù)器很好的特性,并且加入對原聲js支持的mongo模塊也是很方便的(上面我有說到,我相信nosql是很適合存儲游戲數(shù)據(jù)的)。說到游戲行業(yè),我認(rèn)為h5游戲的發(fā)展也是越來越快了,上次白鷺的h5開發(fā)者生態(tài)大會我去了,白鷺的一整套工作流程,以及web vr,真的很令人興奮(第一輪抽獎我還抽了一個暴風(fēng)魔鏡,哈哈?。?,另外,大會的模特挺漂亮,哈哈!2015年,互聯(lián)網(wǎng)行業(yè)也略呈下降趨勢了,不少創(chuàng)業(yè)公司面臨倒閉,泡沫經(jīng)濟(jì)破滅,因?yàn)楹芏嗬习遄ゲ蛔‘?dāng)前經(jīng)濟(jì)形勢,以為不管是啥,有個app就是創(chuàng)業(yè)了,其實(shí)全然不知一款app后面有多少運(yùn)營模式、盈利模式,就像一句諷刺的話,“我有個絕壁好的idea,可以顛覆bat,什么都不缺,就缺個程序員了,等等,千萬別告訴馬云!”,哈哈,聽到這句話,當(dāng)時我就笑了,估計(jì)好多倒閉的創(chuàng)業(yè)公司老板都這么想的吧,他們并不能抓住用戶真正的需求,只有抓住用戶真正的需求,才會抓住用戶的心,真正活下來的,才是用戶真正需要的,然而,相對來說,游戲行業(yè)更是復(fù)雜多變,或許今天玩家喜歡這種游戲,明天玩家就喜歡另一種游戲了,就像我們永遠(yuǎn)也想不到,flappy bird、圍住神經(jīng)病貓這類的游戲竟然能活起來,愚公移山竟然也能讓h5游戲變?yōu)楦顿M(fèi)的可能。就像一句話,“只要站在風(fēng)口上,豬也能飛起來!”,只要抓住了玩家此時此刻真正想要的,產(chǎn)品就一定能做起來。