改變程式設計師開發方式的15個技術

edithfang發表於2014-12-15
很久以前,那些傳說中的“古董級”程式設計師和他們的組合語言過著簡單而安逸的生活。當經費寬鬆的時候,程式設計師們會花錢僱傭人來幫他們撥動連線在機器上用於儲存程式碼的紙帶(參見穿孔紙帶);當經費緊張的時候,程式設計師們則會自己親自動手。那段時間的程式設計過程很簡單:軟體載入記憶體資料,做一些演算法,然後傳送出來。這些就是全部的工作了。

時至今日,程式設計師們需要跟世界各地使用不同程式語言的人打交道並且還得忍受不同版本的編譯器。而陪伴程式設計師生活的程式碼也變得不再單純了,有的程式碼才誕生不久,有的則在舊函式庫裡躺了幾十年了,而有的甚至連原始碼都不知道。團隊協作機制和多樣複雜的開發特性是如今程式設計師開發的大環境。

那麼,是什麼改變了程式設計師曾經簡單而安逸的生活呢?讓我們來看看這15個改變程式設計師開發方式的技術吧。

1.  持續性整合

連線載入程式碼庫的時候,在以前你能夠用這段時間休息、喝咖啡甚至去吃個午飯。而現在呢,你可沒有這麼悠閒的時間了。程式碼庫現在與持續構建的系統緊密相連,編譯你的程式碼、檢查當前構架、啟動數以百計測試並隨時在你萎靡不振的時候提醒你每一個潛在的錯誤。在你準備離開辦公桌去休息的時候,它都在隨時提醒你:快回到工作上來,這兒有些東西需要處理——你已經徹底成為了它的奴隸了。

2.  框架

重用他人的工作成果就好比是站在巨人肩膀上,這並不是一個新的概念,但在今日這種方式已經成為了應用開發的絕對主流。人們極少選擇重頭開發,而是將選擇自認為最好最適合的框架,研究其應用介面並編寫連線到這些介面的程式碼來當作是最有意義的工作。網站頁面離不開HTML和CSS;而程式碼部分則會以Ext JS、ExpressJS等為基礎。

當然,你可以選擇拋棄一切,重頭開發,但是那意味著你是在自尋死路,因為你一個人的工作始終無法與一大群人相比。你需要明白,成為一個框架改良者才是你要做的事,如果你想編寫程式碼的話,你要做的就是停止重頭開發找到一個現成的好框架去改良它。

3.  庫

庫是框架的近親,是常用程式碼的集合,程式設計師的開發離不開它。有誰可以在不使用jQuery庫的情況下編寫瀏覽器的程式碼?有誰能記住內建函式GetElementByID寫的是什麼?也許極少有人能夠做到吧,jQuery這樣的庫已經廣泛的管理著各個層面的堆疊了。

人們經常談論他們最喜歡的語言,卻很少談論這些語言是如何工作的。如果你打算僱傭程式設計師,你應當瞭解他對庫方面的瞭解情況。比如,JavaScript程式設計師瞭解jQuery和 Dojo tribe這一類庫麼?會使用C++的程式設計師知道Allegro、Unity、Corona和其它的庫麼?對庫的瞭解和對程式語言來龍去脈的瞭解同樣重要!

4.  API

在以前,程式設計師們會很擔心資料結構,他們將資訊包裝成位元組塊,並挨個逐一統計位元組個數,以確保指標中的值能安排正確的間隔。如今,謝天謝地,編譯器幫我們幫處理了這一麻煩的事。

目前,我們使用更加嚴謹的介面來處理這個工作,它有一個動聽的好名字:API。它們被安裝在完全不同的機器上,由完全不同的公司管理著,處理著我們的每一次請求。當你需要將一個街道地址和一個郵政編碼轉化成經緯度時,只需要一點錢,購買一個API就可以幫你完成關於這個問題的所有答案。

在大多數情況下,資料不需要被緊密包裝,那些清點位元組的老遊戲已經被JSON、XML等可分析的資料結構所代替了,當你需要在某個位置插入正確的標點的時候,已經有一個程式庫在等著幫你處理了。

5.  PaaS

現在也許再也用自己來構建網站了。我們可以在別人的網站上建立一個賬戶並進行定製。需要的只是網頁表單上的一些欄位,你的新網站就可以擁有所有你想要的功能了,比如上傳一個關於貓的視訊到YouTube上或者在eBay上為一個糖果盒出價。

當然,這有點誇張。如今許多PaaS選項需要程式設計師能夠熟知每個網頁表單需要放入什麼。例如,Microsoft Azure平臺需要你放入一些能夠描述網站如何響應的JavaScript函式,然後Azure就會把它們包裝成正確的庫並把它們執行在Node.js上。

6.  瀏覽器

以前有段時間,程式設計師編寫的桌面軟體、伺服器軟體以及裝置軟體都是不同的。它們都有各自與使用者溝通的方式。現在這些東西都通過瀏覽器了,當我在家裡建立一個本地檔案伺服器用於儲存音樂,我會將它放到網站上並定位一個URL地址。蘋果的桌面小工具多年來一直使用JavaScript和HTML。而許多跨平臺的移動應用程式也都是從HTML和附帶了Apache Cordova的JavaScript開始的。

當然,也有一些例外。最好的遊戲仍然使用自定義應用,不需要瀏覽器。但是這一切也在慢慢的改變,越來越多的JavaScript開發人員找到了如何編寫螢幕畫布物件(可參見用CSS3繪製的湯普森一家)。而憤怒的小鳥等遊戲已經執行在了瀏覽器視窗中。

7.  應用程式容器

構建伺服器在過去是一件艱苦的工作。程式設計師想要在其它地方執行他們的程式碼,需要向團隊的伺服器管理員傳送關於哪些軟體需要安裝的備忘錄。有些時候伺服器呼叫了正確的庫,但是有些時候卻沒有,這就需要重新再弄。

現在,象Docker這樣的應用程式容器可以讓我們只需一個按鈕就可以將所有庫正確的打包到可移植的容器中。如果它能夠執行在我們的測試機上,那麼它就幾乎肯定可以執行在伺服器上。由於所有的東西都是相互捆綁在一起的,所以大多數工作平臺和伺服器的相容性問題將蕩然無存。

8.  IaaS

前面提到的伺服器管理員到哪裡去了?在過去這些人可都是悠閒的很啊。現在的伺服器管理員你已經看不到了,他們已經被抽象出來放進了雲層裡,作為全球範圍內的資料中心從事著過去伺服器管理員的工作,管理著從雲端這頭到那頭的不同公司。很少有程式設計師需要基礎設施團隊為他們的新專案構建一個新的伺服器。大多數的人只需要登入一個網站,按一個按鈕,使伺服器執行就可以了。這一切都如此容易,這些IaaS管理網站讓你無需再專門為伺服器管理員開一份薪水,也將伺服器管理員從整日圍著伺服器轉的牢獄中拯救了出來。

9.  Node.js和JavaScript

在很多程式設計師都還沒有誕生的時候,Web伺服器只支援靜態HTML。然後有人想到了如何建立與資料庫互動的動態伺服器。那個時候,每一個團隊都需要一個人編寫SQL資料庫,一個人用PHP或者Java編寫伺服器程式碼,一個人去設計HTML模板。當客戶端的AJAX和JavaScript技術風靡的時候,網站還需要有人會使用這些語言。

現在,這些都是由JavaScript技術來完成了。在瀏覽器方面使用的是JavaScript,而在伺服器層和資料庫層則分別是由Node.js和MongoDB/CouchDB來完成。甚至對於HTML頁面,都可以使用JavaScript程式碼在Ext JS或者jQueryMobile框架上進行客戶端生成來完成。

10.  二級市場

如果你正在做一款遊戲,你可以請設計師來為你設計令人驚歎的模型,甚至可以請幾個程式設計師來幫你新增視覺效果使遊戲看起來更酷。當然你也可以選擇去二級市場購買開發需要的東西,這跟去實體零售店去購買需要的物品一樣。當我在寫這篇文章的時候,二級市場的一個下水道場景拼圖工具包正在打折,這是一個用於構建不同尺寸的下水道遊戲場景的模組化工具包。但即使是恢復原價,這個工具包的價格也不會超過45美元。如果換作是設計師或者程式設計師,你開這個價格他肯定不會做了。

這些出售外掛、擴充套件包、庫和其它附件的二級市場現在變得越來越火爆了。與前面所說的庫和框架一樣,通過合適的價格購買需要的部件,無需過多的程式設計就可以融入開發專案中。在國內,這一類二級市場通常被稱為控制元件網。

11.  虛擬機器

為矽片寫程式碼的日子已經離我們遠去了。現在我們的大部分程式碼都執行在虛擬機器上,它能夠把你的指令轉化成晶片能夠理解的語言。Java虛擬機器、C#/.Net虛擬機器以及現在的JavaScript引擎成為了編寫程式碼的最主要物件。

大受歡迎的虛擬機器不斷地將許多東西吸收進堆疊裡。在過去,如果你想建立一個新的語言,你需要構建從前處理器到暫存器分配器的整個堆疊。現在新的語言站在了虛擬機器這個巨人的肩膀上。

Clojure、Scala、Jython、JRuby等語言都使用了Sun公司(現在已經Oracle公司的一部分了)的偉大虛擬機器技術。

瀏覽器的世界與上面所述很相似。你可以選擇建立自己的瀏覽器和語言,或者在 JavaScript上作為模擬進行交叉編譯。這就是人們構建CoffeeScript這樣的清理工具想要完成的事。如果你覺得這樣很容易混淆,谷歌產品GWT(Google Web Toolkit)還可以幫你把Java轉換成JavaScript。

12.  社交媒體網站

在早期的網際網路,當你建立網站的時候,你會交叉手指祈禱大家能夠找到它,當大家找到它之後,如果需要再次訪問這個頁面則必須記住它的URL地址。

現在,越來越多的網頁被放進了Facebook或者Salesforce這樣的大容器裡,如果你建立了自己的網站,可能只有很少的人來訪問它,因為絕大多數使用者都去點選訪問Facebook或者Salesforce這樣的社交媒體網站了。

而具體的解決方案就是建立一個Facebook或Salesforce的應用,它們會讓你加入進來,然後將你的網頁整合進來成為平臺上的一個點。可是到頭來,你的應用仍然會受到很大的限制和操控。可是,你還有什麼辦法呢?要麼為選擇大型入口網站服務,要麼選擇被網際網路洪流所吞沒。

13.  開發工具

曾幾何時,我們在伺服器上安裝的軟體非常單一,現在我們租用大量伺服器來滿足成百上千臺機器的需求,這些伺服器為滿足不同需求,需要更新多種最新軟體,它們能夠自動完成這些用手動不能勝任的工作。

進入“devops”模式,那些基礎工具如Chef和Puppet可以幫助你完成伺服器的維護。將最新的軟體放置在雲端,這些工具將會通過讓每臺機器執行相同的程式碼來處理這些工作,它們自動化的完成了我們過去在每臺機器手動處理的事情。

某些服務專案如Google App Engine已經著手從內部處理這些工作了。你所要做的全部工作就是上傳你的應用程式,然後它就會自動為你服務了。除了能夠看到CPU的使用狀況清單,你甚至在不知道後臺都發生了什麼的情況下就完成了軟體的更新和維護。

14.  GitHub、SourceForge等程式碼共享的社交平臺

程式碼共享網站為開源世界作出了最大貢獻,在SourceForge等出現以前,軟體就是由你自己來編寫並且只能與自己分享成果的東西,如果某人想要複製你的程式碼,在徵求到你的同意後,他們需要從你這裡接收一個tar壓縮檔案包。

現在程式碼共享已經成為社交網路的一部分。SourceForge和GitHub等網站會發布所有程式碼供大家觀看和下載。它們將程式的維護、共享和程式碼註釋合併到了一個易於訪問的地方。你可以在同一個介面閱讀程式碼並提出修改建議。這就是為什麼許多專案在一週時間時間內有數萬甚至數十萬的訪問次數,而這在以前是絕不可能出現的。

這種程式碼共享的主流模式被大多數專利專案推崇,象GitHub和BitBucket這樣的網站都支援它們為出售非公開儲存庫而將專案程式碼共享給許可權受限的使用者群的做法。

15.  效能監控

在最早的時候,程式碼跟蹤是非常簡單的事情。當編碼開始時開始列印,編碼結束時列印終止。如果你有了一些新的想法,那麼你可以在原來的程式後面增加一些關於調整的運算。

但現在,這種方式已經過時了,許多問題都不僅發生在機器本身,就算新增一個程式碼分析器也並不能完全解決問題,因為故障原因還包括網路線路以及資料庫緩慢等方面。現代工具追蹤網路要求軟體網路與獨立模組的效能一致,這是辨別是否正常工作的唯一方法。

本文翻譯自15 technologies changing how developers work
相關閱讀
評論(1)

相關文章