文档章节

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

OneAPM蓝海讯通
 OneAPM蓝海讯通
发布于 2016/05/31 10:57
字数 3069
阅读 47
收藏 0

【编者按】本文作者 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

© 著作权归作者所有

OneAPM蓝海讯通
粉丝 94
博文 631
码字总数 1266889
作品 0
海淀
私信 提问
在最深的绝望里,看见最美的风景!

一个人会落泪,是因为痛;一个人之所以痛,是因为在乎;一个人之所以在乎,是因为有感觉;一个人之所以有感觉,仅因为你是一个人!所以,你有感觉,在乎,痛过,落泪了,说明你是完整不能再完...

陌尘_9353
2017/12/06
0
0
过期的热恋期

不需要每时每刻的聊天,不需要刻意的形式。 你向我投来一个眼神,我就懂你的深情。 不是新鲜感,而是灵魂的交汇。 image 什么是热恋期?不间断的聊天,每天清晨的早安,每天中午的午安和夜晚...

LiuHDme
2017/11/15
0
0
[交流乐园]开发者论坛一周精粹(第五十二期) 阿里云备案最全流程指导

为什么说编程是史上最好的工作 chenchuan 摘要:提起编程,很多程序员们会有爱恨交织的感觉,有人认为做一名从事编程工作的程序员是非常幸运的,编程是有史以来最好的工作,来看看大家怎么说...

Mr_zebra
2018/07/30
3
0
IEEE Spectrum 2017 编程语言排行榜:Python跃居第1,Swift大爆发,Java持续下滑

程序员头条(ID:CoderTop) 猿妹 编译 原文:https://spectrum.ieee.org/computing/software/the-2017-top-programming-languages IEEE Spectrum 杂志发布了2017年编程语言排行榜。这是他们...

uzv80px5v412ne
2018/01/01
0
0
思源宋体

思源宋体是 Adobe Type 发布的最新泛 CJK 字体,它是对应于 思源黑体 的宋体字体;我们发布这两种字体是为了响应统一设计的需求,以服务于东亚 15 亿人口。 思源宋体支持四种不同的东亚语言(...

匿名
2017/04/07
5.1K
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx+tomcat配置https

1、nginx配置https和【proxy_set_header X-Forwarded-Proto $scheme;】 2、java代码: String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServe......

perofu
5分钟前
1
0
必看的Linux系统新手进阶老手心得

不知道从什么时候起,linux这个话题变得越来越普及,成为大家经常讨论的话题。无论在网络上还是实际生活中,竟然很多人都在纠结学习linux的问题。网络上给的答案千千万万,而却还有很多人踌躇...

Linux就该这么学
8分钟前
2
0
Spring Boot 配置元数据指南

1. 概览 在编写 Spring Boot 应用程序时,将配置属性映射到 Java bean 上是非常有用的。但是,记录这些属性的最好方法是什么呢? 在本教程中,我们将探讨 Spring Boot Configuration Proces...

liululee
11分钟前
2
0
foreach查找子类

$list = $menu_model -> menu_list();$parent_list = [];foreach ($list as $v){ if ($v['pid'] == 0) { $parent = $v; foreach ($list as $v1) ......

小小小壮
23分钟前
2
0
基于 HTML5 Canvas 实现的 TP-LINK 电信拓扑设备面板

前言 今天我们以真实的 TP-LINK 设备面板为模型,完成设备面板的搭建,和指示灯的闪烁和图元流动。 先来目睹下最终的实现效果:http://www.hightopo.com/demo/blog_tplink_20170511/index.h...

htdaydayup
29分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部