1. 程式人生 > >【轉載】適合程序員的畫圖技法

【轉載】適合程序員的畫圖技法

價值 才有 關註 是不是 strong 答案 not 文檔 國家

轉載地址:http://www.cnblogs.com/mindwind/p/5561609.html

技術分享圖片

之前寫一些技術文章時,經常有讀者留言問我是用什麽工具畫圖的。其實我感覺他們很可能問錯了問題,因為我曾經為了畫好圖嘗試過各種不同的畫圖工具軟件,但最後發現能不能畫好圖和工具的關系並不大。

為何?

程序員不是寫代碼的麽,為什麽需要畫圖?很多程序員會認為寫好代碼就好,畫好圖有什麽用?程序員成為架構師後是不是就天天畫架構圖,成為了所謂的 PPT 架構師?如上這些疑問,好幾年前也曾讓我困惑過。

在一篇文章《在首席架構師眼裏,架構的本質是...》提到了一個架構師能力模型(下圖),結合我自己的經歷和經驗,這個能力模型針對架構師這個崗位來說還是比較符合的。

技術分享圖片

一個程序員做了很多項目,寫了多年代碼逐步成長為一名出色的程序員。從上面的能力圖中可以看出,一個出色的程序員離一個架構師還差好多其他方面的能力。我們以前以為程序員積累了足夠經驗就會自然成長為一名架構師,但其實架構師並不是程序員自然成長的一個延續,只是因為架構師的工作相對管理崗而言離程序員和技術更近,所以我們對它產生了這樣的錯覺。不斷在「出色的程序員」這塊領地內不斷的耕耘和出色下去會讓你成為該垂直領域內的技術專家,這才是程序員自然成長的延續。

因而,程序員出色到了一定程度後想成長為一名架構師,就需要看看能力模型中的其他方面。而掌握好畫圖技法,我覺著至少對其中的抽象思維、溝通交流、平衡取舍與透過問題看本質都有幫助。至於多領域知識和技術前瞻性這兩方面好像確實和畫圖的關聯性不強,但如果多領域知識不限於程序技術領域,畫圖也算一個領域的知識吧。

今天這個時代的地圖軟件我們都用過,一個國家、一個城市、一個街區,地圖軟件總是在不同的抽象維度上來展示地圖。而對於一個復雜的軟件系統,也需要類似的不同抽象維度,系統的全貌,不同子系統間的關聯和交互,子系統內部模塊間的接口和調用,某個關鍵實現點的處理流程。一個架構師應該可以在這些不同的抽象維度上把系統或系統的一部分清晰地描繪出來。

當在不同抽象維度上描繪了系統的各個重要方面,我們才可以更好的發現和找到系統的癥結。如果解決系統的問題就像走迷宮,你是直接鉆進去反復嘗試尋找出路,還是站在更高的維度俯視迷宮再找到最佳的問題解決路徑。這就是透過問題看本質領域一個方面的體現。

關於溝通交流,俗話說,有圖有真相,哦,不對,是一圖勝千言。有些程序員寫技術文檔啪啦啪啦的寫一大堆,有時真不如一張清晰的架構圖或交互圖讓人更快速清晰的理解到。在對系統有了抽象全面的多維度呈現,清晰準確的交流,直擊了問題本質,那麽正確而適當的平衡取舍也沒那麽難了,對吧。

如何?

上一節探討了畫好圖會帶來什麽樣的收益,這一節我們看下如何畫好圖?畫一個清晰易懂的技術架構或交互流程的說明圖例需要什麽專門的繪圖知識與技巧麽?另外為了畫好圖會花費大量的時間麽?

在過去幾年關於如何畫好圖這個課題上我做了好些摸索和實踐,想取得效率(畫圖花費的時間不會多於比用文字來描述同樣的內容更多)和效果(圖例表達的效果應該比文字描述更好)的平衡,在這個過程中收獲了下面一些基本認知和自我感覺還不錯的實踐方式。

圖形

我畫技術圖例時只會使用一些最基礎的圖形,比如:矩形、圓、三角、菱形、氣泡、箭頭,這些最基本的圖形幾乎所有的畫圖軟件都會自帶的,所以工具的依賴性很低,但選擇的效率很高。當然如果有時為了表達和一些著名外部系統間的交互,這些著名外部系統可能都有各自著名的 Logo 圖標,也會直接使用它們的 Logo 圖標。

像下面圖示,就是我常用的一些畫圖圖形元素。

技術分享圖片

顏色

有時系統的組成比較復雜,只用基本圖形不足以表達所有不同的系統組成部件,這時就需要用顏色來區分了。那麽下一個問題就來了,該用哪些顏色呢?我的答案是使用大部分人覺得美的顏色。那大部分人喜歡什麽顏色呢?當然我沒有作過任何調查,全憑腦袋拍的。我覺得大部分會覺得彩虹是美的,所以我一般用得顏色就是彩虹七色外加兩種經典色:黑、白。這樣就有九種顏色加上幾種基本圖形,可以組合出幾十種表達不同組件的圖形元素,基本夠用了。

彩虹七色包括:紅、橙、黃、綠、青、藍、紫。但七種顏色的選擇也是有優先級,在一本講設計的書中 Designing with the Mind in Mind (中文譯名《認知與設計》,其實我覺得譯名沒有原名那麽的有感覺)提出了下面一些色彩使用準則:

  • 使用飽和度、亮度以及色相區分顏色,確保顏色的高反差,因為人的視覺是為邊緣反差而優化的。
  • 使用獨特的顏色,因為人最容易區分的顏色包括:紅、綠、黃、藍、白和黑。
  • 避免使用色盲無法區分的顏色對,比如:深紅-黑,深紅-深綠,藍色-紫色,淺綠-白色。
  • 使用顏色之外的其他提示,對有顏色視覺障礙的人友好,而且也增強了可理解性。
  • 避免強烈的對抗色,比如:紅黑,黃黑

所以你看為什麽交通燈是:紅、黃、綠。為什麽喬布斯選擇這三個顏色作為 Mac OS X 操作系統中所有應用窗體的按紐顏色,這也是暗合人類的視覺認知原則的。所以我現在多選擇是白底、黑字、黑色線條、色塊優先選擇:紅、綠、黃、藍,實在不夠用了才會選擇:橙、青、紫。

當然紅有好多種紅,綠有好多種綠,我用哪種?看下圖所示,給出了 RGB 三原色的配色數值(別相信自己的眼睛,不同顯示器上看到的效果會有差異,作為程序員需要精確點)。至於為什麽是這個選擇,後面再說。

技術分享圖片

審美

除了基本的圖形和顏色選擇之外,另外一個關註點是審美。審美對最終的效果呈現有很大影響,這得感謝蘋果總設計師 Jonathan Ive 把大眾的審美傾向全部帶入到扁平化時代,所以實際我只需要把圖形弄得扁平,去掉立體、陰影什麽的,看起來就還不錯了。

技術分享圖片

幾何?

探討了如何,我們接著看看幾何。此「幾何」不是數學裏的幾何,而是曾幾何時,我們想象中很麻煩的事原來如此簡單。掌握畫圖技法到底代價幾何?又價值幾何呢?

三年前,我畫的技術圖示(來自以前一個分享 PPT)大概是下面這樣的,總是覺得不好,不太滿意,卻又不知道不好在哪裏,該怎麽改進。然後就歸罪於工具不好用,從一開始用 Viso 畫,後來嘗試了 Mac 下的專業繪圖工具 OmniGraffle,覺得太復雜後又找到個在線繪圖網站 draw.io,感覺還可以,但由於是國外網站,訪問效率不太好沒多久就放棄了。之後需要做一些 Slide 演示時,用了 Mac 下的 Keynote(相當於 Win 下的 PPT),需要畫技術圖示時想如果直接在 Keynote 裏畫最省事了,然後就開始用 Keynote 畫了。

技術分享圖片

前面寫到顏色選擇時,提到為什麽就選這種紅而不是其他紅,其實這就是 Keynote 在白色背景下默認提供的調色板色塊選擇。作為程序員提供一個軟件的默認參數,通常的道理是這個參數可能在大部分場景下都是最優的。所以我傾向於認為 Keynote 的默認色塊是這個背景下的一些最優純色選擇,而且我自己肉眼看起來也還感覺不錯,這樣就省了打開更高級的配色參數界面,繪圖的效率又更高了,代價也更小了。所以按這個指導原則,重新畫下上面這個技術圖示大概就像下面這樣,花費的時間絕對不會比畫上面那個更多,但呈現效果自我感覺確實要好多了。

技術分享圖片

所以,學會使用一種簡單的軟件,使用簡單的圖形和配色,在最有效率的情況下畫出一幅效果還不錯的圖例,也是很有價值的。當然很多程序員會認為只有寫出的代碼才有價值,其實這裏可能忽視了一個大部分程序員都認同的觀點:代碼也是寫給人看的。程序員不會認為一份機器能運行而人很難看懂的代碼是好代碼,而畫好圖能更好的幫助你去思考代碼的組織和呈現方式。

本文只是介紹了一種極簡的繪制技術圖例的技法,畢竟我們畫圖只是為了追求講清楚一個技術或展示一個系統,不需要考慮任何多余的藝術性。最低的代價,還不錯的效果,在效率和效果之間取得性價比最高的平衡。

...

程序員的工作性質和習慣更關註實現而忽略呈現,有時酒香也怕巷子深啊,何況還未必是茅臺酒。

【轉載】適合程序員的畫圖技法