一:什麼是架構
在學習軟體體系結構這門課之前,我們貌似只對軟體開發以及簡單的mis系統的開發有一絲絲的開發經驗和感觸,無架構之言。我們目前還無法像軟體架構師那樣去思考問題。在第一篇部落格中,王先生給出了架構的基本定義-architecture (latin architectura, from the greek ἀρχιτέκτων arkhitekton」architect」, from ἀρχι- 「chief」 and τέκτων 「builder」) is both the process and the product of planning, designing, and constructing buildings and other physical structures。(從這個定義上看,架構好像是乙個過程,也不是很清晰。為了講清楚這個問題,我們先來看看為什麼會產生架構)。
在每個人都必須自己完成所有生活必須品的生產的時候,是沒有架構的(當然在個人來講,同一時刻只能做有限的事情,在時間上還是可能會產生架構的)。一旦產生的分工,就把所有的事情,切分成由不同角色的人來完成,最後再通過交易,使得每個個體都擁有生活必須品,而不需要每個個體做所有的事情,只需要每個個體做好自己擅長的事情,並具備一定的交易能力即可。
當然,最後王概凱給出了架構的概念,即:根據要解決的問題,對目標系統的邊界進行界定。所以,乙個合格的軟體架構師,需要以一種類似與結構設計是來看待問題、分析問題,提出問題的解決方案。
二:認識架構是理解架構的基礎
在「概念」這個含義中,很多人都有認識的誤區,下面,我就介紹一下文中作者給我們舉出的例子:大部分人對於每天都習以為常的概念,都自以為明白了,但實際上都是下意識的,並不是主動的認識。比如說「什麼是桌子?」,做培訓的時候,我經常拿這個例子來問大家,回答千奇百怪。這實際上就導致了做架構的時候,不同角色的溝通會出很多問題,那麼結果也就可想而知了。
如前一篇所說,架構實際上解決的是人的問題,而概念是人認識這個世界的基礎,自然概念的認識就非常的重要。這篇文章嘗試討論一下,如何去認識概念。當然這篇不是語言學的文章,我這裡所討論的,和語言學可能不太一樣,如果大家對語言學感興趣,也可以去參考一下。
文中,王先生提出了中國古代傳統文化關於「概念」的研究與探索。原文不在這裡贅述,大致意思是這樣的:在中國的古代,「概念」一詞的含義用另外乙個詞來表示,即「名相」。相-即能看到的東西,當聽到完整的名詞,腦子裡想到的實物(包括他的形狀、用處等)叫做-名,加一起就是名相。但是,如果這個物體性狀發生改變,我們對它的感覺也會發生改變。比如說,乙個杯子,打碎了,便是一堆碎瓦片。如果磨成粉,那就是一堆沒用的齏粉。那究竟什麼才是相?實際上「相「表達的不是乙個具體的東西,如上面所提的乙個瓷器杯子,並不是指這個瓷器,而是這個瓷器所起的乙個作用:一手可握,敞口(一般不超過底的大小,太大口就叫碗了),並且內部有乙個空間可乘東西的這麼乙個作用。並不是指這個瓷器本身。這也是為什麼我們從電視上看到乙個人拿杯子的時候,我們知道這個是杯子。但是實際上我們看到的都是光影而已。所以說相實際上代表的是這個作用,並不是具體的某個東西,而名是用來標識這個作用的,用來交流的。
回過頭來,根據架構的定義,要做好架構所首先必須具備的能力,就是能夠正確的認識概念,能夠發現概念背後所代表的問題,進而才能夠認識目標領域所需要解決的問題,這樣才能夠為做好架構打好基礎。事實上,這一能力,在任何乙個領域都是適用的,比如我們如果想要學習一項新的技術,如hibernate、spring、photoshop、www、internet等等,如果知道這些概念所要解決的問題,學習這些新的技術或者概念就會如虎添翼,快速的入手;學習乙個新的領域,也會非常的快速有效;使用這些概念來解釋問題,甚至發明新的概念都是很容易的事。
三:如何做好架構之識別問題
按照之前架構的定義,做好架構首先需要做的就是識別出需要解決的問題。一般來說,如果把真正的問題找到,那麼問題就已經解決了80%了。這個能力基本上就決定了架構師的水平。可是,當我們面對問題是,有哪些困難呢?原文中的一則笑話,可以說明形象的表達困難在哪。女主人公:老公,把袋子裡的土豆切一半下鍋。結果老公是把袋子裡的每個土豆都削了一半,然後下鍋。被告知要處理乙個問題,但是交過來的實際上是乙個解決方案,不是問題本身。被告知要處理乙個問題,直接通過直覺就有了乙個解決方案,馬上考慮解決方案如何落地,或者有幾種解決方案,選哪個合適。作為軟體工程師或者架構師,我們大部分時候是要去解決別人的問題,「別人」是誰,是值得好好思考的。在這個故事裡面,男主人要解決的,實際上是這個家庭晚餐需要吃土豆的問題,目標問題的主體實際上是這個家庭的成員。這裡,我們得到了乙個結論,即軟體架構師應該考慮問題的本質,使用者真正需要的,而不是按照自己的解決方法,敷衍的解決問題,這裡好像是數學中的大題。如果有一道很複雜的函式問題,給人直觀的感覺是可以用各種式子推到出來。可這是出題人的原想法嗎?細心點我們可以發現,原來這道問題可以用乙個定理推導得出。所以,解決問題,我們要學會找出提這個問題的人的真正需求,而不能簡單的按照自己的解決思路生搬硬套。
漫談架構有感 軟體架構師如何工作
軟體架構師是軟體行業中一種新興職業,工作職責是在乙個軟體專案開發過程中,將客戶的需求轉換為規範的開發計畫及文字,並制定這個專案的總體架構,指導整個開發團隊完成這個計畫。主導系統全域性分析設計和實施 負責軟體構架和關鍵技術決策的人員。架構師的主要任務不是從事具體的軟體程式的編寫,而是從事更高層次的開發...
架構漫談 軟體架構師
通過對架構漫談九篇部落格的閱讀,我了解到了軟體架構以及軟體架構師的工作狀況等內容 對於架構,我的理解是,在乙個系統中,存在乙個系統中多個角色共有的問題,為了更快更好地解決問題,將問題進行拆分,交由不同的角色來完成,並在各角色中建立溝通機制,進行有機的聯絡,總成乙個整體,完成目標系統的工作。了解到架構...
讀《架構漫談》有感之軟體架構師如何工作
首先,架構師需要根據要解決的問題,對目標系統的邊界進行界定,對目標系統按某個原則進行切分。切分的原則要便於不同的角色,對切分出來的部分並行或者序列展開工作,並對這些切分出來的部分設計溝通的機智,使得這些部分之間進行有機的聯絡,合併組裝成為乙個整體,來完成目標系統的所有工作。作為乙個架構師,應該要學會...