热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【转】程序语言不是工具

在谈论到程序语言的好坏的时候,总是有人说:“程序语言只是一种工具。只要你的算法好,不管用什么语言都能写出一样好的程序。”在本科第一堂编程课上,我的教授就这么对我们说。可是现在我却发现,这是一个根本错误

在谈论到程序语言的好坏的时候,总是有人说:“程序语言只是一种工具。只要你的算法好,不管用什么语言都能写出一样好的程序。”在本科第一堂编程课上,我的教授就这么对我们说。可是现在我却发现,这是一个根本错误的说法。

我不知道这种说法确切的来源,然而昨天在浏览网页的时候,偶然发现了 C++ 的设计者 Bjarne Stroustrup 的一些类似的说法。这些说法来自于 2007 年 MIT Technology Review 对 Stroustrup 的。

  • 问:一个好的语言是什么样的?
    Stroustrup:所有能帮助人们表达他们的想法的东西都会让语言更好。一个语言在一个好的工匠手里应该能胜任每天的任务。语言是否优美是次要的问题。被认为是丑陋的语言开发出来的有用的系统,比优美的语言开发出来的系统要多得多。

  • 问:优雅难道不重要吗?
    Stroustrup:优雅很重要,可是你如何衡量“优雅”?可以表达问题答案的最少字数?我觉得我们应该看构造出来的应用程序的优雅程度,而不是语言自身的优雅程度。就像你不能把木工的一套复杂的工具(很多是危险的工具)叫做“优雅”一样。但是我的餐桌和椅子却真的很优雅,很美。当然,如果一个语言本身也很美,那当然最好。

一些基本的错误

对这两个回答,我都不满意,我觉得这只是他对于 C++ 的恶劣设计的借口而已。下面我对其中几个说法进行质疑:

所有能帮助人们表达他们的想法的东西都会让语言更好。

作为一个程序语言,并不是好心想“帮助人”就可以说是好的。如果是这样的话,那么我就可以把所有国家的脏话都加到你的语言里面,因为它们可以帮助我们骂人。

被认为是丑陋的语言开发出来的有用的系统,比优美的语言开发出来的系统要多得多。

系统的数量再多也不能说明这个语言好。正好相反,众多的系统由于语言的一些设计失误,把人们的生命置于危险之中,这说明了这个语言的危害性之大。一种像本身就带有病毒一样的语言,用的人越多越是危险。

语言不是工具,而是材料

我这篇文章想说的最关键的部分,其实是他所支持的“语言工具论”的错误。

Stroustrup 说:

我觉得我们应该看构造出来的应用程序的优雅程度,而不是语言自身的优雅程度。就像你不能把木工的一套复杂的工具(很多是危险的工具)叫做“优雅”一样。但是我的餐桌和椅子却很优雅,很美。

他的言下之意就是把程序语言比作木工的工具,而餐桌也椅子就是这些工具做出来的产品。比方的威力是很大的,很多人一见到大牛给出这么形象的比方,想都不用想就接受了。如果你不仔细分析的话,这貌似一个恰当的比方,然而经过仔细推敲,这却是错误的比方。这是因为程序语言其实不是一种“工具”,而是一种“材料”。

木工不会把自己的锯子,墨线等东西放进餐桌和椅子里面,而程序员却需要把语言的代码放到应用程序里面。虽然这些程序经过了编译器的转化,但是程序本身却仍然带有语言的特征。这就像一种木材经过墨线和锯子的加工,仍然是同样的木材。一个 C++ 的程序在编译之后有可能产生内存泄漏和下标越界等低级错误,而更加安全的语言却不会出现这个问题。

所以在这个比方里面,程序语言所对应的应该是木工所用的木料,钉子和粘胶等“材料”,而不是锯子和墨线等“工具”。这些材料其实随着应用程序一起,到了用户的手里。那么对应木工工具的是什么呢?是 Emacs, vi, Eclipse,Visual Studio 等编程环境,以及各种编译器,调试器,make,界面设计工具,等等。这些真正的“工具”丑一点,真的暂时无所谓。

现在你还觉得程序语言的优雅程度是次要的问题吗?一个复杂而不安全的语言就像劣质的木料和粘胶。它不但会让餐桌和椅子的美观程度大打折扣,而且会造成它们结构的不牢靠,以至于威胁到用户的生命安全。同时它还可能会造成木工的工作效率低下以及工伤的产生。

这也许就是为什么我的一个同事说,他看 C++ 代码的时候都会带上 OSHA(美国职业安全与健康管理局)批准的护目镜。


推荐阅读
  • Python数据分析入门指南:全面了解Python在数据科学中的应用 ... [详细]
  • Java中高级工程师面试必备:JVM核心知识点全面解析
    对于软件开发人员而言,随着技术框架的不断演进和成熟,许多高级功能已经被高度封装,使得初级开发者只需掌握基本用法即可迅速完成项目。然而,对于中高级工程师而言,深入了解Java虚拟机(JVM)的核心知识点是必不可少的。这不仅有助于优化性能和解决复杂问题,还能在面试中脱颖而出。本文将全面解析JVM的关键概念和技术细节,帮助读者全面提升技术水平。 ... [详细]
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • 探索 PHP 8.0 的重大更新:轻松获取年度月份数据
    PHP 8.0 引入了多项重要更新,包括增强的类型系统、全新的 JIT 编译器以及联合类型等特性。这些改进不仅提升了性能,还简化了开发流程。本文将重点介绍如何利用 PHP 8.0 的新功能轻松获取年度和月份数据,为开发者提供更高效、更简洁的解决方案。 ... [详细]
  • 欢迎来到Netgen新时代:探索网络生成技术的无限可能
    欢迎进入Netgen的新时代:探索网络生成技术的无限潜力。本文将详细介绍如何编译下载的Netgen源代码,生成Netgen程序,并提供开发所需的库nglib。此外,还将探讨Netgen在现代网络设计与仿真中的应用前景,以及其在提高网络性能和可靠性方面的关键作用。 ... [详细]
  • Android平台生活辅助应用的设计与开发实现
    随着移动互联网技术的迅猛发展,Android操作系统已成为移动设备中的主流平台。本文探讨了基于Android平台的生活辅助应用设计与开发,旨在通过创新的功能和用户友好的界面,提升用户的日常生活质量。研究不仅涵盖了应用的核心功能实现,还深入分析了用户体验优化的方法,为同类应用的开发提供了有价值的参考。 ... [详细]
  • 优化后的标题:AppVeyor CI: 集成 Microsoft Visual C++ 编译环境的持续集成解决方案 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • C#编程指南:实现列表与WPF数据网格的高效绑定方法 ... [详细]
  • 探讨 `org.openide.windows.TopComponent.componentOpened()` 方法的应用及其代码实例分析 ... [详细]
  • 成功实现Asp.Net MVC3网站与MongoDB数据库的高效集成
    我们成功地构建了一个基于Asp.NET MVC3框架的网站,并实现了与MongoDB数据库的高效集成。此次更新不仅完善了基本的创建和显示功能,还全面实现了数据的增删改查操作。在创建功能方面,我们修复了之前代码中的错误,确保每个属性都能正确生成。此外,我们还对数据模型进行了优化,以提高系统的性能和稳定性。 ... [详细]
  • 在VC环境中,掌握高效的调试技巧和高级应用对于提高开发效率至关重要。本文详细介绍了如何通过检查程序中的括号匹配来避免常见的语法错误。具体操作包括将光标置于待检测的括号(如大括号 {}、方括号 [] 和圆括号 ())上,系统会自动高亮显示对应的配对括号,从而帮助开发者快速定位和修复问题。此外,文章还探讨了其他实用的调试工具和方法,如断点设置、变量监视和调用堆栈分析,以全面提升代码调试的准确性和效率。 ... [详细]
  • 手机上编写和运行PHP代码的最佳软件推荐 ... [详细]
author-avatar
mobiledu2502880051
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有