“如何構建知識體系”的思考

    對於知識體系體系的構建,一直都是學習和工作中,非常重要的問題。

    這段時間看了很多這方面的文章,其中京東架構師 李玥 的一篇文章,感覺講的很好,對我也有一定的啓發。

    從這篇文章中,可以總結出,對於技術問題的理解和解決,可以從下面幾個方面看:

焦慮的現象、原來與解決方法

    焦慮的現象:做技術會感到焦慮,不懂的技術,新技術太多

    焦慮的來源:對某些不好的事情過度擔心而產生的一種煩躁情緒。擔心更多是來源於“看不清”或“未知”

    解決焦慮的辦法:給一個導航,能看到自己所處的位置,前面的路是什麼樣,應該怎麼走,焦慮也就解除了。

    緩解技術焦慮的導航:能跳出來,看清整個技術體系全貌,知道自己的技術棧在這個技術體系中的位置,瞭解自己的長處和短板,也就不再焦慮了。

整個技術體系全景模型

    整個技術體系:一個超大的道理的錐形體,上大下小。這個錐形,越靠上,越偏重於應用,或者說越偏重於業務,越靠下,越偏重於基礎技術和理論。

“如何構建知識體系”的思考

    上層生態系統,涉及技術非常多,下層的技術原理變化很少。近二十幾年,基礎理論方面幾乎沒有任何突破性進展。

個人技術棧的標準和目標

    個人技術棧的問題:個人技術棧對於整個技術體系這個超大的錐形體來說,每個人能掌握的,也就是其中很小一部分。基礎理論和技術不能應用於工作的原因,是自己的技術棧還沒有打通形成體系,是斷層的。並不是基礎知識用不到,而是自己的知識體系沒有建立起來。

“如何構建知識體系”的思考
一個好的、成體系的技術棧應該: 基礎深厚,涉獵廣泛,融會貫通。把個人的技術棧放到大錐形體中,應該像一個頭朝下倒立的魷魚。
基礎深厚——魷魚倒過來,腦袋要儘量塞滿大錐形的底部,也就是底層的大部分知識都要掌握;
涉獵廣泛——魷魚向上有很多觸手,代表整個技術體系最上層的衆多領域中,其中幾個要掌握;
融會貫通——自上而下,最好不要有斷層,上層的技術不能只是浮於表面,要足夠的深入,深入到與你掌握的底層技術連通起來,代表你的知識體系是貫通的。

    以一個 Web開發爲例,說明好的、成體系的個人技術棧的模型。

構建個人技術知識體系的階段和建議

    如何來構建自己的技術知識體系:按照不同的階段,做不同的事情,達到不同的目標。

階段一 剛開始了節階段

    狀態:大學畢業到工作中,實際工作與底層技術太遠。
    建議:在一個技術領域內儘量擴展你的技術廣度,嘗試多學多用相關的各種技術。
    注意:儘量在一個技術領域內擴展,不然經常學不同領域的內容, 擴大太大,很難建立體系。
    標準:這個領域內的常用技術都會使用,隨便一個技術都知道,或者簡單看一些也能很快明白屬於領域內哪一類,類似的技術。

階段二 深入學習階段

    狀態:已經對某領域內的技術廣度足夠了
    建議:去深入的、有目的地去找領域內最核心的幾個技術,去深入地學習它的實現原理和底層技術。
    標準:當你把這個技術領域內的大部分技術都研究到足夠深入,能夠練習起來,在這個技術領域內的個人技術體系就建好了,你的第一條“小魷魚”就形成了。
    注意:萬事開頭難,這一步是最難的,只要過了這麼門檻,後面的過程就相對簡單。魷魚可能個頭小,須不多,頭不深,但沒有關係,只要是建立了知識體系,這些問題都可以通過不斷學習來逐步成長。

階段三 性能體系階段

    狀態:已經建立起第一個小魷魚,在一個領域有一定的個人技術棧體系
    建議:可以選擇繼續擴展你的知識體系的廣度和深度,養肥養大這條小魷魚。也可以換一個新的方向,再養一條小魷魚。
    注意:隨着涉獵的技術廣度和深度逐步增加,這些孤立的小魷魚,總會在底層的某個地方連通起來,變成一條大魷魚。
    標準:當你的個人技術體系足夠豐滿後,大部分新技術對你來說不過都是一根兒魷魚鬚子而已。你瞭解了技術全景,在構建起你個人的技術體系,自然就不再焦慮了。

心態

    大道至簡,知易行難。道理聽起來很簡單,落到實踐中去,還是非常難的。實踐中可能有很多繁瑣、瑣碎的問題需要解決。需要沉下心,堅持去學習、練習和試錯。勤勉之道無他,在有恆而已,願你我共勉。

爲了更好的說明,我把 李玥《程序員如何構建知識體系?》一文引用如下:

結束語  程序員如何構建知識體系?

你好,我的李玥。

在課程即將結束的時候,我們不聊技術本身,我想坐下來,跟你聊聊怎麼來構建個人的技術知識體系。

現在做技術的人普遍都有一種焦慮,相信你也或多或少有一點,焦慮什麼呢?總是感覺,自己不懂的技術太多了。雖然你不
不停地去學習,拼命地擴充自己的技術棧,但是面對不斷出現的新技術,學習的速度永遠趕不上新技術發展的速度,就會感覺自己不會的東西越來越多,這其實就是一種技術焦慮。

焦慮來源是什麼?焦慮,其實是對某些不好的事情過度擔心而產生的一種煩躁情緒。這種擔心更多來源於“看不清”或者說“未知”,人的本能就是對未知的事物忽悠莫名的恐懼。比如,我小時候考試考的不好,拿着成績單回家的路上是最焦慮的時候,因爲我不知道我爸媽看到成績後,會不會給我一頓胖揍。成績單交給爸媽之後,即使被揍了,也不再焦慮了,當然屁股疼是另外一回事兒。

對於技術焦慮來說,你所擔心的“不好的事情”,其實就是擔心自己技術成長跟不上技術環境的發展速度。就像一場賽跑,賽道是無數條路,所有人都在不同的路上拼命地往前跑,你不知道別人跑到哪兒了,也不知道還有多遠才能終點,不焦慮纔怪。解決焦慮的辦法是,給你一個導航,你能看到自己處在什麼位置,前面的路是什麼樣的,應該怎麼來走,焦慮也就解除了。

緩解焦慮的導航是什麼?

如果你能跳出來,看清整個技術體系全貌,知道你自己的技術棧在這個技術體系中的位置,瞭解自己的長處和短板,也就不再焦慮了。

我們可以把整個技術體系理解爲一個超大的倒立的錐形體,上大下小。

這個錐形,越靠上越偏重於應用,或者說偏重於業務,越靠下,越偏重於基礎技術和理論。

整個技術知識結構是這樣的模式,組成這個技術模型的每個技術點也呈現這樣的狀態。比如消息隊列,就是整個技術體系中的一小塊,它也是一個道理的錐形。

消息生態系統
各種消息隊列產品        應用/業務
程序語言和庫
實現原理
底層技術                基礎技術/理論
...
隊列

最上層是消息隊列相關的生態系統,這個裏面涉及到的技術就非常多了,包括怎麼和流計算配合,怎麼和微服務配合,怎麼來實現雲原生等。再往下一層,是各種消息隊列產品,這裏面任何一種消息隊列產品,你想要把它學到精通,都需要花很多精力。

這個錐形越往下層,涉及到的技術就越少。比如說,消息隊列的實現原理,我們這一門課也就差不多講全了。它用到的底層技術,就是異步、併發、鎖等。直到這個錐形的尖尖,就是一個數據結構,也就是所有消息隊列的理論基礎:“隊列”這個數據結構。

再回到宏觀層面來看這個大錐形,雖然它越來越大,但是新增的部分都在哪兒?都在上面是不是?也就是說,這個大錐形它上面的大餅越攤越大,但是底下的部分,其實變化很少。雖然計算機相關的科學也只有幾十年的歷史,但是,
####近二十年,基礎理論方面幾戶沒人很合突破性的進展
也即是說,這個大錐形的尖尖,二十年沒變化過。我十幾年大學本科的課程,和現在在校大學生的課程相比,基本沒什麼變化,還是編譯原理、圖論這些課。

看清了技術體系的整體,再來看你自身這個個體。對於整個技術體系這個超大的錐形體,我們每個人都能掌握的,也就是你個人的技術棧,也就只有其中很小的一部分。

你可能學了很多技術,包括大學裏面教的基礎理論知識、工作主要用的編程語言和一些框架等,爲了面試,刷了好多的架構和算法題。你是不是感覺,這三部分完全沒有任何關係?大學的課程早就忘得差不多了,因爲工作中基本用不上;工作中每天用到的就是這點兒框架和增刪改查,做的很熟練了,也沒什麼挑戰;刷題的那些算法也僅僅是用來面試而已。

原因是什麼?因爲你的技術棧還沒有打通形成體系,是斷層的。這些知識其實是有聯繫的,無論你開發的是什麼應用,使用什麼編程語言,都免不了要使用一些基礎組件或者存儲系統,實現這些基礎組件必然會用到一些設計模式、各種算法,那這些模式和算法,它的理論基礎,就是你在大學中學習的那些圖論、計算機組成原理等等這些課程涉及的知識。所以說,並不是這些知識你用不到,而是你的知識體系沒有建立起來。

那一個好的、成體系的技術棧應該是什麼樣的呢?應該是,

“基礎深厚,涉獵廣泛,融會貫通”。

把你個人的技術棧放到大錐形體中,應該像一個頭向下倒立的魷魚。我們都知道,魷魚腦袋又大又尖,鬚子又多又長。把魷魚倒過來,它腦袋要儘量塞滿這個大錐形的底部,也就是說,底層的大部分技術知識你要掌握。

向上延伸的很多觸手,代表整個技術體系的最上層的衆多領域中,其中幾個領域你也是要掌握的。並且,自上而下,最好不要有斷層,上層你掌握的技術不能只是浮於表面,而是要足夠的深入,

深入到與你掌握的底層技術連通起來,

代表你的知識體系是貫通的。

舉個例子,比如你寫了一段代碼,往數據庫中寫了一條數據。你編寫的程序,它子啊運行時是怎麼存儲和傳輸這條數據的?數據是如何從你的程序傳遞給數據庫的?數據在數據庫中是如何處理並存儲的?數據庫又是怎麼把數據保存到磁盤上的?數據在磁盤上以什麼形式保存的?如果你可以回到出這些問題,那代表你在這方面的知識體系自上而下已經打通了。

魷魚與知識體系圖片

這樣的個人技術體系,它有什麼好處呢?你已經掌握的每項應用技術,都是你實際工作中最常用的東西,你掌握的足夠深入,設計出來的技術方案或者寫出來的代碼質量就更高,遇到相關的疑難問題也不至於難倒你。有一個非常好的基礎,你學習新的應用技術也會非常快,因爲你只要學習它上層那部分就可以了,底層的技術很多是相通的。

就象《消息隊列高手課》專欄,我們用30節課的時間,講了從消息隊列的應用到實現原理、再到底層技術。然後,我們在實踐篇來開發RPC框架的時候,你會發現它和消息隊列用到的很多底層技術就是一樣的,那你學習起來就會很容易很快。對於RPC框架這個知識體系,很多底層基礎技術你都已經掌握了,你真正需要學習的,新的知識相對就會少一些。

那麼,我們應該怎麼樣來構建自己的技術知識體系呢?這裏我給你一些建議。

我們大部分程序員的成長軌跡都是差不多的。大學學習的那些計算機專業課,除了你學的那門編程語言以外,其他的專業課畢業之後大概率是用不到的。原因是,這些技術在整個技術體系中,基本上處於最底層。而我們畢業後,無論是做Web開發、做APP開發,還是搞機器學習等等,在技術錐形結構中都是最上層的應用技術,距離底層的技術太遠,聯繫不上。

這個階段我給你的建議是,在一個技術領域內儘量擴展你的技術廣度。比如,你是做 Web開發的,你可以嘗試多學多用相關的技術,像各種Web框架、HTTP協議、JSON、數據庫應用、相關的各種中間件和組件。你不要今天學了Spring,明天又去學習機器學習,後天再去學安卓,這樣跨度太大很難建立體系。

當你在某個技術領域的技術廣度足夠了,達到一個什麼程度呢?這個領域內常用的技術,你都會使用,隨便一個技術,你都知道,或者即使你不知道,簡單看一下也能很快明白,瞭解這個技術在這個技術領域內是哪一類的,至少你知道的某個技術和它是類似的。

這個時候,你就可以去深入的,有目的的去找領域內最核心的幾個技術,去深入地學習它的實現原理和底層技術。比如,你是做Web開發的,你可以去學習某個Web框架的實現原理,學習Web容器的工作原理、學習數據庫的存儲結構等等。當你吧這個技術領域內的大部分技術研究到足夠深入,能夠聯繫起來,你在這個技術領域的個人技術體系就建好了,你的第一條“小魷魚”就形成了。

所謂萬事開頭難,這一步其實是最難的,但是隻要邁過這個門檻,後面的過程就相對簡單了。你這個小魷魚可能個頭很小,鬚子也不多,頭扎的也不夠深,但是沒關係,只要是建立了知識體系,這些問題都不是關鍵問題,都可以通過不斷的學習來逐步成長。

建立起第一個小魷魚之後,你可以選擇繼續擴展你知識體系的廣度和深度,養肥養大這條小魷魚。也可以換一個新的技術方向,再養一條新的小魷魚。隨着你涉獵的技術廣度和深度逐步增加,這些孤立的小魷魚,總會在底層的某個地方連通起來,變成一條大魷魚。當你個人的技術體系足夠豐滿之後,大部分新技術對你來說不過都是一根兒魷魚鬚子而已。你瞭解了技術全景,在構建炁你個人的技術體系,自然就不再焦慮了。

所謂,“大道至簡,知易行難”。道理總是聽起來很簡單,真正能理解道理,落到實踐中去,還是非常難的。在實踐的過程中,可能有很多繁瑣的、瑣碎的問題都需要你去解決。希望你在構建自己的知識體系過程中,能沉下心,堅持去學習、練習和試錯。勤勉之道無他,在有恆而已,願你我共勉。

“送君千里,終須一別”。我們的《消息隊列高手課》也該說再見了。在專欄開始更新時,我曾鼓勵你立flag,不知道在這三個月的時間裏,你是否堅持學習了每一節課?有沒有離當初的目標更近一些?希望你能堅定不移地朝自己的目標走去,無悔初心。

感謝你的一路支持,專欄雖然更新結束,但我們依舊可以再留言區裏繼續交流技術!最後,也祝福你不僅能成爲消息隊列的高手,還可以通過對消息隊列的學習,打通任督二脈,不僅能在職場上披荊斬棘,更能實現你的技術夢想!
————————————————

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章