《golang筆記》第一篇-初識

BackSlash發表於2018-10-19

    上個世紀70年代,貝爾實驗室的Ken Thompson和Dennis M.Ritchie合作發明了UNIX作業系統,同時Dennis M.Richie為了解決UNIX系統的移植性問題而發明了C語言,貝爾實驗室的UNIX和C語言兩大發明奠定了整個現代IT行業最重要的軟體基礎(目前的三大桌面作業系統中Linux和Mac OS X都是源於UNIX系統,兩大移動平臺的作業系統IOS和Android也都是源於UNIX系統。C系家族的程式語言佔據統治地位達幾十年之久)。在UNIX和C語言發明40年之後,目前已經在Google工作的Ken Thompson和Rob Pike(他們在貝爾實驗室時就是同事)、還有Robert Griesemer(設計了V8引擎和HotSpot虛擬機器)一起合作,為了解決在21世紀多核和網路化環境下越來越複雜的程式設計問題而發明了Go語言。

    所有的程式語言都反應了語言設計者對程式設計哲學的反思,通常包括之前的語言所暴露的一些不足地方的改進。Go專案是在Google公司維護超級複雜的幾個軟體系統遇到的一些問題的反思(但是這類問題絕不是Google公司所特有的)。

    正如Rob Pike所說,“軟體的複雜性是乘法級相關的”,通過增加一個部分的複雜性來修復問題通常將慢慢的增加其他部分的複雜性。通過增加功能、選項和配置是修復問題的最快的途徑,但是這很容易讓人忘記簡潔的內涵,從長遠來看,簡潔依然是好軟體的關鍵因素。

    Go專案包括程式語言本身,附帶了相關的工具和標準庫,最後但並非代表不重要的是,關於簡潔程式設計哲學的宣言。關於簡潔之道,先來看一下Go當前的取捨。Go擁有自動垃圾回收、一個包系統、函式作為一等公民、詞法作用域、系統呼叫介面、只讀的UTF8字串等。Go沒有隱式的數值轉換,沒有建構函式和解構函式、沒有運算子過載、沒有預設引數、沒有繼承、沒有泛型、沒有異常、沒有巨集、沒有函式修飾、更沒有執行緒區域性儲存。相對於C++擁有的語言特性,Go簡直少的可憐。

    作為一個計算機專業所謂科班出身的人,從用c敲下人生第一行程式碼,到如今也使用過許多不同設計哲學的程式語言,無論是c、c++、java、python、lua、js、perl、shell,都沒有成為手中披荊斬棘的利器。參加工作以來,面對公司成熟的產品,分析其中複雜的邏輯,新增新的需求,修改產品漏洞,真的是傷透了腦筋。漸漸的對於程式設計之道只有一個核心標準--簡單。一個成熟的產品,一個保持活力不斷更迭的產品,需要前前後後的開發者不斷精雕細琢。從前我以為程式語言是人和機器溝通的橋樑,現在我認為程式語言是不同開發者交流的橋樑。一個產品從無到有,從設計到實現,從複雜性來講我認為有兩種。第一是設計邏輯,第二是程式碼邏輯。如果大家使用同一種程式語言,遵循同一種程式設計正規化,實現同一種模組組織結構,是不是能夠使設計邏輯足夠清晰、簡單呢?如果一段設計邏輯大家使用同一種錯誤處理方式,模組之間使用同一種呼叫方式,併發程式設計也使用同一種手段是不是可以讓程式碼邏輯易於理解呢?

    程式語言只是軟體開發中最基礎的部分,個人的能力才是最重要的,並不是說掌握了某種語言就可以為所欲為了。我認為軟體開發的重要標準還是編寫出直接、簡潔的程式碼邏輯,擁抱Go語言,希望可以得償所願!

相關文章