① 如何從程序員到架構師
程序員到架構師的技術成長之路分為幾個典型的階段:工程師 - 高級工程師 - 技術專家 - 初級架構師 - 中級架構師 - 高級架構師,總的成長原則是每個階段都需要「積累經驗、拓寬視野、深度思考」。
② android從程序員到架構師之路的作品目錄
Part-1: 從架構到代碼的過程
1.1 敏捷與架構的完美組合 敏捷開發的原則和價值觀 開發、架構、測試之關系 架構在敏捷過程里的角色 架構師在敏捷過程的職責 過程觀點:(需求)測試做<反饋>,敏捷(過程)做<迭代>; 分合觀點:(架構)設計做<分>,(代碼)開發做<合> 測試觸發反饋,反饋帶動迭代,迭代驅動<架構à代碼>重構 迭代促進了<架構師&開發者>的心靈溝通與攜手協作 舉例:架構師如何設計敏捷的起始架構(Simple Solution) 加法設計:圍繞問題( Problem)和願景(Vision),產生創意構想(Creative Idea) 減法設計:創意愛上限制(Creativity loves constraint) 1.2 代碼是架構的外貌,永遠青春 架構師與開發者的合作成果:架構+代碼=軟體(系統) 架構是軟體的骨架、代碼是軟體的外貌 架構是軟體的核心 架構的用意:創新組<合> 架構設計的焦點:介面(Interface) 設計決策具有<未來性>,系統才能適應未來 1.3 設計與開發的分工合作 架構設計的目的是:組合 架構師做<分>,支持開發者做<合>,合作實踐(系統)組合 分得妙,就能合得快(即:分之以為用,合之以為利) 分得妙,就能得好介面(Interface) 架構師的核心工作:介面設計(Interface Design) 開發者的核心工作:依據介面,開發(系統)模塊並整合 有許多種開發者:如App開發者、底層系統開發者等 1.4 敏捷思維:盡快呈現架構的外貌 介面設計是<物>的組合設計 介面設計是<事>的分工設計 架構師設計多種介面來支撐分工與組合 架構師心中的4種介面:SI、PI、API和UI SI:本架構與外部系統之間的整合介面 PI:本架構與內部挿件(Plug-in)之間的介面 API:本架構與應用程序(App)之間的介面 UI:App與用戶的互動介面 l 依循敏捷原則,介面迅速落實為代碼,盡快呈現外貌
1.5 EIT造形:介面美麗的外貌 認識EIT軟體造形 EIT造形:呈現核心設計的外貌 EIT造形的<I>可涵蓋三種:SI、PI、API EIT造形的<E>代表本架構 EIT造形的<T>代表本架構的配件(即插件:Plug-in) 1.6 一群<E&I>美妙的組合是:框架(Framework) 認識GoF的設計模式(Design Pattern) 隨著敏捷的迭代過程,EIT造形會逐漸增加 如何巧妙組合漸增的EIT造形:擅用設計模式 組合起來,就成為軟體框架了 如何迭成多層級(Layer)的框架體系:以Android為例 Part-2: 從Android框架代碼中學習設計
2.1 基礎設計模式(Pattern)的代碼:以Android為例 Template Method模式:IoC(控制反轉)機制 Observer模式:介面設計 Abstract Factory模式:兩個EIT造形的組合 Adapter模式:封裝介面 Composite模式:實踐組合 Façade模式:組合體的介面設計 EIT造形是原子,設計模式是分子 更多EIT造形的組合模式:以Android代碼為例 2.2 從 UI框架入手 View體系的架構設計(使用Template Method模式) Activity-View的架構設計(使用Factory模式) Layout-View的架構設計(使用Composite模式) WMS(WindowManagerService)-View的架構設計 WMS-SurfaceFlinger的架構設計 Surface-Canvas(畫布)的架構設計 SurfaceView與OpenGL的3D繪圖架構設計 ListView框架的設計 2.3 跨進程(IPC)架構設計 Android 的IPC幕後設計:BD(Binder Driver)驅動架構 以IBinder介麵包裝BD驅動的服務 包裝IBinder介面的Proxy-Stub設計模式 Proxy和Stub類別的代碼 設計Proxy和Stub類別的API 如何自動生成Proxy和Stub類別代碼 IBinder & AIDL方法 方法(一):Implementing a Binder 方法(二):Using a Messenger 方法(三):Bound Services 2.4 Java與C/C++兩層框架的設計 JNI(Java Native Interface)代碼開發要點 JNI的數據型態(Data Type)轉換規則 JNI的線程(Thread)模式:JNIENV類的設計 正向通信:Java函數調用本地C函數 反向通信:本地C函數調用Java函數 Android HAL架構設計 HAL(Hardware Abstraction Layer)的意義 理解runtime與HAL Stub 撰寫HAL Stub代碼 Stub調用Linux Kernel的方法 2.5 核心服務的框架設計 認識核心服務(Core Service) 核心服務都是在開機過程中,由Android的INIT進程啟動的 包括Android Service和 Native Service兩種 以Java語言撰寫的,就稱為Android Service 以C++撰寫的,就稱為Native Service 親自撰寫一個核心服務 撰寫一個C++類別 繼承BBinder基類,繼承得來IBinder界面 提供介面給Java層(透過JNI)調用 2.6 JUnit測試框架的設計 Android的測試工具,都是基於JUnit測試框架的 JUnit框架也是由許多EIT造形所組成;其TestCase基類是<E&I> 從基類衍生出各子類,如ServiceTestCase就是擴充的<E&I>;其內涵的setUP()和tearDown()函數就是<I> 可撰寫<T>(即Test case)代碼,來啟動TDD機制 可使用TestSuite基類來管理一群相關的<T>(即Test case) Part-3: 梳理你的架構設計思想、方法和模式
3.1 復習設計概念與技藝
概念復習 說明框架的起源、分層與其「無用之用」效果 闡述應用框架魅力的泉源:控制反轉(IoC, Inversion of Control)機制 深入認識控制反轉機制 主控者是框架,而不是應用程序 現代應用框架:採取廣義IoC觀念 框架的重要功能:提供默認行為(Default Behavior) 技藝復習 抽象(無之)與衍生(有之) 打造框架:細膩的抽象步驟 基本步驟: 細膩的手藝(一):數據抽象 細膩的手藝(二):函數抽象 細膩的手藝(三):將抽象類別轉為介面 善用類的繼承(Inheritance)機制 設計基類的抽象函數 抽象是手段,組合是目的 UML復習 UML的3種基本圖表:類圖、順序圖和用例圖 以UML表達設計模式和框架 EIT造形的兩種表達:UML圖和代碼 3.2 架構設計的需求分析方法 基本設計技能:把輪胎拔掉 偉大的雕刻師羅丹( Musée Rodin)說:」把不必要的部分去掉」 買主需求:想想為什麼(why)汽車架構師會決定把輪胎拔掉呢? 其背後的理由是:買主來了,才知道買主對輪胎的偏好或特殊需求。只有等到買主決定和挑選了輪胎之後,才能將輪胎裝配上去。 探索買主需求 為什麼把輪胎拔掉呢? 為什麼火鍋店的桌子要挖洞呢? 為什麼餐廳要分開<食譜>與<點菜單>呢? 3.3 介面設計模式 什麼是介面(Interface) 在OOP里,將介面定義為一種特殊的類別(Class) 在Java里,將」純粹抽象類別」稱為介面(Interface) EIT造形的介面表示為<I> <I>可以合並到<E>里 誰控制<I>? <E>成為控制點 引擎<E>à<I>à驅動輪胎<T> 如何控制API ? UI與API 被動型API與主動型API API與商業模式 API決定控制權&金流 沒錢就改版,改版就有錢 以HAL為例,說明API = 話語權 誰擁用介面的制定權,誰就掌握控制點,就能獲得較大的話語權 從API看控制力量的強弱等級 把控制力傳播出去 Part-4: 親自<敏捷+架構>、並迭代出代碼
4.1 情境範例:」手機訪問TV/STB」 願景:多屏互動、幸福家庭的實踐 亮點:許多智能設備大量進入家庭,在家裡的Android TV建立一朵私密雲,來整合窗外多個雲平台和手機移動終端,變得流行起來。 情境:手機遠距訪問TV,透過TV打開家中的壁燈開關 架構:基於<手機+TV>的大小機相聯、大小屏幕互動的新架構 設計:設計TV里的框架<E&I>、撰寫插件<T> 技術: 在外的家庭成員透過手機瀏覽器(Browser)上網訪問家庭雲,您可以在家庭雲里,安裝一個i-Jetty網頁容器(Web Container) 此時,I-Jetty里的HttpServlet就是另一個<E>,而它的doGet()等函數就是<I> 您寫的servlet代碼就是I-Jetty的<T>,它接受手機的訪問 4.2 實際開發:依循敏捷、落實為代碼
<架構設計>階段的敏捷迭代 Step-0. 准備測試計劃 訂定此階段的測試方案(Test Case) 以Android手機Browser為測試方案的執行軟體 Step-1. 設計敏捷過程的起點架構:Simple Solution 通信協議:手機與TV采HTTP通信 軟體介面:TV端的EIT造形與手機端Browser對接 設計:以UML表達EIT造形 代碼:賺寫I-Jetty的Servlet來實踐EIT造形 Step-2. 啟動TDD機制、進行迭代 從手機來實機檢測TV里的EIT造形的介面代碼 依循TDD的反饋,迭代Step-1和Step-2的活動 <代碼開發>階段的敏捷迭代 Step-3. 准備測試計劃 訂定此階段的測試方案:基於用戶需求(Requirements) 以Android手機Browser為測試方案的執行軟體 Step-4. 以上階段Step-2產出的EIT造形為起點架構 Step-5. 依循測試方案,展開細節設計和代碼開發 撰寫Android App代碼:基於Android應用框架 I-Jetty的<T>調用Android的App App透過JNI調用Android的Zigbee驅動代碼 Zigbee驅動透過Dongle發信號給壁燈開關 Step-6. 啟動TDD機制、進行迭代 從手機來實機檢測TV里的有關代碼 依循TDD的反饋,迭代Step-5和Step-6的活動,直到完成 4.3 繼續敏捷迭代、開發新功能
新功能1:手機控制TV里的Camera拍照片 TV/STB內的i-Jetty含有servlet代碼,讓手機可以遠距來訪問它 TV/STB則內含Camera驅動,能控制攝像頭硬體 運用EIT造形和敏捷迭代,開發軟體來整合家外的手機與TV/STB上的攝像頭硬體,讓家庭成員隨時從手機來打開TV/STB的攝像頭,拍了照片送回到手機上呈現出來 展開敏捷過程,直到完成 新功能2:手機控制TV將照片送上雲端(Cloud) TV/STB將Camera拍攝的照片送上雲端:例如Google的GAE等 基於WiFi通信協議 展開敏捷過程,直到完成 Part-5: 架構設計應用:支持跨平台
5.1 三個架構設計策略 三個實施策略: 策略-1:把它」EIT(設計)」了 策略-2:挾天子以令諸侯 策略-3:建立中間件(middleware) 5.2 跨晶元(小)平台:採取<策略-1>
情境A:先有別人的(小)平台,然後才建立我的平台 小平台是指別人的平台,該平台的變化決定於別人 為了跨平台,就不宜直接使用別人的平台 您設計<E&I>,而且設計<T>來包容別人平台的變化,這就稱為:把它」EIT(設計)」了。 情境B:先建立我的平台,然後才讓別人來擴充(Extend) 這反過來,讓別人設計插件<T>來擴充(extend)您的<E&I> 別人為了保護他自己,也會將插件分成兩部分:<壁虎尾巴>與<壁虎身體> 萬一您的<E&I>有變化時,這只壁虎(插件)便能棄尾求生,讓<壁虎身體>跨您的<E&I> 5.3 Android版本(大)平台:採取<策略-2> Android升級和版本變更頻繁,終端必須隨之而更新 Android是一個多層級<E&I>結構,各層都是由Google所開發,Google是強龍,位居天子角色,其設計<I>來控制您的插件<T> 您可以拿EIT造形搭配Proxy-Stub設計模式,規劃Stub類別(曹操類),制定自己的<I>,讓<T>脫離Android的<E&I>所牽制;實現」挾天子以令諸侯」的效果 5.4 跨自己的平台(建立中間件):採取<策略-3> 隨著您的公司業務成長,您的平台版本變更頻繁;如何包容自己平台的變化呢? 您可以規劃一個上層平台<E&I>來吸納自己平台的變化 此平台又稱為中間件,其提供穩定的<I>(又稱API),也保護自己平台的變動自由度,實現」沒錢就改版,改版就有錢」的效果 中間件還能提供您的專有API,來凸顯自己平台的獨特性 Part-6: 架構設計的成功案例分享
6.1 案例:重構PhoneGap的架構和代碼 議題:PhoneGap目前只搭配HTML5的Web App 如何重構PhoneGap的架構和代碼 讓PhoneGap也能搭配一般的Native App 現況:目前PhoneGap的架構設計 HTML5 & PhoneGap可以讓UI更容易跨平台 其依賴Browser和PhoneGap的插件<T>來吸收平台的差異化 如果插件很多時,PhoneGap里的PluginManager負責管理之 UI事件是從WebView傳送到PhoneGap的插件<T> 目標 即使不採用HTML5,也能使用PhoneGap來管里插件 一旦不使用HTML5,PhoneGap就不再搭配WebView 於是,PhoneGap轉而搭配一般的View,如Button等 UI事件(Event)改從一般的傳送到PhoneGap的插件<T> 收獲 如何攔截App的啟動事件(onCreate事件)和UI事件 以EIT造形加快理解PhoneGap框架的結構 深刻領悟<I>的設計要領:如IPlugin介面設計 熟悉從<重構設計>到<重構代碼>的過程 6.2 重構的設計思考 重構范圍內共有3個EIT造形的美妙組合 第1個造形:{ Activity-DroidGap } 第2個造形:{ WebView-CodavaWebView } 第3個造形:{ PluginManager-Plugin-<T>} 熟悉從<重構設計>到<重構代碼>的過程 因為不再搭配WebView,所以前兩個EIT造形都必須重構 第3個造形最復雜 上上策是:不重構第3個造形,其內涵和介面代碼都保持不變 成功地讓第3個造形跨到重構的新平台(即前兩個造形) 6.3 案例的成功關鍵和啟示 關鍵:在於上述的設計思考 洞悉:心懷EIT造形去觀察架構 技巧:從<I>觀察重構的變動震幅,找出上上之策 啟示:優越架構,帶來易於重構的機會,創造了系統未來性
③ 誰能分享下百度雲,安卓開發視頻教程,
我有
《Android架構師之路
網路層架構設計與實戰》
《Android
專項測試
Python篇》
《Android應用發展趨勢必備武器
熱修復與插件化》
《Android自動化測試實戰
Java篇
主流工具
框架
腳本》
這幾個視頻教程可以嗎
④ 我幹了5年android程序員了,怎麼往架構師轉,需要具備哪些技能
前端工程師+程序員+系統管理員+對各種技術靈活搭配的能力+模式總結=架構師
這些就是一個架構師所需要具備的技能
台灣android教父高煥堂出了個叫《android從程序員到架構師之路》的課程也許會對你