A. 程序員幾年能夠成為架構師
五年以上。
它們往往要求工作年限在5年以上,需要求職者有過3年以上的系統設計經驗,精通各種架構模式和系統框架,反觀自己卻一個條件都不滿足。
軟體架構師就是這么一個讓人嚮往,但又讓人望洋興嘆的一個職位。就像建築設計師總有成為總設計師的夢想,航天工作者總有成為總工程師的壯志,相信每一個軟體工程師都有過成為軟體架構師的想法。
引用維基網路里的定義,軟體架構師的職責就是在軟體系統研發中,負責依據需求來確定主要的技術選擇、設計系統的主體框架結構,並負責搭建實施。
普通程序員可以利用搜索引擎(網路)尋找答案,經常性找不到好的解決辦法,然後更換技術方案,頂級程序員也利用搜索引擎(Google)尋找答案,一般bug都順利解決(其實跟前期框架選擇等關系非常大)。
演算法是程序員的重中之重,掌握演算法能力才能處理復雜環境,才能對系統做出性能調優,遇到性能瓶頸之後才不會束手無策。
表達能力決定了你所做的技術的影響范圍,決定了你的影響力,決定你的威信,決定了你的報酬。普通程序員和頂尖程序員的表達能力差別非常大,這主要還是取決於他們格局的不同。良好的溝通能力讓你理解產品經理的設計思路,讓你更好的展現自己的特長。
B. 如何從普通程序員晉升為架構師
程序員晉升架構師的十項必備技能
1、卓越的程序員 Fred George先生說:「不編程的架構師的職業生涯是短暫的」。他說這句話的背景主要是針對有些架構師的設計與實現有斷層的問題而言的,因為如果架構師不去 實踐,只是想當然的認為「沒問題,這個想法能實現」,那麼對於項目的落實而言是個很大的隱患。支付寶架構師馮大輝也表示過,架構師是一個比較「虛」的崗 位,主要的問題都在「落地」的過程中。--ITJOB--
2、抽象思維 很多優秀的架構師們都一致的表示,邏輯思維和抽象思維能力是一個架構師最重要的素質。eBay的 Randy Shoup先生稱擁有條理清晰的邏輯思維能力的人「就像稀有動物那樣難找」。Fred George則表示「駕馭概念的技能,在我看來是每一個人最高的潛力」,並表示自己不太介意這樣一個苗子在其他方面的技能和經驗的匱乏,因為在他看來除了 思維之外的其他因素都是可以培養的。 --ITJOB--
3、技術前瞻性 有人談到技術高手與架構師的區別就在於,架構師不光是著眼於現在,不僅僅局限於開發細節,比如如何調用,如何並發等等。而是跳出三界外,考慮一下面向未來問題和潛在風險的應對之道。--ITJOB--
4、問題解決大師 只是,架構師之所以為架構師,是在於他們在面對龐大系統之時,仍然能夠敏銳的發現其底層之真實。這不僅需要此哲學層面的「內功」,還需要架構師具有多領域知識和經驗的積淀。--ITJOB--
5、多領域知識 架構師身為一名技術領袖,需要通過發散知識的光芒來統御開發團隊的。如果只是對本行業知識做到爛熟於心,那還僅僅是一名熟練工的水平。要想晉升更高的層次,還需要跳出「只緣身在此山中」的困惑。--ITJOB--
6、溝通能力 做到人性化的溝通,需要我們在平時就進行培養。寫出大部頭的架構書,有的時候並沒有用VISIO畫出的簡單架構圖好理解。人對圖形理解遠遠大於對文字的理解,直觀簡單的UML圖可以極大的方便程序員理解架構師的意圖。--ITJOB--
7、內力 很多人理解的內力就是開發技術,包括語言的掌握、對框架的掌握、資料庫管理能力、安全管理能力等等。但是我們看到,架構更多的內力體現在對技術的綜合運用上,光會編程的程序員,最多就能做到高級程序員,也就是技術實現上的高手。 --ITJOB--
8、權衡取捨 Fred George先生提出了「短期濫用」的說法,即在系統能夠承受的范圍內做出一些妥協。在ATAM方法中,分析的思路是基於「情景」的:你需要提出各種可能 的情景,然後來證明在每一個用戶使用場景中,系統的哪一些內容是必要的、不可丟棄的——從而確定哪些部分是暫時可以不予考慮的。--ITJOB--
9、管控能力 架構師在管理和控制的能力上,需要有自己獨到的見解,而不是簡單的認為這是項目經理或者財務部門 的事情。身為技術專家的架構師,隨不需要處理那些煩雜的日常管理。奇虎架構師李釗在一次接受采訪時道出過架構師們的心聲,技術人才轉向管理就是莫大的浪 費。對,如果架構師只是一味的去進行項目管理,那就和其他市場人員沒有任何區別了。在這里架構師所需要的管理與控制,其實是從技術的角度,對一些問題的控 制,特別是開發過程中的監控,而不是普通意義上的純粹管理。--ITJOB--
10、藝術氣質 一個優美的系統則是可以像有機的生命一樣成長的,這是因為從系統開始架構的那一刻起,架構師就考 慮到這個系統以後將會面臨的挑戰,為系統的成長預留好空間。項目經理經常會對這位架構師提出的看似理想化的要求不置可否——項目經理只想著能夠盡快以比較 低的成本實現客戶的需求,然而這些充滿藝術美感的想法其實是打造健康——因而優美——的系統的根本因素。--ITJOB--
C. 如何成為一個架構師
1、技術能力
技術能力,不用置疑肯定是最重要的。技術能力弱的架構不是一個好架構。所以,你需要知道所有主流技術的基本原理、應用場景,及快速解決問題的能力。所以,架構師必須要有見識,所需知識面肯定是要不斷拓展的。
你需要清楚在什麼樣的場景用什麼樣的技術比較合適,並知道可能存在什麼樣的風險。來了需求,你腦袋是空的,不知道用什麼技術這是最可怕的。
2、架構能力
這個可以表現為抽象能力、整體規劃能力、及設計能力。你需要照在業務的角度進行系統分解、技術選型、架構搭建,以及規范制定。架構出來了至少可以滿足最近的發展,或者可以很方便對現有架構進行擴容。
3、溝通能力
作為一個優秀的架構師,你需要清楚的知道客戶的需求,需要不斷和需求人員進行溝通,以達到客戶真正的目的。不論是不是架構師,任何一個職場人,提高自己的溝通表達能力無疑是不可或缺的。
系統架構師的主要功能包括:
1、系統架構師是軟體項目的總體設計師,是軟體組織新產品的開發與集成、新技術體系的構建者。
2、系統架構師是在技術上對所有重要事情做出決定的人(系統架構師在整個軟體開發過程中都起著重要作用,並隨著開發進程的推進而其職責或關注點不斷地變化)。
3、需求階段,軟體架構師負責理解和管理非功能性系統需求,比如軟體的可維護性、性能、復用性、可靠性、有效性和可測試性等。
4、設計階段,架構師負責對整個軟體架構、關鍵構件、介面的設計。協助系統分析師完成《系統概要設計說明書》。
5、編碼階段,架構師則成為程序員的顧問,並且經常性地要舉行一些技術研討會、技術培訓班等。
6、測試及實施階段,隨著軟體開始測試、集成和交付,集成和測試支持將成為軟體架構師的工作重點。
D. 有一點java基礎,如何成為一名java架構師
在Java程序員行業中,有不少Java開發人員的理想是成為一名優秀的Java架構師,Java架構師的主要任務不是從事具體的軟體程序的編寫,而是從事更高層次的開發構架工作。他必須對開發技術非常了解,並且需要有良好的組織管理能力。可以這樣說,一物雹個Java架構師工作的好壞決定了整個軟體開發項目的成敗。那麼Java架構師需要掌握哪些知識點呢?
1、框架源碼分析
設計模式:Singleton單例模式,Factory工廠模式,Proxy代理模式,Template模板模式,Prototype原型模式等
Spring5:Spring提醒結構,IOC注入原理,AOP設計原理,Spring事務處理機制,SpringMVC,Spring源碼分析。
Mybatis:Mybatis體系結構,Mybatis核心應用與配置,Mybatis關聯查詢,與Spring集成,Mybatis源碼分析。
2、性能優化
JVM性能優化:剖析JVM整體結構,詳解垃圾回收機制GC,JVM性能調優與工具排查
Nginx調優:Nginx項目架構,Nginx核心配置,Nginx負載演算法配置
Tomcat調優:Tomcat運行機制及框架,Tomcat線程模型,Tomcat性能調優
MySQL性能優化:SQL執行計劃,AQL優化,索引優化。
3、掌握池技術
對象池,連接池,線程池,Java反射技術,寫框架必備的技術,但是有嚴重的性能問題,替代方案Java位元組碼技術。
4、掌握nio,值得注意的是「直接內存」的特點,使用場景。
5、掌握Java多線程同步非同步。
6、掌握Java各種集合對象的實現原理,了解這些可以讓你在解決問題時選擇罩兄帆合適的數據結構,高效的解決問題。
7、熟練使用各種數據結構和演算法,數組、哈希、鏈表、排序樹就是一句話要麼是時間換空間要麼是空間換時間。
8、熟悉tcp協議,創建連接三次握手和斷開連接四次握手的塵旁整個過程,不了解的話,無法對高並發網路應用做優化。
9、熟悉http協議,尤其是http頭,我發現好多工作五年以上的都弄不清session和cookie的生命周期以及它們之間的關聯。
10、熟悉系統集群、負載均衡、反向代理、動靜分離,網站靜態化。
11、掌握分布式。
Java並發編程和網路編程:Java線程狀態,線程池,線程通信,線程安全,Netty高性能原理
分布式開發框架:分布式系統口調用技術:RPC,Apache分布式系統Zookeeper原理與應用,阿里Dubbo設計思想與應用
分布式中間件:分布式伺服器治理,分布式消息通信,分布式數據緩存,MongoDB企業集群解決方案
12、掌握資料庫的設計能力,對它基本的參數優化,慢查詢日誌分析,主從復制的配置,至少要成為半個mysqldba。
E. 系統架構師要什麼條件
系統架構師要什麼條件
系統架構師在軟體開發的活動中起到了綱領性的作用,就像建築設計師一樣,從大的方向來給軟體定一個基調。軟體開發中碰到的很多問題,歸咎起來都可能和當初的架構設計有關,所以架構師要想不成為眾矢之的,也不是容易的事情。那麼要什麼條件才能成為系統架構師呢?
1、完成此應用程序的基本功能。
如果這是一個通信程序客戶端,那麼它至少應該完成客戶端所具有的功能,通過所有的測試用例。不同的功能是需要不同的組成架構的,從降低復雜度和提高可維護性的角度來考慮對系統進行解構,往往是最直觀的做法。
2、健壯性。
這個程序不應該輕易的crash,如果是界面程序,在面對異常情況的時候採取柔和的方式來通知用戶。如果是被別的程序所使用的庫,保持健壯性更是非常重要。作為架構師,應該採取一定的措施來保證模塊的正確工作,至少應該保證在出錯的情況下能夠比較容易的區分是否是本模塊造成的。也許有人說這是design和program的事情,但是架構師如果不在綱領上制定策略和要求,實現上也是很難操作的。
3、低的資源消耗。
很多軟體架構,在架構文檔里看時非常華麗,用了很多模式,一個普通的'應用鄭喚要拆分成多個進程,再用MVC分離各個模塊,加上一大堆監聽適配器過濾器等,腔迅可以說模式是能帶來一些好處的,但是往往代價是更多的資源消耗,內存占的多了,性能下降了,邏輯變得更復雜了。作為架構師一定要權衡,而不是為了表達自己的知識能力。最好的情況是,能夠給出在各種usecase下模塊或應用對資源的消耗程度,比如會佔用多少內存,某個介面需要多長時間等。因為現在的介面定義一般都只是定義使用方式,包括函數名和參數列表,至於使用時的代價由於沒有說喊圓凱明,往往成為模塊使用者和提供者之間爭論的焦點。
從程序員的角度來講,可維護性往往更為重要,因為維護的階段比開發的階段更長,面對的壓力也更大,而且由於各種各樣的原因,經常要一個新手來維護這個程序,如何讓新手很容易的理解它並且馬上具備解決問題的能力,對架構師來說也不是一件可以推卸的責任,採用常見的設計模式,制定或採用通用的代碼風格,完善相關的文檔等等,都是好的practice。
對於那些高層次的架構師來說,因為面對的是由很多模塊應用組成的系統,他所要處理的實際上如何協調各模塊關系,保證整個系統的功能性能和穩定性,至少他應該了解各個應用所具備的功能,基於此來制定各個模塊之間的介面。在必要的時候,要去掉那些作用不大但影響整個系統性能和穩定性的模塊,對各個模塊的可選功能也要做一定的限制,不能允許其無限制的膨脹。架構師也往往面臨著選擇既有實現的困境,採用第三方或者開源實現時,一定要和已有的實現進行全方位的比較,在很難做出決定時寧可保持不變,或者採用小的實驗步驟來獲取真實的數據。
;F. 到底怎樣的程序員能稱為架構師
到底怎樣的程序員能稱為架構師?首先要知道架構師是做什麼的,架構師主要職責是確認和評估系統需求,給出開發規范,搭建系統實現的核心構架,並澄清技術細節、掃清主要難點的技術人員。
那麼怎樣從一個程序員成為架構師呢,我總結了以下幾個方面:
意識方面
首先程序員自身想往架構師方向發展,然後換位思考與架構師的差距,該如何努力才能符合一個優秀的架構師,所以關注范圍是不同的,程序員專注於具悔並體細節,而架構師專注於「宏觀視角」,整體大局出發,所以不能只專注寫代碼。
技術方面
架構師的主要任務不是從事具體的軟體程序的編寫,而是從事更高層次的開發構架工作,所以要想成為架構師,自身的技術能力一定要提升,基礎一定要扎實。還有就是要去掌握一些知識來提升自己的抽象能力,提高自己的建模能力,因為架構師所需要具備的就是能夠從很紛繁復雜的需求當中抽象出一個共同的東西出來。
平時積累方面
優秀的架構師要滿足業務需求和能夠靈活對各個人士的技能,同時也對了解多種框架熟悉應用,清洗明確適應場景,這些都需要程序員長期的積累,從開發工作中提升自己的技術,從項目中積累中提升業務能力。
架構師專注宏觀,但通晰微觀;開發框架,又精通需求;熟練當前技術,還能蠢歲前瞻未來發展。成為一個架構師絕對不是一朝一夕就能突破的,是要從基礎開帶前睜始一點一滴積累而來。而作為程序員更是要打好自身的基礎,開拓自己的視野,用自律的心態和積極向上的意識敦促自己,跨越台階,成為合格的架構師。