为什么设计师创造的编程语言更受欢迎?

导读:在编程的世界里,语言纷繁多样,而大部分真正广泛流行的语言并不是那些学术界的产物,而是在通过自由发挥设计出来的。

和那些在最后期限重压下产生的语言版本比较起来,从一定程度上来看,从学术界产生出来的编程语言是失败的。当然,并不是全部。事实早已证明。本文作者Cristina Videira Lopes是一位来自加州大学欧文分校的权威计算机科学家,下面是她的关于编程语言的研究:

开发者喜欢用的语言:

  • PHP - 1994年由Rasmus Lerdorf 设计。“最初设计PHP的目的只是用在他的网络简历上来追踪访问者的,他将它命名为‘个人主页工具’,通常简称为‘PHP工具’。”根据langpop.com的非正式调查,它是排名第四流行的编程语言。
  • JavaScript - 1995年Brendan Eich开始使用。“JS(JavaScript)看起来有点儿像Java,更确切地说,像Java傻傻的弟弟一样。在10天里我只能这样做,否则就会出现比JS更糟糕的东西。”归功于网络编程,JS可能已经成为目前最流行的编程语言。
  • Python - 大约在1990年由Guido van Rossum设计。“我当时只是想找一个感兴趣的编程项目来打发下圣诞节假期的无聊。”(第六流行的编程语言)
  • Ruby  -  大约在1994年由Yukihiro "Matz" Matsumoto设计。“我只是想有一种语言可以比Perl更强大,比Python更好地面向对象,就是这促使我去设计我自己的语言。”

相对的,由那些热衷于内部一致性和正确性的学术派设计的语言却包括了一堆濒死的语言(mostly dead tongues):Fortran, Cobol, Lisp, C 以及Smalltalk。唯一的例外是.NET平台的编程语言和Java,这两项分别由微软和Sun公司花费相当大的投资才出来的项目。

回顾这一历史,以及自己的学术生涯,Lopes觉得象牙塔里创造不出适合人们使用的语言是因为其把编程当成一种科学,而实际上,它更是一种设计。

——我非常想把设计带入到我的日常生活中,我喜欢让我的学生投入到诸如程序语言和程序环境这样的设计中去——在这领域,我有很多想法。我相信对于设计的评估标准是不同于科学和数学的验证的。

Lopes说,实际上,网络迅速地发展也是因为给予了学术界的程序员自由发挥的空间。

——在与科学相违背的一个较好的设计案例就是Tim Berners-Lee向CERN提出的用HTML构建网络的建议。这个建议没有经过任何科学验证。那只是个有趣的关于“信息互联系统”的很好的建议。我甚至可以想象出TB-L的经理当时的想法:“啊,好吧,这个很有趣。他是个聪明人,他需要多少资源,我们就让他做做看,看他能做出什么来。即使最后什么都没有,也没什么大不了的。”TB-L并没有为了这个系统而先写出一份“科学设计的评估报告”,然后“在第二阶段,我们要把它装在很多的机器上”,否则今天这个世界可能会变得大不一样,因为他也许为了那些不需要的证明而陷入黑洞里了。

在程序语言里,这些很多时候可归因为人性:如果他们不好用,他们便不会被广泛采用。正因如此,有的程序语言和完整的系统(如UNIX)在某些人眼中已经被当作计算机病毒看待了。如果可以衡量,这类问题反而会变得困难。正因为是主观的,所以可以通过设计而不是科学来解决。事实上,那些计算机“科学家”仅仅是字面上的“设计者”。毕竟,代码如诗。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

状态转换图简介

状态转换图(简称为状态图)通过描绘系统的状态及引起系统状态转换的事件,来表示系统的行为。此外,状态图还指明了作为特定事件的结果系统将做哪些动作。 (一)状态 状态是任何可以被观察到的系统行为模式,一个状态代表…

C#常用单元测试框架比较:XUnit、NUnit和Visual Studio(MSTest)

做过单元测试的同学大概都知道以上几种测试框架,但我一直很好奇它们到底有什么不同,然后搜到了一篇不错的文章清楚地解释了这几种框架的最大不同之处。 地址在这里:http://www.tuicool.com/articles/F3eEn2j 简而言之,三者是非常相…

实验五 类和对象-3

1.ex3.cpp 1 #include <iostream>2 #include <vector>3 #include <string>4 using namespace std;5 6 // 函数声明 7 void output1(vector<string> &); 8 void output2(vector<string> &); 9 10 int main() 11 { 12 vector<st…

Vector用法详解

这篇文章的目的是为了介绍std::vector&#xff0c;如何恰当地使用它们的成员函数等操作。本文中还讨论了条件函数和函数指针在迭代算法中使用&#xff0c;如在remove_if()和for_each()中的使用。通过阅读这篇文章读者应该能够有效地使用vector容器&#xff0c;而且应该不会再去…

linux 共享移动硬盘,随时登陆上QQ 自带Linux移动硬盘实战

在以往我们的观念中&#xff0c;移动硬盘顶多就是个移动存储设备&#xff0c;根本谈不上有什么功能&#xff0c;但今天这款一盘通却将我们原始的观念打了一个180大转弯&#xff01;如果你的电脑支持USB设备启动&#xff0c;那么只需要在BIOS进行一下更改&#xff0c;一盘通就可…

需求分析的图形工具(层次方框 warnier IPO)

1 层次方框图 层次方框图用树形结构的一系列多层次的矩形框描绘数据的层次结构。 例如&#xff0c;描绘一家计算机公司全部产品的数据结构可以用下图层次方框图表示。 这家公司的产品由硬件、软件和服务3类产品组成&#xff0c;软件产品又分为系统软件和应用软件&#xf…

如何处理错误信息 Pricing procedure could not be determined

2019独角兽企业重金招聘Python工程师标准>>> 当给一个SAP CRM Quotation文档的行项目维护一个产品时&#xff0c;遇到如下错误信息&#xff1a;Pricing procedure could not be determined 通过调试得知错误消息在function module CRM_PRIDOC_COM_PRCPROC_DET_SEL第…

Flask爱家租房--订单(下订单)

文章目录0 、效果展示1、思路总结2、后端代码3、前端js4、前端html0 、效果展示 detail.html booking.html 1、思路总结 1&#xff09;用户打开房屋详情页detail.html之后&#xff0c;后端detail.js会判断此访问用户是否为房东&#xff0c;若不是房东&#xff0c;则在详情…

linux下各权限的细分

PS&#xff1a;有时候你发现用root权限都不能修改某个文件&#xff0c;大部分原因是曾经用chattr命令锁定该文件了。chattr命令的作用很大&#xff0c;其中一些功能是由Linux内核版本来支持的&#xff0c;不过现在生产绝大部分跑的linux系统都是2.6以上内核了。通过chattr命令修…

红帽linux lnmp搭建,Linux(redhat5.4)下lnmp环境的搭建

在前面我们已经实现了lamp架构的创建&#xff0c;今天就让我们来看一看lnmp架构是如何实现的。计划的实验步骤如下&#xff1a;1. 数据库mysql的安装2. Nginx的安装&#xff0c;libevent(编译库代码)的安装&#xff0c;pcre的安装3. Php的安装4. 测试1. Mysql 的安装//注意:小编…

为什么借助开源学习是最有效的?

导读&#xff1a;盛大创新院高级研究员庄表伟近日编撰系列文章《借助开源项目&#xff0c;学习软件开发》活动&#xff0c;引起业界关注。庄表伟认为&#xff0c;通过编撰这些文章&#xff0c;希望更多开发者能够借助开源项目提高开发效率&#xff0c;减少重复劳动并从开源软件…

redux middleware 源码分析

原文链接 middleware 的由来 在业务中需要打印每一个 action 信息来调试&#xff0c;又或者希望 dispatch 或 reducer 拥有异步请求的功能。面对这些场景时&#xff0c;一个个修改 dispatch 或 reducer 代码有些乏力&#xff0c;我们需要一个可组合的、自由增减的插件机制&…

Flsak爱家租房--订单(获取用户订单、用户评论)

文章目录0.页面效果1.思路总结2.后端代码3.前端js4.前端html0.页面效果 1.思路总结 1&#xff09;用户点击“我的订单”&#xff0c;js向后端获取数据&#xff0c;并加载在前端的模板中&#xff1b; 2&#xff09;用户点击相应订单的“去支付”按钮&#xff0c;js向引导用户…

【SCOI2005】【BZOJ1087】互不侵犯King(状压dp)

problem 在NN的棋盘里面放K个国王每个国王会攻击它周围的一圈共8个格子使他们互不攻击&#xff0c;共有多少种摆放方案N < 9solution 用01串表示某一行放置的情况 首先枚举当前做到第几行&#xff0c;以及当前一共放了几颗棋子。于是状态f[i][j][k]表示到第i行&#xff0c;一…

软件工程形式化技术简介

形式化技术在软件工程中有效的提高了开发的效率、改进了软件开发的质量、减少了开发费用。形式化的技术容易在软件的规约上取得一致性&#xff0c;它属于一种非常有效的交流方式。 (一)非形式化的缺点 用自然语言书写的系统规格说明书&#xff0c;可能存在矛盾、二义性、含糊性…

华为荣耀笔记本linux怎么下载软件,华为magic book笔记本怎么下载软件

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。华为magic book笔记本下载软件的方法如下&#xff1a;1、首先&#xff0c;点击桌面开始图标&#xff0c;找到应用商店&#xff0c;并点击。2、进入应用商店&#xff0c;点击搜索栏&a…

国内外软件开发上的差距与分析

提高自己&#xff0c;迎接好的未来。 在开始任何其他文字之前&#xff0c;首先有必要正视一个根本现实&#xff1a;国内外软件开发的水平是有差距的。 这一结论的最直接证据是每一轮新技术的发起者基本上都是国外的人或公司&#xff1a; 从方法论&#xff08;CMMI&#xff0…

Flask爱家租房--订单(房东接单、拒单)

文章目录0.效果展示1.效果展示2.后端接口3.前端js4.前端html0.效果展示 1.效果展示 1&#xff09;当房东点击“客户订单”&#xff0c;js向后端接口get_user_orders()获取数据&#xff0c;订单页面开始加载&#xff1b; 2&#xff09;当房东确定接单时&#xff0c;js会向后端…

WebView性能优化--独立进程

Android允许一个app同时存在多个进程&#xff0c;可以根据需要把不同的模块放到不同进程中处理。 一、WebView独立进程的好处 1.有效增大App的运存&#xff0c;减少由webview引起的内存泄露对主进程内存的占用。 2.避免WebView的Crash影响App主进程的运行。 3.拥有对WebView独立…