2019年8月在糾結(jié)3個(gè)offer的去向(一個(gè)銀行一個(gè)游戲一個(gè)互聯(lián)網(wǎng))經(jīng)過綜合的考慮選擇來到了最后一家面試的公司,2019年8月8號(hào)入職到現(xiàn)在(2020年10月27號(hào))一段精彩的旅程卵酪,在這里渡過了一年多的時(shí)光,在這一年里有快樂喧枷、有焦慮材泄、有迷茫沮焕,但是更多的時(shí)候是思考,思考著自己的種種不足拉宗,思考著一些之前錯(cuò)誤的想法峦树,思考著如何成為一個(gè)更好的技術(shù)人,希望將一些思考可以分享給大家旦事;
在這一年多的時(shí)間里魁巩,遇到最多的就是?應(yīng)該如何處理線上的異常/故障
在很多人看起來這個(gè)是一個(gè)毫無意義的問題,碰到線上異辰愀。或者故障谷遂,去排查去解決不就好了嗎? 其實(shí)這只是第一層卖鲤。
阿里有個(gè)詞非常的有意思肾扰,“消防” 其實(shí)這里的消防它是有2個(gè)意思
“消”是消除問題
“防”是防止問題
即“消防”這個(gè)詞語表達(dá)的意思應(yīng)該是先消除問題再防止相同的問題再次發(fā)生。其實(shí)線上的異常/故障也是同樣的道理蛋逾,我們應(yīng)當(dāng)先及時(shí)止血集晚,把問題處理掉,然后深挖問題区匣,探究根因偷拔,舉幾個(gè)例子:
假設(shè)是某段代碼的空指針異常導(dǎo)致的,那么是否考慮加強(qiáng)Code Review亏钩,或者使用findbugs插件去自動(dòng)掃描代碼中可能的異常莲绰?
假設(shè)是線上某個(gè)配置修改導(dǎo)致的,那么是否今后變更的修改必須有人雙重檢查一遍才可以修改铸屉?
假設(shè)是本地內(nèi)存中某些值因?yàn)橄到y(tǒng)重啟丟失導(dǎo)致的钉蒲,那么是否引入定時(shí)任務(wù),定時(shí)把值寫入本地內(nèi)存中彻坛?
假設(shè)是某段代碼邏輯沒測(cè)試到導(dǎo)致的顷啼,那么是否可以反思總結(jié)為什么這段邏輯沒有測(cè)試到,我們的測(cè)試應(yīng)該如何改進(jìn)昌屉?
根據(jù)我過往的經(jīng)驗(yàn)钙蒙,太多公司、太多團(tuán)隊(duì)處理線上的問題僅僅滿足于把問題處理完就完事间驮,忽略了對(duì)問題的復(fù)盤躬厌,這對(duì)團(tuán)隊(duì)/對(duì)公司的發(fā)展都是不利的。
什么是真正的技術(shù)能力
之前加了幾個(gè)技術(shù)微信群,看到很多技術(shù)朋友在興高采烈地討論各種源碼扛施,spring源碼我徹底擼了一遍鸿捧、最近深入學(xué)習(xí)了dubbo底層實(shí)現(xiàn)方式,當(dāng)然曾經(jīng)的我也是這樣的疙渣,記得學(xué)習(xí)volatile的時(shí)候一直挖到了volatile在硬件層面上的實(shí)現(xiàn)方式匙奴,但是這真的說明技術(shù)能力強(qiáng)嗎?從今天的思考去看這個(gè)問題妄荔,我認(rèn)為這更多反應(yīng)的是一個(gè)人的學(xué)習(xí)能力泼菌、鉆研能力以及對(duì)技術(shù)的熱情,除此之外再體現(xiàn)不出太多其他東西了啦租。
這個(gè)話題哗伯,可能是這一年思考的最多個(gè)的一個(gè)點(diǎn),鉆研是好事篷角,但是實(shí)際上大多時(shí)候的深入鉆研并不在實(shí)際工作中有用焊刹,且研究得越深,忘得越快内地,因?yàn)檠芯康迷缴畎槌危敲催@個(gè)技術(shù)點(diǎn)關(guān)聯(lián)的技術(shù)點(diǎn)就越多,邊邊角角的忘了阱缓,核心的東西不容易串起來。那么什么是真正的技術(shù)能力举农,我畫一張圖概括一下:
簡(jiǎn)而言之荆针,技術(shù)能力 = 解決問題的能力,那么同樣都在解決問題颁糟,大家之間的技術(shù)高低又有什么區(qū)分呢航背?我認(rèn)為有以下幾個(gè)層級(jí):
第一層級(jí),解決當(dāng)下問題
第二層級(jí)棱貌,以優(yōu)雅且可復(fù)用的方式解決當(dāng)下問題
第三層級(jí)玖媚,解決的問題不僅僅能滿足當(dāng)下,還能滿足未來一段時(shí)間
其實(shí)從這個(gè)角度上來看婚脱,不同的技術(shù)能力今魔,在工作過程中區(qū)分度是很明顯的:
寫的代碼是否存在異常風(fēng)險(xiǎn),多線程運(yùn)行下是否存在線程安全問題障贸,某段代碼是否會(huì)導(dǎo)致內(nèi)存泄露
寫的代碼是否優(yōu)雅可復(fù)用错森,設(shè)計(jì)的框架是否足夠符合開閉原則,代碼結(jié)構(gòu)層次是否清晰明了
針對(duì)特定的場(chǎng)景篮洁,技術(shù)選型涩维、庫表結(jié)構(gòu)設(shè)計(jì)是否足夠合理,今天你設(shè)計(jì)的框架是只能用一年袁波,還是未來三年五年都可以持續(xù)使用
來了一個(gè)大的需求瓦阐,就比如做一個(gè)App的會(huì)員體系功能好了蜗侈,是否可以在充分分析需求后,精確將需求劃分為幾個(gè)特定的子模塊并梳理清楚模塊之間的關(guān)系
越厲害的人睡蟋,在代碼設(shè)計(jì)與開發(fā)過程中宛篇,越能看到想到一些別人看不到想不到的問題,這叫做高屋建瓴薄湿;當(dāng)代碼運(yùn)行出現(xiàn)問題的時(shí)候叫倍,有人1小時(shí)排查出問題,有人1分鐘發(fā)現(xiàn)問題豺瘤,這叫做舉重若輕吆倦。
因此我認(rèn)為解決問題的能力才是技術(shù)能力的真正體現(xiàn),這一年對(duì)技術(shù)的探究我也從研究源碼更多的轉(zhuǎn)變?nèi)W(xué)習(xí)設(shè)計(jì)模式坐求、去學(xué)習(xí)分布式環(huán)境下各種NoSql的選型對(duì)比蚕泽、去學(xué)習(xí)使用Lambda讓代碼更簡(jiǎn)潔,往真正在實(shí)際工作中解決問題的方向去努力桥嗤。
另外须妻,拋開這個(gè)點(diǎn),這兩天我在思考泛领,還有一個(gè)體現(xiàn)技術(shù)能力的點(diǎn)荒吏,就是學(xué)習(xí)能力。現(xiàn)實(shí)中的全棧是很少的渊鞋,互聯(lián)網(wǎng)這個(gè)行業(yè)的程序員的方向通常有幾類:
服務(wù)端
前端
移動(dòng)端
AI
嵌入式
大數(shù)據(jù)
在同一類中绰更,基礎(chǔ)知識(shí)、基本概念锡宋、思維方向是一致的儡湾,更多可能差異在開發(fā)工具、語言上执俩,我精通Java徐钠,但是如果明天有一個(gè)需求,使用nodejs役首、scala尝丐、go更好,那么是否可以快速學(xué)習(xí)宋税、快速上手摊崭?甚至明天有一個(gè)需求需要寫前端代碼,是否可以快速開發(fā)杰赛、無bug上線呢簸?
所以,解決問題的能力 + 學(xué)習(xí)能力,是我認(rèn)為真正的技術(shù)能力根时,不過說到底瘦赫,學(xué)習(xí)能力某種程度上也只是為了解決問題而已。
關(guān)注軟技能的成長(zhǎng)
這個(gè)點(diǎn)之前沒有寫到蛤迎,深感遺憾确虱,文章發(fā)表之后一直想要補(bǔ)充進(jìn)來,因?yàn)殛P(guān)注軟技能的成長(zhǎng)是我這一年除了技術(shù)思維轉(zhuǎn)變以外成長(zhǎng)最大的地方替裆。
我們是一個(gè)技術(shù)人沒錯(cuò)校辩,技術(shù)是我們每個(gè)人的立身之本,但是在工作中我們又不是單純與代碼打交道:
我們有PD辆童,需要向他們了解需求的整體交互
我們有業(yè)務(wù)宜咒,需要全面了解需求的背景
技術(shù)團(tuán)隊(duì)內(nèi)部,我們需要相互之間溝通進(jìn)度把鉴,交流技術(shù)方案故黑、設(shè)計(jì)方案
技術(shù)團(tuán)隊(duì)外部,我們需要對(duì)相互之間的交互方式庭砍,上下游進(jìn)度不理想如何去推動(dòng)
出了問題场晶,我們需要知道對(duì)外應(yīng)當(dāng)怎么說,對(duì)內(nèi)應(yīng)該怎么做
有一個(gè)想法怠缸,應(yīng)當(dāng)如何以正確的方式去落地诗轻,而不是我有一個(gè)想法直接說也不說、討論也不討論干就完事了
凡此種種凯旭,都需要經(jīng)歷和成長(zhǎng)概耻,曾經(jīng)我也以為程序員只要把代碼寫好就好了,來了阿里罐呼,才深刻地感覺到寫代碼真的只是工作的一部分(可能50%?)而已侦高。
我相信無論你在50個(gè)人的小公司還是在5000個(gè)人的大公司嫉柴,身處3個(gè)人的技術(shù)團(tuán)隊(duì)還是30個(gè)人的技術(shù)團(tuán)隊(duì),沒有一個(gè)人是單兵作戰(zhàn)的奉呛,這個(gè)行業(yè)對(duì)技術(shù)人的要求從單純的技術(shù)要求已經(jīng)越來越往綜合素質(zhì)去靠计螺,所以,關(guān)注對(duì)自己軟技能的瞧壮,相信無論對(duì)當(dāng)下還是對(duì)未來登馒,百利而無一害。
去提升看問題的高度
過去有太多人在我的公眾號(hào)或者博客下反饋了一個(gè)問題:在這個(gè)公司咆槽,整天做著增刪改查的工作陈轿,對(duì)自己一點(diǎn)都沒有提高。
對(duì)于這種看法,說難聽點(diǎn)就是四個(gè)字----目光短淺麦射。我們看:
如果以普通的視角去看蛾娶,那么一顆樹那也就只是一棵樹而已,但是如果跳脫出目前的視角潜秋,站在更高的角度去看蛔琅,它其實(shí)是森林的一部分。你的主管并不是因?yàn)樗悄愕闹鞴芩运蛻?yīng)該你比更高瞻遠(yuǎn)矚峻呛,而是因?yàn)樗磫栴}的高度比你更高罗售、想得更遠(yuǎn)、做得更深钩述,所以才成為了你的主管寨躁。
把這個(gè)問題說得實(shí)際點(diǎn):
假設(shè)今天你負(fù)責(zé)的是一個(gè)系統(tǒng),那么你僅僅是把這個(gè)系統(tǒng)的基本原理搞懂了切距?還是可以把上下游有幾個(gè)系統(tǒng)朽缎、每個(gè)系統(tǒng)之間如何調(diào)用、依賴方式都理順谜悟?
假設(shè)今天你負(fù)責(zé)的是一塊業(yè)務(wù)话肖,那么你僅僅把自己負(fù)責(zé)的功能點(diǎn)弄清楚了?還是你可以從最上游開始葡幸,到你負(fù)責(zé)的系統(tǒng)最筒,再到最下游,都思考得非常透徹蔚叨?
今天與其在抱怨沒有機(jī)會(huì)床蜘、抱怨公司對(duì)自己能力沒有提升,為什么不去思考機(jī)會(huì)為什么降臨在別人頭上不降臨在你頭上蔑水?為什么別人可以從小公司寫著一樣的增刪改查走向BAT而你年復(fù)一年還在小公司寫著增刪改查邢锯?當(dāng)你真正能轉(zhuǎn)變自己的思維模式,跳脫出現(xiàn)在的圈子往更高一個(gè)層次去看問題搀别、去提升自己丹擎,我相信總會(huì)有發(fā)光發(fā)熱的一天的。
同樣在阿里巴巴歇父,馬老師思考自然蒂培、思考環(huán)保、思考人類的發(fā)展榜苫,你的主管思考團(tuán)隊(duì)未來的方向和打法护戳,我們?cè)谒伎既绾伟涯硞€(gè)客戶需求完整落地,這就是高度垂睬,你未必能想到馬老師想的媳荒,但是你可以對(duì)標(biāo)層級(jí)高一點(diǎn)的人抗悍,一步一步嘗試往他們的高度去靠。
總而言之:眼界決定高度肺樟,多看檐春、多想、多保持好奇心么伯、多問幾個(gè)為什么疟暖,久而久之自然就邁上了一個(gè)新的臺(tái)階。
學(xué)會(huì)總結(jié)
需求田柔、項(xiàng)目的復(fù)盤是非常重要的一部分內(nèi)容俐巴,然而我之前見過的太多團(tuán)隊(duì)、太多Leader硬爆,只顧著一個(gè)迭代接著一個(gè)迭代欣舵,一個(gè)版本接著一個(gè)版本,只滿足于把需求做好缀磕,而忽略了總結(jié)的重要性缘圈。
我認(rèn)為大到項(xiàng)目、小到需求袜蚕,如果在完成之后缺乏總結(jié)那么某種程度上來說是失敗的糟把,可以總結(jié)的點(diǎn)非常多:
通過這個(gè)項(xiàng)目/需求,是否吃透了某一塊業(yè)務(wù)牲剃,搞懂了來龍去脈
通過這個(gè)項(xiàng)目/需求遣疯,是否充分理解了公司某個(gè)技術(shù)框架/基礎(chǔ)組件的用法
在整個(gè)項(xiàng)目的設(shè)計(jì)上,有哪些做的不好的地方
在整個(gè)項(xiàng)目的開發(fā)(針對(duì)程序員而言)凿傅,是否踩了坑缠犀,犯了低級(jí)的錯(cuò)誤
在整個(gè)項(xiàng)目的進(jìn)度把控上、人員安排上聪舒、上下游協(xié)調(diào)上辨液,是否存在不足之處
經(jīng)歷了某次大促的值班,是否對(duì)可以熟練使用公司的監(jiān)控工具箱残,遇到突發(fā)事件室梅,是否快速有效地進(jìn)行了解決
任何工作一定對(duì)個(gè)人都是有提升的,但是不會(huì)總結(jié)的人疚宇,在每個(gè)項(xiàng)目/需求中成長(zhǎng)的東西都是散的,久而久之就忘了赏殃。通過充分的總結(jié)之后敷待,犯過的錯(cuò)誤我們不會(huì)二次再犯,理清楚的業(yè)務(wù)的來龍去脈銘記在心仁热,對(duì)自己是一種提升榜揖,分享給別人對(duì)別人也是很大的幫助勾哩。
失敗者失敗的原因各有不同,成功者的做事方式總是相似的举哟,從宏觀角度去看思劳,我認(rèn)為總結(jié)就是成功者之所以能成功,很重要一個(gè)原因妨猩。
人潜叛,努力是最重要的,但是選擇也非常重要壶硅。有能力是非常好的威兜,有能力的同時(shí),一個(gè)好的Leader庐椒、一個(gè)好的團(tuán)隊(duì)將會(huì)讓你在平時(shí)工作中感到無比舒心椒舵,將會(huì)讓你有家一般的溫暖,更能將你的能力最大化约谈!