對于開發(fā)者來說,如何緊跟技術(shù)的潮流、不和時代脫節(jié)是一個很頭疼的問題。本文即針對 21 個編程領(lǐng)域的新寵以及快要過氣的技術(shù),包括語言堆棧、容器大數(shù)據(jù)技術(shù)、移動開發(fā)、軟件編程等等,和各位程序員一一道來,究竟你的技術(shù)方向選對了嗎?
以下為譯文: 眾所周知,時尚圈的風(fēng)潮總是變來變?nèi)?。一會流行短裙,一會又流行長裙;一會講究樸素,一會又講究花哨;一會流行厚領(lǐng)帶,一會又流行薄領(lǐng)帶。程序員對此總是嗤之以鼻,在他們眼里,這樣的變來變?nèi)ズ喼蹦涿钋也豢衫碛???萍碱I(lǐng)域則沒有時尚圈這樣的飄忽不定,取而代之的是嚴(yán)謹(jǐn)、科學(xué)、數(shù)學(xué)和精確計算,一切都是那么理性。 但是,這并意味著編程領(lǐng)域缺乏新的技術(shù)趨勢。事實(shí)上,編程趨勢同樣變化迅速,區(qū)別僅僅在于這些新的趨勢來源更加理性,通常是為了提升效率、可定制性和易用性。新的技術(shù)往往能夠讓現(xiàn)有的技術(shù)變得黯然失色,它們是理性與科技的結(jié)晶,而非簡單的奇思妙想。 本文展示了當(dāng)前程序員中最熱門的技術(shù)以及逐漸開始變得冷門的技術(shù)。我相信肯定有不少人對這個列表表示質(zhì)疑。編程總是充滿樂趣,引人入勝,各種技術(shù)日新月異且不斷變化,有時會引來激烈,某些看似“陳舊”的技術(shù)也許突然又火起來。 ▌預(yù)處理器 K.O 完整語言堆棧 編譯的目的是將源碼轉(zhuǎn)化為機(jī)器可識別的可執(zhí)行程序,在早期,每次編譯都需要重新構(gòu)建所有東西。后來人們意識到可以讓編譯器自動完成一些工作,從而提升編譯效率。于是就有聰明人發(fā)明了預(yù)處理器,通過豐富的庫和API來翻譯新的代碼。 像 Python 或 JavaScript 這樣的腳本語言曾經(jīng)只能局限于小項(xiàng)目,而如今它們變得越來越重要。有些人不喜歡 JavaScript ,于是創(chuàng)建了 CoffeeScript 這個預(yù)處理器,它可以讓程序員不依賴繁瑣語法的情況下重新編碼。此外,它還具有幾十種預(yù)測語法。 喜歡動態(tài)語言的人發(fā)明了 Groovy,它是一個 Java 簡化版,沒有太多復(fù)雜的語言。目前能夠運(yùn)行在 JVM 上的語言有幾十種,比如 Groovy、Scala、Clojure、Kotlin,等等。同樣,能夠運(yùn)行在 .Net 虛擬機(jī)上的語言也很多。 ▌Serverless K.O Docker 說 Serverless 替代 Docker 其實(shí)不完全正確。Docker 容器無處不在。服務(wù)器一直在不斷啟停容器。然而,Docker 容器實(shí)際上遠(yuǎn)遠(yuǎn)超出了預(yù)期。 仔細(xì)想想,你會發(fā)現(xiàn)微服務(wù)的代碼可能只有幾十行,但是為了讓 Node.js 或者其他模塊和 Docker 配合運(yùn)行,你不得不在配置文件中寫很多行配置代碼。雖然配置文件有模板可循,但是有時依然讓人摸不著頭腦。 而使用新的 Serverless 架構(gòu),我們僅需幾行簡單的 if-then-else 語句即可完成項(xiàng)目部署。剩下的工作交給 Serverless 服務(wù)提供商就可以了。 過去我們時常抱怨異常鎖定且缺乏定制,如今 Serverless 的出現(xiàn)的確是所有開發(fā)、運(yùn)維以及配置人員的福音。 ▌JavaScript MV*框架 K.O 原始JavaScript文件 過去,開發(fā)者使用 JavaScript 幾乎都是從零開始編寫,比如彈出一個警告框,或者檢查表單中的電子郵件地址是否包含了 @ 符號。而如今,HTML AJAX 應(yīng)用程序已經(jīng)變得非常復(fù)雜,很少有人再完全從頭開始編寫。開發(fā)者往往會采用一個現(xiàn)成的框架,在其基礎(chǔ)上修改和添加一些代碼從而完成自己的業(yè)務(wù)。 目前市面上有多種框架來幫助你處理 Web 應(yīng)用的事件和內(nèi)容,比較常見的有 Kendo、Sencha、jQuery Mobile、AngularJS、Ember、Backbone、Meteor JS,等等。 這些僅僅針對 Web 應(yīng)用程序。而對于智能手機(jī)或者平板電腦的跨平臺開發(fā)框架也不少。比如 NativeScript、PhoneGap、Apache Cordova 和 React Native 等技術(shù)都可用于 HTML5 開發(fā)。 ▌CSS框架 K.O 通用CSS 曾幾何時,給網(wǎng)頁添加一些新功能通常需要打開 CSS 文件然后增加一個諸如 font-style:italic 這樣的新命令。然后,你保存文件,結(jié)束了一上午的辛勤工作去吃午餐。如今的網(wǎng)頁已經(jīng)變得非常復(fù)雜,用這樣簡單的命令修改 CSS 文件的方式不再可取。哪怕是調(diào)整一個顏色參數(shù),都會讓頁面的整體效果亂作一團(tuán)。 諸如 SASS 和 Compass 這樣的 CSS 框架于是應(yīng)運(yùn)而生。它們提供了變量、嵌套、混合插件等編程結(jié)構(gòu),促使開發(fā)者進(jìn)行更加規(guī)范的編碼。這在編程領(lǐng)域并不新穎,但對于設(shè)計領(lǐng)域來說這確實(shí)是質(zhì)的飛躍。 ▌SVG K.O Flash Flash 已經(jīng)風(fēng)靡多時。抗鋸齒渲染看起來不錯,于是一些才華橫溢的藝術(shù)家構(gòu)建了一堆高深的 Flash 代碼來提供復(fù)雜的轉(zhuǎn)場和動畫。得益于休閑游戲廣受大眾的歡迎,F(xiàn)lash 在網(wǎng)絡(luò)上占據(jù)著主導(dǎo)。 而如今,JavaScript 也能夠做同樣的事,于是瀏覽器廠商和開發(fā)人員欣喜若狂。他們發(fā)現(xiàn)像 SVG 這種新的格式能夠與 DOM 層更好地結(jié)合。并且 SVG 和 HTML 還包含了豐富的標(biāo)簽,這對與網(wǎng)頁開發(fā)人員來說非常容易使用。此外,它們的 API 在 Canvas 對象上提供了精細(xì)的繪圖功能,同時還可以充分利用視頻卡。面對如此強(qiáng)大的功能,簡直沒有理由再使用 Flash。 ▌不使用Hadoop進(jìn)行大數(shù)據(jù)分析 K.O 使用Hadoop進(jìn)行大數(shù)據(jù)分析 每個人都想要成為學(xué)校里的大個子,如果他們不是,變會尋找一個適合他們的學(xué)校。當(dāng)“大數(shù)據(jù)”開始流經(jīng)管理套件時,這些套件開始尋求最強(qiáng)大的大數(shù)據(jù)系統(tǒng),就好像他們購買游艇或者摩天大樓一樣,這并不奇怪。 不過比較諷刺的在于,很多業(yè)務(wù)體量都不夠大,不足以應(yīng)用大數(shù)據(jù)解決方案。當(dāng)然,像谷歌或者雅虎這樣的公司能夠跟蹤我們所有的網(wǎng)頁瀏覽記錄,他們有大到 PB 甚至 YTB 的數(shù)據(jù)文件。但是大多數(shù)公司擁有的數(shù)據(jù)量很小,甚至可以很容易地裝入普通 PC 的 RAM 中。我在一臺配有16GB RAM 的 PC 上編寫一個程序,變足以處理十億數(shù)量的事件。在大多數(shù)算法中,數(shù)據(jù)并不需要讀入內(nèi)存,從 SSD 流式傳輸即可。 有些業(yè)務(wù)需要并行運(yùn)行 Hadoop 云中的幾十臺機(jī)器以加快響應(yīng)速度,但實(shí)際上可以在單臺機(jī)器上進(jìn)行,并且還不會出現(xiàn)協(xié)調(diào)或者通信的麻煩。 ▌Spark K.O Hadoop 這并不是說 Hadoop 完全被淘汰了。主要是 Apache Spark 當(dāng)前太過火爆,使得 Hadoop模型看上去有些古老。Spark 借鑒了 Hadoop 的一些思想,比如從大量數(shù)據(jù)中尋找規(guī)律并通過一些加快代碼運(yùn)行速度的改進(jìn)方法來對其更新。最大的差異可能在于,Spark 將數(shù)據(jù)保存在快速內(nèi)存中,而不是從分布式文件系統(tǒng)進(jìn)行文件讀寫。 當(dāng)然,很多人將這兩者結(jié)合使用,在 Hadoop 分布式文件系統(tǒng)中利用 Spark 的數(shù)據(jù)處理速度優(yōu)勢。Hadoop 和 Spark 通常是合作伙伴的關(guān)系而非競爭對手。 ▌數(shù)據(jù)庫配置 K.O 軟件編程 很久以前,程序員經(jīng)常開玩笑說他們不知道下個世紀(jì)編程會是什么樣子,但他們知道它將被稱為 Fortran。這個笑話非常有趣,他們會從恐龍上掉下來,摔壞自己的木制內(nèi)衣。然后回到配置數(shù)據(jù)庫的時代。 如今我們?nèi)匀辉诮?shù)據(jù)庫,但是現(xiàn)在我們認(rèn)為的“數(shù)據(jù)庫”更加復(fù)雜和強(qiáng)大?,F(xiàn)成的數(shù)據(jù)庫將進(jìn)行遠(yuǎn)距離同步,同時在一致性和速度之間進(jìn)行靈活的折衷。一些像 Firebase這樣的云服務(wù)會將新數(shù)據(jù)全部推送到運(yùn)行在移動客戶端上的 Web 應(yīng)用程序。 大部分 serverless 革命都基于這樣的認(rèn)識,許多云存儲現(xiàn)在非常強(qiáng)大,我們只需編寫一些 if-then-else 這樣的簡單子句就可以構(gòu)建一個非??岬?Web 應(yīng)用程序。 ▌游戲框架 K.O 原生游戲開發(fā) 以前開發(fā)游戲就意味著需要雇傭大量的 C 語言程序員,然后從零開始編寫程序。當(dāng)然,它耗資高達(dá)數(shù)十億美元,但是它看起來非常棒,運(yùn)行速度像風(fēng)一樣快。如今,定制代碼變得無比奢侈。大多數(shù)游戲開發(fā)者都放棄了多年前的原始開發(fā)方式,開始使用Unity、Corona 或 LibGDX 這樣的庫來構(gòu)建系統(tǒng)。他們不會像編寫庫一樣使用 C 來編寫應(yīng)用程序。 開發(fā)游戲游戲不再從零開始編寫代碼,而是使用二手游戲引擎。對此開發(fā)人員會因?yàn)閽仐壡閼讯呃??答案是否定的。事?shí)上,大部分開發(fā)人員都松了一口氣。因?yàn)樗麄儾槐卦偬幚砑?xì)節(jié),能夠更加專注于游戲人物和故事。 ▌靜態(tài)網(wǎng)站生成器 K.O 單頁Web應(yīng)用 還記得通過 URL 指向充滿靜態(tài)文本和圖片的網(wǎng)頁嗎?之后,動態(tài)的單頁 Web 應(yīng)用程序出現(xiàn)了,這是一個可以獲取相關(guān)數(shù)據(jù)的 Web 應(yīng)用程序。世事輪回,如今又回到了過去,現(xiàn)在開發(fā)者開始使用靜態(tài)網(wǎng)站生成器。目前的生成器多達(dá)幾十個。就像 hybrid 一樣,它將所有數(shù)據(jù)積成一堆,然后編寫一些代碼將數(shù)據(jù)粘貼到某些模板中,以便每個靜態(tài) URL 都有一個 HTML 文件,并且這些文件都來自數(shù)據(jù)表中。 開發(fā)者認(rèn)為這些靜態(tài)網(wǎng)站速度很快,事實(shí)上也的確如此。它與 WordPress 和 Drupal 這樣的動態(tài)系統(tǒng)的工作方式大致相同,只需保證最新數(shù)據(jù)生成的靜態(tài)頁面的緩存充足即可。 ▌GraphQL K.O REST 這并不意味著 REST 已死。我們只是想在 API 上做更多的事情,而 GraphQL 恰如其分。GraphQL 和 REST 一樣都是以 JSON 的形式返回數(shù)據(jù)。與許多 REST 調(diào)用一樣,GraphQL 也是通過 HTTP POST 觸發(fā)。只需少量的代碼即可通過 GraphQL 語法進(jìn)行非常復(fù)雜的查詢。這使得程序員可以更簡單地詢問他們想要的內(nèi)容,當(dāng)有人需要稍微不同的 API 時,這樣也可減少服務(wù)器端的工作量。 ▌云端IDE K.O 本地IDE 最早的時候,編譯器是命令行的形式。之后有人將編輯器和其他工具進(jìn)行集成,從而創(chuàng)建了 IDE。而如今,基于瀏覽器的在線工具提供代碼編輯功能,甚至是運(yùn)行中的系統(tǒng)代碼也可編輯,這足以淘汰傳統(tǒng)的 IDE。如果你不喜歡 WordPress 的功能,它帶有一個內(nèi)置的編輯器,可以讓你隨時更改代碼。微軟的 Azure 允許你在其門戶中編寫JavaScript 代碼。盡管這些系統(tǒng)不提供太好的調(diào)試環(huán)境,編輯生產(chǎn)代碼也存在一些危險,但是這個想法是有價值的。 比較常見的有 AWS Cloud9、Codenvy 以及 Mozilla 的 WebIDE。這些基于 Web 的在線工具變得越來越強(qiáng)大。比如,你可以在微軟的 Azure 網(wǎng)站上構(gòu)建一個完整的大數(shù)據(jù)分析項(xiàng)目。如果你正在探索 serverless,你可以將所有代碼寫入網(wǎng)頁的表單元素中,這個表格并不比你用 Facebook 更新朋友的表格大太多。 ▌GPU K.O CPU 當(dāng)程序很簡單并且指令安排得當(dāng)時,CPU 處理這些簡單的程序非常得心應(yīng)手,它就是電腦的核心。而如今的大型3D游戲需要并行運(yùn)行大量的圖形程序,此時 CPU 就顯得力不從心,視頻卡開始大放異彩。玩家經(jīng)常在視頻卡上花費(fèi)五六百美元甚至更多的錢,一些資深玩家會購買多個視頻卡,價格相對昂貴。 另外,推崇 GPU 的人并不僅限于游戲玩家。計算機(jī)科學(xué)家正在將許多并行應(yīng)用程序轉(zhuǎn)到 GPU 上,這樣一來其運(yùn)行速度可以提升數(shù)百倍。此外,數(shù)據(jù)科學(xué)家也在服務(wù)器上更多使用 GPU 從而加速其機(jī)器學(xué)習(xí)模型的開發(fā)。 ▌GitHub K.O 簡歷 當(dāng)然,你可以通過查看應(yīng)聘者的成績單來了解此人。但是通過閱讀實(shí)際代碼來判斷候選人的能力更加直接。他們代碼注釋寫得如何?代碼功能是否豐富?架構(gòu)是否具有高度擴(kuò)展性?只要看一看他們的代碼,這些問題都迎刃而解。 參與開源項(xiàng)目對于找工作來說變得越來越重要。想要把實(shí)際工作中的代碼共享出來是很難的,但是開源代碼卻無處不在。 ▌租賃 K.O 購買 亞馬遜在黑色星期五銷售計算機(jī)和其他電子產(chǎn)品,但是忘記了為其云計算服務(wù)提供超值優(yōu)惠。以前,公司都是自己開設(shè)數(shù)據(jù)中心,購買計算機(jī),并雇用員工。而如今,很多公司都不再購買,而是選擇租賃的方式。他們按小時租用電腦、數(shù)據(jù)中心、員工甚至軟件。沒有人在乎東西的所有權(quán),管理服務(wù)器只會給自己憑添麻煩。租而不是買,這是一個好主意,在你的網(wǎng)站爆發(fā)式增長之前,你只需根據(jù)點(diǎn)擊量付費(fèi)。 ▌復(fù)雜云端 K.O 簡單云端 過去云計算提供商向客戶宣傳時一直強(qiáng)調(diào)其服務(wù)的簡單,只需點(diǎn)擊一個按鈕即可開啟云服務(wù)。 而現(xiàn)在,找到合適價格的機(jī)器可能比編寫代碼花費(fèi)的時間更多。機(jī)器的配置文件眾多,并且大多數(shù)云服務(wù)提供商支持的機(jī)型跨度比較大。各種服務(wù)級別代表不同的性能,你需要對其測試,找到性價比最高的方案。只要能夠滿足程序運(yùn)行需求,肯定選擇盡可能低的配置,因?yàn)檫@樣更省錢。 云服務(wù)商還提供了多種優(yōu)惠方案,比如提前付款或者批量采購。這樣一來選擇云服務(wù)器的過程就變得更加復(fù)雜了,如果開設(shè)一個課程來教大家如何選擇云服務(wù)估計很暢銷。 ▌移動Web應(yīng)用 K.O 原生移動APP 假設(shè)你有一個 APP 的好點(diǎn)子。你可能會急于為 iOS、Android、Windows 10 Mobile 甚至黑莓 OS 編寫單獨(dú)的 APP 版本。每個平臺的 APP 都需要一個單獨(dú)的團(tuán)隊,使用不同的編程語言,然后再發(fā)布每個平臺的應(yīng)用程序商店。這種原生的 APP 開發(fā)方式耗時耗力。 除了原生的開發(fā)方式之外,你可以構(gòu)建一個 HTML 應(yīng)用程序并將其放置在網(wǎng)站上,所有平臺都可以訪問。如果需求有變,你只需在線修改即可,無需乞求應(yīng)用商店進(jìn)行錯誤修復(fù)。隨著芯片的速度越來越快,HTML 的運(yùn)行速度也越來越快,Web 應(yīng)用與原生 APP 的速度差異越來越小,即使是復(fù)雜的交互式應(yīng)用,HTML 應(yīng)用也幾乎可以和原生 APP 媲美。 ▌Android K.O iOS 過去幾年蘋果產(chǎn)品風(fēng)頭正勁,而如今時代已變。雖然 iPhone 和 iPad 仍然擁有大量的粉絲,但是其銷量已遠(yuǎn)遠(yuǎn)不及 Android。根據(jù)報道,Android 手機(jī)占比已經(jīng)超過了80%。 核心因素在于價格。盡管目前 iOS 設(shè)備的價格與過去相比已經(jīng)非常便宜,但是由于 Android 領(lǐng)域的充分競爭,其設(shè)備的價格僅為蘋果的五分之一。在功能差不多的情況下,很多人選擇 Android,沒有人跟錢過不去。 另一個因素在于開源的影響力。iOS 系統(tǒng)閉源,Android 系統(tǒng)則完全開源,任何人、任何產(chǎn)品都可以使用。市面上的 Android 設(shè)備豐富多彩,五花八門。有 Android 相機(jī),甚至有 Android 冰箱。如果有人想基于 Android 開發(fā)產(chǎn)品,他們不需要征求谷歌同意。想做就做,因此 Android 在越來越多的電子設(shè)備上大放異彩。 ▌Node.js K.O Java EE, Ruby on Rails 服務(wù)器一直在不斷優(yōu)化線程模型,讓操作系統(tǒng)彌補(bǔ)程序員的低效或者不合理的行為。無論是愚蠢的循環(huán)還是浪費(fèi)的計算,操作系統(tǒng)都通過線程切換來平衡性能。 Node.js 的誕生充分應(yīng)用了 JavaScript 的回調(diào)編程模型,代碼的運(yùn)行效率得到大幅提升。創(chuàng)建新線程的開銷變得明顯,Node.js 開始大放異彩。當(dāng)程序員的代碼寫得很糟糕時,系統(tǒng)容易出現(xiàn)問題。正是因?yàn)橘Y源限制,才迫使程序員寫出效率更高的代碼。 Node.js 通殺瀏覽器和服務(wù)器端,兩者都運(yùn)行相同的代碼,因此開發(fā)人員可以更輕松地沿用和重復(fù)功能。Node.js 的火爆理所當(dāng)然。 ▌PHP7.2 K.O 舊版PHP 過去,PHP 的出現(xiàn)淘汰了一些動態(tài)網(wǎng)頁。如果你想要更加豐富的功能,可以在 HTML標(biāo)簽之間嵌入簡單的代碼。這對于 Web 開發(fā)人員來說確實(shí)可行,但是核心程序員會對此嗤之以鼻,因?yàn)檫@種做法太慢了。 如今,即時編譯器的加入讓 PHP 變得更快,JAVA 也曾采用了同樣的方法。借助 HipHop 虛擬機(jī),PHP 7.2 的速度是舊版 PHP 的兩倍。 ▌在線教育 K.O 傳統(tǒng)教育 在線教育盛行已久,通過在線教育,每個人都可以調(diào)整課程播放速度,重復(fù)某些關(guān)鍵的知識點(diǎn)。在過去舊的研討會中,一次只能一人發(fā)言,而在線論壇對其進(jìn)行了改進(jìn),每個人隨時都可以暢所欲言,大大提升了交流效率。 在線教育不僅讓教育變得簡單,還帶來了巨大的靈活性,學(xué)員隨時隨地都可學(xué)習(xí)。這也大大改變了人們的學(xué)習(xí)方式,不再需要投入四年的時間和昂貴的學(xué)費(fèi),并且所學(xué)的課程可能與生活毫不相關(guān)。 為什么要參加編譯器的課程?因?yàn)槟惆l(fā)現(xiàn)工作中需要了解編譯器原理。如果老板想從關(guān)系數(shù)據(jù)庫切換到 NoSQL 引擎,那么你可以花些時間學(xué)習(xí)現(xiàn)代數(shù)據(jù)存儲的課程。當(dāng)你需要的時候,去學(xué)習(xí)最新的課程即可,而沒必要讓那些占時毫無用處的知識白白占用自己的大腦。 |
|
來自: 新用戶0175WbuX > 《待分類》