程序員不是寫代碼的麼,爲何須要畫圖?不少程序員會認爲寫好代碼就好,畫好圖有什麼用?程序員成爲架構師後是否是就每天畫架構圖,成爲了所謂的 PPT 架構師?如上這些疑問,好幾年前也曾讓我困惑過。程序員
在一篇文章《在首席架構師眼裏,架構的本質是...》提到了一個架構師能力模型(下圖),結合我本身的經歷和經驗,這個能力模型針對架構師這個崗位來講仍是比較符合的。架構
一個程序員作了不少項目,寫了多年代碼逐步成長爲一名出色的程序員。從上面的能力圖中能夠看出,一個出色的程序員離一個架構師還差好多其餘方面的能力。咱們之前覺得程序員積累了足夠經驗就會天然成長爲一名架構師,但其實架構師並非程序員天然成長的一個延續,只是由於架構師的工做相對管理崗而言離程序員和技術更近,因此咱們對它產生了這樣的錯覺。不斷在「出色的程序員」這塊領地內不斷的耕耘和出色下去會讓你成爲該垂直領域內的技術專家,這纔是程序員天然成長的延續。ide
於是,程序員出色到了必定程度後想成長爲一名架構師,就須要看看能力模型中的其餘方面。而掌握好畫圖技法,我覺着至少對其中的抽象思惟、溝通交流、平衡取捨與透過問題看本質都有幫助。至於多領域知識和技術前瞻性這兩方面好像確實和畫圖的關聯性不強,但若是多領域知識不限於程序技術領域,畫圖也算一個領域的知識吧。工具
今天這個時代的地圖軟件咱們都用過,一個國家、一個城市、一個街區,地圖軟件老是在不一樣的抽象維度上來展現地圖。而對於一個複雜的軟件系統,也須要相似的不一樣抽象維度,系統的全貌,不一樣子系統間的關聯和交互,子系統內部模塊間的接口和調用,某個關鍵實現點的處理流程。一個架構師應該能夠在這些不一樣的抽象維度上把系統或系統的一部分清晰地描繪出來。優化
當在不一樣抽象維度上描繪了系統的各個重要方面,咱們才能夠更好的發現和找到系統的癥結。若是解決系統的問題就像走迷宮,你是直接鑽進去反覆嘗試尋找出路,仍是站在更高的維度俯視迷宮再找到最佳的問題解決路徑。這就是透過問題看本質領域一個方面的體現。網站
關於溝通交流,俗話說,有圖有真相,哦,不對,是一圖勝千言。有些程序員寫技術文檔啪啦啪啦的寫一大堆,有時真不如一張清晰的架構圖或交互圖讓人更快速清晰的理解到。在對系統有了抽象全面的多維度呈現,清晰準確的交流,直擊了問題本質,那麼正確而適當的平衡取捨也沒那麼難了,對吧。操作系統
如何?設計
上一節探討了畫好圖會帶來什麼樣的收益,這一節咱們看下如何畫好圖?畫一個清晰易懂的技術架構或交互流程的說明圖例須要什麼專門的繪圖知識與技巧麼?另外爲了畫好圖會花費大量的時間麼?3d
在過去幾年關於如何畫好圖這個課題上我作了好些摸索和實踐,想取得效率(畫圖花費的時間不會多於比用文字來描述一樣的內容更多)和效果(圖例表達的效果應該比文字描述更好)的平衡,在這個過程當中收穫了下面一些基本認知和自我感受還不錯的實踐方式。orm
圖形
我畫技術圖例時只會使用一些最基礎的圖形,好比:矩形、圓、三角、菱形、氣泡、箭頭,這些最基本的圖形幾乎全部的畫圖軟件都會自帶的,因此工具的依賴性很低,但選擇的效率很高。固然若是有時爲了表達和一些著名外部系統間的交互,這些著名外部系統可能都有各自著名的 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 的默認色塊是這個背景下的一些最優純色選擇,並且我本身肉眼看起來也還感受不錯,這樣就省了打開更高級的配色參數界面,繪圖的效率又更高了,代價也更小了。因此按這個指導原則,從新畫下上面這個技術圖示大概就像下面這樣,花費的時間絕對不會比畫上面那個更多,但呈現效果自我感受確實要好多了。
因此,學會使用一種簡單的軟件,使用簡單的圖形和配色,在最有效率的狀況下畫出一幅效果還不錯的圖例,也是頗有價值的。固然不少程序員會認爲只有寫出的代碼纔有價值,其實這裏可能忽視了一個大部分程序員都認同的觀點:代碼也是寫給人看的。程序員不會認爲一份機器能運行而人很難看懂的代碼是好代碼,而畫好圖能更好的幫助你去思考代碼的組織和呈現方式。
須要畫圖工具和之類的教程,能夠加個人羣:705194503 裏,供你們免費下載,但願能夠幫到你們
本文只是介紹了一種極簡的繪製技術圖例的技法,畢竟咱們畫圖只是爲了追求講清楚一個技術或展現一個系統,不須要考慮任何多餘的藝術性。最低的代價,還不錯的效果,在效率和效果之間取得性價比最高的平衡。
...