阿里一年,聊聊我成长了什么,入职阿里的职业生涯感悟
2018.5.31~2019.5.31,一段精彩的旅程,渡過(guò)了在阿里一年的時(shí)光,這段時(shí)光有快樂(lè)、有焦慮、有迷茫、更有思考,思考的是自己過(guò)去的種種不足、思考的是一些現(xiàn)在看來(lái)之前錯(cuò)誤的想法、思考的是如何成為一個(gè)更好的技術(shù)人,將這一些思考分享給看到這些文字的每個(gè)人,共勉。
應(yīng)當(dāng)如何面對(duì)線上的異常/故障
看起來(lái)毫無(wú)意義的一個(gè)問(wèn)題,碰到線上異常/故障如何面對(duì),排查解決了不就好了,但是這真的只是第一層。
最近在想“消防”這個(gè)詞語(yǔ)很有意思,它其實(shí)是兩層意思:
- “消”是消除問(wèn)題
- “防”是防止問(wèn)題
即“消防”這個(gè)詞語(yǔ)表達(dá)的意思應(yīng)該是先消除問(wèn)題再防止相同的問(wèn)題再次發(fā)生。其實(shí)線上的異常/故障也是同樣的道理,我們應(yīng)當(dāng)先及時(shí)止血,把問(wèn)題處理掉,然后深挖問(wèn)題,探究根因,舉幾個(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í)把值寫(xiě)入本地內(nèi)存中?
- 假設(shè)是某段代碼邏輯沒(méi)測(cè)試到導(dǎo)致的,那么是否可以反思總結(jié)為什么這段邏輯沒(méi)有測(cè)試到,未來(lái)的測(cè)試應(yīng)該如何改進(jìn)?
根據(jù)我過(guò)往的經(jīng)驗(yàn),太多公司、太多團(tuán)隊(duì)處理線上的問(wèn)題僅僅滿足于把問(wèn)題處理完就完事,忽略了對(duì)問(wèn)題的復(fù)盤(pán),這對(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)方式,但是這真的說(shuō)明技術(shù)能力強(qiáng)嗎?從今天的思考去看這個(gè)問(wèn)題,我認(rèn)為這更多反應(yīng)的是一個(gè)人的學(xué)習(xí)能力、鉆研能力以及對(duì)技術(shù)的熱情,除此之外再體現(xiàn)不出太多其他東西了。
這個(gè)話題,可能是這一年思考的最多個(gè)的一個(gè)點(diǎn),鉆研是好事,但是實(shí)際上大多時(shí)候的深入鉆研并不在實(shí)際工作中有用,且研究得越深,忘得越快,因?yàn)檠芯康迷缴?#xff0c;那么這個(gè)技術(shù)點(diǎn)關(guān)聯(lián)的技術(shù)點(diǎn)就越多,邊邊角角的忘了,核心的東西不容易串起來(lái)。那么什么是真正的技術(shù)能力,我畫(huà)一張圖概括一下:
簡(jiǎn)而言之,技術(shù)能力 = 解決問(wèn)題的能力,那么同樣都在解決問(wèn)題,大家之間的技術(shù)高低又有什么區(qū)分呢?我認(rèn)為有以下幾個(gè)層次:
- 第一層級(jí),解決當(dāng)下問(wèn)題
- 第二層級(jí),以優(yōu)雅且可復(fù)用的方式解決當(dāng)下問(wèn)題
- 第三層級(jí),解決的問(wèn)題不僅僅能滿足當(dāng)下,還能滿足未來(lái)一段時(shí)間
其實(shí)從這個(gè)角度上來(lái)看,不同的技術(shù)能力,在工作過(guò)程中區(qū)分度是很明顯的:
- 寫(xiě)的代碼是否存在異常風(fēng)險(xiǎn),多線程運(yùn)行下是否存在線程安全問(wèn)題,某段代碼是否會(huì)導(dǎo)致內(nèi)存泄露
- 寫(xiě)的代碼是否優(yōu)雅可復(fù)用,設(shè)計(jì)的框架是否足夠符合開(kāi)閉原則,代碼結(jié)構(gòu)層次是否清晰明了
- 針對(duì)特定的場(chǎng)景,技術(shù)選型、庫(kù)表結(jié)構(gòu)設(shè)計(jì)是否足夠合理,今天你設(shè)計(jì)的框架是只能用一年,還是未來(lái)三年五年都可以持續(xù)使用
- 來(lái)了一個(gè)大的需求,就比如做一個(gè)App的會(huì)員體系功能好了,是否可以在充分分析需求后,精確將需求劃分為幾個(gè)特定的子模塊并梳理清楚模塊之間的關(guān)系
越厲害的人,在代碼設(shè)計(jì)與開(kāi)發(fā)過(guò)程中,越能看到想到一些別人看不到想不到的問(wèn)題,這叫做高屋建瓴;當(dāng)代碼運(yùn)行出現(xiàn)問(wèn)題的時(shí)候,有人1小時(shí)排查出問(wèn)題,有人1分鐘發(fā)現(xiàn)問(wèn)題,這叫做舉重若輕。
因此我認(rèn)為解決問(wè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í)際工作中解決問(wèn)題的方向去努力。
另外,拋開(kāi)這個(gè)點(diǎn),這兩天我在思考,還有一個(gè)體現(xiàn)技術(shù)能力的點(diǎn),就是學(xué)習(xí)能力。現(xiàn)實(shí)中的全棧是很少的,互聯(lián)網(wǎng)這個(gè)行業(yè)的程序員的方向通常有幾類(lèi):
- 服務(wù)端
- 前端
- 移動(dòng)端
- AI
- 嵌入式
- 大數(shù)據(jù)
在同一類(lèi)中,基礎(chǔ)知識(shí)、基本概念、思維方向是一致的,更多可能差異在開(kāi)發(fā)工具、語(yǔ)言上,我精通Java,但是如果明天有一個(gè)需求,使用nodejs、scala、go更好,那么是否可以快速學(xué)習(xí)、快速上手?甚至明天有一個(gè)需求需要寫(xiě)前端代碼,是否可以快速開(kāi)發(fā)、無(wú)bug上線?
所以,解決問(wèn)題的能力 + 學(xué)習(xí)能力,是我認(rèn)為真正的技術(shù)能力,不過(guò)說(shuō)到底,學(xué)習(xí)能力某種程度上也只是為了解決問(wèn)題而已。
不要輕易造輪子
曾幾何時(shí),當(dāng)我們看著github上這么多優(yōu)秀的源代碼的時(shí)候,默默立誓,這輩子我一定要寫(xiě)出一個(gè)牛逼的框架,開(kāi)源在網(wǎng)上。
曾幾何時(shí),公司招聘的時(shí)候,技術(shù)負(fù)責(zé)人激情滿滿地介紹著公司內(nèi)部自研了多少系統(tǒng)并在線上投入使用。
很多對(duì)技術(shù)有追求的朋友,進(jìn)入一家公司可能時(shí)時(shí)刻刻在尋找機(jī)會(huì)去做一些自己造輪子的事情,但是就如同前面所說(shuō)的,衡量真正好技術(shù)的標(biāo)準(zhǔn)就是能否實(shí)實(shí)在在地解決問(wèn)題,自己造輪子風(fēng)險(xiǎn)高、周期長(zhǎng),且需要長(zhǎng)時(shí)間的驗(yàn)證、排坑才能達(dá)到比較好的效果。
隨便舉幾個(gè)例子,在互聯(lián)網(wǎng)發(fā)展的今天:
- 數(shù)據(jù)庫(kù)連接池有dbcp、c3p0、druid
- 本地緩存有ehcache、要用中心緩存有redis、tair
- 服務(wù)化有dubbo、跨語(yǔ)言可以用thrift
- 分布式任務(wù)調(diào)度可以考慮schedulex
- 搜索可以選es、solr
- 更高級(jí)一點(diǎn)圖片存儲(chǔ)可以用七牛、im可以用融云/環(huán)信、音視頻這塊聲網(wǎng)做得比較成熟,所有這些都提供了各個(gè)開(kāi)發(fā)版本的sdk,接入簡(jiǎn)單
只要你有的技術(shù)方面的需求,絕大多數(shù)業(yè)界已經(jīng)有了成熟的解決方案了,根本不需要去專(zhuān)門(mén)自己搞一套。因此我認(rèn)為輕易一定不要造輪子,如果一定要造輪子,那么請(qǐng)想清楚下面幾個(gè)問(wèn)題:
- 你要做的事情是否當(dāng)前已經(jīng)有了類(lèi)似解決方案?
- 如果有,那么你自己做的這一套東西和類(lèi)似解決方案的差異點(diǎn)在哪里?假設(shè)不用你這套,基于已有的解決方案稍加改造是否就能達(dá)到目的?
- 如果沒(méi)有,那么為什么之前沒(méi)有?是你們公司這種場(chǎng)景是獨(dú)一無(wú)二的?還是這種場(chǎng)景對(duì)應(yīng)的解決方案根本就是不可行的所以之前沒(méi)人去搞?
如果想清楚了這些問(wèn)題,那么就去干吧。
關(guān)注軟技能的成長(zhǎng)
這個(gè)點(diǎn)之前沒(méi)有寫(xiě)到,深感遺憾,文章發(fā)表之后一直想要補(bǔ)充進(jìn)來(lái),因?yàn)殛P(guān)注軟技能的成長(zhǎng)是我這一年除了技術(shù)思維轉(zhuǎn)變以外成長(zhǎng)最大的地方。
我們是一個(gè)技術(shù)人沒(méi)錯(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)
- 出了問(wèn)題,我們需要知道對(duì)外應(yīng)當(dāng)怎么說(shuō),對(duì)內(nèi)應(yīng)該怎么做
- 有一個(gè)想法,應(yīng)當(dāng)如何以正確的方式去落地,而不是我有一個(gè)想法直接說(shuō)也不說(shuō)、討論也不討論干就完事了
凡此種種,都需要經(jīng)歷和成長(zhǎng),曾經(jīng)我也以為程序員只要把代碼寫(xiě)好就好了,來(lái)了阿里,才深刻地感覺(jué)到寫(xiě)代碼真的只是工作的一部分(可能50%?)而已。
我相信無(wú)論你在50個(gè)人的小公司還是在5000個(gè)人的大公司,身處3個(gè)人的技術(shù)團(tuán)隊(duì)還是30個(gè)人的技術(shù)團(tuán)隊(duì),沒(méi)有一個(gè)人是單兵作戰(zhàn)的,這個(gè)行業(yè)對(duì)技術(shù)人的要求從單純的技術(shù)要求已經(jīng)越來(lái)越往綜合素質(zhì)去靠,所以,關(guān)注對(duì)自己軟技能的,相信無(wú)論對(duì)當(dāng)下還是對(duì)未來(lái),百利而無(wú)一害。
去提升看問(wèn)題的高度
過(guò)去有太多人在我的公眾號(hào)或者博客下反饋了一個(gè)問(wèn)題:在這個(gè)公司,整天做著增刪改查的工作,對(duì)自己一點(diǎn)都沒(méi)有提高。
對(duì)于這種看法,說(shuō)難聽(tīng)點(diǎn)就是四個(gè)字----目光短淺。我們看:
如果以普通的視角去看,那么一顆樹(shù)那也就只是一棵樹(shù)而已,但是如果跳脫出目前的視角,站在更高的角度去看,它其實(shí)是森林的一部分。你的主管并不是因?yàn)樗悄愕闹鞴芩运蛻?yīng)該你比更高瞻遠(yuǎn)矚,而是因?yàn)樗磫?wèn)題的高度比你更高、想得更遠(yuǎn)、做得更深,所以才成為了你的主管。
把這個(gè)問(wèn)題說(shuō)得實(shí)際點(diǎn):
- 假設(shè)今天你負(fù)責(zé)的是一個(gè)系統(tǒng),那么你僅僅是把這個(gè)系統(tǒng)的基本原理搞懂了?還是可以把上下游有幾個(gè)系統(tǒng)、每個(gè)系統(tǒng)之間如何調(diào)用、依賴(lài)方式都理順?
- 假設(shè)今天你負(fù)責(zé)的是一塊業(yè)務(wù),那么你僅僅把自己負(fù)責(zé)的功能點(diǎn)弄清楚了?還是你可以從最上游開(kāi)始,到你負(fù)責(zé)的系統(tǒng),再到最下游,都思考得非常透徹?
今天與其在抱怨沒(méi)有機(jī)會(huì)、抱怨公司對(duì)自己能力沒(méi)有提升,為什么不去思考機(jī)會(huì)為什么降臨在別人頭上不降臨在你頭上?為什么別人可以從小公司寫(xiě)著一樣的增刪改查走向BAT而你年復(fù)一年還在小公司寫(xiě)著增刪改查?當(dāng)你真正能轉(zhuǎn)變自己的思維模式,跳脫出現(xiàn)在的圈子往更高一個(gè)層次去看問(wèn)題、去提升自己,我相信總會(huì)有發(fā)光發(fā)熱的一天的。
同樣在阿里巴巴,馬老師思考自然、思考環(huán)保、思考人類(lèi)的發(fā)展,你的主管思考團(tuán)隊(duì)未來(lái)的方向和打法,我們?cè)谒伎既绾伟涯硞€(gè)客戶需求完整落地,這就是高度,你未必能想到馬老師想的,但是你可以對(duì)標(biāo)層級(jí)高一點(diǎn)的人,一步一步嘗試往他們的高度去靠。
總而言之:眼界決定高度,多看、多想、多保持好奇心、多問(wèn)幾個(gè)為什么,久而久之自然就邁上了一個(gè)新的臺(tái)階。
學(xué)會(huì)總結(jié)
需求、項(xiàng)目的復(fù)盤(pán)是非常重要的一部分內(nèi)容,然而我之前見(jiàn)過(guò)的太多團(tuán)隊(duì)、太多Leader,只顧著一個(gè)迭代接著一個(gè)迭代,一個(gè)版本接著一個(gè)版本,只滿足于把需求做好,而忽略了總結(jié)的重要性。
我認(rèn)為大到項(xiàng)目、小到需求,如果在完成之后缺乏總結(jié)那么某種程度上來(lái)說(shuō)是失敗的,可以總結(jié)的點(diǎn)非常多:
- 通過(guò)這個(gè)項(xiàng)目/需求,是否吃透了某一塊業(yè)務(wù),搞懂了來(lái)龍去脈
- 通過(guò)這個(gè)項(xiàng)目/需求,是否充分理解了公司某個(gè)技術(shù)框架/基礎(chǔ)組件的用法
- 在整個(gè)項(xiàng)目的設(shè)計(jì)上,有哪些做的不好的地方
- 在整個(gè)項(xiàng)目的開(kāi)發(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)的東西都是散的,久而久之就忘了。通過(guò)充分的總結(jié)之后,犯過(guò)的錯(cuò)誤我們不會(huì)二次再犯,理清楚的業(yè)務(wù)的來(lái)龍去脈銘記在心,對(duì)自己是一種提升,分享給別人對(duì)別人也是很大的幫助。
失敗者失敗的原因各有不同,成功者的做事方式總是相似的,從宏觀角度去看,我認(rèn)為總結(jié)就是成功者之所以能成功,很重要一個(gè)原因。
選擇大于努力
好吧,我承認(rèn)調(diào)皮了,但是這一段我也是很真誠(chéng)的!
人,努力是最重要的,但是選擇也非常重要。有能力是非常好的,有能力的同時(shí),一個(gè)好的Leader、一個(gè)好的團(tuán)隊(duì)將會(huì)讓你在平時(shí)工作中感到無(wú)比舒心,將會(huì)讓你有家一般的溫暖,更能將你的能力最大化!
菜鳥(niǎo)國(guó)際物流技術(shù)團(tuán)隊(duì)就是這么一個(gè)團(tuán)隊(duì)!
最后,非常重要的一點(diǎn):不要害怕面試。通過(guò)面試才能發(fā)現(xiàn)不足,才能知道未來(lái)在技術(shù)道路上還需要在哪些方面進(jìn)行提高,在面試的結(jié)尾,你也可以詢問(wèn)面試官自己有什么不足,面試官一定會(huì)給到你最誠(chéng)懇的建議!
結(jié)合這篇文章和自己的總結(jié):
1、學(xué)習(xí)能力影響技能,探索能力影響高度;
2、重復(fù)造輪子 = 時(shí)間成本浪費(fèi);
3、知識(shí)固化很重要(項(xiàng)目、文檔、博客、總結(jié)...);
4、把持自主選擇權(quán)(大多數(shù)情況下莫得選);
5、環(huán)境很重要
阿里騰訊Android開(kāi)發(fā)十年,到中年危機(jī)就只剩下這套移動(dòng)架構(gòu)體系了!
轉(zhuǎn)載于:https://juejin.im/post/5d01c558e51d45777540fd95
總結(jié)
以上是生活随笔為你收集整理的阿里一年,聊聊我成长了什么,入职阿里的职业生涯感悟的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 通用权限管理系统组件 (GPM - Ge
- 下一篇: 项目复盘