在阿里,程序員除了寫代碼,還要做什麼

“寫代碼纔是最爽的,開會什麼的太浪費時間了”,“我是程序員,我只想安安靜靜地寫寫代碼”,類似這樣的話其實在我們身邊經常可以聽到,之前我一度也是認爲想的。但是來了阿里之後,面對龐大的系統交互、錯綜複雜的業務形態、海量的用戶羣體,慢慢發現只是會寫代碼是遠遠不夠的。接下來談談個人的幾點體會,拋磚引玉,說說程序員在代碼之外還應該做些什麼,以便更好的提升自我。

1.閉環思維

閉環思維源於“PDCA”理論:

計劃(Plan) 、執行(Do)、檢查(Check)、行動(Act),循環往復,螺旋上升。

具體到工作中就是這樣的:

  • 功能上線後,作爲程序員的工作並沒有就此結束,我們需要觀察線上運行效果,是不是符合預期,有沒有可以改進的地方,如果有問題,能不能以數據化的方式來說明,進而推動業務的調整。(check/do)
  • 寫代碼之前,要做詳細的系統設計,全面的風險評估、透徹的業務需求理解以及充分的溝通等,要高度重視計劃(Plan)階段的重要性,不然後面實際開發時很可能會出現延期、返工等現象。
  • 對於領導交代和與同事協作的事情,要做到“凡事有交代、件件有着落、事事有迴音”

2.owner意識

所謂owner意識,也可以說是一種責任感、主動精神,你可以不是某個系統的owner,但是這並不妨礙你擁有owner意識。

某個系統存在着一些一直沒有解決的問題,能不能主動站出來提出解決方案!

線上問題報警,主動參與排查,而不是等着別人來看,即時你剛開始的時候並不太瞭解該系統。

深入全面的瞭解系統業務和代碼,而不是僅僅只知道自己負責的那一個模塊,對一個系統的瞭解程度是一個人owner意識的重要體現。

培養自己的owner意識,是一個人快速成長的重要起點!

3.強大的溝通協作能力

程序員絕不僅僅只是寫寫代碼,如果你真的只是安安靜靜的寫代碼,和各方面沒有充分的溝通,你寫的代碼大概率會有這樣那樣的問題。無論是大公司還是小公司,溝通協作都是必須要具備的軟實力。當然這也恰恰是很多程序員不足的地方。

程序員常常給人一種不善於溝通的印象,其實溝通也沒有那麼複雜,不需要什麼高深的技巧。

溝通首先要主動,舉個例子,產品、業務提出需求後,如果你有什麼不理解,你敢於主動去問,不要擔心別人會怎麼看你,即便是看起來幼稚的問題。

主動去溝通,及時去溝通,你才能充分理解業務需求,知道爲什麼要這麼做,主動權纔在你手裏,沒有充分的溝通,後續設計和寫代碼時可能會踩很多坑。

其次學會站在別人的立場去看問題,技術同學往往會糾結在技術如何實現需求上面,滿腦子都是技術思維,要學着站在產品、運營甚至公司、行業的角度的去思考問題,不然在溝通的過程中很可能驢脣不對馬嘴,大家各說各話,達不到良好的溝通效果。

最後,溝通的過程中要能夠控制情緒,有時候會看到技術同學溝通着溝通着火藥味就起來了,溝通變成了互懟,尤其在技術方案的討論過程中!一旦這樣,溝通大概率是無效的。當然有時候“懟”也是一種溝通手段,但是建議慎用,火候不好把握,糊了就不好了!

如果控制情緒呢,這個真的需要去刻意訓練, 這裏就不展開了!

一句話:inner peace !

4.多思考爲什麼,迴歸第一性原理

一個常見的現象是很多開發者不知道或者不清楚到底爲什麼要做這個功能,對業務背景缺乏深刻的認知。程序員不應該只是把自己定位一個開發者,可以嘗試着從多個角度來思考問題。

一個需求提過來了,可以多想想爲什麼會有這個需求,它誕生的背景是什麼,公司爲什麼要做這個事情,這個需求對用戶到底能帶來什麼價值。要培養自己的大局觀!

一個程序員如果只是侷限在自己的那一畝三分地,可能連那塊地最終也耕種不好!

5.深究技術

常聽到類似這樣一句話:“做業務開發很難學到技術”,其實我的觀點恰恰相反,一個良好的業務架構設計是非常考驗一個人的技術和業務功底的。 很多時候覺得學不到技術,是因爲對技術沒有深入的去研究。

更常見的場景是一個功能做完了就不再管了,對該功能中涉及到的技術缺乏總結和深入研究,很多時候只是用了個皮毛。即便只是一個簡單的spring mvc開發,又有多少人研究過源碼如何實現的呢。

程序員不應該只滿足於會用某個技術,更應該深入的去研究原理和具體實現,這樣我們的技術水平才能不斷攀升。

6.精通業務

一個程序員除了精通技術外,還應該努力精通業務,培養自己良好的商業意識,對業務發展有一個更宏觀的認知,對當前做的事情有更準確的判斷,確保大方向上沒有走錯。

在阿里,有些技術leader對某個業務的認知已經超過了業務方和產品經理,甚至自己給自己提需求來促進業務發展,技術走到了業務前面,反過來推動業務的進步,這就是精通業務的力量。

7.用戶思維

所謂用戶思維,就是要多站在用戶的角度來思考問題和決策。

很多時候,不同的技術方案對用戶的體驗影響是很大的。

比如如何嚴格控制商戶預算避免超支,及時提醒商戶預算即將耗盡!

開放服務提供的接口和文檔是否方便開發者對接,對服務的說明是否完整。

接口異常情況下如何友好提示用戶,如何保證用戶數據的一致性,避免用戶誤解等等

當我們站在用戶的角度去思考問題時,對技術方案就會有不同的選擇!

8.軟件工程把控能力

需求開發,尤其在做一些大型項目時,軟件工程把控能力對項目成敗至關重要。

充分理解需求,識別需求中潛在的問題,及時發現,避免後面返工。

全面評估技術方案,技術方案本身有沒有風險點,有沒有不穩定的問題,是否可以充分支撐需求實現。

開發時間安排是否合理,投入資源是否欠缺,如果是倒排需求,更應該認真評估,不然很可能出現延期的情況。

配合開發的其他團隊進度如何,是否可以如期交付,有沒有遇到什麼問題!

良好的把控能力是項目如期高質量交付的重要前提,不然整個開發的過程中很可能是漏洞百出,捉襟見肘,質量也難以保證。

9.持續進化

程序員唯有持續進化,才能跟上技術進步的浪潮,確保價值最大化。

微服務、大數據、區塊鏈、AI等等,不斷出現的技術浪潮,需要我們始終保持強大的學習能力和技術敏感度,嘗試用新技術解決老問題,促進業務發展。

一個程序員一旦停止進化,其價值就會不斷萎縮,技術就是生產力啊!

10.主動思考

程序員不要滿足於別人來安排工作,自己被動執行,要學習主動思考,在工作上化被動爲主動。

比如多思考思考當前的系統有沒有什麼不足,該如何改進。

長期困擾大家的難題,有沒有其他解決方案,行業類有沒有類似的解決方案,別人是如何做的。

業務提出的需求是否合理,對用戶是不是有價值,交互設計是不是合理。

當前系統下一步應該如何演化,能不能通過技術驅動業務發展等等

 

以上是我個人最近的一些思考與總結,你覺得程序員除了寫代碼,還要做什麼,歡迎留言探討,一起思考進步!

更多內容歡迎關注個人微信公衆號,一起成長!

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章