你好,我是陳浩老明左耳朵house.那通過上節課呢,相信你現在已經理解了什么才是技術領導力。
那今天呢我就來跟你繼續聊一聊怎樣才能擁有技術領導力。
首先呢你需要吃透基礎技術。
因為基礎技術啊是各種上層技術共同的技術。
吃透基礎技術是為了更好的去理解程序的運行原理,并且基于這些基礎技術進化出更優化的產品。
那吃透了基礎技術有很多的好處。
具體來說呢有以下幾點。
第一點,萬丈高樓平地氣一棟樓能蓋多高?一座大橋能造多長?重要的是他們的地基。
同樣對于技術人員來說,基礎設識越扎實,走的就參考資料:https://51gx.top/detail/266會越遠。
那第二點計算機技術太多了,但是仔細分析你就會發現啊,只是表現形式很多,而技術技術并不多,所以學好基礎技術可以讓你一通百通,更快的使用各種新技術,從而啊更輕松的與時代同行。
那第三點好處呢是很多分布式系統架構和高混用高性能、高并發的解決方案,基本都可以在基礎技術上找到他們的身影。
所以啊學習基礎技術能讓你更好的去掌握更高維度的技術。
那么哪些才是基礎技術呢?那接下來呢我會講一些技術,說實話呢這些技術你學起來可能會感到枯燥無味,但是我還是鼓勵你能夠克服人性的弱點啊,努力啃玩。
呃,具體來說,技術技術可以分為兩個部分,編程和系統。
那首先我們先來談談編程。
具體來說呢有三個基術技術,第一個是c語言。
嗯,相對于很多其他高級語言來說啊,c語言更接近底層。
在具備跨平臺能力的前提下,它可以比較容易的被人工翻譯成相應的匯編代碼。
那它的內存管理更為直接,可以讓我們直接和內存地址打交道。
那學習好的c語言,它的好處是我們可以掌握程序的運行情況,并且能夠進行應用程序和操作系統編程。
要學好c語言啊,你可以閱讀c語言的經典書籍,也就是第二版的c程序設計語籍。
同時呢肯定也要多寫程序,多讀一些優秀開源項目的源代碼。
學習好c語言,除了讓你能更了解操作系統以外呢,它還能讓你更清楚的知道程序是怎么精細控制底層資源的,比如內存管理啊,文件操作、網絡通信等等。
那這里需要說明的是,我們還是需要學習匯編語言的。
因為如果你想更深入的去了解計算機是怎么運作的,那么你是需要了解匯編語言的。
雖然現在我們已經幾乎不再用匯編語言來編程了,但是如果你需要寫一些比如free這樣高并化的東西,那么了解匯編語言就能幫助你更好的理解和思考。
第二個呢是編程范式,各種編程語言都有它們各自的編程范式用于解決各種問題。
比如c加加和java里面就有變向對象編程呃,c加加go c sharf里面的泛型編程、javascrippt、 python list hascale和along里面的函數式編程等學學編編程范式,助于培養養你的抽象思同同時也也以提高編程效率,提高程序的結構、合理性、可讀性和可維維性性低代碼碼容余度,進而呢提高代碼的運行效率。
學習好的編程范式啊,你還可以多了解各種程序語言的功能特性。
那第三個基礎啊是算法和數據結構。
算法是程序設計的有力支撐。
適當的應用算法可以有效的抽象問題,提高程序的合理性和執行效率。
算法是編程中最最重要的東西,也是計算機科學中最重要的基礎。
任何有技術含量的軟件中啊,一定會有高級的算法和數據結構。
比如一鋪就使用了宏一數,數據庫索引呢就使用了b加數等等。
而且啊就算是你的業務系統中啊,也一定會有各種排序啊過濾,還有查找算法。
學習算法不僅是為了能寫出運轉更為高效的代碼,更是為了能夠寫出可以覆蓋更多場景的正確代碼。
我們接著再來談談系統部分,系統部分的基礎基礎知識啊,有以下五個方面。
首先是計算機系統原理,包括CPU的體系結構啊,GPU的原理等等。
學習計算機系統原理的價值在于,除了能夠了解計算機的原理之外呢,你還能舉一反三的反推出高維度的分布式架構和高并發高可用的架構設計。
比如虛擬化內存就和今天云計算中的虛擬化的原理是相通的那計算機總線啊和分布式架構的ESB也有相同之處。
計算機的指令調度并發控制,可以讓你更好的理解并發編程和程序性能調優等等。
那在這里呢我推薦的書籍是深入理解計算機系統。
其次呢是操作系統的原理和基礎,包括進程啊、進程管理啊、線程、線程調度、多核的緩存一致性、信號量、物理內存管理、虛擬內存管理、內存分配、文件系統以及磁盤管理等等。
那學習操作系統的價值啊,它在于理解程序是怎樣被管理的那操作系統對應用程序提供了怎樣的知識,抽象出怎樣的編程接口,性能特性如何,怎樣做進程間的通信,以便讓不同的軟件配合一起運行等等。
要學習操作系統知識啊,一是要仔細觀察和探索當前使用的操作系統。
二呢是要閱讀操作系統原理相關的圖書。
那第三點呢,是要閱讀VPI文檔,然后要自己動手編寫調用操作系統功能的程序。
在這里呢我推薦summer書,分別是unix環境高級編程、unix網絡編程和windows核心編程學習操作系統。
技術原理的好處啊在于,這是所有程序運行的物理世界。
無論在上層是像CAC加加這樣編程機器碼的語言,還是像java這樣有JVM做中間層的語言。
再或者像python啊、PHP pro六GS這樣直接運行時解釋的語言,在底層啊都逃離不了操作系統這個物理世界的物理定律。
所以了解操作系統的原理,可以讓你從更本質的角度去理解各種語言或者是技術的底層原理,一眼看透本質,可以讓你更容易的去掌握和使用高階技術系統基礎知識的。
第三個方面是網絡技術。
我們都知道啊計算機網絡是現代計算機不可或缺的一部分。
所以我們需要了解最基本的網絡層次結構,包括物理層、數據鏈路層、網絡層傳輸層、會絡層傳輸層,還有應用層。
比如底層的ARP協議,中間的TCP和UDP協議,以及高層的HTTP協議。
那這里呢我推薦一本書叫TCPIP詳解。
所以這些基礎的網絡協議可以為我們的高位分布式架構中的一些技術問題提供更多的技術方案。
比如TCP的滑動窗口限流啊,完全可以用于分布式服務中的限流方案。
那第四個呢是數據庫的原理,數據庫管理系統啊,可以說是管理數據庫的利器。
那通常呢操作系統提供文件系統來管理文件數據,而文件呢比較適合保存連續的信息,比如一篇文章啊,一個圖片等等。
但有的時候我只需要保存一個名字之類較短的信息。
那如果單個文件只保存名字這樣幾個字節的信息的話,那就會浪費大量的磁盤空間。
而且啊無法方便的進行查詢。
但數據庫就更適合保存這種轉的數據,而且可以方便的按字段進行查詢。
那現在流行的數據庫管理系統有兩大類,分別是circle和nocircle.學習了數據庫原理之后呢,你就可以了解數據庫訪問性能調優的要點,以及保證并發情況下數據操作原子性的方法。
要學習數據庫呢,你可以閱讀各類數據庫的圖書,同時多做數據庫操作以及數據庫編程。
同時呢也要多觀察分析數據庫在運行時的性能。
那第五個基礎知識呢是分布式的技術架構數據庫和應用程序服務器。
在應對互聯網上數以億計的訪問量的時候,需要具備進行橫向擴展的能力,才能提供足夠高的性能。
所以為了做到這一點呢,我們要學習分布式技術架構,包括負載均衡DNS解析、多子域名、無狀態、應用層、緩存層、包據庫分析、分布式技術機制、taxelmmarereduce操作以及分布式circle數據庫一致性等等知識點。
要學習分布式技術架構呢,最有效的途徑是參與到分布式項目的開發中去,并且還要閱讀相關的論文。
那這里要注意的是,上面這些技術知識通常啊不是可以速成的。
雖然說你可以在一兩年內就把相關的書籍或者論文看完,但我想說的是,這些基礎知識是需要你用一生的時間來學習的,因為基礎礎的技術和知識會隨著閱歷和經驗的增加而有不同的感悟。
那剛剛講的這些呢就是應有技術領導力,你需要做的第一點去吃透基礎技術。
那接下來我需要講,第二點是要提高學習能力。
所謂的學習能力呢,就是能夠很快的學習新技術,而且能在關鍵技術上深入的能力。
只有在掌握了上述的基礎原理之上,你才能擁有更好的學習能力。
那接下來呢我會介紹一些能讓你提升學習能力的方法。
第一點呢是學習的信息源。
信息源很重要,有好的信息源就可以更快速的去獲取有價值的信息,提升學習效率。
常見的信息源有google等搜索引擎stck over flow correa的社區,那么圖書API文檔,還有論文和博客。
等等我這么跟你說吧。
如果到今天你的知識需求,用中文搜索就可以滿足的話,那么你就遠遠落后于這個時代了。
那如果用英文搜索才能找到你想要的知識的話,那你才能勉強算跟上這個時代。
那如果說你有的問題啊,你連英文搜索都找不到,只能到社區里去找作者啊,或者其他人去交流。
那么可以說你已經真正的和時代同頻了。
所以這就是提升學習能力的第二個做法與高手交流。
程序員可以通過技術社區以及參加技術會議與高手交流,也可以通過參加開源項目來和高手切磋。
我們平時都聽過這樣一句話,聽君人一席話,勝讀十年書,與高手交流,對程序員的學習和成長都很有益處,不僅有助于了解熱門的技術方向以及關鍵的技術點,更可以通過觀察和學習高手的技術思維以及解決問題的方式,提高自己的技術前瞻性和技術決策點。
我在亞馬遜的時候,就有人和我說多和美國的principal SD以上的工程師交流,無論交流什么,你都會有收獲的那其實呢我這里說的就是學習這些牛人的思維方式和看問題的角度,這樣呢會讓你有質的提高比了。
找到好的信息源和跟高手交流以外呢,提升學習能力,還需要你自己能夠舉一反三的思考。
比如了解了操作系統的緩存和網頁緩存之后呢,你要思考他們的相同點和不同點。
了解了c加加語言的面向對象特性之后呢,要思考java里面面向對象的相同點和不同點。
那遇到故障的時候呢,舉一反三,可以把同類的問題一次性的去處理掉。
第四點是不怕困難的態度,遇到難點呢有時候不花一番力氣是不可能突破的那這個時候,如果你沒有不怕困難的態度,就容易打退堂鼓。
但如果能堅持住,多思考,多下功夫,往往呢就能找到出路。
絕大多數人都是害怕困難的。
所以如果你能夠不怕困難,而且找到解決困難的方法途徑,那時間一長,你就能擁有別人不能擁有的能力了。
第五呢是要有開放的心態實現一個目的。
通常有很多的辦法帶有開放的心態,不拘泥一個平臺,一種語言往往能帶來更多的思考,也能得到更好的結果。
而且呢能在不同的方法和方案間做比較比較他們的優缺點。
那么你會知道在什么樣的場景下,用什么樣的方案,你就會比一般人能夠有更全面和更完整的思路。
希望你啊能夠記住這些提升學習能力的方法,要擁有技術領導力。
除了吃透基礎技術、提高學習能力以外呢,你要做的第三點是堅持做正確的事兒。
做正確的事兒比用正確的方式做事兒更重要。
因為這樣才能讓你始終向你的目標去靠攏。
那么哪些事情算是正確的事兒呢?我分享一下我的觀點。
首先是提高效率的事兒,你要學習和掌握良好的時間管理的方式,因為管理好自己的時間能顯著提高自己的效率。
其次呢是自動化的事兒。
作為一個程序員啊,你要充分利用自己的職業特質。
當你看見可以自動化的步驟的時候,編寫程序來做自動化操作,那就可以顯著的提高效率。
那第三呢是掌握前沿技術的事兒,掌握前沿的技術啊,有利于拓展自己的眼界,也有利于找到更好的工作。
但是需要注意啊,有些技術雖然是當下很火,但是未必是因為它前沿,而是因為它比較易學,易用或者性價比比較高。
學習一門技術啊是需要花費不少時間的,所以你應該選擇自己最感興趣的東西,有的放矢的去學習。
第四呢是知識面進行的事兒。
知識密集型啊是相對于勞動密集型來說的,基本上勞動密集型的事兒都能通過程序和機器來完成。
而知識密集型的事兒目前仍然需要人來完成。
所以人的價值這個時候就顯現出來了。
雖然說現在人工智能似乎已經可以做一些知識密集型的事兒,比如下圍棋的阿法狗。
但是在開開領域域啊,機器相對對人的智能來說差別還是很大,而握了領域知識的人,他的價值依然很高。
第五呢是技術驅動的事兒。
所謂技術驅動呢,不僅是指用程序驅動的事兒,而且還包括一切用技術改變生活的事兒,比如自動駕駛啊、火星登陸啊等等。
就算自己一時用不著,你也要了解這些,以便將來這些技術真的來臨的時候,你能適應他們。
最后呢擁有技術領導力需要你具備的。
第四點就是高標準要求自己,只有不斷的提高標準,你才可能越走越高。
所以要以高標準要求自己,不斷的去反思、總結和審視自己,才能夠提升自己。
首先呢你可以使用google的自我評分卡來評估自己。
什么是google的自我評分卡呢?它是在面試google的時候啊,要求應聘人對自己的技能做出評估的工具。
他可以看出應聘人在各個領域的技術水平,我們可以參考的這個評分卡來給自己做評估,并通過它來不斷的提高對自己的要求。
那這個評分卡呢,我在文章的末尾給了出來。
你聽完音頻之后啊,可以對自己做一下簡單的評估。
其次呢,你要有敏銳的技術嗅覺,這是一個相對綜合的能力。
你需要充分的利用信息源get到新的技術動態,并且通過參與技術社區的討論來豐富自己了解技術的本質。
還可以自己思考一下,這些新的技術動態是不是自己感興趣,能解決哪些實際問題,以及它背后的原因。
呃,新技術也好,舊技術的重大版本變化也罷了。
一個很重要的習慣呢是強調實踐,學以致用,學習知識啊,一定要實際用一用,可以是工作中的項目啊,也可以是自己的項。
這這樣不僅有利于技術理解,更可以于深入到技術的本質,還可以跟現有的技術對比一下同樣的問題,用新技術解決有什么不同,帶來哪些優勢,還有哪些有待改性的地方。
最后一點呢就是lead by example永遠在編程。
因為不寫代碼,你就會對技術技術對比,你就沒辦法做出可以實踐的技術決策和方案。
不要小看這些方法和習慣,堅持下來來很益益處。
誰說下一個改方向?或或重大修改建議,不能是你給提提的的,尤其是在一些開源項目中。
什么是技術領導力?領導力的體現之一,不就是指明技術未來的發展方向嗎?總之呢吃透基礎技術,提高學習技能力,堅持做確的事兒,高標準要求自己,不僅會讓你全面提升技術技能,還能很好的鍛煉自己的技術思維,培養技術前瞻性和決策力,進而啊形成技術領導力。
但是僅有技術還不夠。
那作為一個合格的技術領導者,你還需要有解決問題的各種軟技能,比如良好的溝通能力、組織能力、驅動力啊,團隊協作能力等等。
那很多經典突出,包括技術領導之路、卓有成效的管理者等等,都有細致的詳解。
我在這里呢就先不展開了,我后面的內容會有設計。
針對如何才能擁有技術領導力這個問題,歡迎你在留言區說說你的看法,我在留言區等你,也歡迎你把這節課分享給你的朋友。