要想成為主力架構(gòu)師,需知道以下知識
要想成為軟件開發(fā)的專家,需要我們完整了解軟件開發(fā)的流程,并在關(guān)鍵部分掌握豐富經(jīng)驗。
需要我們了解設(shè)計模式和算法的細微差別,同時遵循軟件開發(fā)的最佳實踐,包括創(chuàng)造性和思考力,為編程問題提供合適的解決方案。
實現(xiàn)這一目標需要掌握服務(wù)器端開發(fā)、客戶端開發(fā)、DevOps運維、云計算、網(wǎng)頁設(shè)計、分布式系統(tǒng)、數(shù)據(jù)庫、編程規(guī)約、代碼管理、基礎(chǔ)設(shè)施管理、可擴展性、安全性待方面的能力。
你可能未必全部掌握以上內(nèi)容。但是可以嘗試從表層了解絕大部分內(nèi)容,然后再深入掌握其中幾個技術(shù)。
以下給各位列出開發(fā)者缺乏的幾個主要技術(shù)能力,而技術(shù)管理者或架構(gòu)師在招聘這些職位時應(yīng)該熟悉檢查這些要素。
編碼規(guī)范
編碼規(guī)范有助于確保良好的開發(fā)實踐和產(chǎn)品開發(fā)。要了解一些最重要的編碼規(guī)約:
DRY(不要重復(fù)自己),SOLID,TDD,防御性編程
設(shè)計模式
設(shè)計模式在軟件開發(fā)中是一種常見的,可重復(fù)使用的解決方案,可解決軟件中的常見問題。軟件開發(fā)者要了解一些常見的DesignPartern是非常重要的,還有更重要的是要能夠識別給定問題的正確設(shè)計模式。如MVC、Singleton、DAO、Facade、Proxy、Adapter、Strategy和AbsractFactory等一些一流開發(fā)者使用的設(shè)計模式。
服務(wù)器端開發(fā)
在較復(fù)雜的軟件系統(tǒng)中,后端會有各種各樣的邏輯。作為后端開發(fā)人員,處理應(yīng)該程序的業(yè)務(wù)邏輯就要面臨很多挑戰(zhàn)。任何開發(fā)人員都能夠編寫代碼,但是只有有經(jīng)驗的開發(fā)人員才可以寫出具有高性能、可伸縮性和可靠性都好的高質(zhì)量代碼。開發(fā)優(yōu)秀軟件的過程涉及的領(lǐng)域包括大量科學、數(shù)學、計算機等專業(yè)知識,有處理的思維和經(jīng)驗非常重要。
高速緩存
數(shù)據(jù)緩存的各種機制(文件、數(shù)據(jù)庫、內(nèi)存、反向代理、HTTP....)
內(nèi)存管理
Java有一個非常好的垃圾收集器,能夠自動管理內(nèi)存,清理未使用的對象并釋放一些內(nèi)存。但是一個資深的Java開發(fā)者需要對內(nèi)存的工作原因有一個非常透的理解,這樣才能寫出高性能和優(yōu)化的應(yīng)用程序。
了解以下概念至關(guān)重要:
堆棧,堆,強引用,弱引用,轉(zhuǎn)義引用,如何引用字符串,垃圾收集過程,meta空間,垃圾收集器類型。
異常處理
這是一個相當重要,也是一個比較大的話題,我們后續(xù)會再寫關(guān)于它的專門文章?,F(xiàn)在,列出一些處理異常的一些良好實踐:
1、遵循“錯誤優(yōu)先”原則使軟件更可靠
2、不要捕捉無法恢復(fù)的異常
3、不要記錄完異常后,又將異常拋出來
4、選擇正確的層來處理異常(例如:DAO不知道是數(shù)據(jù)庫的故障如何處理,但是服務(wù)層可以知道)
5、如果無法從異常中恢復(fù),則優(yōu)先選擇未經(jīng)檢查的異常
IO操作
了解I/O操作的成本以及可能出現(xiàn)的不可預(yù)知的結(jié)果。
異步編程
使用線程實現(xiàn)Java中的異步編程,它也是Java平臺的基礎(chǔ)部分,有效使用并發(fā)對于構(gòu)建高性能應(yīng)用程序非常重要。
比如線程池、死鎖、生產(chǎn)者-消費者、原子性、不可變對象、信號量等等詞匯對資深開發(fā)人員來說不應(yīng)該是新東西。
批處理
在實際場景中,編寫批量作業(yè)非常普遍。通常執(zhí)行重要的任務(wù),有一些基本規(guī)則:
1、每個任務(wù)應(yīng)該按輸入、處理過程與輸出進行劃分;
2、始終輪詢批量輸入數(shù)據(jù);
3、處理器應(yīng)該是線程安全;
4、產(chǎn)出物應(yīng)該為原子屬性;
5、存儲工作結(jié)果;
6、要考慮EIP模式。
分布式計算
在現(xiàn)代世界中,分布式計算是指使用分布式系統(tǒng)來解決計算問題。然而,分布式系統(tǒng)與傳統(tǒng)系統(tǒng)不同,具有非常高的復(fù)雜性。當用戶開始高速增長資源消耗較大時,有分布式系統(tǒng)工作經(jīng)驗的工程師會在此時發(fā)揮作用。微服務(wù)軟件體系結(jié)構(gòu)是分布式計算以及分布式體系結(jié)構(gòu)所有的優(yōu)點與折衷的一個很好的例子。
而今,微服務(wù)是當今軟件工程師之必備技能,就需要我們對分布式系統(tǒng)有豐富的經(jīng)驗。
比如容錯性,可用性與一致性,分布式事務(wù)/事件、同步與異步通信,分布式認證,分布式應(yīng)用,共識應(yīng)用程序等非常重要。
數(shù)據(jù)庫
精確掌握與數(shù)據(jù)庫從通信到獲取數(shù)據(jù)中要涉及的所有成本,如連接握手、數(shù)據(jù)傳輸?shù)惹闆r。清楚了解原子事務(wù)以及如何確保數(shù)據(jù)一致性。因此,數(shù)據(jù)庫管理是軟件開發(fā)人員的必備技能。
數(shù)據(jù)庫用于管理數(shù)據(jù),這是一項艱巨的任務(wù),即使不考慮將業(yè)務(wù)邏輯添加到數(shù)據(jù)庫中。在大型IT系統(tǒng)中,數(shù)據(jù)庫在安全性,可伸縮性,容量和可用性方面面臨著諸多挑戰(zhàn)。我們要考慮加密,復(fù)制,分片,大數(shù)據(jù)等問題。了解數(shù)據(jù)庫的工作方式以及如何優(yōu)化它以及每項處理消耗的成本(例如,占用內(nèi)存、CPU數(shù))將有助于有效設(shè)計系統(tǒng)的數(shù)據(jù)庫管理。
DevOps
主力開發(fā)工程師要有能推動DevOps的文化理念和實踐的能力,在所有運維步驟中做到自動化,提高高質(zhì)量和高速度交付應(yīng)用程序與服務(wù)能力。代碼部署或配置基礎(chǔ)設(shè)施必須為自動化,且要靈活以及受到監(jiān)控。
一個強大的開發(fā)者應(yīng)該很好地了解從測試,發(fā)布到部署和基礎(chǔ)架構(gòu)管理的全開發(fā)生命周期。需要我們了解云計算,Linux,網(wǎng)絡(luò),容器,工程管理等。
代碼管理
鑒于代碼的重要性,只有主力開發(fā)人員才能夠掌握代碼生命周期,并力促軟件工程最佳實踐。為此,需要你熟諳源代碼管理系統(tǒng),比如Git,對分支策略,版本控制,分布式修訂控制,另外還有代碼質(zhì)量保證工具,代碼間的通信和依賴管理,配置管理等有清晰的思維。
安全
Web安全是件很難處理的事情,一部分取決于許多外部參數(shù);軟件工程師需要遵循構(gòu)建安全Web應(yīng)用程序的最佳實踐與準則。
主力工程師需要對信息安全有較深的理解,不僅要如何避免構(gòu)建不安全與容易受攻擊的系統(tǒng),還需要知道保護用戶的隱私。
一個偉大的開發(fā)人員需要能夠創(chuàng)建一個指南來處理前10個Web應(yīng)用程序安全風險。在Web應(yīng)用程序中,我們有更多需要工程師關(guān)注安全威脅,其中包括如下:
1、上傳文件檢查;
2、密碼暴力破解;
3、會話到期處理;
4、會話來源驗證;
5、通過網(wǎng)絡(luò)安全通信;
6、安全的cookie訪問;
7、用戶憑證處理。
前端開發(fā)
前端開發(fā)是軟件開發(fā)重要的一部分,如果您不知道程序設(shè)計與良好用戶體驗的關(guān)系,則不能成為主力軟件工程師。
在前端世界中,Javase和CSS是軟件工程師必備的。在這兩方面掌握掌握并不容易,但了解它們的工作方式以及兩者如何與HTML連接一起,使我們能夠提供出色的用戶體驗非常重要。
若要領(lǐng)導(dǎo)一個前端團隊,你需要知道的不僅僅是如何建立一個漂亮布局,要想前端開發(fā)做得更好,你需要了解如下:
1、瀏覽器作為引擎可以構(gòu)建什么?
2、如何開發(fā)響應(yīng)式網(wǎng)站;
3、如何提高網(wǎng)站的性能;
4、如何開發(fā)單頁面應(yīng)用程序;
5、如何建設(shè)現(xiàn)代高效的發(fā)展環(huán)境;
6、熟悉HTML5API。
7、熟悉React.js或Vue.js框架
為了掌握這些技能,開發(fā)人員需能夠自我激勵,主動學習新技術(shù),并在職業(yè)生涯中給自己扣上很多帽子。繼而不斷挑戰(zhàn)自我,然后更好地解決問題,這就是編程的本質(zhì)。知識很重要,在某些復(fù)雜問題的情況下更是如此。在變化如此之快的IT技術(shù)領(lǐng)域中,知識的獲取在任何時候比我們已會的技能更為重要。
另外附上學習大綱圖