`
OneAPM_Official
  • 浏览: 25135 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

爱恨交织!我们经常抱怨却离不开的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,nullNaN 以及 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

 

 
分享到:
评论

相关推荐

    爱恨交织分集剧情参考.doc

    爱恨交织分集剧情参考.doc

    7*7块交织器

    在本案例中,我们讨论的是一个使用VHDL语言实现的7x7块交织器,这是一个硬件描述语言,常用于设计可编程逻辑器件,如FPGA或ASIC。 VHDL(VHSIC Hardware Description Language)是一种高级的抽象语言,它允许设计者...

    QPP交织器_qpp交织器系数选择_qpp_QPP交织器_althoughcx7_

    在本主题中,我们将深入探讨QPP交织器的原理、其系数选择的重要性以及与"althoughcx7"相关的具体应用。 首先,交织是 Turbo码中的关键步骤,它的目的是打乱输入数据流,使得连续的错误在经过解交织后变得分散,从而...

    卷积交织器解交织器设计.zip_交织_交织器_交织技术_分组交织器_卷积交织

    卷积交织器与解交织器是通信领域中用于提高数据传输可靠性的关键技术,尤其是在数字无线通信系统中。这些技术主要用于对抗信道中的突发错误,通过重新排列数据位,使得单一的错误事件不会影响到连续的多位,从而提高...

    爱恨交织的快递业:三十个亿砸不出一个新顺丰.docx

    爱恨交织的快递业:三十个亿砸不出一个新顺丰.docx

    ofdm_phy.zip_OFDM 交织_交织_交织 解交织_信道 交织_自适应

    OFDM(Orthogonal Frequency Division Multiplexing,正交频分复用)是一种高效的数字调制技术,广泛应用于现代宽带通信系统,如Wi-Fi、4G/5G移动通信等。在无线通信领域,OFDM通过将高速数据流分割成多个低速子数据...

    turbo_dinter_verilog_XILINXFPGA_交织解交织_turbo电力通信_

    Turbo码是一种强大的前向错误校正(FEC)编码技术,通过交织过程将数据流打乱,使得连续的错误在解交织后分散开,从而提高错误检测和纠正的能力。 在Verilog中,硬件描述语言(HDL)用于构建数字逻辑系统。本项目中...

    交织解交织

    在通信领域,交织技术是一种重要的信道编码方法,主要用于抵抗多径衰落和突发错误,以提高数字通信系统的可靠性。标题“交织解交织”指的就是这个过程中的两个关键步骤:交织和解交织。 交织(Interleaving)是将...

    循环交织、解交织

    循环交织、解交织。交织时按列写入,按行读出。解交织则相反。

    交织解交织vhdl代码

    用VHDL语言编写的实现交织编码和解交织功能的代码。交织采用按行写入,按列读出的方法实现。主要包括:信源信号产生(20位的m序列),交织器,解交织器。为实现流水线的操作,采用了两个交织器和两个解交织器,当一...

    VHDL实现块交织

    VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种用于电子设计自动化领域的硬件描述语言,它允许工程师以一种类似于高级编程语言的方式描述数字系统,包括逻辑门、微处理器、存储器...

    用块RAM实现卷积交织解交织

    ### 使用块RAM实现卷积交织解交织 #### 概述 在数字通信系统中,为了提高数据传输的可靠性,常采用交织技术对抗突发错误。本文详细介绍了一种利用块RAM(Block RAM)替代传统FIFO移位寄存器来实现卷积交织与解交织...

    一种改进的随机交织器的设计

    【随机交织器的基本原理】 随机交织器是一种在通信系统中广泛使用的编码技术,尤其是在Turbo码中起到关键作用。它的主要任务是打乱输入数据序列的原有顺序,以提高抗干扰能力。在通信过程中,数据可能会遇到突发性...

    ofdm 交织编码的Verilog实现

    OFDM(正交频分复用)是一种广泛应用于现代无线通信技术,如Wi-Fi和4G/5G网络中的调制技术。它通过将高速数据流分割成多个较低速率的数据流,并在不同的子载波上进行传输,以提高频谱效率和抗多径衰落的能力。交织...

    卷积交织技术原理及其FPGA实现.pdf

    卷积交织技术是一种数字通信领域中提高信号传输质量的重要技术,尤其在通信系统中结合纠错码使用时,能够显著提升系统的抗干扰能力。卷积交织与解交织的原理及其在FPGA(现场可编程门阵列)上的实现是本文讨论的核心...

    解交织器verilog编程

    解交织器是通信系统中的一种功能单元,它的主要任务是对已经交织的数据流进行逆操作,恢复原始顺序的数据序列。在通信系统中,交织技术常用于增加错误纠正能力,提高系统的抗干扰性能。当数据在传输过程中出现错误时...

    这是本人写的以RS73编码来模拟CMMB的RS编码及字节交织-RS(7,3)编码和字节交织.rar

    这个压缩包文件“RS(7,3)编码和字节交织.rar”似乎包含了一个使用MATLAB编写的程序,该程序用于模拟中国移动多媒体广播(CMMB)标准中的RS(7,3)编码和字节交织过程。 RS(7,3)编码是一种特定的RS编码变体,其中“7”...

    VHDL实现块交织编码

    VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种用于描述数字系统的硬件描述语言,它可以用来设计、验证和实现数字逻辑系统,包括块交织编码器。 在“VHDL实现块交织编码”的项目...

    通信中的交织编码及其MATLAB仿真

    ### 通信中的交织编码及其MATLAB仿真 #### 一、交织编码的概念与原理 交织编码是一种重要的信道编码技术,主要用于提高通信系统的抗突发错误能力。在数字通信中,信号在传输过程中可能会遇到噪声或者干扰,导致...

Global site tag (gtag.js) - Google Analytics