懂編程|從你家的衣柜,理解軟件編程的「架構(gòu)」

我是霖哥,一個因興趣入行的商學院畢業(yè)的程序員??傆胁簧俨皇亲鯥T的朋友,來問各種各樣的科技概念性的問題。所以,我想在「商學院畢業(yè)的程序員」中,把我對一些科技概念的認知,毫無保留的分享出來。

事情是這樣的,霖哥是一個商學院畢業(yè)的程序員嘛,大部分的同學,都是讀商科的。其中一個好基友,一個金融公司的職員,覺得互聯(lián)網(wǎng)未來很有發(fā)展,于是找到了一個云計算公司,進行面試。

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

「軟件編程里,什么是架構(gòu)?」

所謂架構(gòu),即軟件架構(gòu),在軟件工程中,經(jīng)常會出現(xiàn)架構(gòu)一詞,甚至還有專門的職位,叫“架構(gòu)師”。 架構(gòu)是什么?我們看看百度百科怎么說的:

軟件架構(gòu)(software architecture)是一系列相關(guān)的抽象模式,用于指導大型軟件系統(tǒng)各個方面的設計。
軟件架構(gòu)是一個系統(tǒng)的草圖。軟件體系結(jié)構(gòu)是構(gòu)建計算機軟件實踐的基礎。

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

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

從衣柜收納看架構(gòu)

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

女王有什么本事?她能把家里每一寸空間的效用發(fā)揮到極致,比如,給你的衣柜,來一個變身:

想一想,我們自己的衣柜是怎么樣的?

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

女王呢?同樣的衣柜,經(jīng)她處理,卻可以容得下200件衣服。怎么做到?

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

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

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

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

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

換句話,用更好的整理方法,調(diào)整了衣柜的衣服擺設的“架構(gòu)”,就能讓衣柜變得更好。

在霖哥的心中,“架構(gòu)師”可能是一個每家婦女都在做的事情,一點都不復雜——為一個雜亂無章的家,通過有規(guī)律的方法、技巧,來讓我們的家變得更加的整潔,這就是“調(diào)整架構(gòu)”。

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

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

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

每一個家庭,總有那么一個婦女或婦男,是家里的架構(gòu)師。

在這里,為方便理解,霖哥斗膽,想重新定義“架構(gòu)”這個概念:

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

軟件架構(gòu)

在霖哥的上一篇文章「想自學編程?霖哥建議從JavaScript開始!」中,提到一個函數(shù)思維的概念,里面提及到:

所謂函數(shù),學術(shù)上來定義,是一個統(tǒng)一的代碼塊;而霖哥的理解,函數(shù)就像一個別人生產(chǎn)好的工具。

理解“函數(shù)”至關(guān)很重要,程序開發(fā)當中,幾乎90%的代碼都在不斷地調(diào)用函數(shù)。當程序員想做一件事的時候,第一個要想到的,是“找函數(shù)”,而不是寫具體的函數(shù)。

大量的代碼和函數(shù)促使軟件工程領域,產(chǎn)生了一個職位,叫做架構(gòu)師。架構(gòu)師的工作,一般就是對大量的編程代碼,給出優(yōu)秀的整理方案,指導程序員團隊更好的工作。

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

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

上面只是一個估算,精確性霖哥這里不多追究。一個人寫出40萬行代碼,確實有點夸張,但是實際的大型商業(yè)軟件項目中,幾十個程序員互相協(xié)助,這個代碼規(guī)模有時候還是挺常見的。這里面,用“函數(shù)思維”來想,也有著成千上萬的代碼和函數(shù)。把他們管理好,這就是架構(gòu)師的工作。

細思一下,把家里的上百件衣服,塞到一個衣柜里,就有著無數(shù)的方法和技巧。更何況,整理40萬行編程語言代碼、近5000頁的書?!

回到霖哥上一段的定義:

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

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

寫1萬行代碼,就能實現(xiàn)別人10萬行代碼的功能;

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

現(xiàn)實的軟件開發(fā)中,最常見的現(xiàn)象莫過于,當老板提出各種新的需求時,好的軟件架構(gòu),用1小時的就能完成改動,而差的架構(gòu),則需要加班加點,整整花上半年,甚至一年,才能完成改動。

這可是現(xiàn)實軟件工程師里非常常見的現(xiàn)象,不然,加班干嘛?軟件開發(fā)中的大量時間,有時都耗在了架構(gòu)調(diào)整上,而不是編程語言本身。

這種對架構(gòu)的改動,就像我們之前所說的家庭婦女的“重構(gòu)”。從這個角度我們思考,我們就能理解家庭婦女為什么要翻箱倒柜的,對家里的衣服和擺設進行重構(gòu),還諸多理由。程序員也就能諒解,軟件架構(gòu)師們?yōu)槭裁匆殉墒斓能浖a(chǎn)品,加班加點進行大幅度的修改了。

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

(圖:常見的Windows操作系統(tǒng)的軟件架構(gòu),是非常復雜的,不必細看,可跳過)

淘寶網(wǎng)的架構(gòu)演化

在實際的軟件開發(fā)中,把架構(gòu)玩得出神入化的,非大型網(wǎng)站莫屬了,如淘寶網(wǎng)。

我們知道12306網(wǎng)站,經(jīng)常動不動就無法訪問,而一些大型商業(yè)網(wǎng)站,如淘寶網(wǎng),幾億用戶同時在里面購物,卻一直能保持快速的瀏覽,這是為什么?

因為架構(gòu)設計的不同!

首先,我們知道,我們訪問一個網(wǎng)站,其本質(zhì),就是訪問一臺電腦,我們把這樣的電腦,叫作服務器;當訪問這臺電腦時,就會返回給我們網(wǎng)頁信息,顯示在瀏覽器上。

(圖:最簡單的網(wǎng)站架構(gòu),摘自《大型網(wǎng)站技術(shù)架構(gòu)》)

如圖,這是我們平常最簡單的網(wǎng)站應用服務器架構(gòu)了,它主要有應用程序、文件、數(shù)據(jù)庫,一般它們都是安裝在同一臺電腦上。

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

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

最初的淘寶網(wǎng),其實也是這樣一個簡單的架構(gòu),而隨著他們業(yè)務的發(fā)展,10多年過去了,他們的架構(gòu)已經(jīng)演變成類似這樣了:

(圖:現(xiàn)在常見的大型網(wǎng)站技術(shù)架構(gòu),摘自《大型網(wǎng)站技術(shù)架構(gòu)》,太復雜,我建議你不要點開看)

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

嗯,可以看到,為了應付海量的用戶訪問網(wǎng)站,大型網(wǎng)站的架構(gòu)師們可以說使出渾身解數(shù),把各種各樣的編程代碼組成軟件服務,通過各種各樣的技巧和方法,形成一個復雜而高效的架構(gòu)。

發(fā)展到今天,淘寶網(wǎng)的網(wǎng)站架構(gòu)已經(jīng)變得一個非常非常復雜的巨無霸了。

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

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

總結(jié)

霖哥今天用了日本整理女王作為類比,介紹了什么是軟件編程中的架構(gòu),并且妄自下了一個定義:

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

在上一篇《想自學編程?霖哥建議從JavaScript開始!》中,霖哥提及到,軟件工程,90%的代碼都在不斷地調(diào)用函數(shù);用牛逼的方法和技巧,對大量的函數(shù)調(diào)用進行整理,成就了軟件開發(fā)中的“架構(gòu)”。

我們不妨腦洞大開,“函數(shù)”就像磚頭,“架構(gòu)”就像建筑結(jié)構(gòu),軟件編程是不是很像造房子?下一篇文章,霖哥想說說造房子與編程的關(guān)系。

最后,霖哥呼吁,請珍愛你生命中的家庭架構(gòu)師——你的媽媽、你的愛人、或者,你自己。

作者相關(guān)系列簡書文章:

我是如何用10天自學編程,改變一生

想自學編程?霖哥建議從JavaScript開始!


我是霖哥,一個商學院畢業(yè)的程序員,通過自學編程成為一家大型上市公司的資深軟件工程師。

在《商學院畢業(yè)的程序員》專欄中,我想持續(xù)分享我自學編程的經(jīng)驗和心法,用通俗的話提煉我的技術(shù)思維和對科技世界的理解,希望可以幫助到你。

如果覺得有用就分享給你的朋友,轉(zhuǎn)載請注明出處《商學院畢業(yè)的程序員》。

如果在了解或?qū)W習編程的過程中有迷惘、或?qū)σ恍┥鷿目萍几拍畹牟唤?,用力留言?/p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容