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

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

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

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

相关文章
|
程序员
程序员的奇怪规范:编程界的特殊文化
在程序员的世界里,有一些奇怪但又约定俗成的规范,这些规范看似荒谬,却成了编程行为的一部分,让人啼笑皆非。
|
4月前
|
Rust 安全 Go
揭秘Rust语言:为何它能让你在编程江湖中,既安全驰骋又高效超车,颠覆你的编程世界观!
【8月更文挑战第31天】Rust 是一门新兴的系统级编程语言,以其卓越的安全性、高性能和强大的并发能力著称。它通过独特的所有权和借用检查机制解决了内存安全问题,使开发者既能享受 C/C++ 的性能,又能避免常见的内存错误。Rust 支持零成本抽象,确保高级抽象不牺牲性能,同时提供模块化和并发编程支持,适用于系统应用、嵌入式设备及网络服务等多种场景。从简单的 “Hello World” 程序到复杂的系统开发,Rust 正逐渐成为现代软件开发的热门选择。
74 1
|
4月前
|
程序员 数据处理 开发者
揭秘!程序员那些让人哭笑不得的“怪癖”:编程界的奇葩规范与隐秘文化大起底!
【8月更文挑战第25天】程序员的世界就像一片神秘且充满趣味的森林,每行代码都是探索未知的脚步。特殊的注释语言如“// 这里的逻辑比黑洞还深”,传递着程序员间的幽默与无奈。变量命名如magicNumber或函数名performUnexplainedMiracle,既随意又深藏设计者的思考与骄傲。代码审查不仅仅是技术讨论,更涉及编程哲学和个人偏好,甚至因空格与制表符之争而引发“战争”。程序员对代码整洁度的执着追求,展现了一种对美的追求。这些奇怪的习惯与规范构成了编程世界中独特而迷人的风景。
51 1
|
7月前
|
存储 搜索推荐 程序员
SnippetsLab:程序员的秘密武器
SnippetsLab:程序员的秘密武器
243 0
|
人工智能 自然语言处理 程序员
ChatGPT 的出现会导致底层程序员失业吗?
ChatGPT 的出现会导致底层程序员失业吗?
100 0
|
小程序 安全 前端开发
【创造者】关于小程序的开发
【创造者】关于小程序的开发
79 0
|
人工智能 Dart 安全
关于当今软件开发的四件会让过去的程序员大吃一惊的事
  过去的盲点给我们提供了另一种思考未来的方式。 技术变革的步伐并没有放缓。 在一两年之内,我们大多数人仍然会思考世界。 我们期待着很多变化,并且我们花了大量时间想象它们。 但是在雷达之下发生了什么? 我们期望哪些发展永远不会实现? 我们今天很少有人期望发生什么革命?   软件开发改变了世界。 我们只看到其中一些即将到来。关于当今软件开发的四件会让过去的程序员大吃一惊的事
175 0
|
程序员
软技能,程序员编程之外的升值之道!
程序员,除了编码之外的软技能有哪些呢?《软技能——代码之外的生存指南》33岁实现职业自由、财富自由的作者给出了解读。
6462 0
软技能,程序员编程之外的升值之道!