程式設計語言層出不窮,然而內核是萬變不離其宗。我個人看法覺得是以下幾個方面的變化比較明顯。
語言本身:
1. 工業標準 網頁標準有 W3C 控制,尤其是流覽器的開發,所有主流的流覽器都會自覺符合這個組織的標準,當然這些開發商本身就是這個組織的成員。所以新的 HTML5,CSS3,ES6 JavaScript 的新特性的得到順利推動,讓大部分主流流覽器都支持它,W3C 功不可沒。 PHP 有 PHPFIG 組織,雖然不是強制性的,但是很多新的框架和庫都自覺遵守這個組織的程式設計標準。 Java, C 語言都有各自的工業標準準則,來維護各自工業標準。 這個標準其實不是強制性的,雖然很多程式師在自己工作上,不遵守這些工業標準,但是要推出新的模組的話,不遵守這些工業標準的模組,是沒有人會去使用的。如今是不是面向標準程式設計,是體現一個程式師是否專業,一個模組是不是專業模組的一個重要指標。 2.協力廠商模組走紅 各種語言的框架和庫,可能比自己的語言還出名,比如 CSS 的 Bootstrap,JavaScript 的 jQuery;一個好的框架和庫甚至可以推動這個這個語言的發展,比如說 PHP 的 Laravel 框架,JavaScript 的 jQuery. 模組化的發展,大大加快了開發的速度。很多人也願意開發各種框架和模組,不但可以鍛煉自己的開發技能,也是一種展示自己的能力。 過去,程式師要成名,要開發出有用的軟體,比如說求伯君開發出了 WPS,牛;張曉龍開發出了 Foxmail,牛。 現在,程式師要成名,開發出一個大家都會用的框架和模組也行。比如 Evan You 開發的 Vue.js,玉伯開發的 SeaJs。 3.模組化程式設計和依賴管理 在 2010 前,依賴管理工具只是個很時髦的概念,大家習慣手動到庫的官方網站上下載後手動導入到項目中。升級也是個麻煩事。所以一般大家也就下載一兩個必要的庫,其他都自己手寫完成。 如今,依賴管理工具已經是必備的了,大家不再手動導入庫了;而且是能找到協力廠商模組的功能,就不再自己編寫了,統統用工具導入項目;自己編寫的程式碼,能模組化的代碼統統模組化,甚至是獨立出來,網上開源,然後使用依賴管理工具進行管理導入到自己的專案中。 這樣好處也明顯:- 代碼量減少
- 加快開發速度
- 高度解耦
- 定位 bug 容易,改動影響小
- 寫單元測試容易
- JavaScript 的框架多了,Vue,React, Backbone,AngularJs 等;
- CSS 有 Bootstrap,Fundation 等;
- PHP 有 Laravel,CakePHP 等
- C#有 MVC
- Java 有 Spring+Hibernate+struts
- 代碼風格檢查
- 工業標準檢查
- 代碼整理
- 代碼複雜度檢查
- 單元測試覆蓋率檢查
- 依賴管理
- 壓縮代碼
- 重複代碼檢查
- 無用代碼檢查
其他方面:
1. 版本控制,Git,GitHub 版本控制在程式設計界中的地位是越來越重要了。在程式設計界中有個說法:沒有版本控制的項目,就等於沒有這個項目。 版本控制的工具很多過去有 SVN,如今 Git 的強大,用的人也是越來越多,而它和 GitHub 的相同作用下,對程式設計界的積極影響和積極推動,是令人無法忽視的。比如幾乎所有的依賴管理工具的庫下載源,都是和 GitHub 綁定的, 就這一點來說,GitHub 的重要性在 IT 就不可估量。 而 GitHub 上和 Git 的方便管理,上傳,查看,統計,bug 報告等功能更是極大地推動了程式師之間的合作;GitHub 上的開源更是改變了開源軟體對世界的影響力。 GitHub 不是 Git 的全部,Git 也不是版本控制的全部,本質上來說,GitHub 只是一個網站而已;然後 GitHub 確實又是這個程式設計世界不可缺少的一個重要的模組,已經成為了一個不可或缺的組成部分了。甚至 GitHub 已經跳出了程式設計界,成為了一個世界級的不可或缺的服務平臺了。然而 GitHub 是 2008 年建立的,真正開始流行是在 2012 年的。在 2015 年 Google 宣佈關閉自己的 Google Code。可見 GitHub 的影響力,以及在業界的重要程度了。 2.生態圈意識 生態圈意識在業界是越來越強了,它應該和程式設計工具化和工程化有極大的關係。一個語言,框架或者庫的出現,人們用它們,不但是因為它們本身的強大,更是因為它們背後的生態圈。 比如說人們選一個 JavaScript 的框架,選 React 還是選 Ember.js,更多是看支持他們的生態圈如何,React 是有 Facebook 支持的,更有很多程式師為它開發相關工具和庫以及有很多文檔教程。這樣 React 的生態圈就很大,會讓更多人願意選擇 React 作為第一開發框架。而 Ember.js 相對來說生態圈小,選擇它的人可能就不會很多。 選語言也一樣,選 JavaScript 編寫爬蟲還是選 PHP 編寫爬蟲還是用 Python?更多的是看他們的生態系統了,Python 的爬蟲庫強大且豐富,所以更多人選用 Python 編寫爬蟲。 一個新的語言出現,成熟與否,看的就是它的生態圈了,比如是否有測試框架,是否有 MVC 框架,成熟的時間庫,資料庫 SDK 等等,這些都是其必要的生態圈組成部分。總結:
以上的這些現象和趨勢,其實都是相輔相成的,最終成了一種良性迴圈。這些現象和趨勢都會繼續發展下去,並成為以後新趨勢的基礎。所以這些特點都是非常重要的,而且應該成為每個程式師都應該知道的知識。一些建議:
我在讀程式設計專業的時候,這些東西大學都沒有教過,甚至在工作中,公司都沒有這些要求。大學主要教的是代碼編寫,能編譯通過,能出正確結果就可以了。在工作中,代碼能用,沒有明顯 bug 就行。 然而,在我個人工作實踐中,逐漸的體會到這些趨勢的重要性了,可維護性的高品質代碼可以大大減少自己在維護中的難度和壓力。作為準備成為一個合格的開發人員,應該熟練掌握這些知識和技能。如果大學沒有教過,一定想辦法自己學習和提高。 又想到幾個發展,這裡更新一下 1. WEB 技術的桌面化和 JavaScript 的全棧化 JavaScript 近些年發展火熱,逐漸印證了一個 Atwood 法則:凡是可以用 JavaScript 實現的,最終都會用 JavaScript 實現- Nodejs 的出現,奠定了 JavaScript 走出流覽器,走向了伺服器端
- NW 的出現和 electron 正式版發佈,JavaScript 走向了桌面
- MongoDB 的出現,JavaScript 走向了資料庫
- Tessel 的出現,走向了硬體和物聯網
- 容易編寫,就是個函數,無需介面
- 語言無關性,無論 Web API 是個語言編寫,幾乎任何語言都能調用
- 訪問性好,無論在哪,只要網路能訪問,Web API 就可以用。
- PHP5.0 后支持了类,5.4 后支持了 Trait,5.5 后支持了生成器(Generator)
- JavaScript ES6 支持了箭头匿名函数,生成器(Generator),类(不是 Prototype 的类)
- C# 和 Java 相互借鉴
- Coffee Script 借鉴 Python 和 Ruby
- 語法檢查,JavaScript 的 JSHint 用的就是 JavaScript 的一個解譯器,被 JavaScript 重新解釋一遍,把可能有問題的地方標記出來通知程式師,程式師可修改避免潛在錯誤。
- 代碼最小化,代碼重寫的一種形式,JavaScript 的最小化項目(比如 Urglify),是把語法正確讀取後,進行最小化壓縮。把單詞變數轉換成單字母變數。甚至是 if else 轉換成?: 形式。
- 語法擾亂器,就是代碼重寫的一種形式,讓代碼無法閱讀,保護代碼。
- 語法整理器,代碼重新的一個形式,把無法閱讀的代碼,轉換成可閱讀的代碼,比如 beautifier。
- 語法高亮,一般用於代碼編輯器和代碼顯示元件的。
- 代碼分析器, 把可用的代碼部分進行掃描,列出代碼相關資料,比如用了多少類,多少物件,多少變數,多少全域變數等等
- 代碼清理器,分析器的加強,清理不用的變數,不用的物件和,不用的函數等。
- 自動完成,一些 IDE 可以分析已經存在的變化和函數,以後在不斷的打字中可以智慧的自動完成。
- 代碼追蹤,比如說某段代碼被執行了幾次,程式報錯時候,函數被執行的順序,測試程式時候的代碼覆蓋率等等
- 虛擬執行,JavaScript 代碼在一個保護區域內或環境執行,代碼可以返回值,但不能影響非虛擬環境內的代碼執行。比如說,代碼裡面有全域變數,但是虛擬執行後這個全域變數只在虛擬環境內,非虛擬環境的沒有這個全域變數。
- 結構符合程式師閱讀習慣
- 文件大小相對更小
- JavaScript 可以直接使用
- 在非 JavaScript 的腳步語言中,轉化成資料結構更容易
- 學習曲線很短