歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 十年來,編程領域有什麼重要進展?

十年來,編程領域有什麼重要進展?

日期:2017/3/1 9:09:51   编辑:Linux編程

編程語言層出不窮,然而內核是萬變不離其宗。我個人看法覺得是以下幾個方面的變化比較明顯。

語言本身:

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 容易,改動影響小
  • 寫單元測試容易

如今大家更加願意寫小模塊,而不是重復造輪子了。

4. 框架使用

更願意先選一個合適的框架,再開始編程,而不是所有功能自己從頭開始寫了.

  • JavaScript 的框架多了,Vue,React, Backbone,AngularJs 等;
  • CSS 有 Bootstrap,Fundation 等;
  • PHP 有 Laravel,CakePHP 等
  • C#有 MVC
  • Java 有 Spring+Hibernate+struts

框架要先選好,模塊的話,等需要慢慢加就行了。

5. 測試代碼

2006 年,單元測試在開發過程中,重要性不是很大,可有可無,程序完成,功能能用就行。

如今的代碼,沒有單元測試部分,這個工程就不能算完結。甚至是,測試驅動開發已經成為主流,先寫測試代碼,然後開發。

測試代碼的發展有不單單是單元測試部分。單元測試,集成測試,功能測試,性能測試,壓力測試等等,都在開發過程中占了極大的位置。以前測試都是由專門的測試員進行人工測試,或者他們負責測試;如今單元測試和集成測試都是要開發者自己寫。

6.跨設備,跨平台

Java 提出的跨平台,一次編譯到處運行的夢想,其實至今未很好的實現。但是如今這個跨設備,跨平台編程趨勢卻越來越明顯了。

跨設備,主要是指桌面和手機,尤其是針對顯示器的最佳實踐是層出不窮,如今是響應式成為了主流。

跨平台,出自於 Java 的一個概念,如今已經算普及了,尤其是 JavaScript,桌面,手機,服務器,浏覽器,嵌入式都能看到 JavaScript 的身影,這大大歸功於 JavaScript 標准化的推廣。跨平台過去是說一次編譯到處運行;如今是只要這個平台支持這個語言或標准,就能用。如今的跨平台編程,更講究特性檢查這個功能,如果你這個 平台沒有這個特性,那麼就關閉這個有這個特性的功能,但其他功能還可以繼續使用。

今後,各種設備層出不窮,VR 頭盔,AR 眼鏡,巨型屏幕,物聯網等等,跨平台會有進一步的發展。

工程方面的:

1.工具化

我覺得工具化非常突出了,凡是能工具完成的事情,絕對不手工完成。以下幾個方面都是可以找到相應工具,幫助開發者管理代碼質量

  • 代碼風格檢查
  • 工業標准檢查
  • 代碼整理
  • 代碼復雜度檢查
  • 單元測試覆蓋率檢查
  • 依賴管理
  • 壓縮代碼
  • 重復代碼檢查
  • 無用代碼檢查

等等,

2. 工程化

工程化也是近年來最最突出的一個發展趨勢,過去只是選擇性的,現在是必須的。

工程化是以工具化為基礎的,沒有工具,那麼工程化也無從談起。

工程的核心就是流程自動化,又稱之為構建,這些包括了:代碼質量檢測,代碼壓縮,代碼合並,代碼優化,代碼編譯,單元測試等等部分。構建就是把這些以工作流程的方式組合起來,然後用一個命令行運行這整個流程。它有點像批處理,但是是程序開發中使用的特殊批處理

在網頁編程的過程中,現在又流行“實時編程”,就是當你在保存代碼的時候,以上的構建流程就開始工作完成後自動刷新浏覽器,保證新代碼效果立刻反應在浏覽器上。

現在,你去 GitHub 的項目庫中找軟件,首先翻看,是否有工程文件,看看它的構建流程是什麼,就知道這個項目的專業程度和項目的質量了

而自己,沒有一個配置一個工程化的流程系統,都不好意思說自己在做軟件工程。

3. 自動化

自動化是以工程化為基礎的,工程化本身就是一種流程自動化。而自動化有在工程化的過程中更進一步的自動化。

持續集成就是全自動化的一個終極體現。他的主要流程是:版本控制庫 ->構建 ->測試 ->報告.

持續集成有點像 Windows 的定時任務,但是它是程序開發專用的定時任務。

持續集成的特點就是全自動,一個項目一次配置好了後,要求不變的話,就不用管了;然後開發者不斷把代碼加入到版本控制庫裡就行了,每當庫有新代碼時 候,持續集成就會下載代碼進行構建;當它完成構建和測試後,如果測試沒有通過,就會報告給你,然後你根據報告結果進行修改代碼。所以你每次往版本庫加的新 代碼時候,持續集成就會全自動的幫你構建和測試代碼,盡快的通知你代碼的問題。這樣程序員就可以更加集中精力編寫功能代碼和測試代碼,而不用擔心新代碼是 否會影響到過去的代碼了。

持續集成在多人一起開發的時候,更是有用,誰上傳的代碼沒通過測試,能馬上知道。這樣保證多人項目在代碼順利合並,體現“持續集成”的功效。

另外還有個持續部署,其實就是持續集成在測試成功後部署上產品服務器上的流程。如今有些網站一天就要部署幾十次,有了持續部署後,部署多少次都毫無壓力。

工具化,工程化,自動化的關系挺有意思,前者是後者的基礎,而後者卻極大推動了前者的發展。它們是相互積極作用,相互推動了對方的發展,形成了一個很好的良性循環

其他方面:

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 的出現,走向了硬件和物聯網

如今一個全棧系統,從前端到數據庫,可以完全使用 JavaScript 一種語言。還有很多人正在致力於把 JavaScript 推向更多的領域中。

而 Web 技術(html+css+JavaScript)由於 NW 和 Electron 的出現,已經可以編寫桌面程序了。正是由於 JS 的優秀模塊很多,以及 HTML+CSS 的界面容易編寫和掌控,糾錯工具豐富,很多人願意用 WEB 技術進行開發。現在比較火的桌面工具有 VS-Code 編輯器和 Atom 編輯器。

總結一下:由於 WEB 技術的便利性,WEB 技術涉及的領域也就越來越多,再也不是浏覽器的專利了。

2. Web API 的全面發展

Web API 雖然歷史悠久,但是真正使其推廣流行的應該是 Twitter,而後移動設備的普及使其得到更大發展和普及。移動設備如果沒有 Web API 基本就不能工作了。Web API 的普及,也使得網絡服務之間相互連通,形成一個更大的服務網絡。總之,如今的 Web API 已經是不可或缺的存在了。

Web API 更多的是一種服務,或是一種數據交換模式。只要語言帶有 HTTP 的網絡訪問功能,就都能使用。提供 Web API 的公司,發布 Web API 後,一般也會同時發布一些常用語言的 SDK,方便相應語言開發人員快速上手;但是如果語言比較小眾,沒有提供相應的 SDK 也沒有關系,編寫一段 HTTP 的請求,也是可以交換數據。

從編程的角度來歸納一下 Web API 特點就是:

  • 容易編寫,就是個函數,無需界面
  • 語言無關性,無論 Web API 是個語言編寫,幾乎任何語言都能調用
  • 訪問性好,無論在哪,只要網絡能訪問,Web API 就可以用。

3. 語言之間的相互借鑒

語言之間的相互借鑒也越來越明顯了,比如:

  • PHP5.0 後支持了類,5.4 後支持了 Trait,5.5 後支持了生成器(Generator)
  • JavaScript ES6 支持了箭頭匿名函數,生成器(Generator),類(不是 Prototype 的類)
  • C# 和 Java 相互借鑒
  • Coffee Script 借鑒 Python 和 Ruby

與其說是相互借鑒,不如說隨著語言的發展,一些語言概念逐漸成為了標配,如果沒有,就算是一個不完整的語言了。比如說類,匿名函數,常用數據結構等都成為了標配。

4. 語言解析器的工具化

語言解析器(Parser)在過去自是作為編譯器的一部分存在的。如今,它已經獨立出來作為一個模塊或者工具來使用了,這個對於一個語言的生態有著很大的意義,促進了語言生態圈的良好發展。

獨立出來的解析器,可以用來編寫以下和語言有關的工具,這些工具都是用來優化代碼質量的,提高編碼體驗的。

  • 語法檢查,JavaScript 的 JSHint 用的就是 JavaScript 的一個解釋器,被 JavaScript 重新解釋一遍,把可能有問題的地方標記出來通知程序員,程序員可修改避免潛在錯誤。
  • 代碼最小化,代碼重寫的一種形式,JavaScript 的最小化項目(比如 Urglify),是把語法正確讀取後,進行最小化壓縮。把單詞變量轉換成單字母變量。甚至是 if else 轉換成?: 形式。
  • 語法擾亂器,就是代碼重寫的一種形式,讓代碼無法閱讀,保護代碼。
  • 語法整理器,代碼重新的一個形式,把無法閱讀的代碼,轉換成可閱讀的代碼,比如 beautifier。
  • 語法高亮,一般用於代碼編輯器和代碼顯示組件的。
  • 代碼分析器, 把可用的代碼部分進行掃描,列出代碼相關數據,比如用了多少類,多少對象,多少變量,多少全局變量等等
  • 代碼清理器,分析器的加強,清理不用的變量,不用的對象和,不用的函數等。
  • 自動完成,一些 IDE 可以分析已經存在的變化和函數,以後在不斷的打字中可以智能的自動完成。
  • 代碼追蹤,比如說某段代碼被執行了幾次,程序報錯時候,函數被執行的順序,測試程序時候的代碼覆蓋率等等
  • 虛擬執行,JavaScript 代碼在一個保護區域內或環境執行,代碼可以返回值,但不能影響非虛擬環境內的代碼執行。比如說,代碼裡面有全局變量,但是虛擬執行後這個全局變量只在虛擬環境內,非虛擬環境的沒有這個全局變量。

5. 數據交換語言的發展

數據交換語言發展總體來說就是從 XML 主流逐漸發展到 JSON 主流的過程. 雖然 XML 現在應用還是非常廣泛,但是由於其復雜和標簽占用空間大,逐漸被輕量級的 JSON 給代替了。尤其 JSON 與 JavaScript 天然兼容,無需解析,直接使用。所以在很多網絡技術中 JSON 是優先使用的。

而如今很多配置文件也是用 JSON 實現的,比如 Composer 和 node 的配置文件。

JSON 的閱讀方式更符合程序員的閱讀習慣,格式化後的結構一目了然,容易理解。

JSON 好處:

  • 結構符合程序員閱讀習慣
  • 文件大小相對更小
  • JavaScript 可以直接使用
  • 在非 JavaScript 的腳步語言中,轉化成數據結構更容易
  • 學習曲線很短

正是以上這些原因,使用 JSON 作為數據交換語言可以說在編程界裡,是大勢所趨了。

Copyright © Linux教程網 All Rights Reserved