每天CRUD,程序員如何才能提高?
最近跟一個(gè)阿里的朋友聊到關(guān)于程序員如何把事情做得更好,他提到了很多在阿里的感受,讓我受益匪淺。
所謂“如何把事情做得更好”,就是跳出寫(xiě)代碼這件事,如何把我們的工作做好,獲得更多的個(gè)人成長(zhǎng),獲得更好的績(jī)效考核結(jié)果,并能在其他人中脫穎而出。
思維碰撞下,得到了很多有效的信息,總結(jié)為三個(gè)方面的“管理”能力:
目標(biāo)管理
過(guò)程管理
向上管理
希望每個(gè)人看完都能有所啟發(fā)。
1.目標(biāo)管理
所謂目標(biāo)管理,分為兩個(gè)階段:
- 提出目標(biāo)
 - 管理目標(biāo)
 
提出目標(biāo)
目標(biāo)管理的前提,是必須先能夠提出一個(gè)足夠有價(jià)值的目標(biāo),然后再進(jìn)行達(dá)成。
如果目標(biāo)本身是沒(méi)有價(jià)值,或者說(shuō)價(jià)值很小的,那即使你花費(fèi)了很大力氣去做,然后達(dá)成了,也沒(méi)有什么意義。跟莫斯科一樣,程序員也是不相信眼淚的??鄤谠俣啵脖炔簧瞎?。
那如何能提出一個(gè)足夠有價(jià)值的目標(biāo)呢?
①來(lái)源于自上而下的任務(wù)拆解
經(jīng)常看到有人在各種社區(qū)吐槽華為的“拉通對(duì)齊”。但實(shí)際上,拋開(kāi)某些管理者具體執(zhí)行層面的問(wèn)題,“拉通對(duì)齊”本身是非常有價(jià)值的。
公司的管理者在更高的位置,利用更多的信息進(jìn)行決策,然后獲得明年公司的發(fā)展目標(biāo)和方向。
然后就是將目標(biāo)拆解到各個(gè)部門(mén),各個(gè)部門(mén)需要相互合作達(dá)成目標(biāo)。作為個(gè)人,也會(huì)承接到部門(mén)內(nèi)的子任務(wù),這個(gè)時(shí)候,可以提出自己的一些想法進(jìn)行討論,在充分溝通的基礎(chǔ)上,應(yīng)該達(dá)成一致,然后堅(jiān)決執(zhí)行。
那么這時(shí)候你的目標(biāo),就是跟部門(mén)目標(biāo)是一致的,跟公司的大目標(biāo)也是一致的。
如果你能很好地達(dá)成目標(biāo),或者說(shuō)超出預(yù)期,那么你對(duì)部門(mén)和公司的價(jià)值就是越大的。
②來(lái)源于自下而上的問(wèn)題發(fā)現(xiàn)與解決
經(jīng)??梢钥吹礁鞣N社區(qū)有人提問(wèn),每天 CRUD 怎么才能提高?其實(shí)這個(gè)問(wèn)題的一個(gè)解決思路是,在工作中發(fā)現(xiàn)問(wèn)題,并給出解決方案。
我舉一個(gè)我們公司的真實(shí)案例:一個(gè)后端開(kāi)發(fā)同學(xué),發(fā)現(xiàn)自己組內(nèi)的業(yè)務(wù)需求經(jīng)常會(huì)有很多離線(xiàn)任務(wù)要做。
有的人直接使用 Spring 的 Async 注解,有的人自己新建申請(qǐng)一個(gè)線(xiàn)程池塞任務(wù),有的人利用 Redis 的 blpull/blpush 來(lái)做隊(duì)列來(lái)進(jìn)行生產(chǎn)消費(fèi)。
沒(méi)有統(tǒng)一的方案,有很多重復(fù)勞動(dòng),而且容易因?yàn)榉N種原因造成故障(比如沒(méi)有資源隔離)。
因此,他提出了一個(gè)目標(biāo),做一個(gè)分布式的統(tǒng)一任務(wù)調(diào)度框架,解決組內(nèi)的這些問(wèn)題。
目標(biāo)達(dá)成后,還在全公司進(jìn)行了推廣。后面的結(jié)果大家應(yīng)該能猜到了,升職加薪走上人生巔峰。
有人說(shuō),你這個(gè)肯定是小廠(chǎng)啊,大廠(chǎng)各種工具都很成熟了,沒(méi)啥要做的。
這話(huà)說(shuō)對(duì)了一半,大廠(chǎng)的成熟工具和框架確實(shí)很多,但也是其他人發(fā)現(xiàn)并且實(shí)現(xiàn)的,而且我相信沒(méi)有任何一個(gè)公司或者部門(mén),在任何事情上都已經(jīng)做到完美,總會(huì)存在問(wèn)題和不足的地方等待解決的。
管理目標(biāo)
已經(jīng)有了一個(gè)很有價(jià)值的目標(biāo)了,我們?cè)撛趺催_(dá)成呢?這時(shí)候,我們就需要對(duì)目標(biāo)進(jìn)行管理。
我個(gè)人認(rèn)為最好的方式是“倒排時(shí)間”的 milestone(里程碑)模式。根據(jù)目標(biāo) deadline 來(lái)往前倒排時(shí)間,拆分不同階段的里程碑節(jié)點(diǎn),然后按期檢查當(dāng)前進(jìn)度,最終達(dá)成目標(biāo)。
其實(shí)也不是什么新鮮玩意,很多公司都有在做,但是落實(shí)到具體部門(mén)、小組、個(gè)人上,就不太一樣了。
尤其我想說(shuō)的是個(gè)人和小組上。在我擔(dān)任敏捷小組的 SM(scrum master)期間,發(fā)現(xiàn)很多同學(xué)對(duì)于這種方式的計(jì)劃能力都有所欠缺。
主要有兩個(gè)方面的問(wèn)題:
①估時(shí)問(wèn)題
如果今天只是一個(gè)寫(xiě) SQL 的任務(wù),很多同學(xué)能準(zhǔn)確的估計(jì)大概要花費(fèi)幾分鐘。
但是如果是一個(gè)半年或一兩個(gè)月的項(xiàng)目,讓你以月或周的粒度進(jìn)行拆分,很多同學(xué)就比較難把握了。
這個(gè)其實(shí)不是什么大問(wèn)題,主要是經(jīng)驗(yàn)不足,無(wú)法深刻了解到項(xiàng)目中的模塊拆解粒度與技術(shù)難度。
那怎么做呢?有三個(gè)建議:
- 如果沒(méi)有把握,那就對(duì)里程碑做更細(xì)粒度的任務(wù)拆分。
 - 預(yù)留 Buffer,給自己有轉(zhuǎn)身的余地,能夠面對(duì)突發(fā)情況。
 - 可以請(qǐng)組里更有經(jīng)驗(yàn)的同事或者 TL 進(jìn)行 Review。
 
②進(jìn)度意識(shí)
有了明確的里程碑和時(shí)間后,我們還需要在執(zhí)行過(guò)程去及時(shí)檢查進(jìn)度。比如以周、月為單位,來(lái)檢查自己或者跟進(jìn)合作者的完成進(jìn)度。
如果發(fā)現(xiàn)有延期風(fēng)險(xiǎn),那么就需要提前進(jìn)行風(fēng)險(xiǎn)暴露,想辦法解決問(wèn)題,加快進(jìn)度。
正如上文提到的,如果估時(shí)有一定 Buffer,那么更加容易轉(zhuǎn)身,否則,只能通過(guò)加班來(lái)達(dá)成目標(biāo)了。
以前在做業(yè)務(wù)開(kāi)發(fā)的時(shí)候,產(chǎn)品、前端、后端、測(cè)試等角色關(guān)聯(lián)非常密切,因此在敏捷開(kāi)發(fā)過(guò)程中,會(huì)需要通過(guò)每天的站會(huì)來(lái)溝通進(jìn)度,及時(shí)暴露風(fēng)險(xiǎn)。
現(xiàn)在在做基礎(chǔ)架構(gòu)相關(guān)的工作時(shí)候,可能項(xiàng)目的周期會(huì)更長(zhǎng),比業(yè)務(wù)開(kāi)發(fā)的敏捷迭代周期要長(zhǎng)很多,因此,往往會(huì)通過(guò)周為單位的進(jìn)度分享。
只有按時(shí)完成每個(gè)里程碑節(jié)點(diǎn),我們才有信心按期完成整個(gè)目標(biāo)的交付。
具體的實(shí)施,每個(gè)公司可能都有自己的目標(biāo)管理系統(tǒng),我這里做個(gè)簡(jiǎn)單的表格,更直觀地反應(yīng)如何對(duì)目標(biāo)、里程碑進(jìn)行管理。
2.過(guò)程管理
如果說(shuō)目標(biāo)管理是我們完成任務(wù)的基本要求的話(huà),過(guò)程管理可能是我們獲得“超出預(yù)期”評(píng)價(jià)的重要部分。
我覺(jué)得最好的方式是,在任務(wù) DOD(Definition of Done)的基礎(chǔ)上,你有自己獨(dú)有的一套“過(guò)程性 DOD”。
一般我們?nèi)蝿?wù)的 DOD 是按照一定時(shí)間要求,完成什么功能,上線(xiàn)什么需求。有的可能會(huì)帶上一些性能指標(biāo),比如接口響應(yīng)時(shí)間低于多少,線(xiàn)下故障數(shù)量低于多少等等。
那么如果只是完成了這些要求,那么今天你來(lái)做這個(gè)事情,和另一個(gè)人來(lái)做這個(gè)事情有什么區(qū)別呢?
甚至于如果某個(gè)項(xiàng)目,最終由于種種原因沒(méi)有上線(xiàn),或者中途被終止了,那么是不是你所做的事情都白費(fèi)了呢?所以,你必須有一套自己的“過(guò)程性 DOD”。
下面,我介紹一些我的經(jīng)驗(yàn)和我見(jiàn)過(guò)的大佬們的經(jīng)驗(yàn),大家可以按需取用(業(yè)務(wù)開(kāi)發(fā)和基礎(chǔ)架構(gòu)開(kāi)發(fā)還是有很大不同的,尤其在迭代壓力和做事方法上,所以不能一概而論)。
①完整的調(diào)研報(bào)告
任何一個(gè)任務(wù),都有常規(guī)方案和優(yōu)質(zhì)方案。就像我上面提到的那個(gè)分布式調(diào)度系統(tǒng),普通同學(xué)可能就是按照自己的理解,搞個(gè)能用的方案就行了。
但是優(yōu)質(zhì)的方案,肯定是跳出自己的眼界范圍,博采眾長(zhǎng)的結(jié)果。因此,在確定技術(shù)方案前,最好能先去調(diào)研一下業(yè)界的主流方案,看看別人是不是已經(jīng)有了比較好的解決方案了。
然后把你的調(diào)研結(jié)果形成文檔,這樣不僅能增長(zhǎng)你的技術(shù)視野,還能體現(xiàn)你的良好技術(shù)思考力,這是非常重要的過(guò)程性?xún)?nèi)容。
②完整的技術(shù)設(shè)計(jì)文檔
在確認(rèn)了技術(shù)方案后,一般需要做一個(gè)比較詳細(xì)的技術(shù)設(shè)計(jì)方案。面向數(shù)據(jù)庫(kù)編程?面向 SQL 編程?面向?qū)ο缶幊?面向領(lǐng)域編程?這些都是需要在技術(shù)方案設(shè)計(jì)的時(shí)候仔細(xì)思考的。
一個(gè)好的技術(shù)方案,能鍛煉你的技術(shù)思考力,能指導(dǎo)你后期快速、高質(zhì)量地進(jìn)行開(kāi)發(fā),也能在你以后進(jìn)行維護(hù)的時(shí)候,告訴你當(dāng)時(shí)為啥這么想。
通過(guò)不斷地技術(shù)設(shè)計(jì)、開(kāi)發(fā)、反思,才能學(xué)以致用,快速提高技術(shù)水平。
③問(wèn)題積累與解決方案
問(wèn)題一般有兩種:
一種技術(shù)問(wèn)題:包括開(kāi)發(fā)過(guò)程中遇到的問(wèn)題、線(xiàn)上故障解決等,你在解決這些問(wèn)題后,將排查過(guò)程與解決方案進(jìn)行記錄,形成 BP(Best Practice,最佳實(shí)踐)文檔。
然后可以跟其他同學(xué)進(jìn)行分享和推廣。這樣你不僅能沉淀自己的經(jīng)驗(yàn),還能慢慢形成一定的技術(shù)影響力。
另一種是業(yè)務(wù)問(wèn)題:在做基礎(chǔ)架構(gòu)的同學(xué),往往會(huì)覺(jué)得自己陷入運(yùn)維、客服的怪圈。
一種好的解決方案,是將日常繁瑣的運(yùn)維和客服問(wèn)題進(jìn)行積累記錄,然后努力通過(guò)技術(shù)手段去提高效率自動(dòng)解決類(lèi)似問(wèn)題。
舉一個(gè)例子:過(guò)去我們公司的數(shù)據(jù)庫(kù)升配都是人肉進(jìn)行的,業(yè)務(wù)方提出工單申請(qǐng),然后審批,然后去找 DBA 進(jìn)行溝通,確認(rèn)升級(jí)時(shí)間。
然后到時(shí)間后,大家需要再次溝通確認(rèn)業(yè)務(wù)是否處于流量低峰,是否可以開(kāi)始升級(jí)。然后升級(jí)完成后要進(jìn)行檢查,溝通確認(rèn)已經(jīng)完成。
后來(lái),有人提出了自動(dòng)化解決的方案,通過(guò)打通工單系統(tǒng)、數(shù)據(jù)庫(kù)管理系統(tǒng)、內(nèi)部通知系統(tǒng),將整個(gè)流程自動(dòng)化,提效幾十倍。
④方法論產(chǎn)出
一次項(xiàng)目上線(xiàn)后,對(duì)很多人意味著結(jié)束,但對(duì)很多人來(lái)說(shuō),只是階段性勝利,更重要的是方案論的產(chǎn)出與推廣。
如果一次資源的投入和探索只能產(chǎn)出一次結(jié)果,那性?xún)r(jià)比是不高的,但是,如果有完整的可復(fù)制的方法論產(chǎn)出,那么這一次投入和探索的過(guò)程可以給未來(lái)的無(wú)數(shù)次探索提供指導(dǎo)建議,甚至于能夠快速?gòu)?fù)制,那就是極高的投入產(chǎn)出比。
對(duì)有些更優(yōu)秀的人來(lái)說(shuō),可能產(chǎn)出方法論之后,還能從中找出共性和特性,沉淀為平臺(tái)化的產(chǎn)品,那就是更加的 niubility 了。
舉一個(gè)例子:之前公司做個(gè)一個(gè)分庫(kù)分表的項(xiàng)目,項(xiàng)目上線(xiàn)后,項(xiàng)目成員寫(xiě)了完整的方法論指導(dǎo),在公司進(jìn)行推廣分享。
還將項(xiàng)目過(guò)程中使用的數(shù)據(jù)校驗(yàn)工具,平臺(tái)化為技術(shù)產(chǎn)品,方便其他業(yè)務(wù)線(xiàn)能夠快速使用類(lèi)似的功能。這種就是非常好的范例。
方法論的產(chǎn)出,無(wú)論對(duì)于公司還是對(duì)于個(gè)人成長(zhǎng),都是絕佳的方式。
過(guò)程管理的產(chǎn)物,能很好地體現(xiàn)在結(jié)果上。同樣一年完成了幾十個(gè)需求,年底 Review 的時(shí)候,你只完成了需求,而別人沉淀了幾十篇設(shè)計(jì)文檔、最佳實(shí)踐、方法論,并建立了一定的技術(shù)影響力,你可能就是 B,別人就是 A,這樣的差距就是由于過(guò)程管理造成的。
而且更重要的是能沉淀你自己的學(xué)習(xí)與思考,這是個(gè)人成長(zhǎng)非常重要的部分。即使最終由于各種各樣的原因,在結(jié)果導(dǎo)向上沒(méi)有一個(gè)好的成績(jī),這些過(guò)程管理的結(jié)果都是你最重要的財(cái)富。
一個(gè)五年程序員是擁有五年經(jīng)驗(yàn),還是一個(gè)經(jīng)驗(yàn)用五年?過(guò)程管理往往能告訴你怎么做。
3.向上管理
這部分的內(nèi)容不多,但是可能比上面的所有內(nèi)容更加重要,也是大部分程序員容易缺失的思維方式。
所謂“向上管理”,不是說(shuō)拍老板馬屁。而是一種有效溝通方式,一種科學(xué)的上下級(jí)合作方式。
有了良好的“目標(biāo)管理”和“過(guò)程管理”后,有的人可能會(huì)陷入閉門(mén)造車(chē)的陷阱,按照計(jì)劃或迭代不斷埋頭做事,這是萬(wàn)萬(wàn)不可取的。
很多同學(xué)容易陷入一種誤區(qū),我專(zhuān)心地完成手上的工作,就可以了。但其實(shí)這往往是最危險(xiǎn)的。
因?yàn)榧词鼓闳孔鐾炅?,也可能只是達(dá)到要求,沒(méi)有任何亮點(diǎn),甚至于由于外部的變化你沒(méi)有及時(shí)獲取,還做錯(cuò)了方向。
我們還是需要及時(shí)主動(dòng)跟老板溝通,溝通自己目前的進(jìn)度、困難、計(jì)劃。讓老板能及時(shí)知道你現(xiàn)在的進(jìn)展情況。
很多時(shí)候,當(dāng)老板來(lái)找你的時(shí)候,往往不是什么好事。要么就是你做了什么錯(cuò)事,要么就是他想知道你在做什么,做到什么程度了。無(wú)論哪種情況,都不好。
阿里的朋友跟我分享了一些比較好的形式:
- 定期整理任務(wù)進(jìn)度,將任務(wù)進(jìn)度、遇到的困難、解決方案等簡(jiǎn)明扼要地整理出來(lái),進(jìn)行匯報(bào)。
 - 找老板溝通技術(shù)規(guī)劃,然后一起討論哪些能做,哪些需要砍掉,然后把能做的東西一起安排一個(gè)計(jì)劃進(jìn)行實(shí)現(xiàn)。
 - 多多關(guān)注組內(nèi)同學(xué)、老板的周報(bào),如果發(fā)現(xiàn)有什么困難,及時(shí)提出幫助,共同解決。
 
做事的方法真的很重要,尤其是我們程序員,可能過(guò)多地與代碼打交道,而容易缺乏技術(shù)外的非技術(shù)思維。
而好的非技術(shù)思維,能幫助我們更好地自我成長(zhǎng),更好地脫穎而出,與大家共勉。
作者:阿丸
編輯:陶家龍
出處:轉(zhuǎn)載自微信公眾號(hào)阿丸筆記(ID:aone_note)

















 
 
 
 
 
 
 