最近十年,編程領域有什么重要進展?
46 2017-05-23
編程語言層出不窮,然而內核是萬變不離其宗。我個人看法覺得是以下幾個方面的變化比較明顯。
語言本身:
1.工業(yè)標準
網(wǎng)頁標準有w3c控制,尤其是瀏覽器的開發(fā),所有主流的瀏覽器都會自覺符合這個組織的標準,當然這些開發(fā)商本身就是這個組織的成員。所以新的HTML5,CSS3,ES6javascript的新特性的得到順利推動,讓大部分主流瀏覽器都支持它,w3c功不可沒。
PHP有PHPFIG組織,雖然不是強制性的,但是很多新的框架和庫都自覺遵守這個組織的編程標準。
Java,C語言都有各自的工業(yè)標準準則,來維護各自工業(yè)標準。
這個標準其實不是強制性的,雖然很多程序員在自己工作上,不遵守這些工業(yè)標準,但是要推出新的模塊的話,不遵守這些工業(yè)標準的模塊,是沒有人會去使用的。如今是不是面向標準編程,是體現(xiàn)一個程序員是否專業(yè),一個模塊是不是專業(yè)模塊的一個重要指標。
2.第三方模塊走紅
各種語言的框架和庫,可能比自己的語言還出名,比如css的Bootstrap,javascript的jQuery;一個好的框架和庫甚至可以推動這個這個語言的發(fā)展,比如說PHP的Laravel框架,Javascript的jQuery。
模塊化的發(fā)展,大大加快了開發(fā)的速度。很多人也愿意開發(fā)各種框架和模塊,不但可以鍛煉自己的開發(fā)技能,也是一種展示自己的能力。
過去,程序員要成名,要開發(fā)出有用的軟件,比如說求伯君開發(fā)出了wps,牛;張曉龍開發(fā)出了foxmail,牛。
現(xiàn)在,程序員要成名,開發(fā)出一個大家都會用的框架和模塊也行。比如EvanYou開發(fā)的vue.js,玉伯開發(fā)的seajs。
3.模塊化編程和依賴管理
在2010前,依賴管理工具只是個很時髦的概念,大家習慣手動到庫的官方網(wǎng)站上下載后手動導入到項目中。升級也是個麻煩事。所以一般大家也就下載一兩個必要的庫,其他都自己手寫完成。
如今,依賴管理工具已經(jīng)是必備的了,大家不再手動導入庫了;而且是能找到第三方模塊的功能,就不再自己編寫了,統(tǒng)統(tǒng)用工具導入項目;自己編寫的程序代碼,能模塊化的代碼統(tǒng)統(tǒng)模塊化,甚至是獨立出來,網(wǎng)上開源,然后使用依賴管理工具進行管理導入到自己的項目中。
這樣好處也明顯:
代碼量減少
加快開發(fā)速度
高度解耦
定位bug容易,改動影響小
寫單元測試容易
如今大家更加愿意寫小模塊,而不是重復造輪子了。
4.框架使用
更愿意先選一個合適的框架,再開始編程,而不是所有功能自己從頭開始寫了.
javascript的框架多了,vue,react,backbone,angularjs等;
css有bootstrap,fundation等;
PHP有l(wèi)aravel,cakephp等
C#有MVC
Java有spring+hibernate+struts
框架要先選好,模塊的話,等需要慢慢加就行了。
5.測試代碼
2006年,單元測試在開發(fā)過程中,重要性不是很大,可有可無,程序完成,功能能用就行。
如今的代碼,沒有單元測試部分,這個工程就不能算完結。甚至是,測試驅動開發(fā)已經(jīng)成為主流,先寫測試代碼,然后開發(fā)。
測試代碼的發(fā)展有不單單是單元測試部分。單元測試,集成測試,功能測試,性能測試,壓力測試等等,都在開發(fā)過程中占了極大的位置。以前測試都是由專門的測試員進行人工測試,或者他們負責測試;如今單元測試和集成測試都是要開發(fā)者自己寫。
6.跨設備,跨平臺
Java提出的跨平臺,一次編譯到處運行的夢想,其實至今未很好的實現(xiàn)。但是如今這個跨設備,跨平臺編程趨勢卻越來越明顯了。
跨設備,主要是指桌面和手機,尤其是針對顯示器的最佳實踐是層出不窮,如今是響應式成為了主流。
跨平臺,出自于Java的一個概念,如今已經(jīng)算普及了,尤其是JavaScript,桌面,手機,服務器,瀏覽器,嵌入式都能看到javascript的身影,這大大歸功于JavaScript標準化的推廣。跨平臺過去是說一次編譯到處運行;如今是只要這個平臺支持這個語言或標準,就能用。如今的跨平臺編程,更講究特性檢查這個功能,如果你這個平臺沒有這個特性,那么就關閉這個有這個特性的功能,但其他功能還可以繼續(xù)使用。
今后,各種設備層出不窮,VR頭盔,AR眼鏡,巨型屏幕,物聯(lián)網(wǎng)等等,跨平臺會有進一步的發(fā)展。
工程方面的:
1.工具化
我覺得工具化非常突出了,凡是能工具完成的事情,絕對不手工完成。以下幾個方面都是可以找到相應工具,幫助開發(fā)者管理代碼質量
代碼風格檢查
工業(yè)標準檢查
代碼整理
代碼復雜度檢查
單元測試覆蓋率檢查
依賴管理
壓縮代碼
重復代碼檢查
無用代碼檢查
等等。
2.工程化
工程化也是近年來最最突出的一個發(fā)展趨勢,過去只是選擇性的,現(xiàn)在是必須的。
工程化是以工具化為基礎的,沒有工具,那么工程化也無從談起。
工程的核心就是流程自動化,又稱之為構建,這些包括了:代碼質量檢測,代碼壓縮,代碼合并,代碼優(yōu)化,代碼編譯,單元測試等等部分。構建就是把這些以工作流程的方式組合起來,然后用一個命令行運行這整個流程。它有點像批處理,但是是程序開發(fā)中使用的特殊批處理
在網(wǎng)頁編程的過程中,現(xiàn)在又流行“實時編程”,就是當你在保存代碼的時候,以上的構建流程就開始工作完成后自動刷新瀏覽器,保證新代碼效果立刻反應在瀏覽器上。
現(xiàn)在,你去github的項目庫中找軟件,首先翻看,是否有工程文件,看看它的構建流程是什么,就知道這個項目的專業(yè)程度和項目的質量了
而自己,沒有一個配置一個工程化的流程系統(tǒng),都不好意思說自己在做軟件工程。
3.自動化
自動化是以工程化為基礎的,工程化本身就是一種流程自動化。而自動化有在工程化的過程中更進一步的自動化。
持續(xù)集成就是全自動化的一個終極體現(xiàn)。他的主要流程是:版本控制庫->構建->測試->報告.
持續(xù)集成有點像windows的定時任務,但是它是程序開發(fā)專用的定時任務。
持續(xù)集成的特點就是全自動,一個項目一次配置好了后,要求不變的話,就不用管了;然后開發(fā)者不斷把代碼加入到版本控制庫里就行了,每當庫有新代碼時候,持續(xù)集成就會下載代碼進行構建;當它完成構建和測試后,如果測試沒有通過,就會報告給你,然后你根據(jù)報告結果進行修改代碼。所以你每次往版本庫加的新代碼時候,持續(xù)集成就會全自動的幫你構建和測試代碼,盡快的通知你代碼的問題。這樣程序員就可以更加集中精力編寫功能代碼和測試代碼,而不用擔心新代碼是否會影響到過去的代碼了。
持續(xù)集成在多人一起開發(fā)的時候,更是有用,誰上傳的代碼沒通過測試,能馬上知道。這樣保證多人項目在代碼順利合并,體現(xiàn)“持續(xù)集成”的功效。
另外還有個持續(xù)部署,其實就是持續(xù)集成在測試成功后部署上產(chǎn)品服務器上的流程。如今有些網(wǎng)站一天就要部署幾十次,有了持續(xù)部署后,部署多少次都毫無壓力。
工具化,工程化,自動化的關系挺有意思,前者是后者的基礎,而后者卻極大推動了前者的發(fā)展。它們是相互積極作用,相互推動了對方的發(fā)展,形成了一個很好的良性循環(huán)。
其他方面:
1.版本控制,git,github
版本控制在編程界中的地位是越來越重要了。在編程界中有個說法:沒有版本控制的項目,就等于沒有這個項目。
版本控制的工具很多過去有svn,如今git的強大,用的人也是越來越多,而它和github的相同作用下,對編程界的積極影響和積極推動,是令人無法忽視的。比如幾乎所有的依賴管理工具的庫下載源,都是和github綁定的,就這一點來說,github的重要性在IT就不可估量。
而github上和git的方便管理,上傳,查看,統(tǒng)計,bug報告等功能更是極大地推動了程序員之間的合作;github上的開源更是改變了開源軟件對世界的影響力。
github不是git的全部,git也不是版本控制的全部,本質上來說,github只是一個網(wǎng)站而已;然后github確實又是這個編程世界不可缺少的一個重要的模塊,已經(jīng)成為了一個不可或缺的組成部分了。甚至github已經(jīng)跳出了編程界,成為了一個世界級的不可或缺的服務平臺了。然而github是2008年建立的,真正開始流行是在2012年的。在2015年google宣布關閉自己的googlecode。可見github的影響力,以及在業(yè)界的重要程度了。
2.生態(tài)圈意識
生態(tài)圈意識在業(yè)界是越來越強了,它應該和編程工具化和工程化有極大的關系。一個語言,框架或者庫的出現(xiàn),人們用它們,不但是因為它們本身的強大,更是因為它們背后的生態(tài)圈。
比如說人們選一個javascript的框架,選react還是選ember.js,更多是看支持他們的生態(tài)圈如何,react是有facebook支持的,更有很多程序員為它開發(fā)相關工具和庫以及有很多文檔教程。這樣react的生態(tài)圈就很大,會讓更多人愿意選擇react作為第一開發(fā)框架。而ember.js相對來說生態(tài)圈小,選擇它的人可能就不會很多。
選語言也一樣,選javascript編寫爬蟲還是選php編寫爬蟲還是用python?更多的是看他們的生態(tài)系統(tǒng)了,python的爬蟲庫強大且豐富,所以更多人選用python編寫爬蟲。
一個新的語言出現(xiàn),成熟與否,看的就是它的生態(tài)圈了,比如是否有測試框架,是否有mvc框架,成熟的時間庫,數(shù)據(jù)庫sdk等等,這些都是其必要的生態(tài)圈組成部分。
總結:
以上的這些現(xiàn)象和趨勢,其實都是相輔相成的,最終成了一種良性循環(huán)。這些現(xiàn)象和趨勢都會繼續(xù)發(fā)展下去,并成為以后新趨勢的基矗所以這些特點都是非常重要的,而且應該成為每個程序員都應該知道的知識。
給學生們的一些建議:
我在讀編程專業(yè)的時候,這些東西大學都沒有教過,甚至在工作中,公司都沒有這些要求。大學主要教的是代碼編寫,能編譯通過,能出正確結果就可以了。在工作中,代碼能用,沒有明顯bug就行。
然而,在我個人工作實踐中,逐漸的體會到這些趨勢的重要性了,可維護性的高質量代碼可以大大減少自己在維護中的難度和壓力。作為準備成為一個合格的開發(fā)人員,應該熟練掌握這些知識和技能。如果大學沒有教過,一定想辦法自己學習和提高。
請聯(lián)系網(wǎng)站客服,了解詳細的優(yōu)惠課程信息~
優(yōu)質、權威、便捷、省心
掃一掃
獲取更多福利
獵學網(wǎng)企業(yè)微信
獵學網(wǎng)訂閱號
獵學網(wǎng)服務號