有很多年,我都認為編程語言只是一種工具,練到一定的程度自然可以超越語言本身,至于你使用哪種工具就顯得不是很重要了。就如武俠小說中的各門各派的武功各有長短,但每個門派的武功練到極致都可以成為萬人敬仰的大俠,對于站在巔峰的大俠人門是從來不會在意他們用的是哪個門派的武功。
而且最后大俠往往會告許你最高的境界是“無”,無招無勢無劍無我。我一直被這些思想影響著,所以一開始用C和Delphi,后來在因公司項目轉到JAVA,包括中途有一陣子用過Symbian C++和WinPhone的C#,也只是“隨緣”而已自己并沒有在意過它們。
而最近的閱讀和思考,受到了一些不同的啟發,發現對于語言自己有很多錯誤的認識。現在,我更多的把語言理解成一種思維,而不是單純的工具。最近看了Ruby語言之父松本行弘的《代碼的未來》,松本行弘在一個講座中給學生出了一個題目“想象一下20年后的編程語言”,你現在使用的語言還會存在20年嗎?其實也可以簡單的這樣問,你現在的思維模式能適應20年后的時代嗎?
縱觀這半個多世紀以來產生的編程語言,其思想并不沒有發生很大的飛躍,你現在使用的很多語言的特性,在上個世紀五六十年代就已經存在了。如GC,函數式編程。而計算機硬件正如摩爾定律描述的那樣,發現了翻天覆地的變化,從這方面上來比較,雖然近十來年也誕生了各種編程語言,但編程語言的發展仍處于停滯狀態。
從匯編語言開始,編程語言的進化一個顯著的特點就是“抽象化”。抽象化就是提供一個抽象的概念,使用者即便不具備關于其內部詳細情況的知誤,也能夠對其進行運用。人類一次所能掌握的概念數量是有限的,有說法稱,大部分人一次只能駕馭7(加減2)個左右的概念。這樣一來,如果能夠讓問題的處理方式更加抽象,也就可以解決更復雜的問題。所以松本行弘在《代碼的未來》中也給我們講解了DSL(特定領域語言)相關的知識,DSL的優點是,可以直接使用其對象領域中的概念,集中描述“想要做到什么”(What)的部分,而不必對“如何做到”(How)進行描述。
Android應用的開發者肯定接觸過DSL,雖然你并不一定知道什么DSL??纯醋约旱腁ndroid Studio中的.gradle文件。
關于不同編程語言,網上常有各種爭吵,而且也存在一些“鄙視鏈”的說法,如C++程序員鄙視Java程序員。這里并不想引起或者延續不同編程語言的爭論,只是想說明:“如果不同的編程語言代表不同的思維,那么編程語言之間是有很大的區別的,使用不同的語言會返過來對程序員的思維方面產生影響?!?/p>
那么,你受到它們的影響了嗎?有沒有感覺無法接受別的語言了呢?我覺得這才是我們要想清楚的問題,如果我們的思維模式被固定死了,萬一我們使用的編程語言過不了多久就被時代淘汰,是否也說明受這種思維影響的程序員們也很容易被淘汰呢?
所以,我才感覺自己被害了。并不是說Java這種語言不好,而是我只把它當成工具,而忽視它各內在的東西,自己的思維模式卻在不知不覺中受到它的影響,最終自已給自己建了一道圍墻。
拆掉思維的圍墻,去找一個20年后還可能存在的編程語言學學,代碼的未來也許就是程序員的未來。
怎么找呢?看一下松本行弘的《代碼的未來》吧。