如何掌握多種編程語言?

1、編程語言特色

有人說 「數據結構 + 算法 = 程序」,那麼按照這個邏輯,一門編程語言就是:「運行環境 + 編譯/連接 + 語法 + 類庫 + 框架 = 編程語言」(固然這是露出在外的冰山一角)。每門編程語言都有深層次的理論,包括編譯、解釋、執行一系列過程當中的基礎知識。算法

拿Python來講,基礎類型對應的是C語言實現的一個Struct, 帶來的好處是在Collections(集合)中能夠爲每個元素設置不一樣的類型,同時壞處是,同一種類型的Collections中就顯得類型信息變得冗餘,致使在大數據量的執行過程在空間和時間上變得沒有效率,因此Numpy庫就出現了。Python做爲「膠水」型語言,能夠把追求執行效率的實現讓給其餘語言來作,固然CPython GIL問題也常被詬病(編程語言執行環境選擇多線程仍是單線程,並如何解決優化執行效率而引起的相關問題【多線程下的鎖,單線程下的排隊等待】,能夠對比JavaScript在單線程執行中引入的Event Loop)。編程

編程語言設計及實現方式就決定了它自己的優點和弱點。編譯執行的效率、智能化(好比:JVM會根據方法的執行的次數來優化編譯。提一下,LLVM框架在各大編譯器中都有應用和借鑑);併發多線程/進程(隨CPU多核心的出現,充分挖掘利用變得重要)、IO操做、跨平臺、類庫支持等,成爲工程化技術應用的選擇、比對的標準。好比Java,雖然語法不那麼時尚,模塊化底層的支持還老拖延(Java 9 中支持,應用還待類庫大面積支持),由於累積將近30年的優秀開源庫及解決方案,依然是當前技術應用的熱門語言之一。設計模式

下面談談掌握多種編程語言的現實須要:性能優化

一、應用場景的須要

分層與解耦、協議與平臺無關性、跨平臺RPC框架、伴隨分佈式架構(ESB、SOA、Microservices、Service Mesh)大面積應用,異構融合互通。如今掌握多種編程語言,在應用場景中快速實現新的需求,就變的頗有競爭力。固然深層次瞭解編程語言的實現和執行,有助於代碼優化及性能Bug問題的解決。但不少實際應用場景中尚未達到開源框架或類庫的設計瓶頸,沒有急迫須要去重寫或優化開源框架和類庫的實現。問題多出在業務邏輯的實現和優化上面。業務邏輯的分解和細化也涉及到產品部門對需求的理解和經驗的應用上,咱們會在另外一篇文章中談到。數據結構

二、編程範式和模型的延續性

POP(面向過程)、OOP(面向對象)、FP(面向函數)的範式思想都是有幾十年的高齡了,Java8中才出現lambda這種高階函數的樣式。編程範式在很長的時間內並無多少變化,編程語言實現編程範式的策略也不盡相同,有的是毅然決然地貫徹一種範式(好比:Haskell、Lisp 等),有的是溫和融合方式(好比:Scala、go),有的是漸進方式(好比 :Java)。這裏多說一句,Java的發展有其歷史包袱,可還記得其泛型的實現也有些苟且。多線程

編程模型在各類語言中也各有特點,這就是它們在相同的處理操做上不一樣的表現形式,這也是應對不一樣場景需求的靈活性所在。若是你把範式當作接口或父(基)類, 而各類語言的具體功能(模型)實現就能夠理解實現的多態了。模式化的認知思惟是人類的特色,這有助於咱們概括總結(也是大數據分析及AI學習的基礎思惟)。架構

2、掌握編程語言的方法論

如何掌握多門編程語言?咱們分爲四個方面去引導,對於非開源性的語言這裏就不舉例(.net 體系經過.net core開源實現跨平臺功能【注:之前只有跨語言功能】,但.net CLR的具體實現而言,在自家Windows平臺上具備執行效率的優點,加上一體化的Visual Studio IDE 環境,對入門至關友好,但對一些比較深刻的問題探究就具備黑盒效應。因此這裏就很少加討論)。併發

一、從架構實現的角度,選型、應用中掌握。框架

二、從DevOps的角度,CI/DI的編譯、部署、維護中掌握less

三、從性能優化解決BUG的角度,深刻原理中掌握

四、從業務邏輯開發中,深刻掌握

下面就詳細按我的經驗去展開談談這四個角度。

一、架構實現(總體和選型)的角度

先談總體架構的角度,脫離實際應用談架構大可能是體現知識面和對原理了解、及經驗的積累。花點時間來了解架構發展歷程,通用劃分方式是:傳統架構(單一混合型)、分層架構、分佈式架構、超大型分佈式架構(主架構下混合其它架構形式)。這樣的劃分並不是是表示越日後越先進,只是從適應發展(規模、用戶數量)的角度來看問題。工業設計中有個叫設計餘量的東西,留的過多則代表潛能浪費,也就是說,使用價值沒有最大化。過分設計也是目前廣泛存在的問題(開源項目隨取隨用,並無恰如其分的使用或部分使用,每每是緊隨潮流的選擇)。

這裏提一下兩個模式:中心模式和分佈式模式(一致性的CAP / FLP / BASE理論,PAXOS及變種/ RAFT / ZAB等協議),一般是採用二者結合的方式達到效率平衡(選舉中心節點、協調各工做節點)。也有決然的分佈式應用,好比區塊鏈,效率始終是個瓶頸,算力攻擊也發生過。

這裏不主講架構自己,因此回到選型上,來肯定那種框架和中間件能幫助本身實現總體應用架構。瞭解和對比選型對象,理解其設計理念、架構,以及其所使用的編程語言帶來的優點。同時也是本身學習瞭解選定框架和中間件編程語言的契機。

二、DevOps的角度

Amazon(亞馬遜) 最先提出 You build it,You own it ! 如今流行的DevOps概念時尚起來也花了很多時間,隨着Docker這種輕容器的興起,提升了總體運行環境的遷移性,Microservices(微服務)、Serviceless(無服務、雲服務商提供可伸縮調用的函數封裝、在線IDE) 、Envless (運行環境無關)也使得維護的成本減小,非資深開發人員維護本身寫的服務和代碼也變得可行、而且正在流行。

在一切變得自動化以前,「如何設置的問題」 還會深刻到基礎和核心的部分,因此在運維上會牽涉到腳本、系統功能的使用,也就會有了解和熟悉的須要。

三、適應性和性能優化的角度

目前來看一切都很美好,但棘手的問題也隨之而來,屏蔽一切複雜以後,傻瓜式編程老是缺乏能力去解決適應性和性能優化的問題。軟件思想在應對不斷的變化中發展,對事物的抽象,總會歸結到模式上,流行框架能大規模的應用也就對應着要使用模式來適應多種變化(從生活中來,到生活中去的鮮活例子)。

框架具體應用中可能要用效率來換取靈活性。作好具體案例的適用、優化好性能也是平常工做,對框架實現語言的瞭解和掌握也就是應有之義了。

四、從業務邏輯開發的角度

這是主要的掌握語言的方式,熟悉語法、深刻理解數據結構和算法實現;熟悉編譯、執行環境,參與測試流程;解決疑難雜症;學習設計模式和架構,都是你們熟悉的過程。

3、總結

在熟悉一門編程語言後,範式和模型的經驗可以遷移不一樣的語言上。從一個熟悉環境到一個陌生的環境,總會有不適應,這都是自我意識設置的侷限,其實沒有什麼是學不會的!


原創文章,轉載註明出處
相關文章
相關標籤/搜索