程式猿小哥哥無堅不摧,竟然是因為……
因為會畫圖
不好意思,本拐無節操的標題黨了一下 嘿嘿
但是本篇本拐確實想和大家叨逼叨一下程式設計師的畫圖功夫
一個只會寫程式碼的程式設計師,肯定不是一個優秀的程式設計師,因為對於程式猿來說
沒有什麼工作是可以低頭就開整的
也就是說, 萬物萬碼都有一個設計的過程
這種設計,可以簡單,可以複雜。
下面以一個很無聊的例子,給大家叨叨一下程式設計師工作中圖的使用
注意,不光對於程式設計師,本文的一些工具同樣適合其他工種
別問我其他工種是什麼,我也不知道 :)
舉個例子
拿一個簡單的例子來說,我要處理一個老拐請假的需求。 老拐是一個碼農
他的組長是資深碼農老K
大 BOSS 是大 H
還有一個 HR 小姐姐 那麼,如果用 虛擬碼 來表示這個流程的話,是:
如上,虛擬碼就是用簡單,精練的語言將一個功能描述出來,如果虛擬碼寫的沒問題,那麼再將虛擬碼轉化成程式,就是一個完整的功能。 比如這種:
可以看到,當我們寫了好了一段程式的虛擬碼後,我們可以直接把他貼到我們的程式碼檔案裡,然後對著虛擬碼的流程一點一點去實現。 不知道其他的同仁怎麼去做,對於本拐來講:
先用虛擬碼將一個功能表示清楚,再去細化實現,是一種重要的工作方式
寫虛擬碼固然簡單,但是對於複雜的功能,還是不大直觀,於是,便有了 流程圖
流程圖
很多 IT 人員,企業管理人員,都會使用流程圖這個工具表示一些企業的工作流,比如上面這個需求,畫成流程圖是這種:
對於大多數人員,流程圖,我們只要記住這幾點:
-
用圓角矩形表示開始和結束
-
用稜形表示判斷
-
用矩形表示一個步驟的執行
-
每一條線都是有方向的,表示流程的進行。
另外,很重要的一點,因為程式是單向的,所以,標準的流程圖也是單向的,即:
任何流程圖中的流程都是單出的,對於一個確定的狀態,只有一個流向
比如:上面的需求,演進一下,在請假成功以後,要抄送 HR 小姐姐. 在真正的工作中,這應該是一個並行的操作,即大 H 同意後,老拐的年假就批下來了, 同時 告訴一下 HR 小姐姐即可。
於是有一些剛工作的程式設計師或是 PM 會把圖畫成這樣
現在本拐可以認真嚴肅的告訴你,如果一個這種流程圖甩過來,會直接告訴我:
你是新來的
因為顯然,在最後一個判斷之後,程式有了兩條出口. 正確的操作,應當是這種
跨職能流程圖
因為很多業務規劃,是分流程,跨部門的,於是在流程圖基礎上又有一種 跨職能流程圖 ,即在原有的流程圖基礎上加上泳道,這樣每個部門,每個人,每個系統負責什麼一眼便知,就像下面這樣
狀態圖
除了流程圖以外,狀態圖也是程式設計師設計的神器之一(至少對於本拐來講是的)
狀態圖是這樣的:
-
用圓形表示狀態.
-
用連線線標示狀態狀態之間的跳轉。
-
連線線標識是為狀態接受的各種輸入。
這麼說有一些抽像,我們舉個例子,如用用狀態圖設計燈開關,如下:
即:
-
當燈的是關的狀態時,如果外界輸入為開,它會跳到開的狀態。
-
當燈的是關的狀態時,如果外界輸入為關,原地不動(留在原狀態沒有跳轉).
-
反之亦然。
而且,一個 完備 的狀態圖,意味著在任何狀態,對於任何輸入,都是有解的,即知道對於對應的輸入應該進行什麼操作。 狀態圖即是狀態機的表示,它的背後有一系列的理論作為支撐,如果可以靈活的運用狀態機對一些複雜場景進行分析和設計,可以達到事倍功半的效果。 比如,各種語言的正則匹配,背後就是狀態機的理論做支撐。舉個簡單的例子,我們要寫一個程式識別一個字串中有沒有以 a 開始,中間是任意個 b,然後以 c 結尾的字串,即: 對於:
1232abcdd
abbbbcdddfds
23232abbccsxx
這種字串,都會輸出正確的結果,那麼,這個狀態圖如下:
怎麼樣,各位看官,是否有恍然大悟的感腳:)
散養程式猿, 野生架構獅
二流搬磚工,三流攝影師
假正經真逗比,裝文藝實二逼
所以,這麼一個公眾號裡,
有程式碼,有段子,有美圖,有雞湯,
反正,亂七八遭的,沒準碰上哪個剛好就煩到您了呢
啥也不說,掃碼關注吧