最近博客和公衆號文章差很少有二個多月沒有更新了,相比以前每個月一篇文章的更新頻率,最近確實懶散了許多,一來年末收尾之際手上的工做繁重抽不出時間,二來本身最近的空閒時間的學習計劃也排的緊密,長此以往就把寫博客是事情落下了html
可是也得益於本身以前堅持寫博客的習慣,累積了一些讀者,咱們知道人都是有惰性的,但每次想偷懶不寫博客的時候,看到訂閱欄裏面讀者就以爲心生愧疚,我想這也是開放分享的一個好處,就是經過的外部力量去督促你去堅持下去,通過實踐,這確實是一種很是好的方式程序員
爲何會想寫這篇文章?主要有以下幾個緣由算法
今天想寫下關於編程語言的本質,這個命題很大,因此只是從淺顯的層次上談一談,從應用層面聊聊不一樣語言的差別,由於我不曾有時間深刻學習過《編譯原理》(也是你們俗稱的龍書),因此並未深刻到編譯原理等層次上,還請見諒數據庫
先拋出個人我的觀點:編程語言的本質就是規則編程
經歷是我上兩週花了週末兩天的時間,學習了一門新的編程語言,而且在第三天就寫了一個相似購物商城的簡單程序,學完後我就在反覆思考,爲何能夠在熟悉一門編程語言後,再去學習其餘的編程語言,能夠僅僅花費幾天時間就能夠掌握,而我在學習第一門編程語言的時候卻足足花費了半年時間才以爲本身僅僅入門?微信
帶着這個疑問我開始思考問題,個人學習路徑是這樣,我入門編程語言學的是 Java,後面自學了 JavaScript,Groovy,Ruby, 自我計劃後續還繼續打算深刻學習 C 和 GO 語言,想學習 C 和 GO 主要是有如下幾個目的:架構
(圖片來自 Medium:Why should you learn Go?)併發
關於語言的應用場景,這方面咱們就不繼續展開討論了,回到文章的主題,淺談編程語言的本質,通過思考後我認爲,任何一門編程語言其實是包含了兩種內容編程語言
知識說是共性,是由於它面向全部編程語言通用,例如知識包含對如下內容的理解:工具
因此以上內容解釋了,爲何入門學習編程語言這麼慢?是由於你在剛剛接觸第一門編程語言的時候,其實你面對的是兩個知識體系的內容,既共性內容(知識)+ 特性內容(規則),例如你剛學習 Java 你除了須要去學習什麼是布爾值 Boolean,整型 Integer,浮點 Float,字符串 String,這些通用的「知識」外,你還須要去學習它的規則,常見的 Java 語言規則就包含如下:
若是明白了編程語言的本質後,你會發現共性的知識只要學習一遍就能夠了,當你理解知識再去學習其餘語言的時候,你會發現你學習一門新的語言並非從零開始,你熟悉的共性知識都出如今你要學習的新語言裏面,萬變不離其宗,由於任何編程語言都沒法跳過這些基礎知識,正是這是知識加速你對新語言的學習理解,因此你只須要學習新語言的規則就能夠了,瞭解下它的邏輯控制,異常怎麼玩,有什麼新特性,適用於什麼場景,這都爲你節省了大量的時間和精力
例如 Ruby 我只須要大概瞭解它的 Meta Programing 怎麼玩,邏輯和流程控制符的規則,Java 我只須要大概知道它的異常體系,接口,繼承和封裝怎麼玩,泛型和相應的工具類怎麼用就能夠上手了
今天寫這篇文章本身在學習新語言中的體會,也恰好解釋了一個問題,就是爲何不少程序員能夠同時掌握多門語言?他們是怎麼作到的?他們爲何會那麼多的精力?
其實答案就是,首先能區分和抽離 不一樣編程語言的基礎共性(知識) + 不一樣編程語言的特性(規則),先把編程語言的共性練習的足夠紮實,再去學習不一樣語言的特性規則,其實新語言學起來就容易得多,而後就是隨着使用實踐增長熟練程度,最後對總體架構的掌握,就能夠作到熟練的切換和玩多種不一樣編程語言的程序
這雖然是看似很 coooool 的事情,可是背後都是付出的都是持續關注和投入時間,精力的過程,因此不要以爲很簡單,也不要以爲很困難,不少事情若是喜歡,作就是了。 更多技術諮詢,請關注公衆號,find me !