[讀書筆記]軟體架構師應該知道的97件事

來源:互聯網
上載者:User

  1、開發人員應該解決問題,而不是解迷取樂。

  2、關鍵問題可能不是出在技術上:

  • 不要把對話當成對抗
  • 不要帶成情緒與人溝通
  • 嘗試通過溝通設定共同目標

  3、以溝通為中心,堅持簡明清晰的表達方式和開明的領導風格。

  • 讓開發人員參與架構的制訂過程,這樣他們才會買你的帳!

  4、架構才是影響應用效能和延展性的決定因素,績效參數是無法簡單地通過更換軟體,或者“調優”底層軟體架構來改善的。

  5、分析客戶需求背後的意義

  • 架構師可以通過詢問客戶,分析客戶要求的功能和需求的真正意義,定位真正的問題,從而提出比客戶的建議更好、成本更底的解決方案。

  6、讓溝通事半功倍,起立發言是簡單、有效方法!

  7、故障終究會發生。

  8、量化需求

  • 比如:必須在1500毫秒響應使用者的輸入。在正常負載(定義如下....)的情況下,平均回應時間必須控制在750~1250毫秒之間。由於使用者無法識別500毫秒以內的響應,所以我們必須將回應時間降低到這個範圍之下。

  9、一行代碼比五百行架構說明更有價值

  • 如果你親自參與開發,應該珍視自己花在寫代碼上的時間,千萬別聽信這會分散架構師精力的說法。參與項目所付出的努力,既能拓展你的宏觀視野,也能豐富你的微觀視界。

  10、提前關注效能問題。

  11、草率提交任務是不負責任的行為。

  12、營運目標至上、掌握業務領域知識

  • 架構師必須通過溝通協調,即保護軟體架構,又堅持營運目標,即允許開發人員制定微觀(技術)決策,又設法避免他們參與制定業務決策。如果技術決策脫離了營運目標目標和現實條件的約束,則無異於用寶貴的稀缺資源進行高風險的投機。

  13、先確保解決方案簡單可用,再考慮通用性和複用性。

  • 許多用來實現基礎設施的代碼,包括組件架構、類庫、基礎服務,普遍存在一個問題,它們的設計一味強調通用性而不考慮具體應用,導致出現許多令人困惑的可選項和不確定因素,這些功能常常不是因為被閑置,就是被誤用,甚至毫無價值。

  14、架構師應該親力親為

  • 對技術缺乏全面理解的架構師,充其量只是個專案經理。
  • 架構師完全可以要求團隊成員的協助,讓團隊成員充分參與制訂解決方案,同時引導討論方向,找出正確的方案。
  • 架構師應該儘早參與項目,與團隊成員並肩工作,而不是坐在象牙塔裡發號施令。

  15、持續整合

  • 儘早構建,經常構建。

  16、避免進度調整失誤

  • 加快進度不一定會降低成本,要考慮交付品質和後期造成的影響,可以嘗試去掉一些不重要的功能,留待後續版本發布。

  17、取捨的藝術

  • 世界上不存十全十美的設計,既具有高效能,又具有高可用性;既高度安全,又高度抽象;

  18、不要輕易放過不起眼的問題

  • 自已的盲點自己難以查覺,忠言雖然逆耳,卻是你最寶貴的財富。
  • 組織團隊一起來想辦法管理風險。

  19、讓大家學會複用

  • 大家知道它們的存在
  • 大家知道如何使用它們
  • 大家認識到利用已有的資源好過自己動手

  20、架構裡沒有大寫的"I"

  • 自我反省,做人問題。
  • 重視團隊合作,架構屬於團隊,不是你一個人的。你負責導航,大家一起划槳。雙方缺一不可,但相比之下,你更離不開他們的協助。
  • 做技術的,保持謙虛是最基本的素質!

  21、先嘗試後決策

  • 盡量延遲決定的時間,最後即便不做決策,決策也會自己呈現。
  • 對同一個問題嘗試兩種或兩種以上的解決方案,比直接決策然後動手實現的工作量要大。

  22、程式設計是一種設計

  • 把編寫代碼看成設計行為,而不是生產行為。

  23、控制項目規模

  • 抓住真正的需求
  • 分而治之
  • 設定優先權
  • 儘快交付

  24、架構師不是演員,是管家。

  • 紮實掌握技術和業務領域知識,以嚴謹的領導風格贏得團隊的尊重。

  25、混合開發的時代已經來臨

  26、效能至上

  • 尤其目前的互連網行業

  27、學習軟體專業的行話

  • 比如架構和設計模式可以分成四大類,企業架構模式、應用架構模式、整合模式和設計模式。

  28、具體情境決定一切

  • 架構決策只有在情境需要時,才能犧牲盡量簡單的原則。

  29、侏儒、精靈、巫師和國王

  • 軟體架構師好比國王,應該熟悉各種人的性格特點,招聘不同性格的人加入自己的團隊,英明的國王知道怎樣用目標來激勵不同的種族,率領大家並肩作戰完成任務。

  30、避免重複

  • 複製是魔鬼
  • 重複性的工作拖累開發進度

  31、仔細觀察,別試圖控制一切

  32、架構師當聚焦於邊界和介面

  • 低耦合,高內聚
  • 定義系統邊界

  33、助力Team Dev

  • 確保開發人員擁有他們所需的工具
  • 確保開發人員擁有他們所需的技能
  • 只要不違背軟體設計的總體目標,就讓開發人員自己做出決策。
  • 保護好開發人員,不要讓他們捲入到不那麼重要的工作中。

  34、記錄決策理由

  • 不要為了寫文檔而寫。
  • 懂得《取捨的藝術》,定義軟體架構,就是要在品質屬性、成本、時間以及其它各種因素之間,做出正確的權衡。

  35、分享知識和經驗

  36、模式病

  • 使用模式解決適用的問題才是最重要的,禁止在項目中硬塞不必要的模式。

  37、關注應用程式的支援和維護

  • 應用程式超過80%的生命週期都是在維護上
  • 理解開發人員和技術服務人員確實具有不同的技能
  • 在項目中儘可能早地引入支援負責人
  • 將支援負責人作為團隊的核心成員之一
  • 讓支援負責人蔘與規劃應用程式的支援

  38、有舍才有得

  • 接受某種約束或放棄某個特性,可帶來更好的架構,這種架構在構建和營運上都會更加簡單,而且成本底。

  39、先考慮原則、公理和類比,再考慮個人意見和口味。

  40、資料是核心

  • IDE、作業系統、軟體等都是工具。

  41、不僅僅控制碼,也要控制資料。

  • 原始碼控制和持續整合,是管理應用程式構建過程和部署過程的優秀工具。資料方案和資料內容通常會隨著原始碼變化而變化,它們也是這一過程的重要組成部分,因此也需要對之進行類似的控制。
  • 靈活運用“資料庫指令碼”解決問題。

  42、確保簡單問題有簡單的解

  • 對於簡單的問題,不要採用複雜的解決方案。軟體設計者都是聰明人,但是出於炫技心理,很容易陷入“殺雞用牛刀”的誤區。
  • 對應第一條“開發人員應該解決問題,而不是解迷取樂。”

  43、架構師首先是開發人員

  • 作為架構師,主要目標應該是建立可行、可維護的解決方案,當然,也一定要能解決當前的問題。

  44、根據投資報酬率(ROI)進行決策

  45、一切軟體系統都是遺留系統

  • 即使系統十分前沿,採用了最新的技術開發而成,但對於接手的下一個而言,它也會是遺留系統。
  • 設計最佳化的架構基礎,考慮如下幾個問題:清晰性、可測性、正確性、可跟蹤
  • 可以參考一些優秀的開源項目

  46、起碼要有兩個可選的解決方案

  47、理解變化影響

  • 優秀的架構師能夠深刻理解變化帶來的影響,這種影響不僅限於彼此隔離的軟體模組之間,而且包括人與人之間,以及系統與系統之間。
  • 變化有多種不同表現形式:功能需求的變化、可擴充性需求的演化、系統的介面被修改、團隊人員流動等。
  • 常用方法減輕變化的影響:運行小規模的增量漸層、構建可重複啟動並執行測試案例、讓測試案例更易編寫、跟蹤好依賴關係、系統性的行動,根據反饋資訊作出進一步反應、自動化重複的任務。

  48、你不能不瞭解硬體

  • 學習硬體知識
  • 和基礎設施架構師緊密合作

  49、現在走捷徑,將來付利息。

  50、不追求“完美”,“足夠好”就行

  • 在設計和實現上追求完美,會導致過度設計和模糊混亂的解決方案,最終使系統難以維護。應用程式開發不是選美大賽,因此,停止吹毛求疵的做法,不要再浪費時間追求盡善盡美。

  51、小心“好主意”

  • 那種誘人的、不用想都知道的、外表無辜、以為不可能會產生傷害的那種“好”主意。通常在項目進展到一半而似乎一切看起來都挻好——形勢和進度都在循序漸進,初步測試進展順利,落地日期看起來可靠無誤——的時候,項目團隊中有人會冒出這些想法。務必小心那些“好主意”,它可能會殺死你的項目。

  52、內容為王

  • 很多系統的成功取決於其內容的建設。

  53、對商業方,架構師要避免憤世嫉俗。

  54、架構師要以自己的編程能力為依託

  • 對應“架構師首先是開發人員”

  55、穩定的問題才能產生高品質的解決方案

  • 只要問題是穩定的,你就可以建立出一個擁有穩定設計的系統。穩定的設計可以讓你集中精力,打造出高品質的應用程式。

  56、天道酬勤

  57、棄聰明,求質樸。

  58、對決策負責

  • 重要的架構決策應該以書面形式記錄下來,它們必須經過校核證實,並可被追溯。
  • 必須和執行該決策及會直接或間接受其影響的人進行過溝通,達成共識。

  59、精心選擇有效技術,絕不輕易拋棄。

  60、客戶的客戶才是你的客戶!

  61、事物發展總會出人意料

  • 設計是一個不斷髮現的過程,發現問題並解決問題。
  • 沒有永不到期的解決方案。

  62、著重強調項目的商業價值

  • 形成價值陳述
  • 建立量化的度量標準
  • 回過頭來關聯傳統商業的衡量方式
  • 知道該在哪裡停止
  • 尋找恰當的時機

  63、償還技術債務

  • 花合適時間“一次做對”!
  • 取巧走“捷徑”,爭取儘快推出修改後以產品。

  64、打造上手的系統

  • 使用者體驗很重要
  • 對終端使用者而言,介面就是系統!

  65、找到並留住富有激情的問題解決者

  • 我們所要找的,是那種具備解決問題的能力和激情的開發人員,都善於攻克各種難題的人才。
  • 提防批評過度,它可能會扼殺開發人員的創造力,降底生產力。
  • 好的開發人員都非常聰明,他們知道自己並非一無是處,如果你對其工作吹毛求疵,將會降低他們對你的尊重!
  • 以正確的方式經營Team Dev,其重要性不言而喻。

  66、學習新語言

  • 想要理解客戶或者想讓客戶理解你的語言,必須學習客戶所在行業領域的語言,這樣才能做到有效溝通。

  67、優秀軟體不是構建出來的,而是培育起來的。

  • 設計儘可能小的系統,協助成功交付,並推動它向宏偉的遠景目標不斷演化。注意,不要把這種演化式方法和削減需求、規範混亂和生產廢品這樣的做法混淆在一起。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.