小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

過去十年,編程語言領(lǐng)域有什么重要進展?

 zhuxrgf 2016-08-19
過去十年,編程語言領(lǐng)域有什么重要進展?

十年來,盡管軟件行業(yè)發(fā)展迅速,熱門編程語言的發(fā)展似乎卻成了例外,始終未有太大改變。不過事實并不盡然,編程語言的真正變化在于:為了競爭存活,前十大熱門編程語言都借鑒了其他語言的功能,作為新功能引入。究竟哪幾方面變化明顯?

本文轉(zhuǎn)自知乎,已獲作者授權(quán)

如果把當前TIOBE編程語言排行榜的前十拿出來,與十年前的前十做以比對,就會發(fā)現(xiàn)這兩份名單完全相同!

唯一的不同在于:其中Visual Basic、PHP和Perl與同為十大熱門卻更現(xiàn)代的C#、Python和JavaScript交換了位置。在這十年間Objective-C確曾進入過十大熱門語言,甚至還攀升到了前三的位置,不過在蘋果宣布用Swift代替Objective-C之后,它便很快銷聲匿跡了。

根據(jù)這些情況,我們可以得出結(jié)論:編程語言并無實質(zhì)性變化,而且未來十年也不會出現(xiàn)什么新的大型編程語言。

過去十年,編程語言領(lǐng)域有什么重要進展?

編程語言排行榜2016年8月 TOP 20 榜單

不過事實并不盡然,編程語言的真正變化在于:為了競爭存活,前十大熱門編程語言都借鑒了其他語言的功能,作為新功能引入。由于十大熱門語言的代碼庫都很龐大,使用者更愿意在該語言中實現(xiàn)變更,而不是換用新的編程語言。 編程語言內(nèi)核是萬變不離其宗。我個人看法是以下幾個方面的變化比較明顯

語言本身

工業(yè)標準

網(wǎng)頁標準有 W3C 控制,尤其是瀏覽器的開發(fā),所有主流的瀏覽器都會自覺符合這個組織的標準,當然這些開發(fā)商本身就是這個組織的成員。所以新的 HTML5、CSS3、ES6 JavaScript 的新特性得到順利推動,讓大部分主流瀏覽器都支持它,W3C 功不可沒。

PHP 有 PHPFIG 組織,雖然不是強制性的,但是很多新的框架和庫都自覺遵守這個組織的編程標準。

Java、C 語言都有各自的工業(yè)標準準則,來維護各自工業(yè)標準。

工業(yè)標準其實不是強制性的,雖然很多程序員在自己工作上不遵守這些工業(yè)標準,但是要推出新的模塊的話,不遵守這些工業(yè)標準的模塊,是沒有人會去使用的。如今,是不是面向標準編程,這是體現(xiàn)一個程序員是否專業(yè)、一個模塊是不是專業(yè)模塊的一個重要指標。

第三方模塊走紅

各種語言的框架和庫,可能比自己的語言還出名,比如 CSS 的 Bootstrap、JavaScript 的 jQuery;一個好的框架和庫甚至可以推動這個語言的發(fā)展,比如 PHP 的 Laravel 框架、JavaScript 的 jQuery。

模塊化的發(fā)展,大大加快了開發(fā)的速度。很多人也愿意開發(fā)各種框架和模塊,不但可以鍛煉自己的開發(fā)技能,也是一種展示自己的能力。

過去,程序員要成名,要開發(fā)出有用的軟件,比如求伯君開發(fā)出了 WPS,牛;張小龍開發(fā)出了 Foxmail,牛。

現(xiàn)在,程序員要成名,可以開發(fā)出一個大家都會用的框架和模塊。比如 Evan You 開發(fā)的 Vue.js,玉伯開發(fā)的 SeaJs。

模塊化編程和依賴管理

在 2010 年前,依賴管理工具只是個很時髦的概念,大家都習(xí)慣到庫的官方網(wǎng)站下載庫后手動導(dǎo)入到項目中。升級也比較麻煩。所以,程序員一般是下載一兩個必要的庫,其他的庫都自己手寫完成。

如今,依賴管理工具已經(jīng)是必備的了,大家不再手動導(dǎo)入庫了;能找到第三方模塊的功能,就不再自己編寫了,全部用工具導(dǎo)入項目;自己編寫的程序代碼,能模塊化的代碼都模塊化,甚至是獨立出來,網(wǎng)上開源,然后使用依賴管理工具進行管理導(dǎo)入到自己的項目中。

這樣做的優(yōu)點很明顯:

  • 代碼量減少;

  • 加快開發(fā)速度;

  • 高度解耦;

  • 定位 bug 容易,改動影響??;

  • 寫單元測試容易。

如今大家更加愿意編寫小模塊,而不是重復(fù)造輪子了。

框架使用

現(xiàn)在一般會先選一個合適的框架,再開始編程,而不是所有功能完全靠自己從頭開始編寫。

  • JavaScript 的框架多了,如Vue、React、Backbone、AngularJs 等;

  • CSS 有 Bootstrap、Fundation 等;

  • PHP 有 Laravel、CakePHP 等;

  • C#有 MVC;

  • Java 有 Spring+Hibernate+struts。

框架要先選好,模塊在需要的時候慢慢加就行了。

測試代碼

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

如今的代碼,如果沒有單元測試部分,這個工程就不能算完結(jié)。甚至是,測試驅(qū)動開發(fā)已經(jīng)成為主流,先寫測試代碼,然后再開發(fā)。

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

跨設(shè)備,跨平臺

Java 提出的跨平臺,一次編譯到處運行的夢想,其實至今未很好實現(xiàn)。但是,如今跨設(shè)備、跨平臺編程趨勢是越來越明顯了。

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

跨平臺,出自于Java 的一個概念,如今已經(jīng)普及了,桌面、手機、服務(wù)器、瀏覽器、嵌入式都能看到 JavaScript 的身影,這大大歸功于 JavaScript 標準化的推廣??缙脚_過去是指一次編譯到處運行,如今是指只要這個平臺支持這個語言或標準,就能用。如今的跨平臺編程,更講究特性檢查這個功能,如果你的平臺沒有這個特性,那么就關(guān)閉特性檢查功能,但其他功能還可以繼續(xù)使用。

今后,各種設(shè)備層出不窮,VR 頭盔、AR 眼鏡、巨型屏幕、物聯(lián)網(wǎng)等,跨平臺會有進一步的發(fā)展。

工程方面

工具化

編程語言工具化如今非常突出了,凡是工具能完成的事情,絕對不手工完成。從以下幾個方面都可以找到相應(yīng)工具,幫助開發(fā)者管理代碼質(zhì)量。

  • 代碼風(fēng)格檢查;

  • 工業(yè)標準檢查;

  • 代碼整理;

  • 代碼復(fù)雜度檢查;

  • 單元測試覆蓋率檢查;

  • 依賴管理;

  • 壓縮代碼;

  • 重復(fù)代碼檢查;

  • 無用代碼檢查。

工程化

工程化是近年來最突出的一個發(fā)展趨勢,過去只是選擇性的,現(xiàn)在是必須的。工程化是以工具化為基礎(chǔ)的,沒有工具,那么工程化也無從談起。工程的核心就是流程自動化,又稱為構(gòu)建,這些包括了:代碼質(zhì)量檢測、代碼壓縮、代碼合并、代碼優(yōu)化、代碼編譯、單元測試等部分。構(gòu)建就是把這些部分以工作流程的方式組合起來,然后用一個命令行運行整個流程。它有點像批處理,但是是程序開發(fā)中使用的特殊批處理。

網(wǎng)頁編程現(xiàn)在又流行“實時編程”,就是當你在保存代碼的時候,以上的構(gòu)建流程工作完成后會自動刷新瀏覽器,保證新代碼效果立刻反映在瀏覽器上。現(xiàn)在,在 GitHub 項目庫中找軟件,首先查看是否有工程文件,看看它的構(gòu)建流程是什么,就知道這個項目的專業(yè)程度和項目質(zhì)量了。如果沒有配置一個工程化的流程系統(tǒng),都不好意思說自己在做軟件工程。

自動化

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

持續(xù)集成是全自動化的一個終極體現(xiàn),主要流程是:版本控制庫—構(gòu)建—測試—報告。持續(xù)集成有點像 Windows 的定時任務(wù),但它是程序開發(fā)專用的定時任務(wù)。

持續(xù)集成的特點就是全自動,一個項目一次配置好,要求不變的話,就不用管了;然后開發(fā)者不斷把代碼加入到版本控制庫里就可以了,每當庫有新代碼時候,持續(xù)集成就會下載代碼進行構(gòu)建;當它完成構(gòu)建和測試后,如果測試沒有通過,就會返回報告,然后根據(jù)報告結(jié)果修改代碼。

所以每次往版本庫添加新代碼,持續(xù)集成就會全自動地幫你構(gòu)建和測試代碼,盡快通知代碼的問題。這樣,程序員就可以更加集中精力編寫功能代碼和測試代碼,而不用擔心新代碼是否會影響過去的代碼。

在多人一起開發(fā)的時候,持續(xù)集成更有用,誰上傳的代碼沒有通過測試,能馬上知道。這樣可以保證多人項目的代碼順利合并,體現(xiàn)“持續(xù)集成”的功效。

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

工具化、工程化以及自動化的關(guān)系很有意思,前者是后者的基礎(chǔ),而后者又極大推動了前者的發(fā)展。它們相互積極作用,相互推動了對方的發(fā)展,這形成了一個很好的良性循環(huán)。

其他方面

版本控制,Git、GitHub

版本控制在編程界中的地位是越來越重要了。在編程界中有個說法:沒有版本控制的項目,就等于沒有這個項目。

版本控制的工具過去有 SVN,如今是 Git 。 Git 很強大,用的人也是越來越多,它和 GitHub 共同對編程界的積極影響和積極推動,這是令人無法忽視的。比如幾乎所有的依賴管理工具的庫下載源,都是和 GitHub 綁定的, 就這一點來說,GitHub 的重要性在 IT 界就不可估量。

GitHub 和 Git 的方便管理、上傳、查看、統(tǒng)計、bug 報告等功能更是極大地推動了程序員之間的合作;GitHub 上的開源更是改變了開源軟件對世界的影響力。

GitHub 不是 Git 的全部,Git 也不是版本控制的全部。本質(zhì)上來說,GitHub 只是一個網(wǎng)站而已;但 GitHub 確實又是這個編程世界不可缺少的一個重要模塊,已經(jīng)成為了一個不可或缺的組成部分。甚至, GitHub 已經(jīng)跳出了編程界,成為了一個世界級的不可或缺的服務(wù)平臺。

然而 GitHub 是 2008 年建立的,真正開始流行是在 2012 年。在 2015 年, Google 宣布關(guān)閉自己的 Google Code,可見 GitHub 的影響力,以及其在業(yè)界的重要程度了。

生態(tài)圈意識

生態(tài)圈意識在業(yè)界是越來越強了,它應(yīng)該和編程工具化和工程化有極大的關(guān)系。一門語言、框架或者庫出現(xiàn)后,人們應(yīng)用它們,不只是因為它們本身的強大,更是因為它們背后的生態(tài)圈。

舉個例子,人們選擇一個 JavaScript 的框架,是選 React 還是選 Ember.js,更多是看支持它們的生態(tài)圈如何。React 是有 Facebook 支持的,有很多程序員為它開發(fā)相關(guān)工具和庫以及有很多文檔教程,這樣 React 的生態(tài)圈就很大,會讓更多人愿意選擇 React 作為第一開發(fā)框架。而 Ember.js 相對來說生態(tài)圈小,選擇它的人可能就不會很多。

選擇語言也一樣。選用 JavaScript 編寫爬蟲,還是選 PHP 或者 Python?更多的是看它們的生態(tài)系統(tǒng)了,Python 的爬蟲庫強大且豐富,所以更多人選用 Python 編寫爬蟲。

一門新的語言是否成熟,看的就是它的生態(tài)圈,比如是否有測試框架、 MVC 框架,是否有成熟的時間庫、數(shù)據(jù)庫 SDK 等,這些都是其必要的生態(tài)圈組成部分。

WEB 技術(shù)的桌面化和 JavaScript 的全棧化

JavaScript 近些年發(fā)展火熱,逐漸印證了Atwood定律:凡是可以用 JavaScript 實現(xiàn)的,最終都會用 JavaScript 實現(xiàn)。

  • Node.js 的出現(xiàn),奠定了JavaScript 走出瀏覽器,走向了服務(wù)器端;

  • NW 的出現(xiàn)和 electron 正式版發(fā)布,JavaScript 走向了桌面;

  • MongoDB 的出現(xiàn),JavaScript 走向了數(shù)據(jù)庫;

  • Tessel 的出現(xiàn),走向了硬件和物聯(lián)網(wǎng)。

如今一個全棧系統(tǒng),從前端到數(shù)據(jù)庫,可以完全使用 JavaScript 一種語言。還有很多人正在致力于把 JavaScript 推向更多的領(lǐng)域中。

而 Web 技術(shù)(html+css+JavaScript)由于 NW 和 Electron 的出現(xiàn),已經(jīng)可以編寫桌面程序了。正是由于 JS 的優(yōu)秀模塊很多,以及 HTML+CSS 的界面容易編寫和掌控,糾錯工具豐富,很多人愿意用 Web技術(shù)進行開發(fā)?,F(xiàn)在比較火的桌面工具有 VS-Code 編輯器和 Atom 編輯器。

由于 Web 技術(shù)的便利性,Web 技術(shù)涉及的領(lǐng)域也就越來越多,再也不是瀏覽器的專利了。

Web API 的全面發(fā)展

Web API 雖然歷史悠久,但是真正使其推廣流行的應(yīng)該是 Twitter,而后移動設(shè)備的普及使其得到更大發(fā)展和普及。移動設(shè)備如果沒有 Web API 基本就不能工作。Web API 的普及,也使得網(wǎng)絡(luò)服務(wù)之間相互連通,形成一個更大的服務(wù)網(wǎng)絡(luò)??傊缃竦?Web API 已經(jīng)是不可或缺的存在了。

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

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

  • 容易編寫,就是一個函數(shù),無需界面;

  • 語言無關(guān)性,無論 Web API 是哪一門語言編寫的,幾乎任何語言都能調(diào)用;

  • 訪問性好,只要網(wǎng)絡(luò)能訪問,Web API 就可以用。

語言之間的相互借鑒

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

  • PHP 5.0 后支持了類,5.4 后支持了 Trait,5.5 后支持了生成器(Generator);

  • JavaScript ES 6 支持了箭頭匿名函數(shù)、生成器(Generator)、類(不是 Prototype 的類);

  • C# 和 Java 相互借鑒;

  • Coffee Script 借鑒 Python 和 Ruby。

與其說是相互借鑒,不如說隨著語言的發(fā)展,一些語言概念逐漸成為了標配,如果沒有,就不算是完整的語言了,比如說類、匿名函數(shù)、常用數(shù)據(jù)結(jié)構(gòu)等都成為了標配。

語言解析器的工具化

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

獨立出來的解析器,可以用來編寫以下和語言有關(guān)的工具,這些工具都是用來優(yōu)化代碼質(zhì)量、提高編碼體驗的。

  • 語法檢查,JavaScript 的 JSHint 用的就是 JavaScript 的一個解釋器,被 JavaScript 重新解釋一遍,把可能有問題的地方標記出來通知程序員,程序員可修改避免潛在錯誤。

  • 代碼最小化,代碼重寫的一種形式,JavaScript 的最小化項目(比如 Urglify),是把語法正確讀取后,進行最小化壓縮。把單詞變量轉(zhuǎn)換成單字母變量,甚至是 if else 轉(zhuǎn)換成?: 形式。

  • 語法擾亂器,就是代碼重寫的一種形式,讓代碼無法閱讀,保護代碼。

  • 語法整理器,代碼重新的一個形式,把無法閱讀的代碼轉(zhuǎn)換成可閱讀的代碼,比如 beautifier。

  • 語法高亮,一般用于代碼編輯器和代碼顯示組件的。

  • 代碼分析器,把可用的代碼部分進行掃描,列出代碼相關(guān)數(shù)據(jù),比如用了多少類、多少對象、多少變量、多少全局變量等。

  • 代碼清理器,分析器的加強,清理不用的變量、不用的對象、不用的函數(shù)等。

  • 自動完成,一些 IDE 可以分析已經(jīng)存在的變化和函數(shù),以后在不斷的打字中可以智能自動完成。

  • 代碼追蹤,比如說某段代碼被執(zhí)行了幾次、程序報錯時候函數(shù)被執(zhí)行的順序、測試程序時候的代碼覆蓋率等。

  • 虛擬執(zhí)行,JavaScript 代碼在一個保護區(qū)域內(nèi)或環(huán)境執(zhí)行,代碼可以返回值,但不能影響非虛擬環(huán)境內(nèi)的代碼執(zhí)行。比如說,代碼里面有全局變量,但是虛擬執(zhí)行后這個全局變量只在虛擬環(huán)境內(nèi),非虛擬環(huán)境里沒有這個全局變量。

數(shù)據(jù)交換語言的發(fā)展

數(shù)據(jù)交換語言發(fā)展,總體來說就是從 XML 主流逐漸發(fā)展到 JSON 主流的過程。雖然 XML 現(xiàn)在應(yīng)用還是非常廣泛,但是由于其復(fù)雜性和標簽占用空間大,逐漸被輕量級的 JSON 給代替了。另外,JSON 與 JavaScript 天然兼容,無需解析,直接使用,所以在很多網(wǎng)絡(luò)技術(shù)中 JSON 是優(yōu)先使用的。

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

JSON 的閱讀方式更符合程序員的閱讀習(xí)慣,格式化后的結(jié)構(gòu)一目了然,容易理解。

JSON 有如下優(yōu)點:

  • 結(jié)構(gòu)符合程序員閱讀習(xí)慣;

  • 文件大小相對更??;

  • JavaScript 可以直接使用;

  • 在非 JavaScript 的腳步語言中,轉(zhuǎn)化成數(shù)據(jù)結(jié)構(gòu)更容易;

  • 學(xué)習(xí)曲線很短。

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

總結(jié)

以上所列的現(xiàn)象和趨勢,其實都是相輔相成的,最終行成了一種良性循環(huán)。這些現(xiàn)象和趨勢都會繼續(xù)發(fā)展下去,并成為以后新趨勢的基礎(chǔ)。這些特點非常重要,應(yīng)該成為每個程序員都應(yīng)該知道的知識。

一些建議

我在讀編程專業(yè)的時候,大學(xué)沒有教過這些知識,甚至在工作中也沒有了解趨勢的要求。大學(xué)主要學(xué)編寫代碼,能編譯通過、出正確結(jié)果就可以了。程序員在工作中,要求代碼能用,沒有明顯 bug 就行。

然而,在我個人工作實踐中,逐漸體會到這些趨勢的重要性,編寫可維護的高質(zhì)量代碼可以大大減少自己在維護中的難度和壓力。每一個準備或者想要成為合格的開發(fā)人員的人,都應(yīng)該熟練掌握這些知識和技能,如果大學(xué)沒有教過、以前沒有想過,一定要想辦法自己去學(xué)習(xí)和提高。

喜歡我們的會點贊,愛我們的會分享!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多