過去十年,編程語言領域的重要進展

摘要:十年來,儘管軟件行業發展迅速,熱門編程語言的發展彷佛卻成了例外,始終未有太大改變。不過事實並不盡然,編程語言的真正變化在於:爲了競爭存活,前十大熱門編程語言都借鑑了其餘語言的功能,做爲新功能引入。究竟哪幾方面變化明顯?程序員

若是把當前TIOBE編程語言排行榜的前十拿出來,與十年前的前十作以比對,就會發現這兩份名單徹底相同!數據庫

惟一的不一樣在於:其中Visual Basic、PHP和Perl與同爲十大熱門卻更現代的C#、Python和JavaScript交換了位置。在這十年間Objective-C確曾進入過十大熱門語言,甚至還攀升到了前三的位置,不過在蘋果宣佈用Swift代替Objective-C以後,它便很快銷聲匿跡了。編程

根據這些狀況,咱們能夠得出結論:編程語言並沒有實質性變化,並且將來十年也不會出現什麼新的大型編程語言。 瀏覽器

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

不過事實並不盡然,編程語言的真正變化在於:爲了競爭存活,前十大熱門編程語言都借鑑了其餘語言的功能,做爲新功能引入。因爲十大熱門語言的代碼庫都很龐大,使用者更願意在該語言中實現變動,而不是換用新的編程語言。 編程語言內核是萬變不離其宗。我我的見解是如下幾個方面的變化比較明顯網絡

工業標準框架

網頁標準有 W3C 控制,尤爲是瀏覽器的開發,全部主流的瀏覽器都會自覺符合這個組織的標準,固然這些開發商自己就是這個組織的成員。因此新的 HTML五、 CSS三、ES6 JavaScript 的新特性獲得順利推進,讓大部分主流瀏覽器都支持它,W3C 功不可沒。編程語言

PHP 有 PHPFIG 組織,雖然不是強制性的,可是不少新的框架和庫都自覺遵照這個組織的編程標準。模塊化

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

工業標準其實不是強制性的,雖然不少程序員在本身工做上不遵照這些工業標準,可是要推出新的模塊的話,不遵照這些工業標準的模塊,是沒有人會去使用的。現在,是否是面向標準編程,這是體現一個程序員是否專業、一個模塊是否是專業模塊的一個重要指標。

第三方模塊走紅

各類語言的框架和庫,可能比本身的語言還出名,好比 CSS 的 Bootstrap、JavaScript 的 jQuery;一個好的框架和庫甚至能夠推進這個語言的發展,好比 PHP 的 Laravel 框架、JavaScript 的 jQuery。

模塊化的發展,大大加快了開發的速度。不少人也願意開發各類框架和模塊,不但能夠鍛鍊本身的開發技能,也是一種展現本身的能力。

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

如今,程序員要成名,能夠開發出一個你們都會用的框架和模塊。好比 Evan You 開發的 Vue.js,玉伯開發的 SeaJs。

模塊化編程和依賴管理

2010 年前,依賴管理工具只是個很時髦的概念,你們都習慣到庫的官方網站下載庫後手動導入到項目中。升級也比較麻煩。因此,程序員通常是下載一兩個必要的庫,其餘的庫都本身手寫完成。

現在,依賴管理工具已是必備的了,你們再也不手動導入庫了;能找到第三方模塊的功能,就再也不本身編寫了,所有用工具導入項目;本身編寫的程序代碼,能模塊化的代碼都模塊化,甚至是獨立出來,網上開源,而後使用依賴管理工具進行管理導入到本身的項目中。

框架使用

如今通常會先選一個合適的框架,再開始編程,而不是全部功能徹底靠本身從頭開始編寫。

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

測試代碼

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

現在的代碼,若是沒有單元測試部分,這個工程就不能算完結。甚至是,測試驅動開發已經成爲主流,先寫測試代碼,而後再開發。

測試代碼的發展不只僅是單元測試這部分。單元測試、集成測試、功能測試、性能測試、壓力測試等,都在開發過程當中佔了重要的位置。之前測試都是由專門的測試員進行人工測試,或者由他們負責測試;現在單元測試和集成測試都是要開發者本身編寫。

跨設備,跨平臺

Java 提出的跨平臺,一次編譯處處運行的夢想,其實至今未很好實現。可是,現在跨設備、跨平臺編程趨勢是愈來愈明顯了。

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

跨平臺,出自於Java 的一個概念,現在已經普及了,桌面、手機、服務器、瀏覽器、嵌入式都能看到 JavaScript 的身影,這大大歸功於 JavaScript 標準化的推廣。跨平臺過去是指一次編譯處處運行,現在是指只要這個平臺支持這個語言或標準,就能用。現在的跨平臺編程,更講究特性檢查這個功能,若是你的平臺沒有這個特性,那麼就關閉特性檢查功能,但其餘功能還能夠繼續使用。

工具化

編程語言工具化現在很是突出了,凡是工具能完成的事情,絕對不手工完成。從如下幾個方面均可以找到相應工具,幫助開發者管理代碼質量。

工程化

工程化是近年來最突出的一個發展趨勢,過去只是選擇性的,如今是必須的。工程化是以工具化爲基礎的,沒有工具,那麼工程化也無從談起。工程的核心就是流程自動化,又稱爲構建,這些包括了:代碼質量檢測、代碼壓縮、代碼合併、代碼優化、代碼編譯、單元測試等部分。構建就是把這些部分以工做流程的方式組合起來,而後用一個命令行運行整個流程。它有點像批處理,可是是程序開發中使用的特殊批處理。

網頁編程如今又流行「實時編程」,就是當你在保存代碼的時候,以上的構建流程工做完成後會自動刷新瀏覽器,保證新代碼效果馬上反映在瀏覽器上。如今,在 GitHub 項目庫中找軟件,首先查看是否有工程文件,看看它的構建流程是什麼,就知道這個項目的專業程度和項目質量了。若是沒有配置一個工程化的流程系統,都很差意思說本身在作軟件工程。

自動化

自動化是以工程化爲基礎的,工程化自己就是一種流程自動化,而自動化又在工程化的過程當中更進一步自動化。

持續集成是全自動化的一個終極體現,主要流程是:版本控制庫—構建—測試—報告。持續集成有點像 Windows 的定時任務,但它是程序開發專用的定時任務。

持續集成的特色就是全自動,一個項目一次配置好,要求不變的話,就不用管了;而後開發者不斷把代碼加入到版本控制庫裏就能夠了,每當庫有新代碼時候,持續集成就會下載代碼進行構建;當它完成構建和測試後,若是測試沒有經過,就會返回報告,而後根據報告結果修改代碼。

因此每次往版本庫添加新代碼,持續集成就會全自動地幫你構建和測試代碼,儘快通知代碼的問題。這樣,程序員就能夠更加集中精力編寫功能代碼和測試代碼,而不用擔憂新代碼是否會影響過去的代碼。

在多人一塊兒開發的時候,持續集成更有用,誰上傳的代碼沒有經過測試,能立刻知道。這樣能夠保證多人項目的代碼順利合併,體現「持續集成」的功效。

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

工具化、工程化以及自動化的關係頗有意思,前者是後者的基礎,然後者又極大推進了前者的發展。它們相互積極做用,相互推進了對方的發展,這造成了一個很好的良性循環。

生態圈意識

生態圈意識在業界是愈來愈強了,它應該和編程工具化和工程化有極大的關係。一門語言、框架或者庫出現後,人們應用它們,不僅是由於它們自己的強大,更是由於它們背後的生態圈。

選擇語言也同樣。選用 JavaScript 編寫爬蟲,仍是選 PHP 或者 Python?更多的是看它們的生態系統了,Python 的爬蟲庫強大且豐富,因此更多人選用 Python 編寫爬蟲。

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

Web API 的全面發展

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

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

正是以上這些緣由,能夠說在編程界裏,使用 JSON 做爲數據交換語言是大勢所趨了。

總結

以上所列的現象和趨勢,其實都是相輔相成的,最終行成了一種良性循環。這些現象和趨勢都會繼續發展下去,併成爲之後新趨勢的基礎。這些特色很是重要,應該成爲每一個程序員都應該知道的知識。

相關文章
相關標籤/搜索