改變開發者工作方式的15種技術
以前,開發人員寫的彙編代碼輕巧而且運行速度快。運氣好的話,如果預算充足,他們可以僱傭一些人來幫助完成這些代碼的輸入。運氣不好的話,只能靠自己完成複雜的輸入工作。
現在,開發人員要和分布在不同大洲的團隊成員一起工作,這些成員使用不同字符集的語言,更壞的情況是有的團隊成員可能會使用不同版本的編譯器。一些代碼是新編的,一些庫是從很多年前創建的,源代碼已經無法獲得。所以,要想成為一個程序員,必須要擁有團隊精神和吃苦耐勞的信念。
下面我們就來梳理一下正在改變基本開發工作的15種科技技術。這些技術改變著我們與其他團隊成員的合作方式,與客戶的溝通方式以及我們的編程方式。
1、持續集成(Continuous integration)
當把代碼提交到庫中以後,你就有足夠的時間休息一下,喝杯咖啡,甚至可以去吃個午飯。這個時候,代碼庫已經與一個持續運行的編譯系統綁定,開始重新編譯你提交的代碼,仔細檢查你的代碼結構,初始化多個測試程序,標記你代碼中可能的問題。在離你辦公桌5英尺的範圍內,編譯系統就通過郵件或簡訊將需要修復的問題發到你的手機上。重新回到工作崗位,持續運行的編譯系統又有新的任務給你了。
2、架構(Frameworks)通過複製別人的工作進而站在巨人的肩膀上已經不是什麼新鮮事了,但是優勢卻從來沒有像現在這麼明顯。現在只有很少的編程工作是從頭做起了。最好也是最有爭議的開發方法是:利用一個正確的框架,研究清楚 API,然後自己寫代碼使用API完成最核心的功能。網頁不再是由 HTML 或者 CSS 生成的了;更多的是開始使用 Ext JS,Express JS 或者其它代碼庫作為編碼的基礎。
當然,你也可以創新並且從頭開始構建所有的東西,但那是相當痛苦的。你沒有辦法趕上其他人做的所有工作。你不是一個技工,僅僅是一個框架修理工。在你打算自己編碼之前,先了解一下已經正在使用的框架。
3、代碼庫(Libraries)和框架類似的是代碼庫,代碼庫無處不在,程序員已經離不開它了。寫關於瀏覽器的代碼可以不用jQuery 嗎?是否有人記得有一個內置函數 GetElementByID?像 jQuery 這樣的庫現在應用在各個層面。人們會談論他們喜歡的語言,但是確很少談論他們是怎麼編程的。如果你想僱傭一些程序員,你應該多問他們一些關於代碼庫的知識。Java腳本的開發人員是從 jQuery 或 Dojo 發展來的嗎?遊戲開發人員可能會使用 C++,但是實際的問題是這些開發人員是否知道 Allegro,Unity,Corona 或者其他更多的選擇。代碼庫的知識和語言本身的來龍去脈一樣重要。
4、應用程序編程介面(APIs)
從前,程序員總需要關注數據結構。他們需要將所有的信息打包成位元組塊,確保將值放在正確的偏移位置。現在,編譯程序為我們做了這些。
現在我們通過非常嚴謹的介面工作,它有一個發燒友一樣的名字:應用程序編程介面。它通常在一個完全不同的機器上或是運行在其他公司的,每次調用都需要收費。你想將一個街道地址和一個郵政編碼變成經緯度嗎?有專門的 API 介面可以調用,並且使用的費用也相當便宜。
很多情況下,數據不需要這麼死板的打包。舊的位元組打包方式已經被輕量級的數據交換格式例如JSON 或 XML 取代。你需要確保你的數據格式完全正確,幸運的是有現成代碼庫可以用。
5、平台即服務(Platform as a service)誰建立了自己的網站?相反的,如何在別人的網站上創建一個用戶賬戶,並做一些定製呢?所有的這些僅僅需要的是一個網站,這樣,你的站點就可以做你想做的所有事情了,比如往 Youtube 上傳一個貓的視頻或者在 eBay 上競標一個佩斯飲水機。
當然,這個例子有點誇張。許多 PaaS 選項目前都要求程序員清楚的知道每個 Web 表單上放什麼東西。以微軟的雲服務為例,你可以將用 Java 腳本語言寫的用於描述網站如何響應的函數放到上面。然後,這個雲服務會將這些函數打包成一個庫然後放在js節點上運行。
6、瀏覽器(Browsers)
曾經有一段時間人們分別寫桌面軟體,伺服器軟體和設備上運行的軟體,這些軟體都是不一樣的,軟體之間相互傳遞信息的方式也互不相同。現在,所有的這些都使用瀏覽器了。當我在家裡建立一個本地文件伺服器來存放音樂,就可以通過一個網站登錄到這個網址上。蘋果的桌面窗口程序是用 Java腳本和超文本標記語言寫的,已經用了很多年。很多用超文本標記語言和Java腳本寫的移動客戶端的跨平台應用都和 Apache Cordova 綁定了。
當然,很多應用還在繼續使用 C/S 結構。最好的遊戲仍然使用客戶端模式,沒有使用瀏覽器,但是隨著越來越多的 Java 腳本開發者研究在畫布上繪圖這種情況正在改變。例如,憤怒的小鳥,就即將運行在瀏覽器窗口上。
7、應用程序容器(Application containers)專門建立一個伺服器來做比較困難的工作。程序員可以從伺服器上獲取代碼然後運行,並且將運行日誌發送到服務端。有時候可以得到正確的庫,有時候得到的庫是錯誤的,但最終,都會找到可用的代碼庫。
現在,類似 Docker 這樣的應用程序容器允許我們按一個按鈕就找到正確的庫。如果 這個代碼庫可以運行在我們的測試機上,它也可以運行在伺服器上。所有的東西都捆綁在一起了,那些夾在我們桌面和服務之間不兼容的東西都不存在了。
8、基礎設施即服務(Infrastructure as a Service)我提到過伺服器策展人團隊嗎?這些人喜歡在午餐時間或下班後出去玩,但是現在他們都被聚集到了雲上,像是在一個全球的數據中心那樣為那些自認為是雲世界中的領導者的公司工作。少數開發人員會需要服務團隊為他們的新工程搭建一個新的服務。他們只需要登錄一個站點,按一個按鈕,就可以得到一個為他們服務的機器。特別簡單,但是這些 IaaS 管理網頁不會在工作結束後為你買一杯咖啡。當然,它能為你節省很多工作。
9、Node.js 和JavaScript(Node.js and JavaScript)
在你們中的一些人出生以前,網路伺服器送出靜態的 HTML。後來,有人就開始研究如何構建動態的,可以和資料庫交互的伺服器。每個團隊都需要一個人用 SQL 語言編寫資料庫程序,一個人用PHP 或 Java 編寫服務程序,一個人設計 HTML 模板。一旦每個人都開始喜歡上運行在客戶端的AJAX 和 Java 腳本,這個網站就需要一個會這種語言的人。
現在 Java 腳本做了所有的事情。當然,瀏覽器用 Java 腳本,服務端(Node.js)和資料庫(MongoDB 和 CouchDB)也一樣。即使是 HTML 也通常是用 Ext JS 或者 jQueryMobile 這樣的框架,使用 Java 腳本在客戶端生成的。
10、二級市場(Secondary marketplaces)如果你想構建一個遊戲,你可以自己僱傭一些設計人員,創建一個非常棒的模型集。你甚至可以僱傭一些開發人員為你的遊戲增加一些視覺效果,讓遊戲看起來更酷。或者你可以去類似統一資源市場的二級市場購買你需要的所有部分。當我寫這些的時候,構建下水道的場景的工具箱正降價30%,可以用來構建小型的或大型的遊戲場景。這個銷售活動在你看見這則新聞的時候可能已經結束了,價錢可能已經升到45美元了。開發人員和設計人員怎麼會有這麼低的價錢!
現在有越來越多的提供插件,庫和其它附加軟體的市場。有這麼多的庫和框架,開發人員也越來越多的去購買所需要的部分,編碼工作越來越少了。
11、虛擬機(Virtual machines)
編寫大段代碼的時代已經慢慢遠去了。現在大部分寫出來的運行在虛擬機上的代碼都被翻譯成晶元可以識別的指令了。Java 虛擬機,C#/.Net 虛擬機,現在的 JavaScript 引擎都是代碼的最終運行載體。
虛擬機的流行,使得這個領域吸引了越來越多的東西。過去,如果你想創造一種新的語言,你需要創建從處理器到寄存器的整個流程。現在,新的語言運行在舊的虛擬機上。Clojure,Scala,Jython,JRuby 都參與了虛擬機開發的工作,現在這個虛擬機業務是屬於 Oracle 的。
相似的情況也出現在瀏覽器領域。使得,你可以創建你自己的瀏覽器和語言,也可以通過價差編譯在Java 中模擬。現在很多新創建的腳本語言也是這麼做的。谷歌的 Web 工具包也有類似的功能:將Jave 語言轉換成 Java 腳本。
12、社交媒體網站(Social media portals)在互聯網的早期,你可以搭建一個自己的網站,然後祈禱人們可以找到它。他們需要記住你的網址。
越來越多的網站被吸引到互聯網世界中,湧現出了非常多的社交網站和營銷網站。如果你建立自己的網站,很可能門庭冷落,大部分用戶都在社交網站和營銷網站上瀏覽、點擊。解決這個問題的辦法是搭建一個社交網站或銷售網站的應用,通過這種方式可以進入並集成到這些網站中。但是最後,你的應用也僅僅是一個附庸,會受到很多限制,還很可能會被輕易停掉。你還有別的選擇嗎?沒有,你要麼選擇做大型網站的附庸,要門只能接受門庭冷落的現實。
13、開發工具(Devops tools)很久以前,我們僅僅需要在一個伺服器上安裝軟體就能滿足應用需要。但是現在,我們要租用大量的伺服器,需要幾十,成百,甚至上千台機器,其中很多機器都需要按照需求配置,已經不是一個能用手工完成的工作了。
進入運維模式,就會有一些類似 Chef 和 Puppet 這樣的工具幫助你完成這些複雜的工作。將軟體推送到雲端,在這些工具的控制下,可以保證所有的機器上運行的是相同的代碼。這些工具替自動完成了我們以前在一台機器上的工作。
有一些服務,例如谷歌應用程序引擎已經在內部處理了這些,你需要做的僅僅是將你的應用程序告知引擎,並授權它開始工作。你甚至不知道後台到底發上了什麼,你能看見的僅僅是 CPU 的佔用量。
14、GitHub,SourceForge和代碼共享(GitHub, SourceForge, and social code sharing)代碼共享網站可能是開源世界的最大貢獻。在 SourceForge 出現之前,軟體僅僅是在你的機器上創建並且代碼也只屬於你。如果另一些人想獲得源碼,他們需要找你來獲得源碼,當然必須要得到你的統一。
現在代碼共享已經變成了一種共識。類似 SourceForge 和 GitHub 這樣的網站發布了所有的代碼,供所有人閱讀和更新。他們為代碼的維護、共享、評論提供了一個易於訪問的地方。你可以通過一個入口閱讀這些代碼,並提出修改意見。很多項目每個星期可能有幾十甚至幾百萬的下載量,這在以前是不可能的。
這種模式非常有優勢,很多自營項目都使用這種模式。GitHub 和 BitBucket這些網站還在一定程度上支持他們售賣自己開發的代碼庫。
15、性能監控(Performance monitoring)早期,跟蹤代碼性能是一件非常容易的事。在代碼執行的初始位置列印一個時間,然後在執行結束的位置列印一個時間。如果你想,你還可以把這兩個時間做一個差,然後列印出來。很多問題在一台機器上是無法暴露出來。在代碼上附加一個分析器可能無法暴露出真正的瓶頸,導致這種瓶頸的的原因可能是內部的一些複雜問題或者是資料庫延遲。現在測試網路性能的工具不僅要測試軟體本身,還需要測試軟體中的每個模塊。這是了解內部運行是否正常的唯一方式。當程序從在一個機器上運行演變成通過網路互相連接運行後,這是一種判斷程序運行是否正常的非常重要的方式。
來源: CSDN CODE 原文: http://www.infoworld.com/d/application-development/15-technologies-changing-how-developers-work-247917?page=0,3 譯文: http://code.csdn.net/news/2821358 譯者: AlinaLv1985 轉載本文請遵循原文要求推薦閱讀:
※簡論傳統武術的思維方式
※為孩子儲備教育金的4種主要方式
※西服定製前要了解的搭配方式
※與其說我害怕成為普通人,還不如說我害怕生活,害怕找不到一種自己喜歡的方式去度過人生
※佛教的認識方式--------禪式思維