原文地址:https://www.cnblogs.com/yangliheng/p/6082250.htmlphp
1、引言
html
做爲一名IT從業者,不只要有紮實的知識儲備,出色的業務能力,還須要具有必定的軟實力。軟實力體如今具體事務的處理能力,包括溝通,協做,團隊領導,問題的解決方案等,這些能力在關鍵時刻比硬性的技術水平更能體現一名工程師的價值,它決定了IT職業生涯的高度和視野。nginx
而本文所分享的繪圖能力,與其說是軟實力,不妨說是基本功。不管從事的是開發、運維、通訊,甚至產品經理,交互設計、運營這些有交集的崗位,都會在工做中用到。由於在計算機的世界裏,大多數場景都是抽象的,當咱們在描述他們的時候,必定是經過其實現原理和機制,抽象出一個行爲邏輯,最後再具象到一張圖。想象一下,當咱們在瀏覽器中輸入了一個地址,在敲擊回車以後,所發生的一切是多麼地複雜,若是能拍成電影,那麼能夠取名叫《一個數據包的奇幻漂流》。若是你可以以具象的畫面來表述一個計算機世界中發生的一個場景,那很好,說明你的思路清晰,對原理的理解很是透徹,而後你要作的工做就像導演創做分鏡同樣,將它們體如今畫紙上。web
這是一種所謂抽象思惟的能力,最好的鍛鍊方式之一即是畫圖。不少時候,咱們會以爲說不清楚,一旦你發現說不清楚,那麼咱們就能夠用畫圖來講明,這些圖包含了你想要表達的思想或者邏輯,而不是一個畫得很是逼真的主機箱。所以,在工做學習中,養成畫圖的習慣,把複雜模糊的文字描述轉換成一張清晰直白的圖,不只能夠下降許多溝通的成本,還能夠鍛鍊我的的抽象思惟能力。redis
下圖(從新繪製)取自Jesse James Garrett 的《用戶體驗的要素:以用戶爲中心的Web設計》一書中的用戶體驗模型,能夠說整本書就是圍繞這張圖展開論述的,是不少產品經理的入門經典書籍。從2000年3月初次發佈到網上以來,Jesse所繪製的這個模型已經被下載了2萬屢次。事實上,用戶體驗是一種很是抽象的東西,所謂大師就是具有這樣的能力,將極爲抽象的思想,投射到一個簡單的二維空間上,表現爲具象的圖表,從而造成具備邏輯的信息,這就是真正意義上的深刻淺出。spring
那麼不少人會問,說了這麼多,用什麼工具畫圖比較好等等,這裏要說明的是,本文所要分享的內容,並不侷限於某一種畫圖的工具和技巧,工具自己沒有什麼高低之差,差異在因而否具有抽象思惟的能力,在於繪圖的操做是否規範高效,在因而否理解事務的機理,關注這些纔可以提高繪圖能力,而不是陷入工具之爭,這沒有任何意義,即使是最普通的windows畫圖板,同樣能夠畫圖,無非圖標不夠漂亮,但咱們並不在意這些,對於IT從業者來講,並不須要視覺上藝術上的美感,而是這張圖背後承載的信息。數據庫
下面要介紹的基本是各個繪圖軟件都相通的功能特性,使用這些功能能夠提高咱們繪圖的效率,另外還提出了一些繪圖的規範建議,供你們參考,畢竟這不是一份繪圖軟件的說明書。但願你們可以瞭解繪圖的思想,而不是工具自己的使用。apache
2、ProcessOn簡介
windows
本文所使用的是在線繪圖工具——ProcessOn,這是一個方便易用、免費高效的在線做圖工具,運用它能夠免費製做多種圖。數組
之因此會使用這個工具,主要有幾個緣由:
固然,這個工具也不是十全十美的,畢竟是2015年才上線提供服務,產品還存在或大或小的不穩定因素,如丟失數據(據其餘網友反饋存在這樣的狀況,不過筆者在實際使用中未遇到過),菜單功能卡住,圖標相對比較少等,不過這些問題也還在可忍受的範圍以內。做爲國內免費的在線繪圖工具,能夠作到這般實爲不易。
3、操做技巧
對於ProcessOn登陸註冊等其餘操做,這裏不過多介紹(說多了就像軟文),下面介紹一些經常使用的操做技巧,這些技巧一般也適用於visio等其餘繪圖軟件,你們能夠自行對應。能夠說,這些技巧至關於繪圖效率的催化劑,可讓咱們實際的繪圖工做提高效率,而且完成的圖又不失美觀和專業。
對於已經掌握這些技巧的讀者能夠跳過本節
3.1 平均分佈
在不少場景下,咱們會畫一排,或者一串矩形之類的元素,可是因爲手動拖拽的隨意性,致使這些元素的間距不盡相同,這時咱們可使用圖形分佈的功能,將這些元素調整爲相等間距,這樣在元素比較多的狀況下,能夠保持整幅圖的整潔。
操做時,選中對應的元素,而後選擇屏幕頂部的工具欄中的「排列「,並選擇「圖形分佈「->」垂直平均分佈」
對應有兩種分佈:
3.2 元素對齊
大多數繪圖軟件中,在拖動一個元素的時候,會自動地出現一些對齊線,方便用戶將元素對齊到特定的位置,可是一旦元素比較多,拖動的操做就有點杯水車薪了,事實上,咱們可使用對齊的功能快速地進行元素對齊,以下圖:
咱們能夠將須要對齊元素選中,而後右鍵(或者點擊屏幕頂部的工具欄中的「排列「),並選擇「圖形對齊「->」居中對齊」
這些對齊方式,能夠從字面意思理解:
3.3 大小控制
有時候,咱們在框內會標註上一些文字,因爲標註的文字長短一步,就出現框自己的寬度不一致,爲了保持整齊,一般就會將這些元素寬度(或高度)保持統一,通常操做就是手動地逐個調整方框大小,或者選中以後統一調整高寬的數值,固然也可使用批量操做的方式
選中對應的元素,而後選擇屏幕頂部的工具欄中的「排列「,並選擇「匹配大小「->」寬度」
說明:不管是調整高度仍是寬度,都是調整爲所選元素中高度最大或寬度最大的數值
3.4 Z軸排列
這裏所謂「Z軸「的概念,是從CSS中的「z-index」屬性借鑑過來的,亦即垂直屏幕向外的方向。
在多個元素進行組合的時候,一般會涉及到先後遮擋的問題,這時候須要用到z軸排列,以下圖中的圓環,其中就是由三個圓層疊而成,其中橙色的圓在最底層,紅色的圓在中間,白色的圓在最頂層。
默認狀況下,元素的z軸值是根據建立的前後順序決定大小的,越是後建立的元素,其Z軸的數值越大,也就是能遮擋在它以前建立的元素。
繪製該圖形時,首先須要選中這3個圓,而後使用「居中對齊「和「垂直居中對齊「,使其成爲同心圓,若是此時,橙圓遮擋住了其餘兩個圓,則點擊橙圓,並選擇屏幕頂部的工具欄中的「排列「,而後點擊「置於底層「,因而橙圓就會被推到最底層,接着能夠選中紅圓,先一樣的操做將它置於底層,而後點擊「上移一層「,這樣紅圓就會疊在橙圓之上,若是此時白圓仍然沒有出如今最頂層,能夠選中它,點擊「置於頂層「,這樣就完成了
3.5 分組
分組這個功能在複雜元素組成的圖形中,很是實用,它至關於將某幾個元素封裝成爲一個組件,以總體的方式進行拖拽,旋轉,連線等操做,而且能夠有效地防止意外拖動而打亂佈局之類的誤操做。
下圖是表示負載均衡結構的一個簡單拓撲圖,圖中load balancer 節點和web server的節點,是由3個元素組成:「主機「,「圖標「和「圓角矩形「。一般咱們會把這個三個元素進行組合,而後再鏈接線等其餘操做,這樣一旦這個拓撲圖趨於複雜,而又須要作調整的時候,就能夠方便地選中相關的節點,不至於元素漏選或錯選而致使整個佈局失敗。
操做也很是簡單,這樣選中想要組合的元素,而後右鍵(或選擇屏幕頂部的工具欄中的「排列「),並選擇「組合「,便可完成。
3.6 框內文字對齊
在不少框圖中,爲了表示一個集合的概念,一般會在表示父元素的框內標註上集合的名字,下圖所示的是spring框架內核容器的組成。通常狀況下,父元素內的標註文字會使用「頂端對齊「的方式,而子元素則是居中,這也是框內文字默認的對齊方式。
操做時,先選中元素,而後打開屏幕上方工具欄中的「對齊「菜單,就能夠選擇相應的對齊方式。
其中第一排表示水平方向的對齊方式,從左往右依次是:左對齊,水平居中對齊,右對齊;第二排表示垂直方向的對齊方式,從左往右依次是:頂端對齊,垂直居中對齊,底端對齊。
3.7 快捷鍵
點擊屏幕頂部的工具欄中的「幫助「,咱們能夠查看Processon目前支持的快捷鍵,整理以下:
通用 |
|||||
Alt |
按住Alt,經過數據能夠對頁面進行拖動 |
Alt+(+/) |
視圖放大或縮小 |
T |
插入文本 |
Ctrl |
按住Ctrl,點擊一個圖形,將其添加到選擇圖形中,或者從中移除 |
Ctrl+A |
所有選中 |
I |
插入圖片 |
L |
插入連線 |
||||
圖形被選中時 |
|||||
箭頭 (←↑↓→) |
將選中圖形向左、向上、向下、向右移動 |
Ctrl + 箭頭 (←↑↓→) |
每次微移一個像素 |
調整圖形大小時按住Ctrl |
調整圖形大小,而且約束比例 |
Ctrl+Z |
撤銷 |
Ctrl+Y |
恢復 |
Ctrl+X |
剪切 |
Ctrl+C |
複製 |
Ctrl+V |
粘貼 |
Ctrl+D |
複用 |
Ctrl+Shift+B |
格式刷 |
Delete,Backspace |
刪除 |
Ctrl+] |
將選中的圖形置於頂層 |
Ctrl+[ |
將選中的圖形置於底層 |
Ctrl+shift+] |
將選中的圖形上移一層 |
Ctrl+shift+[ |
將選中的圖形下移一層 |
Ctrl+L |
鎖定選中的圖形 |
Ctrl+shift+L |
將選中的圖形解鎖 |
Ctrl+G |
組合選中的圖形 |
Ctrl+shift+G |
將選中的圖形取消組合 |
||||
編輯文本 |
|||||
空格 |
編輯文本 |
Ctrl+B |
粗體 |
Ctrl+I |
斜體 |
Ctrl+U |
下劃線 |
Ctrl+Enter |
保存文本編輯 |
其中,除了Ctrl+C,Ctrl+V,Ctrl+A等經常使用的快捷鍵,咱們會常用Ctrl+D,該快捷鍵至關於按了一次Ctrl+C,再按一次Ctrl+V,也就是複製和粘貼一鍵完成,在複製多個元素的時候很是實用,效率提高一倍。
另外組合功能Ctrl+G,插入文本T,插入連線L,置於頂層Ctrl+],置於底層Ctrl+[,按住Ctrl約束比例調整大小也是使用率極高的快捷鍵。
咱們在實踐過程,必定要多使用快捷鍵來提高操做效率,不要在對齊排列,調整大小,拖拽佈局等操做上浪費過多的時間。
3.8 綜合案例
下面介紹一個綜合案例,咱們將運用上述技巧,繪製Linux中的awk數據處理模型示意圖,以下圖所示。瞭解awk命令的人都知道,awk是以行爲單位處理數據的,而且能夠按照指定的分隔符,將數據切割成多列,其中RS爲行分隔符,FS爲列,$+數字表示取列。
下面列舉幾個重要的操做步驟:
首先建立5個矩形,使用複用快捷鍵Ctrl+D,而後全選完成對齊操做,接着將最下方的矩形,拖動到合適的位置,最後使用「垂直平均分佈「功能,完成。
4、規範建議
4.1 大小
在默認狀況下,processon的畫紙比A4略大,即1250px*1550px,不過也能夠按照須要進行調整。在繪圖時,全部的元素應當儘可能佈局在一張畫紙上,這樣置於A4大小的文檔或者寬度爲1000px左右的網頁,不會顯得特別突兀,尺寸過大,會致使總體比例縮小以後,局部元素顯得太小,看不清楚。
另外,咱們在生成相同元素的時候,儘可能先手動地配置大小,而且這個大小是你記得住的,而後使用Ctrl+D進行復用,那麼當某一個元素被誤拖拽而致使大小發生了變化以後,就能夠迅速地調整回來,另外,若是在後期還想添加一個相同元素,那麼也能夠直接配置對應的大小。簡言之,配置元素的大小,使用一個你能夠記住的數值,從而提升工做效率。
4.2 字體
先來介紹一些關於字體的背景知識:
通常來講,因爲襯線體具備筆畫上的修飾,使得感官上字符之間有必定的連續性,這樣對於大段的文字就比較方便橫向閱讀,這也就是咱們的課本,報紙等讀物使用宋體進行印刷的緣由之一,而無襯線體更符合現代美學從簡的觀念,也比較適合做爲標語來印刷,例如掛着的大紅橫幅一般就是用黑體來印刷的。
咱們在繪圖的過程當中,並不須要大段的文字,所以建議儘可能使用同一種無襯線體,而且除了標題部分等進行特殊大小處理的字體,其餘元素的文字都統一字號。在processon提供的字體中,筆者建議統一使用「微軟雅黑「字體,字號大小爲14px,而且加粗。這樣可使得導出的圖片,粘貼在word等文檔中時顯得比較和諧。
若是咱們要在圖中引入代碼或配置文件等專業性的內容,則儘可能使用等寬字體,以保證內容排版的整齊性,這裏建議使用Lucida Console,由於它既是等寬字體,又是無襯線字體。
4.3 配色
仍是先介紹一些關於顏色的背景知識(引用自《超越平凡的平面設計:版式設計原理與應用》):
畢竟筆者不是學設計或美術出身,談不上專業角度的美學配色方案,這裏就引用網絡上一篇關於中國街頭廣告牌設計的文章,以此借鑑對顏色的運用方法
素材來源微博《中國的招牌爲何這麼醜|大象公會》
上圖就是充斥各個城市街頭的廣告牌,高純度的大紅色背景,高純度顏色的字體,且沒有充分留白,不一樣的色彩佔據類似的面積,相比之下,下圖的排版採用的是低純度的暗色,以及充分的留白,檔次明顯高了不少,這就是一般講的「素色審美「,有時候咱們會稱之爲「小清新「,相似於宜家給人們的印象。
繪圖中使用顏色的時候,建議不要過於追求高飽和度和鮮豔的色彩,而是採用低純度和充分的留白。這一點,processon的調色板也給出很是好的示範,
processon的調色板提供的顏色基本屬於web安全色,所謂web安全色,就是在不一樣瀏覽器均可以顯示相同的顏色,它們用十六進制的00,33,66,99,cc,ff表示三原色,其中咱們能夠方便地找到飽和度低的配色,如上圖的顏色方案,他們位於調色板的第二行,將其應用於框內背景色,可讓整幅圖顯得比較柔和,不會刺眼。
4.4 最小化原則
在運維的工做中,有一個重要的指導思想,即「最小化原則「,例如最小化安裝操做系統,最小化啓動服務,最小化安全權限等等。一樣,咱們也能夠把這個思想引入到繪圖的實踐中來,主要體如今一下幾點:
5、實戰
由於IT細分領域內有着很是多的專業圖表,但筆者知識邊界有限,因此下面着重介紹兩種通用性比較高的圖:基本流程圖和系統拓撲圖
5.1 基本流程圖
有關流程圖的概念,最先是在軟件工程中接觸到的程序流程圖,早期,流程圖目的就是描述程序的執行過程,一直以來就是軟件設計的重要工具,隨着使用者增多,流程圖的概念也再也不限制於軟件設計,只要涉及有關流程的任何場景,咱們均可以用流程圖來表示。
這裏所謂的基本流程圖,是相對於其餘流程圖來講的。這裏簡單介紹一下泳道圖,下圖所示,泳道圖包含了流程中每個步驟對應的相關單位,其中單位能夠是部門,也能夠是職位等,泳道圖能夠很好地表現了一個流程中不一樣的職能分工,以及協做的邏輯關係,是項目管理者制定項目計劃的經常使用工具。
5.1.1 經常使用符號
下面整理了基本流程圖經常使用的符號圖示,掌握如下10個足夠應付99%的流程圖,其中最經常使用也就是第一行的符號:
5.1.2 基本結構
瞭解了經常使用符號以後,就能夠畫出流程圖中的三個基本結構,即順序結構,分支結構和循環結構:
事實上,流程圖就是由這三種基本的結構,根據實際業務狀況,相互組合而成。咱們在繪製流程圖,首先就是要肯定所要描述的業務實際的流程邏輯,而後推敲每一個步驟的執行,是否存在分支和循環,目的就是要閱讀流程圖的人一目瞭然,迅速地理解流程的每一個環節。
5.1.3 流程圖案例
下面咱們以「超市購物「爲案例,綜合運用一下上述3個基本結構。
如圖,其中購物是一個循環結構,若是購物清單上的物品尚未買全,則繼續購買物品,不然就能夠去收銀臺結算了,而支付環節就是一個分支結構,若是現金足夠的話,就選擇用現金支付,不然就使用手機的APP支付。
像這樣的流程,咱們在工做和學習中仍是有很是多的實戰案例的,例如部署服務,安裝軟件等等,在整個流程中,必定是會出現各類問題,那麼對於各類異常的處理,就能夠用一個分支結構來表示,咱們能夠試着把工做遇到的問題和排查過程,經過流程圖的方式落實到文檔中,那麼長久下來,對於經驗的積累會起到很是大的幫助做用。
5.2 系統拓撲圖
這裏分享的系統拓撲圖,主要是指集羣架構圖,對於其餘拓撲圖,從繪圖的角度來講,本質上是同樣的,能夠融會貫通。
下面仍是以一個案例來分享一些筆者淺薄的經驗,如圖,這是一個經典的中小規模web集羣架構(參考自《跟老男孩學Linux運維:web集羣實戰》),包括負載均衡,web服務,數據庫主從複製,讀寫分離,網絡文件系統,文件備份,批量管理,yum倉庫等諸多單元。
5.2.1 方案規劃
首先在新建一張空白畫紙以前,咱們應該對當前這個系統架構有充分了解,不論你是否已經實現了這個架構,都至少有一個方案規劃,方案描述了這個系統應該要完成的哪些功能,以及爲了完成這些功能,須要提供哪些基礎的服務等,另外還應當包含服務器規劃表,用來講明爲了完成這個系統,至少須要哪些服務器,這些服務器提供哪些服務等信息。
5.2.2 模塊分割
在肯定方案以後,就能夠對系統中的各個模塊進行分割,這個過程與軟件設計的模塊設計比較類似,先肯定功能模塊,先無論這個功能模塊如何實現,只要肯定他在系統架構中的位置和做用,以及提供服務的方式,數據的流向等。這些肯定以後,整個系統的框架就設計完成了。如圖,咱們抽象出了幾個模塊:負載均衡,web服務,數據庫,文件存儲,以及管理五個模塊。這些模塊就能夠實現一個基本的web服務解決方案了。
通常來講,每一個模塊內部,能夠根據不一樣需求和資源,實現不一樣的方案:
但無論如何實現,之後即使模塊內部進行調整,大的框架仍然不變。所以在繪圖時,框架的肯定尤其重要,也是咱們着手繪製架構圖的關鍵一步。
5.2.3 節點設計
接下來,就能夠設計模塊內部的實現了,咱們能夠經過各種的圖標繪製不一樣服務的節點。processon提供的圖標並無MS visio中的豐富,但也足夠使用了。
筆者的作法是,使用「服務器「圖標+」功能「圖標+圓角矩形組合成一個節點(如上面3.5小節中看到的那個圖)。之因此要用圓角矩形進行包裹,一方面爲了方便輸入文字標註,更重要的一點是在架構比較複雜,鏈接線比較多的狀況下,矩形的邊能夠鏈接更多的線,而若是直接鏈接服務器的圖標,會顯得很是雜亂,有時候也會遮擋文字標註。
「服務器「和「功能「圖標,在processon繪圖界面右下角「更多圖形「中的網絡拓撲圖下能夠找到,分別在network和Azure子目錄(這個Azure就是微軟的雲,另外也有aws的圖標,可是不太看得懂-_-||)
繪製各個節點時,儘可能使用Ctrl+D進行復用。對於「功能「圖標,因爲默認的圖標比較大,在調整大小時能夠按住Ctrl鍵進行拖拽的操做,這樣能夠保持圖標的大小比例,就不會失真了。
5.2.4 連線調整
當咱們須要將每一個節點鏈接起來的時候,務必記得對節點進行分組操做,否則一旦置於大框架以內,再想選擇這個節點,或者再次添加連線操做就很是麻煩。比較遺憾的是processon的分組功能比較單薄,當咱們將一個分組做爲一個元素與其餘的元素再次分組時,原來的分組就會撤銷掉,也就是說分組不具備嵌套的特性,這和MS visio不太同樣,因此在分組操做時,最好的方式就是單個節點分組。
分組以後,節點中的三個元素就做爲一個總體,此時再與其餘節點進行相連,鏈接時也務必鏈接到對方的邊上,這樣在拖動時就能夠跟着一塊兒動。針對重要節點連線,須要進行必定的文字標註,說明其意義。
5.2.5 總體調整
這裏就須要應用最小化原則進行調整。在設計節點的時候,爲了可以包含各個節點,一般會把大框調整到比較大的尺寸,不至於影響節點的拖拽,而當模塊內部完成以後,就要將整幅圖的比例調整到合適的大小,去掉無心義的空白,使得佈局趨於緊湊合理。
而後去掉框架之間的連線,將提供服務的節點和使用服務的節點直接相連,因爲管理中的節點與其餘節點都須要鏈接,若是畫線就顯得比較凌亂,而且連線的意義不大,故而省去。
最後再加上一些修飾,以及外部的調用狀況,就完成了整個系統架構圖。
6、總結
本文主要分享瞭如下幾點
一點微薄的經驗分享,但願能夠幫助到那些不習慣畫圖,或者想畫好圖卻在畫圖各類操做上耗費過多精力的小夥伴們。