寫(xiě)在工作一年之際

火絨正在保護(hù)您的電腦,已保護(hù)365天

一年

去年的11月1號(hào)進(jìn)入這家公司,到現(xiàn)在已經(jīng)整整一年了,也從一個(gè)到處闖禍的實(shí)習(xí)生成長(zhǎng)到可以獨(dú)立負(fù)責(zé)一些任務(wù)的新手了,如果要對(duì)過(guò)去一年做個(gè)評(píng)價(jià)的話(huà),not bad
沒(méi)有什么比困難更能考驗(yàn)一個(gè)人,過(guò)去的一年里,做過(guò)的比較困難的任務(wù),有三個(gè)

第二個(gè)月,第一次獨(dú)立負(fù)責(zé)

image.png

現(xiàn)在回想起來(lái),也是噩夢(mèng)般的經(jīng)歷,我大概做了這些

  • elastic search,之前只是聽(tīng)說(shuō)過(guò)這個(gè)框架但是完全不知道是做什么用的,項(xiàng)目結(jié)束之后已經(jīng)靈活使用了(之后又研究了一些高級(jí)特性,比如function score)
  • redis 也是第一次使用,當(dāng)時(shí)沒(méi)有引入基于redis的分布式鎖框架,就用setnx來(lái)做加鎖,項(xiàng)目完成后特地找了點(diǎn)資料研究了一下,對(duì)它內(nèi)部的實(shí)現(xiàn)也有了點(diǎn)了解(redis的實(shí)現(xiàn)真的是就算只是一個(gè)bit都要想辦法去優(yōu)化)
  • protobuf 同樣第一次使用,剛開(kāi)始很害怕,寫(xiě)了一個(gè)之后才明白并不復(fù)雜(至少使用的時(shí)候不復(fù)雜)
  • 多線(xiàn)程設(shè)計(jì) 當(dāng)時(shí)要做的東西類(lèi)似于在線(xiàn)ktv,有一個(gè)待唱列表,每個(gè)人都能操作,主持人有更高級(jí)的權(quán)限.對(duì)于當(dāng)時(shí)的我來(lái)說(shuō),挑戰(zhàn)很大,多虧大佬們的講解.自己也是一點(diǎn)一點(diǎn)領(lǐng)悟修改,寫(xiě)出了一版不完美但是能跑.想一下當(dāng)時(shí)自己傻傻的埋頭苦寫(xiě)不知道去問(wèn),還讓大佬們主動(dòng)來(lái)指點(diǎn)我,真是羞愧萬(wàn)分
  • 接口設(shè)計(jì) 接口需要哪些參數(shù)? 有些數(shù)據(jù)是不是后端自己就能獲取? 前端傳遞的數(shù)據(jù)是否可信? 如果要返回的數(shù)據(jù),有一部分是邏輯相關(guān)的,是不是要把他們封裝到一起? 對(duì)敏感數(shù)據(jù)用get還是post? 這些是我那段時(shí)間學(xué)到的,這塊是前端大佬們一點(diǎn)一點(diǎn)把我教會(huì)了,十分感激.

最后在兩周延期后有驚無(wú)險(xiǎn)的上線(xiàn)了,這次做的并不好,之后一次還坑了大佬一次,唉,羞愧.
之后也想過(guò)重構(gòu),忙了七八天,大佬給的評(píng)價(jià)是"你這是重寫(xiě),不是重構(gòu)", 為此特地找了幾本重構(gòu)相關(guān)的書(shū),最后意識(shí)到我那確實(shí)是重寫(xiě)了,哈哈

第六-七個(gè)月,負(fù)責(zé)獨(dú)立的模塊

這次是做兩個(gè)模塊,好友聊天和隨機(jī)匹配,匹配之前老項(xiàng)目里有類(lèi)似的,自我感覺(jué)難度不是很大

  • 允許抄,但是要根據(jù)自身場(chǎng)景做變化,不能死搬硬套
    當(dāng)時(shí)我就是死搬硬套,也沒(méi)去思考下兩邊有沒(méi)有什么區(qū)別,被leader狠狠的批了一頓,這次是真的活該哈哈哈,下去之后仔細(xì)研究了一下修改之后確實(shí)看著更自然也更好做了

  • 技術(shù)是為業(yè)務(wù)服務(wù)的,寫(xiě)的再好效率再高,不能滿(mǎn)足業(yè)務(wù)也是白搭
    寫(xiě)匹配的時(shí)候,考慮過(guò)多個(gè)方案,有幾個(gè)可以說(shuō)是為了效率不顧一切吧哈哈,每次都被斃掉,最后leader說(shuō)了一些話(huà),大致意思就是上面這些,也就是從那時(shí)候開(kāi)始自己才真正有這個(gè)意識(shí),做設(shè)計(jì)的時(shí)候也會(huì)仔細(xì)思考一下這塊

  • 代碼中要考慮到極端情況
    "如果redis掛掉一段時(shí)間你這塊會(huì)怎么處理?","那就掛掉嘍".嗯,不出意外又被diss了.第一次聽(tīng)說(shuō)要考慮基礎(chǔ)服務(wù)掛掉代碼如何繼續(xù)運(yùn)行時(shí),我的第一反應(yīng)是基礎(chǔ)服務(wù)都掛掉了,那就都掛了唄,后面自己仔細(xì)想想才體會(huì)到它的真正含義,基礎(chǔ)服務(wù)掛掉并沒(méi)有想象的那么罕見(jiàn),如果是核心邏輯,確實(shí)要考慮到這些情況.

  • 不要過(guò)早優(yōu)化
    當(dāng)時(shí)剛剛看了幾本代碼優(yōu)化方面的書(shū)籍,迫不及待的試試手(這些書(shū)上是提了不要過(guò)早優(yōu)化的),寫(xiě)完之后才意識(shí)到有些優(yōu)化確實(shí)做得太早了,徒勞無(wú)功.
    在整體邏輯尚未成型時(shí)所做的優(yōu)化,一般來(lái)說(shuō)時(shí)負(fù)優(yōu)化.前期整體結(jié)構(gòu)還不固定,業(yè)務(wù)隨時(shí)可能變動(dòng),現(xiàn)有的邏輯也不一定正確,在這種基礎(chǔ)上做的優(yōu)化往往是徒勞無(wú)功.后面改起來(lái)反而更麻煩.但是并不是說(shuō)不做優(yōu)化,通用邏輯封裝這些還是可以做的

  • 要嘗試?yán)斫庥脩?hù),從用戶(hù)的角度去做業(yè)務(wù)
    做到好友聊天這塊時(shí),有這個(gè)場(chǎng)景,用戶(hù)選擇掛斷,這里可能有并發(fā)問(wèn)題,可能另外一個(gè)用戶(hù)提前點(diǎn)擊了結(jié)束,那么請(qǐng)問(wèn)這個(gè)操作能報(bào)錯(cuò)嗎? 當(dāng)然不能,從用戶(hù)的角度看,我不想聊了,想結(jié)束都結(jié)束不了? 這是不能接受的.
    最后附上leader當(dāng)時(shí)說(shuō)的幾句話(huà),個(gè)人認(rèn)為很有意義,如果業(yè)務(wù)出現(xiàn)了異常情況,按照解決方式從好到壞排列分為 1. 后端能解決 2. 用戶(hù)能解決 3. 卡死

一年,開(kāi)發(fā)核心邏輯

135da41db13cfbf6.png

要做一個(gè)游戲,開(kāi)發(fā)時(shí)間一周.時(shí)間很緊,游戲的主流程是我做來(lái)做的,很累.萬(wàn)幸的是按時(shí)完成了.

  • 不要固執(zhí)己見(jiàn),要聽(tīng)取別人的意見(jiàn)
    因?yàn)橹安涣私庥螒蚪巧漠?dāng)前血量設(shè)計(jì),加上時(shí)間緊(只能說(shuō)是當(dāng)時(shí)的托詞),沒(méi)有聽(tīng)取前端同事的意見(jiàn),做到后面果不其然出了問(wèn)題,最終還是改成了他提的那種設(shè)計(jì),這次教訓(xùn)很慘重,大概浪費(fèi)了半天時(shí)間,如果當(dāng)時(shí)能夠仔細(xì)的詢(xún)問(wèn)一下,思考一下,可能節(jié)省出更多時(shí)間,做一些其他地方的優(yōu)化.(這里大概也有些溝通方面的問(wèn)題吧,與君共勉)
  • 不能容忍重復(fù)代碼,要懂得抽離通用邏輯,分離變化與不變
    這點(diǎn)是這次自己做的比較好的,還是上面的血量設(shè)計(jì),一共改了兩次設(shè)計(jì),得益于前期封裝的很好,每次更改設(shè)計(jì)改動(dòng)的代碼不超過(guò)100行.想一下如果當(dāng)時(shí)偷懶沒(méi)做封裝,業(yè)務(wù)邏輯又這么復(fù)雜,肯定不能按時(shí)上線(xiàn)了
  • 寫(xiě)代碼糾結(jié)是好事
    有這個(gè)場(chǎng)景,要把map中所有的值自增,為了這個(gè)糾結(jié)了半個(gè)小時(shí)寫(xiě)了一個(gè)性能和可讀性都還行的設(shè)計(jì),時(shí)間是很緊,但這不是理由,作為一個(gè)程序員,如果沒(méi)有對(duì)優(yōu)雅代碼的追求,那和咸魚(yú)有什么兩樣
  • 對(duì)于核心流程要考慮要任何可能的情況
    參見(jiàn)上面的代碼中要考慮到極端情況,有一個(gè)場(chǎng)景,玩家死亡時(shí)會(huì)可能會(huì)掉落一些物品,如果氪金了就不會(huì)掉了,因?yàn)榍岸艘@示,所以在死亡時(shí)就要計(jì)算好會(huì)掉什么,如果玩家確認(rèn)重生了才會(huì)扣除(氪金當(dāng)然就不扣了),可能掉落的物品肯定用redis來(lái)存了,當(dāng)時(shí)就考慮到如果用戶(hù)死亡后,確認(rèn)放棄前.發(fā)生了一些異常情況導(dǎo)致扣除失敗,這種情況是不能報(bào)錯(cuò)的,如果報(bào)錯(cuò)用戶(hù)就無(wú)法繼續(xù)游戲了,這個(gè)情況是不能接受的,所以對(duì)這塊做了處理,不管能不能扣除成功都確保用戶(hù)可以重生.之后查看線(xiàn)上日志發(fā)現(xiàn)確實(shí)派上用場(chǎng)了,這點(diǎn)算是這次比較得意的設(shè)計(jì)了,嘻嘻.

這一年我學(xué)到了什么

1. 一定一定一定要跟產(chǎn)品確認(rèn)所有不確定的細(xì)節(jié)
這里不是黑產(chǎn)品,產(chǎn)品想做的和程序員想出來(lái)的很可能有很大偏差,如果不做確認(rèn)和可能出現(xiàn)以下兩種情況

  1. 本來(lái)很簡(jiǎn)單的東西程序理解的太復(fù)雜,導(dǎo)致做了很多無(wú)用功
  2. 本來(lái)很復(fù)雜的東西程序理解的太簡(jiǎn)單,導(dǎo)致代碼不可能,最壞的情況就是重寫(xiě)

另外程序主動(dòng)跟產(chǎn)品確認(rèn)需求還有一個(gè)最大的優(yōu)點(diǎn),對(duì)于這個(gè)需求,程序已經(jīng)有自己的理解,并很可能有初步的實(shí)現(xiàn)方案了,而產(chǎn)品可能還不確定自己想做什么,這樣就很有可能將一個(gè)很復(fù)雜的需求簡(jiǎn)化

2. 學(xué)習(xí)一項(xiàng)新技術(shù)時(shí),沒(méi)有什么是比官方文檔更可靠地
花的時(shí)間去鉆研官方文檔,比漫無(wú)目的的看博客好很多.

3. 要懂得請(qǐng)教別人,個(gè)人的思維是有局限的,別人往往能發(fā)現(xiàn)自己的邏輯漏洞
舉個(gè)例子,對(duì)于一個(gè)需求,自己想了一下有了大概的設(shè)計(jì),覺(jué)得是可行的, 這個(gè)時(shí)候請(qǐng)教一下同事,將自己的設(shè)計(jì)復(fù)述一下,如果對(duì)方能理解并且沒(méi)有發(fā)現(xiàn)問(wèn)題,那這個(gè)設(shè)計(jì)就不會(huì)有大的紕漏.可以說(shuō)是起到及時(shí)止損的作用.(PS.請(qǐng)教時(shí)一定要有禮貌和足夠的尊重,大家都很忙,沒(méi)人有義務(wù)去幫你的)

4. 做業(yè)務(wù)時(shí)可以'拿來(lái)主義',但是事后要去研究一下
如果一直都是拿來(lái)主義,不去自己死磕研究一下,技術(shù)不會(huì)有任何進(jìn)步,就真的變成了日常搬磚了

5. 終身學(xué)習(xí)真的不只是說(shuō)說(shuō),要抽出時(shí)間來(lái)學(xué)習(xí)新知識(shí)
工作時(shí)間越長(zhǎng)越能感覺(jué)到自己的不足,各個(gè)方面的知識(shí)都欠缺的很多,要每天抽出些時(shí)間去讀,去學(xué),去使用.業(yè)務(wù)是做不完的,如何抽時(shí)間就見(jiàn)仁見(jiàn)智了.

6. 運(yùn)動(dòng)! 運(yùn)動(dòng)! 運(yùn)動(dòng)!
每天運(yùn)動(dòng)一下,保證三天至少跑步一次. 運(yùn)動(dòng)很重要,并不只是因?yàn)榻】?運(yùn)動(dòng)可以極大的緩解壓力,補(bǔ)充意志力.每天不用動(dòng)的話(huà),心態(tài)真的會(huì)爆炸的.

7. 要明白自己真正想要什么要對(duì)未來(lái)保持憧憬
搞技術(shù)是枯燥的,就算對(duì)技術(shù)再癡迷,也是會(huì)有困倦的時(shí)候,這時(shí)候你需要明白自己真正想要什么,它一定是和技術(shù)無(wú)關(guān),而是和人生相關(guān)的.如果不是想到她,我可能真的無(wú)法堅(jiān)持下來(lái).

結(jié)語(yǔ)

終于把這篇總結(jié)寫(xiě)完了,也算是給自己一個(gè)交代,與諸君共勉.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,144評(píng)論 2 59
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評(píng)論 25 708
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,329評(píng)論 2 89
  • 路一直在走,卻不知道方向在哪? 一路狂奔,卻尋不到終點(diǎn)。 看不到沿路的景, 錯(cuò)過(guò)了,也回不去了。
    都山閱讀 219評(píng)論 1 1
  • 大家連到玩一局斗地主都算計(jì)許久時(shí),恐怕就是,,,大家都長(zhǎng)大了,都利益了吧
    推大石頭的西西弗閱讀 193評(píng)論 0 0

友情鏈接更多精彩內(nèi)容