軟件正在改變世界,也在改變著華為。近幾年華為招聘了眾多業(yè)界軟件精英,以軟件教練身份加入,著力提升自身軟件能力。那么,到底怎樣才能成長為一名軟件教練呢?本文作者以自身經(jīng)驗(yàn)之談,為各位開發(fā)者們提供一條新思路……
師傅領(lǐng)進(jìn)門,修行在個(gè)人。我在本文中只指出道路,相當(dāng)于一次將全套功法給你。但修行的路還請(qǐng)自己努力。不明白的地方,Google是個(gè)金手指。我會(huì)看大家對(duì)具體哪里更感興趣,后續(xù)將其展開講一下,作為一個(gè)系列。大家可以留言給我。
第一階段對(duì)應(yīng)煉氣期。你要掌握:
1, Java:俗稱JAVASE。不僅僅指Java語法,還包括JDK的使用。這塊知識(shí)非常沉重也非常重要。沉下心花幾年時(shí)間學(xué)好它。推薦學(xué)習(xí)方式:a) 《Effective Java》。讓你感受下Java里面的彎彎繞繞,并不是語法表現(xiàn)的那樣傻白甜。 b) SCJP考試?,F(xiàn)在可能改名為OCJP了也說不定。全方位讓你了解Java及里面的細(xì)節(jié)。非常重要。 c) 《并發(fā)編程實(shí)踐》。必讀刊物。多核CPU自帶L2 cache卻共享內(nèi)存和線程,復(fù)雜的鎖,一行Java代碼被編譯為多行機(jī)器指令而CPU在任意機(jī)器指令間都可切換線程。面對(duì)這么復(fù)雜的硬件環(huán)境,Java是如何設(shè)計(jì)保證程序正確的。
2, 敏捷開發(fā):敏捷開發(fā)不是靠書學(xué)的(雖然也有書),而是靠實(shí)踐來感悟的。就像賣油翁,不去倒油光靠看老翁寫的心得,永遠(yuǎn)不會(huì)倒油。
3, 算法與數(shù)據(jù)結(jié)構(gòu):a) Leetcode刷題。雖然只有極少的開發(fā)會(huì)用到算法,但這是能力的體現(xiàn)。不要以為就是個(gè)鏈表反轉(zhuǎn),至少要把動(dòng)態(tài)規(guī)劃級(jí)別的算法搞懂。 b) 《算法導(dǎo)論》。讀讀就行了。希望你能讀懂。
4, 測(cè)試:要了解測(cè)試同學(xué)如何寫測(cè)試用例,如何保障code coverage,如何做自動(dòng)化。
第二階段進(jìn)階至筑基期:
當(dāng)上面了解的七七八八后,你自然而然就會(huì)產(chǎn)生心靈上的感悟從而進(jìn)階至筑基期。你要掌握:
1, 設(shè)計(jì)模式:《設(shè)計(jì)模式》,Gang Of Four。四桿老槍的設(shè)計(jì)模式(我可沒開車),教會(huì)你面對(duì)各種經(jīng)典場景如何構(gòu)造類群。
2, JVM原理:《深入理解Java虛擬機(jī)》。我剛工作時(shí),大概06年,如果那時(shí)候有人說對(duì)JVM原理很懂,那就屬于國內(nèi)頂尖的技術(shù)人才了。現(xiàn)在知識(shí)的獲取方式越來越方便了,比如閱讀本文。你需要了解JVM如何使用內(nèi)存,如何GC,如何調(diào)整啟動(dòng)參數(shù),如何查看各種dump文件等等。
3, 網(wǎng)絡(luò)編程:書籍暫時(shí)沒有推薦。反正就是要搞懂HTTP/WebSocket與TCPIP與Socket的關(guān)系等知識(shí)。
4, 分布式系統(tǒng)中各種中間件:a) Dubbo。國內(nèi)最知名開源項(xiàng)目。無中心化分布式架構(gòu)的核心。取代了IBM的SOA產(chǎn)品(中心化架構(gòu)造成性能瓶頸)。 b) ZooKeeper。Zookeeper小紅書。分布式系統(tǒng)數(shù)據(jù)一致性協(xié)調(diào)工具。單機(jī)進(jìn)程,代碼執(zhí)行被認(rèn)為是完全可靠的,要么執(zhí)行成功要么執(zhí)行失敗。而到分布式系統(tǒng),網(wǎng)絡(luò)調(diào)用偏多出來一個(gè)超時(shí)。分布式系統(tǒng)之所以比單進(jìn)程復(fù)雜那么那么多,都是這獨(dú)獨(dú)一個(gè)超時(shí)鬧的。理解CAP,理解分布式系統(tǒng)數(shù)據(jù)一致性,是分布式系統(tǒng)不出錯(cuò)的保障。你從來沒看見銀行轉(zhuǎn)賬時(shí)給你少轉(zhuǎn)過一分錢吧? c) Kafka?!禟afka權(quán)威指南》。要理解其為什么那么快又那么可靠又那么存儲(chǔ)空間大。同時(shí)也是理解冪等性最方便的系統(tǒng)。 d) Redis?!禦edis設(shè)計(jì)與實(shí)現(xiàn)》。了解了前述的知識(shí),Redis就是個(gè)菜。無非多了個(gè)流言協(xié)議,一致性哈希環(huán),跳躍表,哨兵,持久化方式而已。 e) MySQL(假裝其也是中間件好了)。
《MySQL高性能》,《MySQL技術(shù)內(nèi)幕:InnoDB存儲(chǔ)引擎》。要了解紅黑樹和索引的實(shí)現(xiàn)方式,了解innodb存儲(chǔ)引擎的工作原理,你才能更好的理解explain sql后出來的各種回顯結(jié)果,幫助你更好調(diào)優(yōu)sql。MyISAM被廢棄了,你可以少看一本書了,偷著樂吧,少年。 f) Nginx。之所以能有多個(gè)冪等節(jié)點(diǎn)存在,就全靠它了。學(xué)一下它的單線程技術(shù)。明明是單線程卻能做到高性能?!拔揖褪强床簧夏愣嗑€程,咋啦?”唯有真正理解計(jì)算機(jī)原理才能返璞歸真。 g) Netty?!禢etty權(quán)威指南》。你有沒有感覺到在2002年后的某一年,就在短短一兩年內(nèi),計(jì)算機(jī)網(wǎng)絡(luò)突然提速了?02年JDK1.4,04年Netty。本來計(jì)算機(jī)網(wǎng)絡(luò)性能被阻塞在IO上。但NIO大幅度提升了IO效率。
Go語言為什么曾那么火?它的MPG模型還是找的IO阻塞的茬,使得多線程并發(fā)會(huì)更快。學(xué)一下Linux IO模型,零拷貝技術(shù)。理解計(jì)算機(jī)原理才能做到真正性能優(yōu)化。 我猜測(cè),在JDK支持了NIO之后,Tomcat等web容器很快就進(jìn)行了IO模塊的更新,之后各大網(wǎng)站的Tomcat跟著升級(jí),于是在全世界硬件資源沒變的情況下,網(wǎng)絡(luò)站點(diǎn)服務(wù)器的并發(fā)響應(yīng)能力大幅提升。 順便說一句為什么Java語言會(huì)長盛不衰。因?yàn)槿魏涡抡Z言的特性,比如Go的MPG模型,Reactive模式等,很快就會(huì)被Java抄過來。Java已有AKKA并成功用于Flink等知名項(xiàng)目了。而Go想抄Java的好處,短時(shí)間很難達(dá)成。 h) Flume。一個(gè)日志收集傳輸系統(tǒng)。 i) ProtoBuf。序列化也是性能中需要重要關(guān)注的地方。 j) Tomcat。太有名了。學(xué)學(xué)其classloader的設(shè)計(jì)。
5, JAVAEE依然有用的知識(shí):比如servlet,JMX等。哎,一個(gè)時(shí)代的落幕。
6, 編譯原理與操作系統(tǒng):我假設(shè)你上大學(xué)時(shí)候就學(xué)過了。沒有的話,至少操作系統(tǒng)要讀一下。就讀清華大學(xué)的本科教材吧。
7, 分布式數(shù)據(jù)庫體系架構(gòu):第4條講的是內(nèi)存網(wǎng)絡(luò)的分布式架構(gòu)。這條要講持久化存儲(chǔ)的分布式架構(gòu)。分庫分表,異構(gòu)索引,數(shù)據(jù)庫主備等?!稊?shù)據(jù)密集型系統(tǒng)設(shè)計(jì)》,這本書很贊,堪稱存儲(chǔ)設(shè)計(jì)的通史。
8, Spirng and Mybatis:怎么說呢,你能讀懂源代碼當(dāng)然更好。
9, 前端與CDN:至少要了解一下。
10,UML建模:教會(huì)你如何認(rèn)識(shí)世界并轉(zhuǎn)到計(jì)算機(jī)系統(tǒng)里來?!禪ML用戶指南》。
上個(gè)境界,是最難晉升的了。多少開發(fā)們被阻在這步一輩子不得前進(jìn)了。因?yàn)榧纫袚?dān)繁重的開發(fā)任務(wù),又要學(xué)習(xí)那么多的知識(shí),還要處理個(gè)人的生活,太難了。這些知識(shí)對(duì)你的提升又只是相加,不是相乘的關(guān)系。熬過去后海闊天空。
第三階段金丹期:
好了你現(xiàn)在是金丹期了,你的很多要繼續(xù)學(xué)的知識(shí),都是靠前面給你打基礎(chǔ)的,你會(huì)發(fā)現(xiàn)你的提升曲線斜率越來越抖了。你要掌握:
1, 架構(gòu)設(shè)計(jì)方法論:做事要有章法?!盾浖軜?gòu)設(shè)計(jì)》。
2, 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì):軟件是真實(shí)世界在計(jì)算機(jī)中的虛擬映射。如何讓軟件更貼近真實(shí)世界,讀一下Eric Evans的《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》。很晦澀,不太容易懂。
3, 中臺(tái):中臺(tái)這個(gè)詞現(xiàn)在這么火,怎能不提一下。平臺(tái)是啥也許你還不清楚,那就先了解一下中臺(tái)。
4, 高性能調(diào)優(yōu):還是那句話,真正了解計(jì)算機(jī)及runtime的本質(zhì),才能做到性能調(diào)優(yōu)或Hacker?!缎阅苤畮p》。
5, 穩(wěn)定性建設(shè):湊合看《逆流而上》。但是穩(wěn)定性和上述的性能調(diào)優(yōu),是真正體現(xiàn)水平的地方。還有Google的《Google SRE》。
6, 兩地三中心容災(zāi)系統(tǒng)建設(shè):這個(gè)目前我還不清楚有什么書。如果確實(shí)沒有的話,可以趁機(jī)出一本搶占市場。
7, 全鏈路壓測(cè):又是測(cè)試。但又不僅僅是測(cè)試。對(duì)系統(tǒng)的性能瓶頸節(jié)點(diǎn)的探查,對(duì)系統(tǒng)QPS的掌控。單單一個(gè)起壓機(jī)就不容易設(shè)計(jì)。
8, 大數(shù)據(jù):首先,你需要跨多個(gè)領(lǐng)域開始了解更多的知識(shí)。其次,你會(huì)發(fā)現(xiàn)我對(duì)技術(shù)的介紹粒度開始越來越粗了。因?yàn)槟阒按虻幕A(chǔ) - 粗粒度之下用來支撐的細(xì)粒度知識(shí),已經(jīng)生效了。再然后就是我會(huì)減少推薦書籍。到了這里你應(yīng)該形成自己的知識(shí)體系了,也就會(huì)找書了。離線海量數(shù)據(jù)存儲(chǔ)與計(jì)算的Hadoop。將Hadoop變的更易用些的HIVE。在線海量數(shù)據(jù)存儲(chǔ)的HBase。批計(jì)算的Spark。流計(jì)算的Flink。自成一套ELK,尤其大名鼎鼎彈性搜索。時(shí)序數(shù)據(jù)庫Druid。
9, 數(shù)據(jù)倉庫:大數(shù)據(jù)都學(xué)了,順便也就把數(shù)倉學(xué)了唄。順手的事而已。
10,IC:HCIE,這個(gè)我就不班門弄斧了。
11,網(wǎng)絡(luò)安全:我也不懂。汗。
12,Linux OS??刹粌H僅是使用命令操作系統(tǒng)而已。當(dāng)然,即使是這樣也不容易了。
第四階段化神期:
當(dāng)你還要再繼續(xù)晉升,就涉及到我也不完全理解的境界了。
1, 中間件的實(shí)現(xiàn)細(xì)節(jié):作為業(yè)務(wù)側(cè)的技術(shù)架構(gòu)師,通常會(huì)把存儲(chǔ)和網(wǎng)絡(luò)的需求下壓給中間件團(tuán)隊(duì)。但是他們是怎么實(shí)現(xiàn)的呢?細(xì)節(jié)重要的點(diǎn)是什么?
2, 使用Master Slave模式,Spark等是如何實(shí)現(xiàn)分布式任務(wù)分解并確保計(jì)算正確的?
3, Docker虛擬化技術(shù)。
4, Yarn的資源分配技術(shù)。
5, 計(jì)算機(jī)網(wǎng)絡(luò)等。
6, 再擴(kuò)展一下技術(shù)領(lǐng)域,觸角伸到AI領(lǐng)域。那么數(shù)學(xué)基礎(chǔ),各種論文與算法實(shí)現(xiàn)。又或者使用算法來賦能某個(gè)具體的業(yè)務(wù)領(lǐng)域比如AI賦能新零售。
7, 也可以往IOT方向發(fā)展。隨著5G的發(fā)展,這個(gè)應(yīng)該也很火。持續(xù)看好。
責(zé)任編輯:xj
原文標(biāo)題:從碼農(nóng)到教練,軟件神功咋個(gè)煉?
文章出處:【微信公眾號(hào):華為開發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
JAVA
+關(guān)注
關(guān)注
20文章
2988瀏覽量
109083 -
軟件
+關(guān)注
關(guān)注
69文章
5146瀏覽量
89151 -
開發(fā)者
+關(guān)注
關(guān)注
1文章
637瀏覽量
17502 -
5G
+關(guān)注
關(guān)注
1360文章
48804瀏覽量
573066
原文標(biāo)題:從碼農(nóng)到教練,軟件神功咋個(gè)煉?
文章出處:【微信號(hào):Huawei_Developer,微信公眾號(hào):華為開發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
評(píng)論