愛恨交織!咱們常常抱怨卻離不開的7種語言

【編者按】本文做者 Peter Wayner 是 InforWorld 特約編輯,也是超過16本書的做者,其著做涉及開源軟件、全自動汽車、保密增強型計算、數字交易等普遍題材。其最新著做爲《將來的駕座(Future Ride)》第二版,主要描繪全自動汽車在將來將如何改變世界。本文系國內 ITOM 管理平臺 OneAPM 編譯呈現,如下爲正文。javascript

但凡是以編程爲生的人,確定不會給出不要心懷怨懟的好意規勸。只要經歷過複雜到萬劫不復的邏輯,你就會了解那些最糟糕的程序錯誤有多恐怖。php

固然,每一個人都會愛上他們最先相遇的計算機語言。爲何不呢?最簡單的「hello world」示例,短短三行代碼就能表現出這門語言的神通廣大。雖然編程語言應該具有隱含邏輯,但這並不意味着他們的邏輯應該隨處可見。一個討人喜歡的酒保能使整個酒吧的氣氛更加歡樂。一個勇敢的消防員會輻射出鼓舞人心的膽量。可是,編程語言的邏輯機制卻每每孕育出不合邏輯、混亂甚至疑惑。html

不過,聲稱編程語言沒有邏輯顯然是不合常理的。但咱們仍是常常這麼說,由於咱們知道邏輯也有其限制。從 Gödel 到 Turing,咱們逐漸意識到邏輯機制在其邊緣地帶也會催生出可怕的場景。固然,這多是咱們人類的責任,由於咱們的誤用或編程不當所致。可是,若是編程語言促使咱們選擇了危險的道路,語言自己也是難辭其咎的。java

並且,咱們每每對此無能爲力。已經安裝好的基礎環境或許太大,所以咱們沒法放棄讓本身惱怒的語言。老闆可能特別鍾愛某個技術棧,以至於沒法容忍來自辦公桌的怨言。更爲殘忍的現實是:你沒有更好的選擇。咱們已經在使用人類所能打造的最佳工具了。node

如下是7種咱們經常抱怨但卻離不開的編程語言。程序員

一、C

有關該語言的問題如此之多,以至於它更應被稱爲「可移植彙編器」,而不是完整的計算機語言。有人喜歡編寫分開的頭文件麼?有人在用預處理器處理複雜的內容時不會感到煩躁麼?數據庫

理論上,咱們應該能夠運用指針運算巧妙地實現豐功偉績,可是你們除了用其分配數據結構,還作了什麼呢?巧妙地利用指針是否真的值得鼓勵?這正是代碼開始崩壞的地方。若是你能巧妙地使用指針,每每還須要編寫很是長的註釋以實現完善的文檔,而這經常會消耗很長的時間,甚至抵消了巧妙代碼所節省的時間。有人能記住爲了不全部可能的安全漏洞(好比緩存溢出)所需牢記的全部 C 語言編寫規則麼?編程

可是,咱們別無選擇。Unix 是用 C 語言寫的,而前者運行着大多數手機與大多數雲。並不是每一個爲這些平臺編寫代碼的程序員都須要使用 C 語言,可是總得有人熟悉星號與花括號,不然一切均可能崩塌。此外,還有許多設備驅動程序與其餘嵌入式程序。總得有人承擔維護 Linux/Unix 代碼庫並不斷開拓進取的重擔。瀏覽器

二、JavaScript

JavaScript 的創造者試圖打造更爲先進的語言。惋惜的是,他們的聰明智慧致使咱們要不停地計算花括號,方括號以及圓括號的數量——同時還要保證它們的嵌套合理。此外,在匿名函數、閉包以及 JSON 數據結構之間的往來調停,致使咱們老是在鍵盤上忙個不停。緩存

此外,還有許多奇奇怪怪的細節。假設 x 是包含着字符 1 的一個字符串,則 x+1 會獲得字符串 11,而 x-1 會獲得數字零。有人記得 false,null, NaN 以及 undefined 之間的區別麼?他們看起來很類似,可是 JavaScript 爲何要設置它們四個呢?並且,它們爲何表現不一致呢?

不過,咱們抱怨再多也沒有用。網絡、萬維網以及不可勝數的瀏覽器並不會所以改變。而且,機靈的 Node.js 團體來了,迫使咱們在服務器端編寫 JavaScript 代碼。堅持不用 JavaScript 的想法估計只能持續幾秒鐘,一旦開始檢查郵箱,或者網絡購物,就只好屈服了。筆者相信,JavaScript 會相伴咱們好久好久。

三、PHP

PHP 其實不算真正的計算機語言。它更像是爲靜態 HTML 添加智能的工具。你能夠在數據庫中存儲信息,並使用靜態標籤連結這些信息。可能還存在一些別的特性,但對筆者而已,PHP 的主要功能是連結從數據庫中抓取來的字符串。

不過,爭論無足輕重的代碼或幼稚的語法顯然沒有必要。現而今,大多數網站都是用 PHP 搭建的。WordPress, Joomla 以及 Drupal,大多數網站內容都是經過 PHP 代碼呈現的。此外,還有用 PHP 搭建的 Facebook,愈來愈多地佔用了人們花在網絡上的時間。咱們應該感到高興,Facebook 開發了 HipHop 虛擬機,啓發 Zend 打造了 PHP 7.0。這些全新的 PHP 引擎每每能帶來兩倍的速度提高,節省數百萬元的電力,這幾乎是使人沒法抗拒的誘惑。在將來,PHP 仍將繼續保持活力。

四、Cobol

Cobol 早在1959年就出現了。按理說,它應該是充滿百來個限制詞,語法複雜的老古董纔對。可是,Cobol 的擁躉仍在不斷更新其版本,從其餘語言中借鑑新思想,再融入年近六旬的框架中。你知道 Cobol 2014 麼?它包含了動態表格——人們早在2002年就想將其歸入該語言。Cobol 其實沒有那麼老。你覺得它在70年代就無人問津了?其實你大錯特錯了。

咱們可能擁有更好的用來編寫業務邏輯以操控數據庫的工具,可是沒人在乎這些工具。緣由是,咱們只需購買一個更大的計算機,就能讓 Cobol 代碼繼續運行。在筆者寫這篇文章時,Dice.com 網站上有543個涉及「Cobol」的任務。在保險公司與國防承包商的系統中,充滿了 Cobol 任務。最先採用大型主機的企業們還在使用 Cobol,而且可以順利完成工做。計算機科學家可能會有些退縮,可是隻要客戶還在穩定增加,老闆會說:「既然還沒壞,就不用修了。再買一臺大型機吧。」

五、XSLT

全部人一開始都會愛上 XSLT,一種轉換 XML 的函數式語言。當你須要抽取 XML 文檔的零碎片斷時,XSLT 是可以順利運行的智能方案。可是,一旦老闆要求一些比簡單的搜索、替換更爲複雜的數據,開發就會陷入困境。XSLT 是顯式的函數式語言,咱們很快就會發現,當文檔中出現「變量(variable)」時,其使用方法更像是代數老師,而非程序員的作法。仔細想一想 XSLT 專家 Bob DuCharme 充滿禪意的這句話吧:」XSLT 變量實際上與許多編程語言中的常量有不少類似點,而且使用目的也很類似。「若是你想把 XSLT 中的變量用得像其餘計算機語言中的變量同樣——也即,其值可變——你要很是聰明才行。

XML 或許正失勢於 JSON 之類更加高效的數據格式,但它還是許多大數據處理器的強有力基礎。你能夠不使用 XSLT,轉而編寫能解析文本自身的基礎代碼。然而,編寫這些代碼以解析 XML 每每比掌握 XSLT 結構更加費時費力。

六、Java

Java 虛擬機與函數庫可能來自90年代,可是其語法卻來自 C 語言誕生的70年代。自動內存管理彷佛是很大的進步,可是當垃圾回收程序佔據主動時,應用代碼就得歇一歇了。Android 開發者經常交換意見,討論什麼時候適當地提前請求垃圾回收,從而確保在重要事件,諸如急救電話中途避免垃圾回收。

Java 開發者已經就諸多問題抱怨了很長時間,其中一些問題可能已經獲得 Oracle 的解決,或至少引發了必定的重視。可是,這引來了一個新問題。一些新的代碼與庫無法與舊版本的 VMs 兼容。筆者曾經花了一天的時間探索 java.lang.UnsupportedClassVersionError,但未能找到永久的解決方案。彷佛,自 1.4 以後的每一個 Java 版本,都是一種新語言。

不過,以上問題都不重要。Java 是 Web 與移動手機的基礎。它是許多高中開授的第一種計算機語言。其函數庫的集合比幾乎任何一種語言都更爲豐富,也更具價值。爲什麼還要使用其餘語言呢?

七、Python

Python 是年輕程序員熱衷使用的摩登語言。其標點符號不多,因此代碼看起來更加簡潔。那有什麼缺點呢?Python 2.7 與 3.0 版本間的代溝頗爲明顯。這是使 Python 更上一層樓的惟一選擇,可是這一飛躍的幅度太大,以至於使用者必須時刻了解本身當前使用的語法版本。也就是說,咱們永遠都要記得檢查所安裝的 Python 版本。

此外,有多少人喜歡計算用來縮進代碼塊而添加的空格數?計算花括號的數量已經夠磨人了,計算空格符的數量則須要等寬字距(monospace)編輯器。

可是,這些問題並不重要。由於人文科學家們已經帶着熱情而又模糊的情感傾倒在 Python 的腳下。生物學家與經濟學家們認爲 Python 是惟一選擇。一些人甚至建議在股票與債券的售股章程中歸入對 Python 編碼的需求,好像投資銀行家能夠經過 Python,而不是精心編造的銀行學說辭忽悠咱們。

不過,好消息是,Python 語言比銀行家的」語言「更好懂。這真是一大進步——即使這意味着咱們要計算空格的數量。新的潮流已經到來,並且它收穫了許多人文科學家的支持。

本文系 OneAPM 工程師整理呈現。OneAPM 能爲您提供端到端的應用性能解決方案,咱們支持全部常見的框架及應用服務器,助您快速發現系統瓶頸,定位異常根本緣由。分鐘級部署,即刻體驗,性能監控歷來沒有如此簡單。想閱讀更多技術文章,請訪問 OneAPM 官方技術博客

本文轉自 OneAPM 官方博客

原文地址:http://www.javaworld.com/article/3074858/java-language/7-programming-languages-we-love-to-hate-but-cant-live-without.html

相關文章
相關標籤/搜索