1. 程式人生 > >談談程式設計師的非技術思維

談談程式設計師的非技術思維

最近跟一個阿里的朋友聊到關於程式設計師如何把事情做得更好,他提到了很多在阿里的感受,讓我受益匪淺。

所謂“如何把事情做得更好”,就是跳出寫程式碼這件事,如何把我們的工作做好,獲得更多的個人成長,獲得更好的績效考核結果,並能在其他人中脫穎而出。

思維碰撞下,得到了很多有效的資訊,總結為三個方面的“管理”能力,目標管理、過程管理、向上管理。

相信每個人看完都能有所啟發。 

1.目標管理

所謂目標管理,分為兩個階段,提出目標 和 管理目標。

1.1 提出目標

目標管理的前提,是必須先能夠提出一個足夠有價值的目標,然後再進行達成。

如果目標本身是沒有價值,或者說價值很小的,那即使你花費了很大力氣去做,然後達成了,也沒有什麼意義。

跟莫斯科一樣,程式設計師也是不相信眼淚的。苦勞再多,也比不上功勞。

那如何能提出一個足夠有價值的目標呢?

1)來源於自上而下的任務拆解。

經常看到有人在各種社群吐槽華為的“拉通對齊”。但實際上,拋開某些管理者具體執行層面的問題,“拉通對齊”本身是非常有價值的。

公司的管理者在更高的位置,利用更多的資訊進行決策,然後獲得明年公司的發展目標和方向。然後就是將目標拆解到各個部門,各個部門需要相互合作達成目標。作為個人,也會承接到部門內的子任務,這個時候,可以提出自己的一些想法進行討論,在充分溝通的基礎上,應該達成一致,然後堅決執行。

那麼這時候你的目標,就是跟部門目標是一致的,跟公司的大目標也是一致的。

如果你能很好得達成目標,或者說超出預期,那麼你對部門和公司的價值就是越大的。

2)來源於自下而上的問題發現與解決

經常可以看到各種社群有人提問,每天CRUD怎麼才能提高?

其實這個問題的一個解決思路是,在工作中發現問題,並給出解決方案。

我舉一個我們公司的真實案例。

一個後端開發同學,發現自己組內的業務需求經常會有很多離線任務要做。有的人直接使用spring的Async註解,有的人自己新建申請一個執行緒池塞任務,有的人利用redis的blpull/blpush來做佇列來進行生產消費。

沒有統一的方案,有很多重複勞動,而且容易因為種種原因造成故障(比如沒有資源隔離)。

因此,他提出了一個目標,做一個分散式的統一任務排程框架,解決組內的這些問題。

目標達成後,還在全公司進行了推廣。

後面的結果大家應該能猜到了,升職加薪走上人生巔峰。

有人說,你這個肯定是小廠啊,大廠各種工具都很成熟了,沒啥要做的。這話說對了一半,大廠的成熟工具和框架確實很多,但也是其他人發現並且實現的,而且我相信沒有任何一個公司或者部門,在任何事情上都已經做到完美,總會存在問題和不足的地方等待解決的。

1.2 管理目標

已經有了一個很有價值的目標了,我們該怎麼達成呢?

這時候,我們就需要對目標進行管理。

我個人認為最好的方式是“倒排時間”的milestone(里程碑)模式。根據目標deadline來往前倒排時間,拆分不同階段的里程碑節點,然後按期檢查當前進度,最終達成目標。

其實也不是什麼新鮮玩意,很多公司都有在做,但是落實到具體部門、小組、個人上,就不太一樣了。

尤其我想說的是個人和小組上。

在我擔任敏捷小組的SM(scrum master)期間,發現很多同學對於這種方式的計劃能力都有所欠缺。

主要有兩個方面的問題。

1)估時問題

如果今天只是一個寫sql的任務,很多同學能準確的估計大概要花費幾分鐘。但是如果是一個半年或一兩個月的專案,讓你以月或周的粒度進行拆分,很多同學就比較難把握了。這個其實不是什麼大問題,主要是經驗不足,無法深刻了解到專案中的模組拆解粒度與技術難度。

那怎麼做呢?有三個建議

  • 如果沒有把握,那就對里程碑做更細粒度的任務拆分
  • 預留Buffer,給自己有轉身的餘地,能夠面對突發情況
  • 可以請組裡更有經驗的同事或者TL進行review

2)進度意識

有了明確的里程碑和時間後,我們還需要在執行過程去及時檢查進度。

比如以周、月為單位,來檢查自己或者跟進合作者的完成進度。

如果發現有延期風險,那麼就需要提前進行風險暴露,想辦法解決問題,加快進度。正如上文提到的,如果估時有一定buffer,那麼更加容易轉身,否則,只能通過加班來達成目標了。

以前在做業務開發的時候,產品、前端、後端、測試等角色關聯非常密切,因此在敏捷開發過程中,會需要通過每天的站會來溝通進度,及時暴露風險。

現在在做基礎架構相關的工作時候,可能專案的週期會更長,比業務開發的敏捷迭代週期要長很多,因此,往往會通過周為單位的進度分享。

只有按時完成每個里程碑節點,我們才有信心按期完成整個目標的交付。

具體的實施,每個公司可能都有自己的目標管理系統,我這裡做個簡單的表格,更直觀地反應如何對目標、里程碑進行管理。

 

2.過程管理

如果說目標管理是我們完成任務的基本要求的話,過程管理可能是我們獲得“超出預期”評價的重要部分。

我覺得最好的方式是,在任務DOD(Definition of Done)的基礎上,你有自己獨有的一套“過程性DOD”。

一般我們任務的DOD是按照一定時間要求,完成什麼功能,上線什麼需求。有的可能會帶上一些效能指標,比如介面響應時間低於多少,線下故障數量低於多少等等。

那麼如果只是完成了這些要求,那麼今天你來做這個事情,和另一個人來做這個事情有什麼區別呢?

甚至於如果某個專案,最終由於種種原因沒有上線,或者中途被終止了,那麼是不是你所做的事情都白費了呢?

所以,你必須有一套自己的“過程性DOD”。

下面,我介紹一些我的經驗和我見過的大佬們的經驗,大家可以按需取用(業務開發和基礎架構開發還是有很大不同的,尤其在迭代壓力和做事方法上,所以不能一概而論)。

1)完整的調研報告

任何一個任務,都有常規方案和優質方案。就像我上面提到的那個分散式排程系統,普通同學可能就是按照自己的理解,搞個能用的方案就行了。但是優質的方案,肯定是跳出自己的眼界範圍,博採眾長的結果。

因此,在確定技術方案前,最好能先去調研一下業界的主流方案,看看別人是不是已經有了比較好的解決方案了。

然後把你的調研結果形成文件,這樣不僅能增長你的技術視野,還能體現你的良好技術思考力,這是非常重要的過程性內容。

2)完整的技術設計文件

在確認了技術方案後,一般需要做一個比較詳細的技術設計方案。

面向資料庫程式設計?面向SQL程式設計?面向物件程式設計?面向領域程式設計?

這些都是需要在技術方案設計的時候仔細思考的。

一個好的技術方案,能鍛鍊你的技術思考力,能指導你後期快速、高質量地進行開發,也能在你以後進行維護的時候,告訴你當時為啥這麼想。

通過不斷地技術設計、開發、反思,才能學以致用,快速提高技術水平。

3)問題積累與解決方案

問題一般有兩種。

一種技術問題。包括開發過程中遇到的問題、線上故障解決等,你在解決這些問題後,將排查過程與解決方案進行記錄,形成BP(Best Practice,最佳實踐)文件。然後可以跟其他同學進行分享和推廣。這樣你不僅能沉澱自己的經驗,還能慢慢形成一定的技術影響力。

另一種是業務問題。在做基礎架構的同學,往往會覺得自己陷入運維、客服的怪圈。一種好的解決方案,是將日常繁瑣的運維和客服問題進行積累記錄,然後努力通過技術手段去提高效率自動解決類似問題。

舉一個例子。過去我們公司的資料庫升配都是人肉進行的,業務方提出工單申請,然後審批,然後去找dba進行溝通,確認升級時間。然後到時間後,大家需要再次溝通確認業務是否處於流量低峰,是否可以開始升級。然後升級完成後要進行檢查,溝通確認已經完成。

後來,有人提出了自動化解決的方案,通過打通工單系統、資料庫管理系統、內部通知系統,將整個流程自動化,提效幾十倍。

4)方法論產出

一次專案上線後,對很多人意味著結束,但對很多人來說,只是階段性勝利,更重要的是方案論的產出與推廣。

如果一次資源的投入和探索只能產出一次結果,那價效比是不高的,但是,如果有完整的可複製的方法論產出,那麼這一次投入和探索的過程可以給未來的無數次探索提供指導建議,甚至於能夠快速複製,那就是極高的投入產出比。

對有些更優秀的人來說,可能產出方法論之後,還能從中找出共性和特性,沉澱為平臺化的產品,那就是更加的niubility了。

舉一個例子。之前公司做個一個分庫分表的專案,專案上線後,專案成員寫了完整的方法論指導,在公司進行推廣分享。還將專案過程中使用的資料校驗工具,平臺化為技術產品,方便其他業務線能夠快速使用類似的功能。這種就是非常好的範例。

方法論的產出,無論對於公司還是對於個人成長,都是絕佳的方式。

 

過程管理的產物,能很好地體現在結果上。同樣一年完成了幾十個需求,年底review的時候,你只完成了需求,而別人沉澱了幾十篇設計文件、最佳實踐、方法論,並建立了一定的技術影響力,你可能就是B,別人就是A,這樣的差距就是由於過程管理造成的。

而且更重要的是能沉澱你自己的學習與思考,這是個人成長非常重要的部分。即使最終由於各種各樣的原因,在結果導向上沒有一個好的成績,這些過程管理的結果都是你最重要的財富。

一個五年程式設計師是擁有五年經驗,還是一個經驗用五年?過程管理往往能告訴你怎麼做。

3.向上管理

這部分的內容不多,但是可能比上面的所有內容更加重要,也是大部分程式設計師容易缺失的思維方式。

所謂“向上管理”,不是說拍老闆馬屁。而是一種有效溝通方式,一種科學的上下級合作方式。

有了良好的“目標管理”和“過程管理”後,有的人可能會陷入閉門造車的陷阱,按照計劃或迭代不斷埋頭做事,這是萬萬不可取的。很多同學容易陷入一種誤區,我專心地完成手上的工作,就可以了。但其實這往往是最危險的。因為即使你全部做完了,也可能只是達到要求,沒有任何亮點,甚至於由於外部的變化你沒有及時獲取,還做錯了方向。

我們還是需要及時主動跟老闆溝通,溝通自己目前的進度、困難、計劃。讓老闆能及時知道你現在的進展情況。

很多時候,當老闆來找你的時候,往往不是什麼好事。要麼就是你做了什麼錯事,要麼就是他想知道你在做什麼,做到什麼程度了。無論哪種情況,都不好。

阿里的朋友跟我分享了一些比較好的形式。

  • 定期整理任務進度,將任務進度、遇到的困難、解決方案等簡明扼要地整理出來,進行彙報
  • 找老闆溝通技術規劃,然後一起討論哪些能做,哪些需要砍掉,然後把能做的東西一起安排一個計劃進行實現
  • 多多關注組內同學、老闆的週報,如果發現有什麼困難,及時提出幫助,共同解決

 

做事的方法真的很重要,尤其是我們程式設計師,可能過多地與電腦打交道,而容易缺乏技術外的非技術思維。而好的非技術思維,能幫助我們更好地自我成長,更好地脫穎而出。

與大家共勉~

 

看到這裡了,原創不易,點個關注、點個贊吧,你最好看了~

知識碎片重新梳理,構建Java知識圖譜:https://github.com/saigu/JavaKnowledgeGraph(歷史文章查閱非常方便)

掃碼關注我的公眾號“阿丸筆記”,第一時間獲取最新更新。同時可以免費獲取海量Java技術棧電子書、各個大廠面試題。

相關推薦

談談程式設計師非技術思維

最近跟一個阿里的朋友聊到關於程式設計師如何把事情做得更好,他提到了很多在阿里的感受,讓我受益匪淺。 所謂“如何把事情做得更好”,就是跳出寫程式碼這件事,如何把我們的工作做好,獲得更多的個人成長,獲得更好的績效考核結果,並能在其他人中脫穎而出。 思維碰撞下,得到了很多有效的資訊,總結為三個方面的“管理”能力,目

談談程式設計師如何快速提升職業技能

IT行業有很多分支:AI,大資料,區塊鏈,遊戲等等,其中游戲開發由於Unity引擎的普及入門門檻很低,收入相對來說比較高,導致了大量的應屆畢業生或者說其他IT行業和非IT行業的人蜂擁轉到遊戲開發中,其實,遊戲開發涉及到的技術也是蠻多的,其中包括很多演算法:四叉樹

從技術面試官的角度談談程式設計師簡歷和麵試那些事兒

公司組織過多次校園招聘和社會招聘,忝為首席架構師(因為專案組就一個架構師~~人工攤手),在招聘技術專家組中渾水摸魚、魚目混珠、插科打諢,所以也談談面試中那些事兒。 首先說一句,找工作最重要的是方向,方向正確的話,首先就能獲得良好的起點 簡歷 簡歷的重要性是

程式設計師思維修煉-筆記

程式設計師的思維修煉 新手階段——新手非常在乎他們能否成功。沒有太多經驗指導他們,他們不知道自己的行為是對是錯。新手不是特別想要學習,他們只是想實現一個立杆見影的目標。他們不知道如何應付錯誤,所以出錯的時候,他們非常容易慌亂。新手需要指令清單。 高階新手階段——一旦經過新手的歷練

談談程式設計師面試之刷題

前一段時間有一個非常有趣的故事(http://www.pingwest.com/sorry-cant-hire-you/  ),Max Howell (Homebrew的作者) 在 Google 面試時遇到了讓人悲傷的情境,google拒絕了Max, 給出了答覆:“我們90

程式設計師思維修煉的九堂課之一

當決定成為一名優秀的程式設計師的一刻,我們就必須確保自已的大腦能力線上~ 如果達不到的話,比如說我,就必須要去重構大腦的溼件——對大腦”重新設計“and“重新連線”。 畢竟工欲善其事必先利其器嘛。 程式設計其實就是解決問題,去設計一樣東西,就需要發明,創造,靈感。 創造性是十分必須的

談談程式設計師最討厭做的事

你們猜猜,作為程式設計師你們最討厭做的事是什麼?產品經理頻繁修改需求?不是。測試天天給你提交不可理喻的 bug ?也不是。接手別人交接的如火星文一樣的爛程式碼?其實也不是。 其實我搞了一個文字遊戲,叫最討厭做的事,而不是最討厭的事,上述幾點,可能是你最討厭的事,但是你又可能不能不做。有一種令人髮指的討厭就

談談程式設計師行業的“文人相輕”以及溝通問題

很早以前就想寫這篇文章了,不過卻因自己經驗甚淺,不敢妄言,雖然現在寫也可能引起一些爭論,還是請大家平和的去看這篇文章。自古以來便有文人相輕,這句話來自三國·魏·曹丕《典論·論文》,原文與譯文如下:原 文文人相輕,自古而然。傅毅之於班固,伯仲之間耳,而固小之,與弟超書曰:“武仲以能屬文,為蘭臺令史,下筆不能自休

談談程式設計師的離職和跳槽

(點選上方公眾號,可快速關注) 轉自:張子陽 www.cnblogs.com/JimmyZhang/archive/2012/11/21/2781035.html // 主頁君轉註:原文寫於 2012 年,裡面提到當時的薪資,和目前會有所差距 這篇文章是我在部門會議上一次發言的總結。之所以會

CSDN日報20170326——《談談程式設計師解決問題的能力》

今天的這個主題雖然講的是程式設計師解決問題的能力,其實也還是講獨立思考的能力,因為解決問題的能力也是源自你是否會獨立思考。 之前寫過一些文章,有的同學想讓我寫寫在鵝廠的一些經驗,

我也 30 了,來談談程式設計師的迷茫年齡

今年三十了,到了傳說中程式設計師最應該迷茫的年齡了,那麼我迷茫嗎,沒的說,按照某司34歲就要勸退的要求,我還有4年的程式生涯。 為什麼30歲的程式設計師就應該迷茫呢? 30歲正是經過了七八年的職場生涯,技術、經驗、職業素養等各方面都到了一個比較充沛的階段。如果前幾年不是在混日子,到了現在,踏踏實實幹活

大佬視角:談談程式設計師的離職和跳槽

收入是由什麼決定的? 這位員工辭職的原因主要有兩個: 公司的薪水無法達到他的預期,未來一年在公司的收入前景也不是很明確。 想要去做更底層的開發,方向是使用C/C++開發3D圖形影象。而我們公司主要是.NET開發。 既然其中的一個原因是薪水無法符合預期,那麼首先要搞清楚

讀《程式設計師思維修煉》有感

花了三天(不是整天)時間,把《程式設計師的思維修煉》之開發認知潛能的九堂課看完了。我想首先說說我看完這本說之後,在不翻書的情況下,我還記得些什麼東西,什麼在腦海裡留下了深刻的印象。然後貼上我的讀書筆記,供大家參考。最後給我關於閱讀這本書的一些建議。 1、 給我

頂級程式設計師和普通程式設計師思維模式上的5個區別!

《The Effective Engineer》的作者在寫書的過程中,為了瞭解那些頂級程式設計師

程式設計師思維修煉:開發認知潛能的九堂課(中文版)pdf

第1章 緒論 11.1 再提“實用” 31.2 關注情境 41.3 所有人都關注這些技能 51.4 本書結構 61.5 致謝 9第2章 從新手到專家的歷程 112.1 新手與專家 122.2 德雷福斯模型的5個階段 152.3 現實中的德雷福斯模型:賽馬和賽羊 212.4 有效地使用德雷福斯模型 262.5

程式設計師思維修煉:開發認知潛能的九堂課

如喜歡本書,請購買正版。 鐵文整理,轉載請註明。 譯者序 這是一本教你如何對大腦“程式設計”的書! 運用一門程式設計語言程式設計對大多數普通程式設計師來說是“小菜一碟”,那麼如何更上一層樓成為一名專家級的軟體開發者呢?本書給出了答案——優秀的學習能力和思考能力。作

程式設計師成長思維:把自己當做產品來發展

每年年初我們都要做一個計劃,都希望自己有所進步,想在未來升值加薪,獲得更好收入,同時在職場上受人尊敬,但是,到底該如何計劃和行動呢?這裡我介紹一個方法,就是把自己當作產品,為什麼呢? ## 產品要有MVP的功能 一個產品稱之為產品,那麼這個產品一定要有可用的功能,那麼對應到一個人身上,就是我這個人有什麼用

程式設計師思維瞭解Filecoin

# 程式設計師接觸一個新技術慣用步驟: 1. 先搜尋引擎搜尋一波,找個最簡單的解釋.如果有了個大概的概念,就前往2.否則迴圈1->1->1...直到有個大概的概念為止. 2. 上官網跑一遍. 3. 各種論壇社群溜達一圈. 4. 宣告基本入門. 5. 覺得沒前途或者沒興趣,end;否則,進入6深入瞭解階段. 6

做一個有批判性思維程式設計師

來源:SexyCode 連結:http://codebay.cn/post/7714.html(點選尾部閱讀原文前往) 好的遊戲一定要讓玩家玩的很爽嗎?王者榮耀和吃雞遊戲的成功,讓這個問題的答案似乎毫無爭議,不能帶給玩家刺激的遊戲就不是好遊戲。

一個工作三年左右的Java程式設計師跟大家談談從業心得

貌似這一點適應的行業最廣,但是我可以很肯定的說:當你從事Java開發一年後,重新找工作時,才會真實的感受到這句話。 工作第一年,往往是什麼都充滿新鮮感,什麼都學習,衝勁十足的一年;Java行業知識更新特別快,今天一個框架的新版本,明天又是另一個新框架,有時往往根據專案的需要來不斷學習新東西;所有