您的位置:首頁>科技>正文

從你家的衣櫃,理解軟體程式設計的「架構」

我是霖哥, 一個因興趣入行的商學院畢業的程式師

事情是這樣的, 霖哥是一個商學院畢業的程式師嘛, 大部分的同學, 都是讀商科的。

其中一個好基友, 一個金融公司的職員, 覺得互聯網未來很有發展, 於是找到了一個雲計算公司, 進行面試。

可是他完全不懂技術, 所以就跑來諮詢霖哥各種問題。 其中一個問題, 著實讓我很深思, 他問:

「軟體程式設計裡, 什麼是架構?」

所謂架構, 即軟體架構, 在軟體工程中, 經常會出現架構一詞, 甚至還有專門的職位, 叫“架構師”。 架構是什麼?我們看看百度百科怎麼說的:

軟體架構(software architecture)是一系列相關的抽象模式, 用於指導大型軟體系統各個方面的設計。 軟體架構是一個系統的草圖。 軟體體系結構是構建電腦軟體實踐的基礎。

嗯, 看完了霖哥也看不懂!看完了百科, 霖哥也不知道怎麼給朋友進行講解。

只好, 從一個女人開始說起。

從衣櫃收納看架構

日本有一個“收納女王”, 名叫近藤麻理惠, 被英國媒體稱為日本整理女王, 而且被美國《時代週刊》評選為“2015全球最具影響力的100人”之一, 上榜理由是——特別會做家務。

女王有什麼本事?她能把家裡每一寸空間的效用發揮到極致, 比如, 給你的衣櫃, 來一個變身:

想一想, 我們自己的衣櫃是怎麼樣的?

我們的衣櫃, 用普通隨意的折疊方式, 堆放衣服, 大概放置100件衣服。

女王呢?同樣的衣櫃, 經她處理, 卻可以容得下200件衣服。 怎麼做到?

這就要講究方法與技巧了, 比如女王的做法:

衣服折疊後不平放, 而是垂直放置。

衣服還可以按顏色擺放, 從左到右從重到輕, 顏色從深到淺。

...................(省略各種套路)

一系列的方法、技巧、套路, 就能讓原本有限的空間裡, 收納更多的物件。

換句話, 用更好的整理方法, 調整了衣櫃的衣服擺設的“架構”, 就能讓衣櫃變得更好。

在霖哥的心中, “架構師”可能是一個每家婦女都在做的事情, 一點都不複雜——為一個雜亂無章的家, 通過有規律的方法、技巧, 來讓我們的家變得更加的整潔,

這就是“調整架構”。

當某一天, 發現之前的整理和擺設, 不太滿足需要了, 翻箱倒櫃地把衣服、物件翻出來, 重新整理。 這重新整理的過程, 就叫“重新整理架構”。 (剛好這對應了軟體工程中的一個詞, 叫“重構”)

對此, 我們甚至可以把日本的“收納女王”, 給她一個很程式師的稱謂——家庭架構師。

當出現“重構”的時候, 家裡的其他人可就著急了, 明明一個家好好的, 幹嘛要把它整亂了, 重新佈置?“家庭架構師”可有著他們自己的理由, 說這樣可以讓家變得更好、更實用、blah blah blah說一堆。

每一個家庭, 總有那麼一個婦女或婦男, 是家裡的架構師。

在這裡, 為方便理解, 霖哥斗膽, 想重新定義“架構”這個概念:

把大量東西進行排列組合的技巧和方法,

就叫架構。

軟體架構

在霖哥的上一篇文章「想自學程式設計?霖哥建議從JavaScript開始!」中, 提到一個函數思維的概念, 裡面提及到:

所謂函數, 學術上來定義, 是一個統一的代碼塊;而霖哥的理解, 函數就像一個別人生產好的工具。

理解“函數”至關很重要, 程式開發當中, 幾乎90%的代碼都在不斷地調用函數。 當程式師想做一件事的時候, 第一個要想到的, 是“找函數”, 而不是寫具體的函數。

大量的代碼和函數促使軟體工程領域, 產生了一個職位, 叫做架構師。 架構師的工作, 一般就是對大量的程式設計代碼, 給出優秀的整理方案, 指導程式師團隊更好的工作。

我們也聽說過類似的寫代碼的新聞, 比如“一個女兵90天編40萬行代碼”, 這聽起來特別的牛逼。

可是我們仔細想一想,40萬行代碼,是什麼概念?我們估算一下:一本書裡的一行,我們算少一點,大概20字,那麼40萬行代碼,接近800萬字。而一本200頁的書,大概是30萬字,那麼800萬字,已經可以寫成一本大概5000頁的書了。

上面只是一個估算,精確性霖哥這裡不多追究。一個人寫出40萬行代碼,確實有點誇張,但是實際的大型商務軟體項目中,幾十個程式師互相協助,這個代碼規模有時候還是挺常見的。這裡面,用“函數思維”來想,也有著成千上萬的代碼和函數。把他們管理好,這就是架構師的工作。

細思一下,把家裡的上百件衣服,塞到一個衣櫃裡,就有著無數的方法和技巧。更何況,整理40萬行程式設計語言代碼、近5000頁的書?!

回到霖哥上一段的定義:

把大量東西進行排列組合的技巧和方法,就叫架構。

大量的程式設計語言代碼,需要架構師進行管理和收納,好的架構師,就像好的家庭收納女王,讓一個家的效能放大幾倍:

寫1萬行代碼,就能實現別人10萬行代碼的功能;

用1台電腦的運算資源,就能發揮出別人用100台電腦所能達到的效果;

現實的軟體發展中,最常見的現象莫過於,當老闆提出各種新的需求時,好的軟體架構,用1小時的就能完成改動,而差的架構,則需要加班加點,整整花上半年,甚至一年,才能完成改動。

這可是現實軟體工程師裡非常常見的現象,不然,加班幹嘛?軟體發展中的大量時間,有時都耗在了架構調整上,而不是程式設計語言本身。

這種對架構的改動,就像我們之前所說的家庭婦女的“重構”。從這個角度我們思考,我們就能理解家庭婦女為什麼要翻箱倒櫃的,對家裡的衣服和擺設進行重構,還諸多理由。程式師也就能諒解,軟體架構師們為什麼要把成熟的軟體產品,加班加點進行大幅度的修改了。

“軟體架構師”跟“家庭架構師”,他們的工作是非常的類似的,他們都負責把大量無序的東西,變得井井有條、更有擴展性,讓事物變得更好。

(圖:常見的Windows作業系統的軟體架構,是非常複雜的,不必細看,可跳過)

淘寶網的架構演化

在實際的軟體發展中,把架構玩得出神入化的,非大型網站莫屬了,如淘寶網。

我們知道12306網站,經常動不動就無法訪問,而一些大型商業網站,如淘寶網,幾億用戶同時在裡面購物,卻一直能保持快速的流覽,這是為什麼?

因為架構設計的不同!

首先,我們知道,我們訪問一個網站,其本質,就是訪問一台電腦,我們把這樣的電腦,叫作伺服器;當訪問這台電腦時,就會返回給我們網頁資訊,顯示在流覽器上。

(圖:最簡單的網站架構,摘自《大型網站技術架構》)

如圖,這是我們平常最簡單的網站應用伺服器架構了,它主要有應用程式、檔、資料庫,一般它們都是安裝在同一台電腦上。

我們自己用過電腦都知道,一台電腦,當運行的軟體非常多,它就會變得很慢,甚至直接死機,無法操作。

同理,如前所說,訪問一個網站的本質,是訪問一台電腦。當大量的人同時訪問一台裝有網站的電腦,電腦就會不堪重負,無法訪問了(比如,12306)。

最初的淘寶網,其實也是這樣一個簡單的架構,而隨著他們業務的發展,10多年過去了,他們的架構已經演變成類似這樣了:

(圖:現在常見的大型網站技術架構,摘自《大型網站技術架構》,太複雜,我建議你不要點開看)

把大量東西進行排列組合的技巧和方法,就叫架構。

嗯,可以看到,為了應付海量的用戶訪問網站,大型網站的架構師們可以說使出渾身解數,把各種各樣的程式設計代碼組成軟體服務,通過各種各樣的技巧和方法,形成一個複雜而高效的架構。

發展到今天,淘寶網的網站架構已經變得一個非常非常複雜的巨無霸了。

結果,你也知道了,在這樣的一個架構下,今天的淘寶網能夠同時容納幾億人的訪問,這是因為它的架構,了不起;普通的架構,卻可能經不起幾千用戶的考驗。

這不是跟我們的收納女王,“家庭架構師”很相似嗎?同樣的一個衣櫃,人家可以整得井井有條,收納大量的衣物;而很多人的衣櫃,卻衣物四散、混亂不堪。

總結

霖哥今天用了日本整理女王作為類比,介紹了什麼是軟體程式設計中的架構,並且妄自下了一個定義:

把大量東西進行排列組合的技巧和方法,就叫架構。

在上一篇《想自學程式設計?霖哥建議從JavaScript開始!》中,霖哥提及到,軟體工程,90%的代碼都在不斷地調用函數;用牛逼的方法和技巧,對大量的函式呼叫進行整理,成就了軟體發展中的“架構”。

我們不妨腦洞大開,“函數”就像磚頭,“架構”就像建築結構,軟體程式設計是不是很像造房子?下一篇文章,霖哥想說說造房子與程式設計的關係。

最後,霖哥呼籲,請珍愛你生命中的家庭架構師——你的媽媽、你的愛人、或者,你自己。

作者相關系列文章:

「我是如何用10天自學程式設計,改變一生」

「想自學程式設計?霖哥建議從JavaScript開始!」

我是霖哥,一個商學院畢業的程式師,通過自學程式設計成為一家大型上市公司的資深軟體工程師。

在《商學院畢業的程式師》專欄中,我想持續分享我自學程式設計的經驗和心法,用通俗的話提煉我的技術思維和對科技世界的理解,希望可以幫助到你。

如果在瞭解或學習程式設計的過程中有迷惘、或對一些生澀的科技概念的不解,用力留言!

這聽起來特別的牛逼。

可是我們仔細想一想,40萬行代碼,是什麼概念?我們估算一下:一本書裡的一行,我們算少一點,大概20字,那麼40萬行代碼,接近800萬字。而一本200頁的書,大概是30萬字,那麼800萬字,已經可以寫成一本大概5000頁的書了。

上面只是一個估算,精確性霖哥這裡不多追究。一個人寫出40萬行代碼,確實有點誇張,但是實際的大型商務軟體項目中,幾十個程式師互相協助,這個代碼規模有時候還是挺常見的。這裡面,用“函數思維”來想,也有著成千上萬的代碼和函數。把他們管理好,這就是架構師的工作。

細思一下,把家裡的上百件衣服,塞到一個衣櫃裡,就有著無數的方法和技巧。更何況,整理40萬行程式設計語言代碼、近5000頁的書?!

回到霖哥上一段的定義:

把大量東西進行排列組合的技巧和方法,就叫架構。

大量的程式設計語言代碼,需要架構師進行管理和收納,好的架構師,就像好的家庭收納女王,讓一個家的效能放大幾倍:

寫1萬行代碼,就能實現別人10萬行代碼的功能;

用1台電腦的運算資源,就能發揮出別人用100台電腦所能達到的效果;

現實的軟體發展中,最常見的現象莫過於,當老闆提出各種新的需求時,好的軟體架構,用1小時的就能完成改動,而差的架構,則需要加班加點,整整花上半年,甚至一年,才能完成改動。

這可是現實軟體工程師裡非常常見的現象,不然,加班幹嘛?軟體發展中的大量時間,有時都耗在了架構調整上,而不是程式設計語言本身。

這種對架構的改動,就像我們之前所說的家庭婦女的“重構”。從這個角度我們思考,我們就能理解家庭婦女為什麼要翻箱倒櫃的,對家裡的衣服和擺設進行重構,還諸多理由。程式師也就能諒解,軟體架構師們為什麼要把成熟的軟體產品,加班加點進行大幅度的修改了。

“軟體架構師”跟“家庭架構師”,他們的工作是非常的類似的,他們都負責把大量無序的東西,變得井井有條、更有擴展性,讓事物變得更好。

(圖:常見的Windows作業系統的軟體架構,是非常複雜的,不必細看,可跳過)

淘寶網的架構演化

在實際的軟體發展中,把架構玩得出神入化的,非大型網站莫屬了,如淘寶網。

我們知道12306網站,經常動不動就無法訪問,而一些大型商業網站,如淘寶網,幾億用戶同時在裡面購物,卻一直能保持快速的流覽,這是為什麼?

因為架構設計的不同!

首先,我們知道,我們訪問一個網站,其本質,就是訪問一台電腦,我們把這樣的電腦,叫作伺服器;當訪問這台電腦時,就會返回給我們網頁資訊,顯示在流覽器上。

(圖:最簡單的網站架構,摘自《大型網站技術架構》)

如圖,這是我們平常最簡單的網站應用伺服器架構了,它主要有應用程式、檔、資料庫,一般它們都是安裝在同一台電腦上。

我們自己用過電腦都知道,一台電腦,當運行的軟體非常多,它就會變得很慢,甚至直接死機,無法操作。

同理,如前所說,訪問一個網站的本質,是訪問一台電腦。當大量的人同時訪問一台裝有網站的電腦,電腦就會不堪重負,無法訪問了(比如,12306)。

最初的淘寶網,其實也是這樣一個簡單的架構,而隨著他們業務的發展,10多年過去了,他們的架構已經演變成類似這樣了:

(圖:現在常見的大型網站技術架構,摘自《大型網站技術架構》,太複雜,我建議你不要點開看)

把大量東西進行排列組合的技巧和方法,就叫架構。

嗯,可以看到,為了應付海量的用戶訪問網站,大型網站的架構師們可以說使出渾身解數,把各種各樣的程式設計代碼組成軟體服務,通過各種各樣的技巧和方法,形成一個複雜而高效的架構。

發展到今天,淘寶網的網站架構已經變得一個非常非常複雜的巨無霸了。

結果,你也知道了,在這樣的一個架構下,今天的淘寶網能夠同時容納幾億人的訪問,這是因為它的架構,了不起;普通的架構,卻可能經不起幾千用戶的考驗。

這不是跟我們的收納女王,“家庭架構師”很相似嗎?同樣的一個衣櫃,人家可以整得井井有條,收納大量的衣物;而很多人的衣櫃,卻衣物四散、混亂不堪。

總結

霖哥今天用了日本整理女王作為類比,介紹了什麼是軟體程式設計中的架構,並且妄自下了一個定義:

把大量東西進行排列組合的技巧和方法,就叫架構。

在上一篇《想自學程式設計?霖哥建議從JavaScript開始!》中,霖哥提及到,軟體工程,90%的代碼都在不斷地調用函數;用牛逼的方法和技巧,對大量的函式呼叫進行整理,成就了軟體發展中的“架構”。

我們不妨腦洞大開,“函數”就像磚頭,“架構”就像建築結構,軟體程式設計是不是很像造房子?下一篇文章,霖哥想說說造房子與程式設計的關係。

最後,霖哥呼籲,請珍愛你生命中的家庭架構師——你的媽媽、你的愛人、或者,你自己。

作者相關系列文章:

「我是如何用10天自學程式設計,改變一生」

「想自學程式設計?霖哥建議從JavaScript開始!」

我是霖哥,一個商學院畢業的程式師,通過自學程式設計成為一家大型上市公司的資深軟體工程師。

在《商學院畢業的程式師》專欄中,我想持續分享我自學程式設計的經驗和心法,用通俗的話提煉我的技術思維和對科技世界的理解,希望可以幫助到你。

如果在瞭解或學習程式設計的過程中有迷惘、或對一些生澀的科技概念的不解,用力留言!

Next Article
喜欢就按个赞吧!!!
点击关闭提示