爱恨交织!我们经常抱怨却离不开的7种语言

【编者按】本文作者 Peter Wayner 是 InforWorld 特约编辑,也是超过16本书的作者,其著作涉及开源软件、全自动汽车、保密加强型计算、数字交易等广泛题材。其最新著作为《未来的驾座(Future Ride)》第二版,主要描绘全自动汽车在未来将如何改变世界。本文系国内 ITOM 管理平台 OneAPM 编译呈现,以下为正文。

但凡是以编程为生的人,肯定不会给出不要心怀怨怼的好意规劝。只要经历过复杂到万劫不复的逻辑,你就会了解那些最糟糕的程序错误有多恐怖。

当然,每个人都会爱上他们最早相遇的计算机语言。为什么不呢?最简单的“hello world”示例,短短三行代码就能表现出这门语言的神通广大。虽然编程语言应该具备隐含逻辑,但这并不意味着他们的逻辑应该随处可见。一个讨人喜欢的酒保能使整个酒吧的气氛更加欢乐。一个勇敢的消防员会辐射出鼓舞人心的胆量。但是,编程语言的逻辑机制却往往孕育出不合逻辑、混乱甚至疑惑。

不过,声称编程语言没有逻辑显然是不合常理的。但我们还是经常这么说,因为我们知道逻辑也有其限制。从 Gödel 到 Turing,我们逐渐意识到逻辑机制在其边缘地带也会催生出可怕的场景。当然,这可能是我们人类的责任,因为我们的误用或编程不当所致。但是,如果编程语言促使我们选择了危险的道路,语言本身也是难辞其咎的。

而且,我们往往对此无能为力。已经安装好的基础环境或许太大,因此我们无法放弃让自己恼怒的语言。老板可能特别钟爱某个技术栈,以致于无法容忍来自办公桌的怨言。更为残忍的现实是:你没有更好的选择。我们已经在使用人类所能打造的最佳工具了。

以下是7种我们常常抱怨但却离不开的编程语言。

1、C

有关该语言的问题如此之多,以致于它更应被称为“可移植汇编器”,而不是完整的计算机语言。有人喜欢编写分开的头文件么?有人在用预处理器处理复杂的内容时不会感到烦躁么?

理论上,我们应该可以运用指针运算巧妙地实现丰功伟绩,但是大家除了用其分配数据结构,还做了什么呢?巧妙地利用指针是否真的值得鼓励?这正是代码开始崩坏的地方。如果你能巧妙地使用指针,往往还需要编写非常长的注释以实现完善的文档,而这常常会消耗很长的时间,甚至抵消了巧妙代码所节省的时间。有人能记住为了避免所有可能的安全漏洞(比如缓存溢出)所需牢记的所有 C 语言编写规则么?

但是,我们别无选择。Unix 是用 C 语言写的,而前者运行着大多数手机与大多数云。并非每个为这些平台编写代码的程序员都需要使用 C 语言,但是总得有人熟悉星号与花括号,否则一切都可能崩塌。此外,还有许多设备驱动程序与其他嵌入式程序。总得有人承担维护 Linux/Unix 代码库并不断开拓进取的重担。

2、JavaScript

JavaScript 的创造者试图打造更为先进的语言。可惜的是,他们的聪明智慧导致我们要不停地计算花括号,方括号以及圆括号的数量——同时还要保证它们的嵌套合理。此外,在匿名函数、闭包以及 JSON 数据结构之间的往来调停,导致我们总是在键盘上忙个不停。

此外,还有许多奇奇怪怪的细节。假设 x 是包含着字符 1 的一个字符串,则 x+1 会得到字符串 11,而 x-1 会得到数字零。有人记得 false,null, NaN 以及 undefined 之间的区别么?他们看起来很相似,但是 JavaScript 为什么要设置它们四个呢?而且,它们为什么表现不一致呢?

不过,我们抱怨再多也没有用。网络、万维网以及不计其数的浏览器并不会因此改变。并且,机灵的 Node.js 团体来了,迫使我们在服务器端编写 JavaScript 代码。坚持不用 JavaScript 的想法估计只能持续几秒钟,一旦开始检查邮箱,或者网络购物,就只好屈服了。笔者相信,JavaScript 会相伴我们很久很久。

3、PHP

PHP 其实不算真正的计算机语言。它更像是为静态 HTML 添加智能的工具。你可以在数据库中存储信息,并使用静态标签连结这些信息。可能还存在一些别的特性,但对笔者而已,PHP 的主要功能是连结从数据库中抓取来的字符串。

不过,争论无足轻重的代码或幼稚的语法显然没有必要。现而今,大多数网站都是用 PHP 搭建的。WordPress, Joomla 以及 Drupal,大多数网站内容都是通过 PHP 代码呈现的。此外,还有用 PHP 搭建的 Facebook,越来越多地占用了人们花在网络上的时间。我们应该感到高兴,Facebook 开发了 HipHop 虚拟机,启发 Zend 打造了 PHP 7.0。这些全新的 PHP 引擎往往能带来两倍的速度提升,节省数百万元的电力,这几乎是令人无法抗拒的诱惑。在未来,PHP 仍将继续保持活力。

4、Cobol

Cobol 早在1959年就出现了。按理说,它应该是充满百来个限制词,语法复杂的老古董才对。但是,Cobol 的拥趸仍在不断更新其版本,从其他语言中借鉴新思想,再融入年近六旬的框架中。你知道 Cobol 2014 么?它包含了动态表格——人们早在2002年就想将其纳入该语言。Cobol 其实没有那么老。你以为它在70年代就无人问津了?其实你大错特错了。

我们可能拥有更好的用来编写业务逻辑以操控数据库的工具,但是没人在意这些工具。原因是,我们只需购买一个更大的计算机,就能让 Cobol 代码继续运行。在笔者写这篇文章时,Dice.com 网站上有543个涉及“Cobol”的任务。在保险公司与国防承包商的系统中,充满了 Cobol 任务。最早采用大型主机的企业们还在使用 Cobol,并且能够顺利完成工作。计算机科学家可能会有些退缩,但是只要客户还在稳定增长,老板会说:“既然还没坏,就不用修了。再买一台大型机吧。”

5、XSLT

所有人一开始都会爱上 XSLT,一种转换 XML 的函数式语言。当你需要抽取 XML 文档的零碎片段时,XSLT 是能够顺利运行的智能方案。但是,一旦老板要求一些比简单的搜索、替换更为复杂的数据,开发就会陷入困境。XSLT 是显式的函数式语言,我们很快就会发现,当文档中出现“变量(variable)”时,其使用方法更像是代数老师,而非程序员的做法。仔细想想 XSLT 专家 Bob DuCharme 充满禅意的这句话吧:”XSLT 变量实际上与许多编程语言中的常量有很多相似点,并且使用目的也很相似。“如果你想把 XSLT 中的变量用得像其他计算机语言中的变量一样——也即,其值可变——你要非常聪明才行。

XML 或许正失势于 JSON 之类更加高效的数据格式,但它仍是许多大数据处理器的强有力基础。你可以不使用 XSLT,转而编写能解析文本自身的基础代码。然而,编写这些代码以解析 XML 往往比掌握 XSLT 结构更加费时费力。

6、Java

Java 虚拟机与函数库可能来自90年代,但是其语法却来自 C 语言诞生的70年代。自动内存管理似乎是很大的进步,但是当垃圾回收程序占据主动时,应用代码就得歇一歇了。Android 开发者常常交换意见,讨论何时适当地提早请求垃圾回收,从而确保在重要事件,诸如急救电话中途避免垃圾回收。

Java 开发者已经就诸多问题抱怨了很长时间,其中一些问题可能已经得到 Oracle 的解决,或至少引起了一定的重视。但是,这引来了一个新问题。一些新的代码与库没法与旧版本的 VMs 兼容。笔者曾经花了一天的时间探索 java.lang.UnsupportedClassVersionError,但未能找到永久的解决方案。似乎,自 1.4 之后的每个 Java 版本,都是一种新语言。

不过,以上问题都不重要。Java 是 Web 与移动手机的基础。它是许多高中开授的第一种计算机语言。其函数库的集合比几乎任何一种语言都更为丰富,也更具价值。为何还要使用其他语言呢?

7、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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • 过去的几十年间,大量的编程语言被发明、被替换、被修改或组合在一起。每种语言总在争论中诞生,又在进化中消亡。而这些语...
    OneAPM_Official阅读 700评论 0 7
  • 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及...
    dle_oxio阅读 11,091评论 6 244
  • 试着用excel的格子来呈现,就像做十字绣。 非常难的两点,一是如何用马赛克的条件来表现线条,二是如何准确的还原深...
    尚涛易捷北京阅读 239评论 0 0
  • 中国的网络很奇特,你总是会在上面看到:如果你在中国,会发生什么。 会发生什么?是不好的事情对么?这样的句子看多了,...
    我开始写影评了阅读 142评论 0 0
  • 昨天下午被医生叫到医院做手术前的沟通。医生要详细给我们讲解我的病情和整个手术的过程,当然必然包括手术过程中可能的风...
    唐杰tj阅读 302评论 0 0