職場的程式設計師們或多或少都受到過前輩或領導的指點,應該都聽過這麼一句話 “學技術不能光會搭建個環境,使幾個API,要學習瞭解技術的本質”。可能實際聽得比較多的是 “學習技術原理”這句。所以這兩個點都會說到,會說一說區別及聯絡。
原理,何為原理,技術原理到底在學什麼?
本質,何為本質,怎麼就算了解掌握技術本質了?
本文就來碼一碼技術原理和技術本質這兩個東西。
一、技術原理
先說一下「技術原理」這個詞,這個應該大家都很熟悉,每每提起甚至感到一絲絲痛苦和折磨,一線網際網路公司面試官的最愛,經常拿來挑逗一下面試者,"知道xx技術的實現原理嗎?能不能說一說"。
技術原理即技術背後的 實現思想、架構設計、程式碼 ,學習一個技術的實現原理就是學習這三個方面的內容。
這三個方面也是層層遞進的關係,越來越具體。
- 首先,思想是巨集觀的東西,構建起整個技術的理論支撐;
- 其次,架構是思想的進一步推敲和論證的產物;
- 最後,就是程式碼了,結合思想和架構設計變成一行行的可執行程式碼。
所以,你看學習技術原理的路線圖和目標就出來了,第一,學習思想構建起巨集觀概念 ;第二,學習整體架構及區域性架構掌握整體結構的組成和相互之間的關係;第三,學習程式碼的實現和邏輯。
舉例說明一下,學習 "HashMap原理",這時候首先應該構建起的是它的資料結構知識即雜湊表的概念和特點(其實如果再拔高一點,應當是先建立起各種資料結構和相互之間區別、特點及相關演算法的思想和理論知識,當然這個要求就稍微高一些了),然後架構設計因為這是一個具體的類,所以這部分就是類中包含的核心方法及作用,最後就是深入程式碼,學習具體的程式碼實現邏輯,比如put方法是怎麼存入資料的,又在什麼情況下會進行擴容等等。
如果沒有前面部分的思想和理論做支撐, 不建議直接上來就進入到程式碼細節,會學的很痛苦比較掙扎。發現概念和理論上的盲區,應及時補上,然後在繼續程式碼的學習。
二、技術本質
說完技術原理,下面看技術本質。簡單理解,技術的本質就是解決問題,將解決問題的前因後果分別具體化研究,展開來說本質就是除過上面說到的技術原理之外,還應該包括 技術所解決的核心問題 和 應用場景 以及 存在什麼樣的優勢和不足。
總結一下,就是以下3點內容:
- 技術解決的核心問題和應用場景
- 技術原理
- 技術特性
所以,你看學習技術本質的路線圖和目標也就出來了,第一,掌握技術解決的核心問題和應用場景,即搞明白它可以用來幹什麼;第二,研究技術原理,即搞明白它為什麼可以做到;第三,瞭解它的技術特性,即搞明白它的優勢在哪裡。
拿redis來說,它解決的核心問題是提供高效能的記憶體資料快取服務。雖說官方認為它還可以用作資料庫和訊息代理,但實際應用中更多作為資料的快取服務。
技術原理上面專門做了介紹了,讀者可以類比理解,這裡就不在展開了。
技術特性即是該項技術與相關其他類似技術相比有什麼牛逼的地方,拿redis和memcached比,多資料型別的支援就算redis的一個特性,持久化能力的支援也算是一個特性。特性在做技術選型的時候往往有著至關重要的作用。
搞清楚一門技術以上3點內容,才算得掌握到技術的本質。我們再學習技術原理的時候,不妨再加把勁,窺一窺它的技術本質。
再帶大家理解一下「本質」這個詞,下面這句是摘自網上的一句話
IPFS本質上是一種內容可定址、版本化、點對點超媒體的分散式儲存、傳輸協議。
從面上看更像是一句定義,告訴你什麼是IPFS,但是加上了本質二字,就讓這句話看起來不是那麼的簡單,而支撐本質二字的背後就是IPFS這個技術的是內容可定址,具有可以版本化、點對點、分散式傳輸的特性,解決的核心問題和應用場景就是標準化資料傳輸過程。
所以作者一定是窺透了這技術背後的本質內容而總結出這麼一句話。希望這裡沒有讓你看糊塗。
當我們再看到“xx的本質是xx”這種類似的話的時候,希望大家能多思考思考這句話中本質背後的支撐是什麼,有點跑題了,收回來。
三、總結
可以看到,技術本質包含了技術原理,也就是一種包含關係。
本文就是理清技術原理、技術本質的真正含義和關係,經常我們對這些看似都懂的概念不去深究,而實際上真正搞明白這些東西能夠幫助我們搭建自己的知識體系,而且知識結構脈絡十分清晰,不易混淆。在學習一門新技術或深入研究一門技術的時候也會有一個清晰的方向和目標。
最後,隨著學的東西越來越多,越往後大家就越會發現概念和理論(也就是思想)的重要性,有清晰的概念和理論體系作為支撐,能讓我們的學習事半功倍。
關注作者公號「風象南講全棧」,做有思想的技術人。