從2015年的6月中旬,到2016年的5月下旬洛姑,將近一年的實習生活在愉快而又青澀的歲月中悄然結束汹胃,雖然命運的齒輪沒有停止轉動婶芭,但我想還是有必要做一下這一年來的總結,也順便展望一下我即將開始的畢業(yè)后的新生活着饥。
總的來說犀农,這一年的收獲比我預期的要多。不僅技術實力有了很大提升宰掉,做事的方式也有了很大改變呵哨,更重要的,這一年的工作經(jīng)驗轨奄,讓我更清楚地認識到了自己哪里存在不足仇穗,也更清楚了自己未來的發(fā)展走向。在這篇總結中戚绕,我將分享我這一年來纹坐,在技術上,工作上舞丛,思考上等諸多方面得到的經(jīng)驗耘子,僅作與君共勉之用。
一直希望開發(fā)游戲的我因各種機(命)緣(運)和(的)巧(選)合(擇)來到了北京球切,在一家游戲公司從事客戶端開發(fā)實習生的工作谷誓,也有幸來到了一個新的項目組,有機會體驗一款游戲從零到一吨凑,再從一到一百的過程捍歪。但其實這款游戲到目前為止也還處在從零到一的過程户辱,只有成功公測之時,才能踏上從一到一百的征程糙臼。
我剛來到之時庐镐,項目還沒有立項,客戶端只有三個人:我?guī)煾副涮樱枥习灞啬妫婷米樱掌饕仓挥腥齻€人揽乱,策劃也只有三個人名眉,加上QA和技術主管(其實我也不知道該怎么叫)等也就十幾個。平時主要問題就是跟這三個客戶端“老人”來交流凰棉,恰好他們也很愛玩游戲损拢,工作之余的話題也多了起來。我?guī)煾甘莻€有些羞澀又有些正經(jīng)的人撒犀,翔老板很有意思福压,引擎妹子的年齡一直是個迷,出生日期仿佛會隨著時間的推移而提前绘证。 我就在這樣一個不大的團隊中開始了第一份commit隧膏。
在做了幾個小功能之后,時間大概是在開始一個月后吧(在我來之后不久我們的立項通過了)嚷那,我接到了一個比較重要的模塊胞枕。評審的時候,有人擔心我無法很好地完成魏宽,因為對于一個新人來說腐泻,在還不能完全熟悉自家引擎和框架的情況下,能不能很好地完成一個復雜且重要的模塊確實是一個值得擔憂的問題队询。但我?guī)煾附o予了我極大的信任派桩,堅持讓我去做,在這件事情上蚌斩,我是很感激的铆惑。當時的我,也有一點擔心送膳,不過更多的是在考慮如何很好地完成员魏,畢竟大學三年我?guī)缀跻恢痹谧鲰椖浚写蟮挠行〉牡龀鰜韺ξ襾碚f沒問題撕阎,但我很清楚,這個東西和我大學前三年做的東西的難度是兩個級別碌补。
當時我自詡項目經(jīng)驗并不少虏束,所以對策劃們并沒有完全以新人自居棉饶,在做那個模塊的時候,有些問題我以堅守程序的底線為目的镇匀,和負責該模塊的策劃妹子產(chǎn)生了一些比較大的分歧照藻,那幾天在討論該模塊的時候,總感覺有些尷尬坑律。事后想想岩梳,當時我的處理方式確實不對囊骤,即使我現(xiàn)在依然認為我堅持的是正確的晃择,但我應該考慮到,一個工作經(jīng)驗比你多的人也物,堅持一個意見必然有其理由宫屠,一個新人并不應該直接下結論去反駁,正確的做法應該是找能正確處理這件事的人去協(xié)商解決滑蚯。但是我當時沒有去找我?guī)煾咐缩澹侵苯佑梦业挠^點毫不留情地去批判她的觀點,造成了短暫的不愉快告材,我覺得我當時可能并沒有充分考慮到她的想法坤次。
不過這件事情終歸過去了,我也不算特別順利地完成了這個模塊斥赋。當時寫完就感覺很多地方設計的不夠合理缰猴,如果讓我現(xiàn)在重新寫一遍,可能就不會有那么多設計上的問題了疤剑。
其實對于代碼結構的把控滑绒,會隨著經(jīng)驗的增加而不自覺的變好,比如我在實習結束前寫的那些功能隘膘,和最初寫的那些功能疑故,代碼的質量是截然不同的,但是中間并沒有很明顯地感受到能力的提升弯菊。走之前要暫時把我所寫的功能交接給別人纵势,別人問我你的代碼風格是什么樣的,我笑說那得看什么時期了管钳。<b>所以并不需要刻意地感受自己提升了多少钦铁,多寫多練多思考,自然會有提升蹋嵌。</b>
再往后育瓜,項目組里陸續(xù)加入了許多新成員,在隊伍壯大的同時栽烂,游戲也越來越完善躏仇,代碼也越來越多恋脚。越大的項目,不管前期設計的多么好焰手,后期總會遇到一些問題糟描,或者,前期你認為好的設計书妻,隨著你的經(jīng)驗的增長船响,你可能會覺得有更好的設計《懵模總之见间,后期開發(fā)對前期開發(fā)時的修改幾乎是無法避免的。
我在做一些模塊的優(yōu)化的時候工猜,改過自己的設計米诉,也跟別人溝通過,改過別人的設計篷帅。改代碼的結構是件很頭痛的事情史侣,尤其是當這個代碼是一些基礎類的時候,需要考慮的東西很多魏身,而且也面臨著很大的風險惊橱。改的時候,難免要耽誤一些時間箭昵,但我相信在對成本進行正確評估之后決定重構的代碼税朴,經(jīng)修改后會更大地節(jié)省你后續(xù)開發(fā)維護的成本。這就引入了一個重要的話題宙枷,如何去評估修改的成本和修改后所帶來的收益掉房。本文不是教科書,沒法對其做討論慰丛,我所能分享的就是卓囚,<b>在你想改的時候,別因為有成本就直接放棄诅病,至少嘗試和其他人交流一下哪亿,因為既然你想改,那就說明這段代碼有些問題贤笆。</b>
在做修改的時候蝇棉,我也明顯感覺到了我的代碼風格的一個變化。起初芥永,我總是喜歡寫最“精致”的代碼篡殷,讓代碼盡可能的少運行,使效率達到最大埋涧,現(xiàn)在看來這種想法其實是很幼稚的板辽。拋開特殊的情況不談奇瘦,大部分情況下,加一個if判斷劲弦,或者把一個循環(huán)里的東西拆到多個循環(huán)里耳标,不會影響什么效率,反而會提升代碼的穩(wěn)定性和可讀性邑跪。但這樣寫次坡,總覺得有些別扭,好像原本就不需要執(zhí)行的代碼非要執(zhí)行一次画畅,浪費計算資源砸琅。后來我終于明白,有些時候夜赵,這并不是不需要執(zhí)行的代碼明棍,而是必要執(zhí)行的代碼乡革。
一個接口寇僧,外部傳來一個參數(shù),你是否要對其進行空判斷呢沸版?不管調用這個接口的人經(jīng)驗多么豐富嘁傀,你都無法保證這個參數(shù)會不會由于各種原因變成了null,加一個if视粮,讓代碼變得穩(wěn)定细办,不會崩潰,并且并不會影響效率(絕大多數(shù)情況下)蕾殴,還可以上傳錯誤日志笑撞,比直接使用不知道高到哪里去了。現(xiàn)在我的代碼钓觉,凡是重要的地方茴肥,都會進行必要的判斷等處理,把代碼穩(wěn)定性放在第一位荡灾,結果自然是exciting瓤狐!
隨著游戲開發(fā)經(jīng)驗的增加,關于游戲內容本身的需求批幌,其實對我來說已經(jīng)沒有任何障礙了础锐,但我?guī)煾附o我的一個任務讓我意識到,對于一個游戲開發(fā)者來說荧缘,即使有人給你開發(fā)游戲引擎皆警,你要做的也遠遠不僅僅是處理游戲邏輯。我接到的一個任務是開發(fā)安卓和蘋果的本地推送(通知)截粗,起初我確實比較頭痛信姓,因為我從來沒接觸過安卓和蘋果的開發(fā)恢着,最多會一點Java,objc對于我這個零基礎的人來說真是看都不想再看一眼财破。但是任務還得做掰派,說好的編程最重要的是思想呢?于是上官網(wǎng)找接口左痢,遇到問題谷歌百度一起用靡羡,一天基本把iOS的功能大致實現(xiàn)了,雖然我不會objc俊性,但是蘋果這方面的借口設計的比較簡單明了略步,很快就能搞定。但是安卓我就遇到了很度坑定页,其實相信其他人做安卓也會遇到一些類似的坑吧趟薄。
說實話做安卓這個功能是我寫這么多年代碼第一次感到絕望的時候,因為安卓的開發(fā)我真的不懂典徊,也沒時間學杭煎,也不能把這個東西拖很久(雖然最后確實拖了一段時間)。我明明已經(jīng)按照demo寫了怎么還是收不到卒落?為什么另一個游戲能收到我收不到羡铲?為什么我發(fā)的推送另一個游戲收到了啊儡毕?為什么收到通知不能響應耙睬小?開機自動注冊我已經(jīng)解決了怎么又沒有了腰湾?點擊通知欄怎么沒有反應難道要自己寫雷恃?推送的時間怎么不對呢?還有很多問題费坊,各種問題把我逼到了絕路倒槐,當然主要還是因為我不懂安卓。那段時間我有幾天晚上獨自一人待到11點才走葵萎,問了各路人馬导犹,公司內的公司外的都有。我還是希望自己能做出來羡忘,我也不能把別的項目組的人叫來直接幫我寫啊谎痢,我今天不寫以后也得寫,自己努力做一下我相信是有好處的卷雕。最后斷斷續(xù)續(xù)节猿,折騰了很長一段時間,終于把它全部完成了,當時我真是長舒了一口氣滨嘱。這真是我遇到的最大的麻煩峰鄙,但是以前我有一個念頭,什么事情你堅持做了太雨,都會有解決辦法吟榴,但其實以前沒遇到故這么大的困難。這次能堅持下去囊扳,是因為這是工作吩翻,必須要做,即使做不出來也要做下去锥咸,最后還真的做出來了狭瞎,從此我更加相信這個念頭,<b>只要堅持去做搏予,都會有解決辦的熊锭。</b>
這個功能的開發(fā)過程中還有一個小插曲,我上級的上級雪侥,簡稱為我boss吧(我直接上級應該是我?guī)煾竿胍螅M里的客戶端主管,然后上級的上級就是主管這個項目的技術主管校镐,其實我也不知道這個職級對不對哈)亿扁。我做iOS端的這個功能的時候,發(fā)現(xiàn)接口設計的比較簡單鸟廓,代碼也不多,雖然自己沒學過objc但是看起來感覺也不難啊襟己,想著要不試試自己邊學邊寫吧引谜。但是寫起來發(fā)現(xiàn),真的是照著網(wǎng)上的一個字符一個字符的敲擎浴,說實話如果你objc零基礎员咽,看objc的代碼真的不一定看得懂,但我還是傻乎乎地繼續(xù)敲著贮预。我boss這時候過來問我贝室,你是在自己寫嗎?我當時還很不好意思地說“我感覺挺簡單的就像自己試試”仿吞。然后boss跟我說這東西并不簡單之類的滑频,而且現(xiàn)在也沒有必要去學,時間也來不及唤冈。其實boss說的是對的峡迷,時間確實來不及,至于學不學,我不系統(tǒng)地學objc而僅僅只是為了完成一個功能簡單看看語法照著網(wǎng)上的抄绘搞,這種學有什么意義呢彤避?下次肯定會忘記。于是我直接拿網(wǎng)上的代碼夯辖,然后參考其他的琉预,最后弄出來了,當時第一感覺就是蒿褂,幸虧沒邊學邊寫模孩,要不然得寫到啥時候。有時候還是高估自己了贮缅,幾行代碼只是說簡單的實現(xiàn)一個功能榨咐,還有應對你的需求做調整,而且谴供,objc那代碼块茁,真是學起來很不習慣,我是再也不想碰了桂肌,當然有單子過來肯定還是會解決啦数焊,我就是借機吐個嘈。所以我想表達的就是崎场,<b>工作中先以完成任務為主要目標佩耳,并千萬不要高估自己,毫無把握的事情不要輕易嘗試谭跨,否則你會被坑的干厚,而且這種坑是無意義的,踩了就只有教訓螃宙,沒有經(jīng)驗蛮瞄。</b>
之后的技術上和工作上的東西就沒有太多可以分享的了,也算經(jīng)歷了一些風雨吧谆扎,基本上都是家常便飯了挂捅,不談也罷。在北京實習這段時間堂湖,也算是經(jīng)歷了一些大事吧闲先,也許是因為自己真正處在了互聯(lián)網(wǎng)的浪潮里,所以對于一些事情也會發(fā)表一些看法吧(其實是為了在知乎上騙粉噗雖然現(xiàn)在才131個粉絲)无蜂。我只想談一件事伺糠,就是魏則西事件。
魏則西事件酱讶,可謂是把百度再次推上了風口浪尖退盯,一望之下全是各路口誅筆伐,但是有心人一定注意到了,大家的指責最開始都集中于百度渊迁,而后才轉到了兼管部門或是武警醫(yī)院慰照。事情一出,始作俑者當然會將矛頭指向最面向公眾的責任單位琉朽,也就是百度毒租,而后一部分人想到了這個鍋不能百度背,武警醫(yī)院三甲資質箱叁,行業(yè)監(jiān)管難道讓百度來做嗎墅垮?于是大家紛紛醒悟,都看到了問題的本質耕漱。這其實沒什么算色,正常人都會這樣做,但是不是人們在不受太多束縛的時候螟够,發(fā)表的言論太過于沖動且少了一些思考呢灾梦?毫無疑問這是個浮躁的時代,而大部分人卻長期無法達到自己的理想狀態(tài)所以變得暴戾妓笙,對于時事習慣于先評價再思考或者只評價不思考若河,當然在這個時代背景下也許大部分人都有意無意地這么做了,似乎變成了一種合理的方式寞宫。<b>總而言之萧福,你也無法要求所有人都經(jīng)過深思熟慮之后再發(fā)表言論,這就是社會現(xiàn)實辈赋,所以后來我學會了旁觀鲫忍,不再過多地參與到激烈的討論中,這些事炭庙,說實話饲窿,與我的關系真的不是特別大,雖然我也對一些事情感到其氣憤焕蹄,可是想想我也無法做什么,只能靜靜看著了阀溶。</b>
經(jīng)歷了這些腻脏,終于讓我明白了一個道理,這些事情由他們去爭論就好了银锻,跟我自身利益關系不大的永品,憑什么要求別人進行思考?況且自己思考的也不一定對击纬。我只需要做好我自己鼎姐,做好我的工作,做好我的游戲,賺好我的錢炕桨,愛好我愛的人饭尝,至于其他的東西,該怎么樣就怎么樣吧献宫。
我對游戲有執(zhí)著钥平,我從小時候就夢想著開發(fā)游戲。因為今年畢業(yè)設計出了一些事情姊途,導致我現(xiàn)在已經(jīng)畢業(yè)了還在寫這篇文章涉瘾,在寫這段的時候我其實明天就要正式上班了。很慶幸大學四年過后我依然對游戲有熱情捷兰,依然能堅持夢想立叛,也找了不錯的工作,家庭也挺和睦贡茅,沒有什么后顧之憂秘蛇,所以,還有什么理由不努力奮斗呢友扰?
愿所有人都能安好彤叉。
歡迎關注知乎:windsmoon